跳转至

单片机原理复习

绪论

  • ? 什么是单片机: 集成了 CPU, 存储器, 中断系统, 定时器/计数器和各种 IO 接口
    • 组成: CPU, RAM/ROM, 串并行的 IO, 定时器

MCS-51 的硬件结构

运算器

  • 程序状态字寄存器 PSW (顺序为由高位向低位): image.png
    • Cy: 最高位的进位标志
    • Ac: 半进位标志, 低四位向高四位产生进位或借位时候进行置位
    • F0: 用户标志位
    • RS1 RS0: 工作寄存器组指针
    • OV: 溢出标志位, 溢出逻辑表达式: OV=D_{6Cy}^ D_{7Cy}
    • F1: 用户标志位
    • ! P: 跟踪累加器中"1"的奇偶性, 奇数个 1 时候置 1

控制器

  • PC 是 16 位的, 有 16 根地址总线

MCS-51 单片机的存储器结构

  • 存储空间分类:
    • 程序存储器
    • 内部数据存储器
    • 外部数据存储器
    • 特殊功能寄存器
  • 堆栈
    • ! SP 堆栈指针在复位时候会被初始化为 07H
    • 堆栈遵循的原则: 先进后出, 后进先出 (栈的特性)
    • 栈的结构是向上增长的满堆栈: 执行入栈操作前, SP 自动+1, 出栈操作后, SP 自动-1 (SP 指针指向栈顶有数据的内存)
  • 外部数据存储器:
    • 外部地址总线的宽度为 16bit

机器周期, 指令周期

  • 时钟周期: 指晶振频率
  • 机器周期: CPU 完成一个基本操作所需要的时间, 12 个时钟周期为一个机器周期
  • 指令周期: 执行一条指令所需要的时间, 由 1~4 个机器周期组成

MCS-51 的指令系统

指令系统的寻址方式

  • 立即寻址: 指令中直接给出操作数 -> MOV A, #30H
  • 直接寻址: 指令中给出存放数据的地址 -> MOV A, 30H
  • 寄存器寻址: 地址为寄存器中的内容 -> MOV A, R1
  • 寄存器间接寻址: 地址为寄存器所指向的内容上 (指针) -> MOV A, @R1
  • 变址寻址 (基址寄存器加变址寄存器间接寻址): 用于访问程序存储器中的一个字节, 地址为 A+DPTR/PC -> MOVC A, @A+DPTR
  • 相对寻址: 与当前 PC 形成偏移量, 一般用于跳转
  • 位寻址: 用于位操作

介绍

  • SUBB (Sub Borrow)是带借位的减法, 使用时候需要注意 Cy
  • RLC 循环左移, 左移右移根据中间的字母判断, 移进或移出都存储在 Cy
  • RET 从过程返回, 首先出栈的是目标地址的高位 (存储在高地址的是高位), 相当于执行了两次 POP 操作, SP 的值也会发生改变

MCS-51 的中断系统

  • 默认的顺序: INT0, T0, INT1, T1, 串行口, T2

中断请求源

  • 特殊功能寄存器 TCON (外部中断与定时器中断): image.png
    • IT0, IT1: 外部中断触发方式 (Interupt Trigger), 1 为低电平触发, 0 为下降沿触发
    • IE0, IE1: 外部中断触发标志位
    • TF0, TF1: 定时器中断请求标志位
    • TR0, TR1: 用于启动和停止定时器/计数器
  • 特殊功能寄存器 T2CON (T2 定时器中断专用)
  • 特殊功能寄存器 SCON (串行口控制寄存器)

响应中断请求的条件

  • 中断响应的必要条件:
    • 必须开中断 (EA=1)
    • 对应中断源没有被屏蔽 (1 为允许该中断源产生中断)
    • 该中断源发出中断请求 (中断源对应的中断请求标志为 1)
    • 无同级或更高级的中断正在被服务
  • 中断被推迟响应的条件
    • CPU 正在处理更高级或同级的中断
    • 当前机器周期不是正在执行的指令的最后一个机器周期 (当前指令完成前, 不响应任何中断请求)
    • 正在执行的是中断返回指令RETI或访问专用寄存器IE或IP的指令。 也就是说,在执行RETI或是访问IE、IP的指令后,至少需要再执行 一条其他指令,才会响应中断请求

中断控制

  • 中断优先级由 IP 控制 (Interupt Priority)

image.png

  • 优先相应高优先级 (1 为高优先级)
  • 低优先级会被高优先级中断源中断, 无法被同级中断源中断
  • 同级则按照默认顺序进行响应

中断请求的条件

  • 中断服务的入口地址: 低 4 位均为 3/B, 对应左侧外部中断/定时器 T (0), 外部中断/定时器 T(1) , 串行口/定时器 T2 image.png

中断请求的撤销

  • 外部中断: 对于中断请求的标志位都是由硬件自动清除的, 但是对于低电平的中断请求信号需要特别处理, 因为电平是可维持的事件, 而下降沿是一个瞬时的事件
    • 低电平触发方法: 硬件自动清除中断请求标志位, 但中断请求的低电平信号可能继续维持, 需要使用硬件电路解决
    • 下降沿触发方式: 响应中断后, 自动清零
  • 定时器/计数器 T0, T1: 中断响应后, 硬件自动清除
  • 串行口: 硬件无法自动清除 TI 和 RI 标志位, 需要在中断服务程序中, 使用软件来清除相应的中断标志位
  • 定时器 T2: 使用软件手动清除

[!note] RETI 与 RET 的区别 对于堆栈的操作是一致的: 从堆栈中弹出两个字节的返回地址 使用 RETI 返回时候, 会改变中断的状态, 也就是清零中断标志位

MCS-51 的定时器/计数器

定时器/计数器 T0 与 T1 的结构

  • 控制寄存器 TMODimage.png
    • GATE: 门控位
    • C/T: 定时/计数模式选择位
    • M1, M0: 设定定时器模式
  • 中断请求标志位于 TCON 寄存器中

定时器/计数器 T0 与 T1 的初始化

  • 不同的工作方式可使用的上限: image.png
  • 初值计算:
    • 计数器: \(X=2^n-计数值\)
    • 定时器: \(X=2^n-\frac{fosc\times 定时时间}{12}\)

MCS-51 的串行口

  • 4 种方式的波特率计算
    • 方式 0: \(fosc/12\) (固定)
    • 方式 1 与方式 3: \(\frac{2^{SMOD}}{32}\times \frac{fosc}{12\times (256-TH1)}\)
    • 方式 2: \(fosc\times \frac{2^{SMOD}}{64}\)