【单片机复习笔记】51单片机核心寄存器与中断系统总结
【单片机复习笔记】51单片机核心寄存器与中断系统完美总结
1、寄存器总结
1.1 常用 SFR 汇总表格
在51单片机中,SFR(特殊功能寄存器)是控制单片机各个外设的“方向盘”。以下是必须要记住的核心寄存器:
| SFR类别 | 寄存器符号 | 寄存器全称 | 主要功能 | 是否可位寻址 |
|---|---|---|---|---|
| 定时器/计数器 | TCON | 定时器控制寄存器 | 控制定时器的启动、停止,以及标志溢出和外部中断 | 是 |
| TMOD | 定时器工作方式寄存器 | 设置定时器的工作模式(方式0~3)和功能(定时/计数) | 否 | |
| 中断系统 | IE | 中断允许控制寄存器 | 控制总中断和各个子中断的开关(使能) | 是 |
| IP | 中断优先级控制寄存器 | 设置各个中断源的高低优先级 | 是 | |
| 串行通信 | SCON | 串行口控制寄存器 | 设置串口的工作方式,包含发送/接收中断标志位 | 是 |
| PCON | 电源控制寄存器 | 主要用于设置串口波特率加倍 (SMOD位) | 否 |
1.2、TCON(定时器控制寄存器)
核心考点:TCON 既管定时器,又管外部中断。它是可位寻址的(可以直接在代码里写
TR0 = 1;或EX0 = 1;)。
① 高4位(控制定时器/计数器)
TF1/TF0(Timer Overflow Flag):定时器1/0溢出中断请求标志位。- 当定时器计满溢出时,由硬件自动置
1,向CPU请求中断。 - 响应中断进入中断服务程序后,硬件会自动清
0。
- 当定时器计满溢出时,由硬件自动置
TR1/TR0(Timer Run Control):定时器1/0运行控制位。- 写
1时启动定时器,写0时停止定时器。
- 写
② 低4位(控制外部中断)
IE1/IE0(Interrupt Edge Flag):外部中断1/0请求标志位。- 当引脚检测到有效的中断触发信号时,硬件自动置
1。 - CPU响应中断后,硬件会自动清
0。
- 当引脚检测到有效的中断触发信号时,硬件自动置
IT1/IT0(Interrupt Type Control):外部中断1/0触发方式控制位。- 写
0:低电平触发(只要引脚是低电平就一直触发)。 - 写
1:下降沿触发(引脚电平从高电平跳变到低电平的瞬间触发,最常用)。
- 写
1.3、TMOD(定时器方式控制寄存器)
核心考点:TMOD 是不可位寻址的!这意味着你不能单独操作它的某一位,只能对整个字节赋值(例如:
TMOD = 0x01;)。
TMOD 分为高4位(控制定时器1)和低4位(控制定时器0),两部分的位定义完全对称:
| 高4位(Timer 1) | 低4位(Timer 0) | ||||||
|---|---|---|---|---|---|---|---|
| GATE | C//T | M1 | M0 | GATE | C//T | M1 | M0 |
① 核心位功能解析
GATE(门控位):GATE = 0:只要软件令TR0/TR1 = 1,定时器就开始工作(常规用法)。GATE = 1:不仅需要TR0/TR1 = 1,还需要外部中断引脚 (INT0/INT1) 为高电平时,定时器才工作(常用于测量外部脉冲宽度)。
C/T(定时/计数选择位):- 为
0:定时模式(对内部系统的机器周期脉冲进行计数)。 - 为
1:计数模式(对外部引脚T0(P3.4)或T1(P3.5)的下降沿脉冲进行计数)。
- 为
M1,M0(工作方式选择位):0 0:方式0(13位定时/计数器,基本不用)。0 1:方式1(16位定时/计数器,最常用,最大计数值 65536)。1 0:方式2(8位自动重装载定时/计数器,TL溢出时TH的值自动赋给TL,最常用于串口波特率发生器)。1 1:方式3(定时器0拆分为两个独立的8位定时器)。
1.4、IE(中断允许控制寄存器)
核心考点:可位寻址。51单片机中断控制的“开关柜”,采用两级管理(总开关 + 分开关)。
EA(Enable All):中断总允许控制位。EA = 1:CPU开放中断,各分开关才起作用。EA = 0:屏蔽所有中断(一键断电)。
ES(Enable Serial):串行口中断允许位。ES = 1:允许串口发送/接收中断。
ET1(Enable Timer 1):定时器/计数器 1 中断允许位。EX1(Enable External 1):外部中断 1 中断允许位。ET0(Enable Timer 0):定时器/计数器 0 中断允许位。EX0(Enable External 0):外部中断 0 中断允许位。
1.5、IP(中断优先级控制寄存器)
核心考点:可位寻址。用于人为改变51单片机的默认自然优先级顺序。
- 配置规则:某位置
1,则该中断源被设为高优先级;置0则为低优先级。 PS:串行口中断优先级控制位。PT1:定时器 1 中断优先级控制位。PX1:外部中断 1 中断优先级控制位。PT0:定时器 0 中断优先级控制位。PX0:外部中断 0 中断优先级控制位。- (注:当多个中断源同时被设为高优先级时,它们内部依然按照自然优先级“排队”)。
1.6、SCON(串行口控制寄存器)
核心考点:可位寻址。串口通信的灵魂寄存器,包含模式配置和收发标志。
SM0/SM1(Serial Mode):串行口工作方式选择位。0 0→\rightarrow→方式0:移位寄存器模式。0 1→\rightarrow→方式1:8位UART,波特率可变(最常用,填空题常客)。1 0→\rightarrow→方式2:9位UART,固定波特率。1 1→\rightarrow→方式3:9位UART,波特率可变。
REN(Receive Enable):允许串行接收控制位。REN = 1:允许接收;REN = 0:禁止接收。
SM2:多机通信控制位(方式2/3中用于主从机多机通信)。TI(Transmit Interrupt):发送中断标志位。- 发送完一帧数据后硬件自动置
1。必须由软件手动清零 (TI=0)。
- 发送完一帧数据后硬件自动置
RI(Receive Interrupt):接收中断标志位。- 接收完一帧数据后硬件自动置
1。必须由软件手动清零 (RI=0)。
- 接收完一帧数据后硬件自动置
1.7、PCON(电源控制寄存器)
核心考点:不可位寻址。虽然主要用于单片机的低功耗(掉电/休眠)管理,但在串口通信中扮演重要角色。
SMOD(Serial Baud Rate Modify):波特率倍增位。SMOD = 1:在使用定时器1作为波特率发生器时,串口的波特率加倍。SMOD = 0:波特率不加倍(复位时默认为0)。
PD(Power Down):掉电模式控制位。写 1 进入掉电/停机模式,内部振荡器停止工作,极其省电。IDL(Idle):空闲模式控制位。写 1 进入空闲模式,CPU 停止工作,但定时器、中断、串口等外设继续工作。
2、中断总结
51单片机标配5个中断源和2个优先级(可以实现中断嵌套)。
2.1 外部中断
- 触发引脚:
INT0 (P3.2)和INT1 (P3.3)。 - 配置流程:
- 开启总中断:
EA = 1; - 开启对应的外部中断允许:
EX0 = 1;或EX1 = 1; - 选择触发方式(以TCON中的
IT0/IT1决定):通常设为下降沿触发IT0 = 1;。
- 开启总中断:
- 中断号:
- 外部中断0:
interrupt 0 - 外部中断1:
interrupt 2
- 外部中断0:
2.2 定时器中断
- 触发条件:定时器寄存器计满溢出,硬件将
TF0或TF1置 1 时触发。 - 配置流程:
- 开启总中断:
EA = 1; - 开启对应的定时器中断允许:
ET0 = 1;或ET1 = 1; - 配置好
TMOD并写入THx、TLx的初值。 - 开启定时器计数:
TR0 = 1;或TR1 = 1;
- 开启总中断:
- 中断号:
- 定时器0中断:
interrupt 1 - 定时器1中断:
interrupt 3
- 定时器0中断:
2.3 串口中断
- 触发条件:
- 接收完毕:接收完一帧数据,硬件将
RI置 1。 - 发送完毕:发送完一帧数据,硬件将
TI置 1。
- 接收完毕:接收完一帧数据,硬件将
- 🚨 特殊注意(期末大考必考点):
- 串口中断发生后,硬件不会自动清除
RI或TI! - 必须在中断服务程序中,通过软件手动清零(即显式写出
RI = 0;或TI = 0;),否则程序会死循环不断进入中断!
- 串口中断发生后,硬件不会自动清除
- 配置流程:
- 开启总中断:
EA = 1; - 开启串口中断:
ES = 1; - 配置串口工作模式(
SCON)及允许接收(REN = 1;)。
- 开启总中断:
- 中断号:
- 串行口中断:
interrupt 4
- 串行口中断:
💡 附:单片机默认中断查询优先级表(从高到低)
| 中断源 | 触发标志位 | 中断允许位 | 默认自然优先级 | 中断号 (C语言interrupt后面的数字) |
|---|---|---|---|---|
| 外部中断 0 | IE0 | EX0 | 1 (最高) | 0 |
| 定时器 0 中断 | TF0 | ET0 | 2 | 1 |
| 外部中断 1 | IE1 | EX1 | 3 | 2 |
| 定时器 1 中断 | TF1 | ET1 | 4 | 3 |
| 串行口中断 | RI/TI | ES | 5 (最低) | 4 |
