51单片机学习笔记——中断
一、51单片机的中断过程
1.中断的示意图


二、中断源与内部寄存器
1.中断源
52单片机共有6个中断源。
| 中断源 | 解释 | 端口线 |
|---|---|---|
| INT0 | 外部中断0,低电平或下降沿引起 | P3.2 |
| INT1 | 外部中断1,低电平或下降沿引起 | P3.3 |
| T0 | 定时器/计数器0,由T0计数器计满回零引起 | P3.4 |
| T1 | 定时器/计数器1,由T1计数器计满回零引起 | P3.5 |
| T2 | 定时器/计数器2,由T2计数器计满回零引起 | P1.0 |
| TI/RI | 串行口中断,串行端口完成一帧字符发送后引起 | P3.0/P3.1 |
| 中断源 | 中断级别 | 序号(C语言用) | 入口地址(汇编用) | 注释 |
|---|---|---|---|---|
| INT0 | 最高 | 0 | 0003H | 外部中断0 |
| T0 | 第2 | 1 | 000BH | 定时器/计数器0 |
| INT1 | 第3 | 2 | 0013H | 外部中断1 |
| T1 | 第4 | 3 | 001BH | 定时器/计数器1 |
| TI/RI | 第5 | 4 | 0023H | 串行口中断 |
| T2 | 最低 | 5 | 002BH | 定时器/计数器2 |
注:
- TI/RI串口中断中,P3.0为RXD接受中断,P3.1为TXD发送中断。
- 定时器/计数器2可作为捕获、自动重装、波特率发生器使用,且寄存器相对复杂。
- 定时器/计数器2的寄存器定义不在头文件中,需要自行定义。
- 当GATE位为1时,端口线才会决定定时器/计数器的开关。
2.定时器/计数器0和1的寄存器
(1)模式控制寄存器TMOD
| 位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 位符号 | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
注:其中高四位设置定时器/计数器T1,低四位设置定时器/计数器T0。
- GATE为门控制位。用于控制定时器/计数器的启动与停止。
| 电平状态 | 注释 |
|---|---|
| GATE = 0 | 仅受TCON寄存器中的TR位来控制 |
| GATE = 1 | 受TCON寄存器中的TR位和外部中断引脚电平控制 |
- C/T位用于定时器/计数器模式选择。
| 电平状态 | 注释 |
|---|---|
| C/T = 0 | 定时器模式 |
| C/T = 1 | 计数器模式 |
- M1,M0位共同决定工作方式的选择。
| 电平状态 | 注释 |
|---|---|
| M1 = 0 , M0 = 0 | 工作方式0,13位定时器/计数器 |
| M1 = 0 , M0 = 1 | 工作方式1,16位定时器/计数器 |
| M1 = 1 , M0 = 0 | 工作方式2,8位初值自动重装的8位定时器/计数器 |
| M1 = 1 , M0 = 1 | 工作方式3,仅适用于T0,分成两个8位计数器,T1停止计数 |
| 注:常使用工作方式1,因为计数范围比较大。 |
(2)控制寄存器TCON
| 位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 位符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
| 位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
TF位,定时器/计数器溢出标志位。
其中定时器/计数器0溢出标志位为TF0,定时器/计数器1溢出标志位为TF1。
当数据溢出时使TF位置1,并申请中断。进入中断服务程序后会自动清零。TR位,定时器/计数器运行控制位。
其中定时器/计数器0运行控制位为TR0,定时器/计数器1运行控制位为TR1。
TR位与TMOD中的GATE位决定开关定时器/计数器,当TR位为0时关闭并清零,当TR位为1,GATE=0时,开启定时器/计数器;当TR位为1,GATE=1时,需要使INT1为高电平时才能开启定时器/计数器。IT位,外部中断控制位。
其中定时器/计数器0控制位为IT0,定时器/计数器1控制位为IT1。
当IT位为0是电平触发方式,为1是跳变沿触发方式。IE位,外部中断请求标志位。
其中定时器/计数器0请求标志位为IE0,定时器/计数器1请求标志位为IE1。
当IT设置为电平触发方式时,检测INT0/INT1引脚,当INT为低电平,IE位为1;当INT为高电平,IE位为0。
(3)中断允许寄存器IE
| 位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 位符号 | EA | – | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
| 位地址 | AFH | – | ADH | ACH | ABH | AAH | A9H | A8H |
- EA位,全局中断允许位。
EA=1,打开全局中断;EA=0,关闭全局中断。 - ET位,定时器/计数器中断允许位。
其中定时器/计数器0中断允许位为ET0,定时器/计数器1中断允许位为ET1,定时器/计数器2中断允许位为ET2。
ET位为1,打开定时器/计数器中断;ET=0,关闭定时器/计数器中断。 - ES位,串行口中断允许位。
ES=1,打开串行口中断;ES=0,关闭串行口中断。 - EX位,外部中断允许位。
其中定时器/计数器0外部中断允许位为EX0,定时器/计数器1外部中断允许位为EX1。
EX位为1,允许外部中断0中断;EX位为0,禁止外部中断0中断。
(4)中断优先级寄存器IP
| 位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 位符号 | – | – | – | PS | PT1 | PX1 | PT0 | PX0 |
| 位地址 | – | – | – | BCH | BBH | BAH | B9H | B8H |
- PS位,串口中断优先级控制位。PS=1时串口中断定义为高优先级。
- PT1位,定时器/计数器1中断优先级控制位。PT1=1时定时器/计数器1定义为高优先级。
- PX1位,外部中断1中断优先级控制位。PX1=1时外部中断定义为高优先级。
- PT0位,定时器/计数器0中断优先级控制位。PT0=1时定时器/计数器0定义为高优先级。
- PX0位,外部中断0中断优先级控制位。PX0=1时外部中断定义为高优先级。

三、单片机中断的代码详解
例程1、定时器0工作方式1的初始化和服务程序
1 | |
例程2、计数器0工作方式1的初始化和服务程序
1 | |
例程3、串口通信初始化和服务程序
1 | |
第一次写博客,如有错误,希望大佬们指正。
51单片机学习笔记——中断
http://blog.mingxuan.xin/2020/05/12/20200512/