本文偏向于概念性知识整理,在更新完单片机部分的理论笔记后,会将所有编写代码的注意事项和技巧集成道一个实际项目中来分享。本文围绕51单片机中的中断,解释了中断、中断源、中断优先级、中断嵌套、中断向量等概念,还详细介绍了定时器/计数器中断和串口中断用到的特殊功能寄存器每一位的功能。对于中断部分的学习而言,我觉得需要记住常用的寄存器配置,不常用的可以用到的时候再查,更重要的是要理解什么是中断,中断的处理流程,中断什么时候被触发,什么时候结束,只有捋清流程,才能在出错时有如何调试的思路。单片机的学习过程中,很重要的一点是要谨防凭肉眼判断“没现象”的主观意识,因为单片机处理指令的速度很快,有时候不是没看到,而是现象停留的时间太短,人眼观察不到,所以在出现意料之外的情况时要借助工具进行理性的原因查找,例如逻辑分析仪。


一、名词解释

1.RAM和ROM的区别

特性维度

RAM

(Random Access Memory ,随机存取存储器)

ROM

(Read-Only Memory,只读存储器)

核心功能 临时存储正在运行的程序和临时数据 永久存储固定的指令和数据
数据读写 可读可写,使用灵活  传统只读,现代可写但速度慢 
数据易失性 易失断电后数据立即丢失  非易失断电后数据永久保存 
存储速度 快(CPU可直接访问) 较慢(数据一般需先复制到RAM再使用)

2.内存和外存的区别

特性维度 内存 (主存,如RAM) 外存 (辅存,如硬盘、SSD)
CPU能否直接访问 ,CPU直接通过地址总线读取数据 不能,数据必须先调入内存,CPU才能访问
数据易失性 易失 ,断电数据全丢 非易失断电后数据永久保存
读写速度 极快 (纳秒级),与CPU速度匹配  (毫秒级或微秒级,SSD相对快但仍慢于内存)
存储容量 相对较小 (GB级别) 非常大 (TB级别)
单位价格 昂贵 (每GB) 便宜 (每GB)
主要用途 临时存放正在运行的系统、应用和数据 长期存放操作系统、应用软件、文档、照片、视频等
与CPU的关系 与CPU通过高速总线直接通信 通过I/O接口与CPU通信,速度受接口限制

3.51芯片的内部结构

  • 中央处理器8位 CPU 

  • 程序存储器 (ROM)4KB 掩膜ROM(8051),可外部扩展至64KB 

  • 数据存储器 (RAM)128B 内部RAM,可外部扩展至64KB 

  • 定时器/计数器2个 16位定时器/计数器 

  • 并行I/O口4个 8位并行I/O口 (P0, P1, P2, P3) 

  • 中断源5个 中断源 (2个外部,2个定时器,1个串行) 

  • 串行通信1个 全双工UART(通用异步收发器)串行口 

4.51单片机的最小系统

最小系统是指能让单片机正常运行(即上电后能执行内部程序)的最简硬件环境;51单片机的最小系统需要:单片机芯片、电源电路、时钟电路、复位电路。


二、位运算

1.定义:

在单片机编程中,位运算是指对二进制位(bit)进行操作的运算。由于单片机内部的所有数据本质上都是由二进制位组成的,位运算提供了一种精确、高效的方式来控制和检测这些硬件资源。

2.常见的位运算符

运算符 名称 功能 示例
& 按位与 两个位都为1时,结果为1(全真才真,有假全假) 0b1010 & 0b1100 = 0b1000
| 按位或 只要有一个为1,结果为1(有真则真,全假才假) 0b1010 | 0b1100 = 0b1110
^ 按位异或 两个位不同为1,相同为0(相异为真,相同为假) 0b1010 ^ 0b1100 = 0b0110
~ 按位取反 0变1,1变0(单目运算符) ~0b1010 = 0b0101(假设4位)
<< 左移 将二进制位向左移动,低位补0 0b1010 << 1 = 0b10100
>> 右移 将二进制位向右移动,高位补0(通常) 0b1010 >> 1 = 

3.单片机中常见的位运算应用场景

1)指定位置1:按位或运算

例如:将寄存器PORT的第三位置1,不改变其他位。

PORT |= (1 <<  3);

//(1 << 3)产生一个只有第三位为1的数,与PORT进行或运算后,第三位被强制置1,其他位不变。

2)指定为清零:按位与运算

例如:将寄存器PORT的第五位清零,其他位不变。

PORT &= ~(1 << 5);

//~(1 << 5)产生了一个除了第五位为0,其他位均为1的数,与PORT进行与运算后,第五位并清零,其他位不变。

3)读取某一位的状态

例如:判断寄存器PORT的第2位是否为1.

if (PORT & (1 << 2))

//如果该位为1,与运算后结果非0;如果该位为0,与运算后结果为0。


三、中断系统

1.中断:

当CPU正在处理某件事件时,外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理后再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。

2.中断源:

能够打断CPU执行当前任务的源头/事件叫做中断源。51单片机有5个中断源:外部中断0、外部中断1、定时器0、定时器1、串口。

中断源 触发行为
外部中断0 (IT0/TCON.0 = 1):下降沿;(IT0/TCON.0 = 0):低电平
定时器0 定时器0溢出
外部中断1 (IT1/TCON.2 = 1):下降沿;(IT1/TCON.2 = 0):低电平
定时器1 定时器1溢出
UART 发送或接收完成

3.中断优先级:

CPU在处理中断任务时,需要去判断中断源的优先级,优先去处理优先级更高的中断请求。优先级高的中断可以打断优先级低的中断,优先级低的中断不可以打断优先级高的中断,要等到其执行完后CPU才处理。

4.中断嵌套:

CPU处理一个中断请求时,嵌套处理其它优先级更高的中断请求(51最多允许嵌套两层)。

5.中断向量表:

中断向量是一个地址,当中断被响应后,被装载到程序计数器PC中的数值称为中断向量,是该中断源的中断服务程序的入口地址;中断向量表本质上是一个数组,把所有的中断向量按中断号顺序排在一起。

中断源 中断向量
External Interrupt 0 0003H
Timer 0 000BH
External Interrupt 1 0013H
Timer 1 001BH
UART 0023H

6.中断处理流程:

  • 中断源发出中断请求
  • 检查CPU是否允许处理中断,及中断源是否被屏蔽
  • 比较中断优先级
  • 保护现场
  • 执行中断服务函数
  • 恢复现场

四、特殊功能寄存器

1.IE:中断允许寄存器(可位寻址,SFR 地址:A8H)

名称 功能描述
B7 EA CPU总中断允许控制位
EA=1:CPU开放中断(各中断源还需自己的允许位配合)
EA=0:CPU屏蔽所有中断申请
作用:形成两级控制,总开关控制各个中断源的子开关
B6 - 保留位,未使用
B5 ET2 定时/计数器T2中断允许位
ET2=1:允许T2中断
ET2=0:禁止T2中断
B4 ES 串行口中断允许位
ES=1:允许串行口中断
ES=0:禁止串行口中断
B3 ET1 定时/计数器T1中断允许位
ET1=1:允许T1中断
ET1=0:禁止T1中断
B2 EX1 外部中断1中断允许位
EX1=1:允许外部中断1中断
EX1=0:禁止外部中断1中断
B1 ET0 定时/计数器T0中断允许位
ET0=1:允许T0中断
ET0=0:禁止T0中断
B0 EX0 外部中断0中断允许位
EX0=1:允许外部中断0中断
EX0=0:禁止外部中断0中断

2.TCON:定时器/计数器中断控制寄存器(可位寻址,SFR 地址:88H)

名称 功能描述
B7 TF1 T1溢出中断标志
T1计数溢出时由硬件置1,向CPU请求中断;CPU响应中断时由硬件清0(也可由软件查询清0)
B6 TR1 定时器1运行控制位
由软件置1或清0来控制定时器1的启动与停止,清零。当GATE(TMOD.7)=0,TR1=1时就允许T1开始计数,TR1=0时禁止T1计数。当GATE(TMOD.7)=1,TR1=1且INT1输入高电平时,才允许T1计数。
B5 TF0 T0溢出中断标志
T0计数溢出时由硬件置1,向CPU请求中断;CPU,响应中断时由硬件清0(也可由软件查询清0)
B4 TR0 定时器0运行控制位
由软件置1或清0来控制定时器0的启动与停止,清零。当GATE(TMOD.3)=0,TR0=1时就允许T0开始计数,TR0=0时禁止TO计数。当GATE(TMOD.3)=1,TR1=0且INTO输入高电平时,才允许TO计数。
B3 IE1 外部中断1请求标志
INT1/P3.3引脚触发中断时由硬件置1;CPU响应中断后由硬件清0
B2 IT1 外部中断1触发方式选择位
IT1=0:低电平触发方式
IT1=1:下降沿触发方式
B1 IE0 外部中断0请求标志
INT0/P3.2引脚触发中断时由硬件置1;CPU响应中断后由硬件清0(边沿触发方式下)
B0 IT0 外部中断0触发方式选择位
IT0=0:低电平触发方式
IT0=1:下降沿触发方式

3.TMOD:定时器/计数器工作方式控制寄存器(SFR 地址:89H,复位值:00H,不可位寻址)

名称 所属定时器 功能描述
7 GATE 定时器1 门控控制位
GATE=1:仅当INT1引脚为高电平且TR1=1时,才允许定时器1计数
GATE=0:仅由TR1控制定时器1的启动
6 C/T 定时器1 定时器/计数器功能选择位
C/T=0:用作定时器(从内部系统时钟输入)
C/T=1:用作计数器(从T1/P3.5引脚输入)
5 M1 定时器1 工作方式选择位1
4 M0 定时器1 工作方式选择位0
3 GATE 定时器0 门控控制位
GATE=1:仅当INT0引脚为高电平且TR0=1时,才允许定时器0计数
GATE=0:仅由TR0控制定时器0的启动
2 C/T 定时器0 定时器/计数器功能选择位
C/T=0:用作定时器(从内部系统时钟输入)
C/T=1:用作计数器(从T0/P3.4引脚输入)
1 M1 定时器0 工作方式选择位1
0 M0 定时器0 工作方式选择位0
M1 M0 工作方式 说明
0 0 方式0 13位定时器/计数器
TL只用低5位参与分频,TH用整个8位,兼容8048定时模式
0 1 方式1 16位定时器/计数器
TL和TH全部8位参与计数
1 0 方式2 8位自动重装载定时器
当溢出时,TH中存放的值自动重新装入TL,适用于需要精确定时且自动重载的场合
1 1 方式3 定时器0:双8位定时器/计数器
TL0作为8位定时器/计数器,由标准定时器0的控制位控制;TH0仅作为8位定时器,由定时器1的控制位控制
定时器1:停止计数(在此方式下定时器1停止工作)

4.SCON:串行口控制寄存器(可位寻址,SFR 地址:98H)

名称 功能描述
B7 SM0 / FE 串行口工作方式选择位(与SM1共同指定四种工作方式)
B6 SM1 串行口工作方式选择位(与SM0共同指定四种工作方式)
B5 SM2 多机通信控制位
方式2/3时:SM2=1,仅当接收到的第9位数据(RB8)为1时才激活RI;SM2=0,无论RB8为何值均激活RI
方式1时:SM2=1,仅当接收到有效停止位时才激活RI
方式0时:SM2应设为0
B4 REN 接收允许控制位
REN=1:允许串行口接收数据
REN=0:禁止串行口接收数据
B3 TB8 发送数据的第9位(方式2/3)
可用于多机通信中的地址/数据标识位,或奇偶校验位,由软件置1或清0
B2 RB8 接收数据的第9位(方式2/3)
方式1时(SM2=0),RB8是接收到的停止位;方式0时不用
B1 TI 发送中断标志
方式0:发送完8位数据后由硬件置1
方式1/2/3:在发送停止位开始时由硬件置1
TI=1表示请求发送中断,必须由用户在中断服务程序中软件清0(硬件不会自动清零)
B0 RI 接收中断标志
方式0:接收到第8位数据后由硬件置1
方式1/2/3且SM2=0:接收到停止位中间时由硬件置1
方式2/3且SM2=1:仅当接收到的第9位数据(RB8)为1且收到停止位中间时由硬件置1
RI=1表示请求接收中断,必须由用户在中断服务程序中软件清0

5.PCON:电源控制寄存器(不可位寻址,SFR 地址:87H)

电源控制寄存器PCON中的SMOD/PCON.7用于设置方式1、方式2、方式3的波特率是否加倍。

名称 功能描述
B7 SMOD 波特率选择位
SMOD=1:使串行口方式1、2、3的波特率加倍
SMOD=0:各工作方式的波特率不加倍
复位时SMOD=0
B6 SMOD0 帧错误检测有效控制位
SMOD0=1:SCON寄存器中的SM0/FE位用于FE功能(帧错误检测)
SMOD0=0:SCON寄存器中的SM0/FE位用于SM0功能(与SM1一起指定串行口工作方式)
复位时SMOD0=0

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐