【学习笔记】《单片机原理与技术》前三章总结

2019-04-15 14:33发布

前言

《单片机原理与技术》戴胜华老师的教材版本,px4飞控使用的是stm32单片机,学习下单片机技术有利于理解px4的底层代码,单片机教材那么多,选择戴胜华老师的版本是MOOC中有戴老师的版本,B站有大量的视频。 前四章内容分别是
  1. 单片机概述
  2. MCS-51单片机的结构与原理
  3. 指令系统

MCS-51 单片机的结构与原理

单片机的硬件功能(第一张图)

在这里插入图片描述
其中戴老师讲到了三条总线,单片机总共有三条总线BUS(数据总线、地址总线、控制总线):
在这里插入图片描述
关于总线的资料来源于网络:
  1. 数据总线
    51 单片机的数据总线为P0 口,P0 口为双向数据通道,CPU 从P0 口送出和读回数据。
  2. 地址总线
    51 系列单片机的地址总线为16 位。
    为了节约芯片引脚,采用P0 口复用方式,除了作为数据总线外,在ALE 信号时序匹配下,通过外置的数据锁存器,在总线访问前半周期从P0口送出低8位地址,后半周期从P0 口送出8 位数据。
    高8位地址则通过P2 口送出。
  3. 控制总线
    51 系列单片机的控制总线包括读控制信号P3.7 和写控制信号P3.6 等,二者分别作为总线模式下数据读和数据写的信号
具体不懂啊。

CPU内部结构

  1. 算数运算单元ALU(8 位)
    加减乘除,与或非异逻辑运算、循环处理、位处理。
  2. 寄存器阵列
    寄存器就是将二进制数放进去寄存——戴老师
    (1)工作寄存器R0~R7(8位)
    暂存运算结果和中间结果。
    4个工作寄存器区,工作寄存器0区~3区。每个区含8个寄存器R0 ~R7.
    同程序状态寄存器PSW的4与3来切换工作寄存器,选用一个工作寄存器区来进行读写操作。
    一般使用的工作区寄存器为0区。
    (2)累加器Acc(8位)
    需要ALU处理的数据和计算结果多数要进过A累加器,即加法需要用到这个寄存器。
    (3)寄存器B(8位)
    与A配合完成乘除法。也可作为通用的寄存器。
    (4)程序状态字PSW
    记录目前的程序的状态,有无进位,有无溢出,还有前面说到的工作区地址范围。
    (5)数据指针(16位)
    这个寄存器怎么变成16位了,反正16位的不是在RAM中,RAM中的地址都只有8位的。
    存放片外存储器地址,作为片外存储器的指针。可分为两个8位的寄存器DPH、DLH使用。
    (6)堆栈指针SP(8位)
    堆栈我理解,大量的数据,中断需要用到这个。
    复位时SP=07H(为啥不懂)
    (7)程序计数器PC(16位)
    程序执行到哪,PC就指向哪里,也可以反过来说。

存储器结构(第二章图)

在这里插入图片描述
2^16次方为64K,即16位的地址最大只能用到64k,这就说明为什么ROM和外部存储器最大只能到64K,其中第二个方框中的上面部分分为两个小框框,但是地址是一样的,戴老师说通过不同的寻址方式(直接寻址、通过寄存器间接寻址)即确定是用的特殊寄存器的地址或者是RAM的地址

程序存储器

  • 在MCS-51中的指令系统仅有两条
    MOVC A,@A+DPTR
    MOVC A,@A+PC
    其中我通过谷歌查询到@为取地址符
  • 复位后,程序计数器PC的内容为0000H
    在这里插入图片描述
    其中发现你入口仅有8个单元,需要添加跳转指令。

数据存储器

(1) 从00H~1FH的32B单元是4个工作区寄存器Ri,只选择一组,其他空间作为一般的RAM使用。
(2)地址20H~2FH的16B共128位。是可为寻址的内部RAM区,他们既可字节寻址,也可以位寻址。
(3)剩下的80B只能按字节寻址的内部RAM区,为用户区,MCS51单片机的堆栈安排在内部RAM内,堆栈的深度以不超过内部RAM的空间为限。 疑问:
1.为什么(2)中的地址就可以位寻址,(3)中的便不可以,为什么要这样设置呢。书上讲到他们的位地址定义为00H~7FH,那字节地址也有7FH,他两不会冲突嘛?
2. 为什么(2)中的位地址可以定义为00H~7FH?

专用寄存器

寄存器比较难,表查看p15 2-4,只能使用寻址方式访问。 **疑问:** 1. 为什么具有位寻址能力的特殊功能寄存器正好能被8整除呢,难道是为了1位处理器方便找? 8种寄存器介绍
  1. 程序计数器
  2. 累加器A
    累加器A是一个最常用的专用的寄存器,属于SFR,大部分的单操作数指令都取自累加器,很多双操作指令数也取自累加器,加减乘除算数运算指令结果也存放在累加器A或者A、B寄存器中。
  3. 寄存器B
    在乘除指令中,用到B寄存器。乘法的指令的两个操作数分别取自A和B,其结果存放在A、B寄存器中。除法指令中,被除数取自A,除数取自B,运算后商数存放于A,余数存放于B.
  4. 程序状态寄存器PSW
  5. 堆栈指针SP
    堆栈指针SP是一个8位专用寄存器,它指示堆栈顶部在内部RAM块中的位置。复位之后,SP初始化为07H,使得堆栈事实上由08H单元开始,考虑到0BH~1FH单元分别属于工作寄存器1 ~ 3区,应该设置sp的值大些。MCS-51的堆栈是向上生成的。列如(sp)=60H,CPU执行一条调用指令或者响应中断后,PC进栈,PC的低8位送入61H,PC的高8位送入62H。保护数据和断部数据
  6. 数据指针DPTR
  7. 端口p0 ~3
  8. 串行数据缓冲器SBUF
    串行数据缓冲SBUF用于存放欲发送或者已经接受的数据,它在SFR块中只有一个字节地址,但在物理上由两个独立的寄存器组成,一个是发送缓冲器SBUF,另一个是接受缓冲器SBUF。当要发送的数据传送到SBUF时,进的是发送缓冲SBUF;接收时,外部来的数据存入接受缓冲器SBUF。
  9. 定时器
    MCS-51单片机有两个16位定时器/计数器T0和T1,它们各由两个独立的8位寄存器组成,共为4个独立的寄存器,即TH0,TL0,TH1,TL1。可以对四个寄存器寻址,但不能把T0或者T1当做一个16位的寄存器。但是我不明白这个是干啥的

外部数据存储器

IO端口

  • MSC51 有4个双向的8位并行I/o口:P0~p3
  • 每一个口都有一个8位的锁存器
  • 复位后他们的初始状态为全“1”。
P0口味三态双向口
三态是(0 1 高阻)线断开了,高阻
P1 …
P2 …
P3…
这个之后慢慢理解

IO的接口要求与负载能力

p0(无上拉电阻)的每位输出可驱动8个LSTTL负载,
P1~P3口(有上拉电阻)可驱动4个LSTTL负载。

复位电路

复位之后的电路在这里插入图片描述

CPU时序

一个晶体两个电容就可以构成时钟电路,一个机器周期12个震荡周期。

CPU引脚功能

在这里插入图片描述

工作方式

第三章 单片机指令系统

寻址方式

共有七种寻址方式 1. 立即寻址 该方式 把操作数(立即数)包含在指令节中,在立即数前加上“#”表示立即寻址方式。 2. 直接寻址 寻址空间: 内部RAM的低128字节; 特殊功能寄存器SFR(直接寻址是访问sfr的唯一方式)。 直接寻址是指操作码后面的一个字节是实际操作数地址。 感觉视频里没有讲清楚 3. 寄存器寻址方式 该方式是把操作数存放在指定的寄存器。能实现这种寻址的寄存器有: R0~R7、A、B、DPTR。(难道其他就不能了吗,好像是只有这些可以用来存储下中间数据)。 4. 寄存器间接寻址 该方式是把操作数的所在地址存放在指定 的寄存器中。 寻址空间为程序存储器。 能实现这种寻址方式的寄存器有R0、R1、DPTR(为啥只有R0~R1可以,其他的不行 了) 在这里插入图片描述
5. 相对寻址
6. 位寻址

指令系统

感觉这章讲的很简单 到这我居然能够看懂一点书上的汇编程序例题,_