C51中断
@
中断相关缩写全称(初学容易记)
| Abbreviation | Full name | Mean |
|---|---|---|
| TCON | timer control | 定时器控制寄存器 |
| TF1 | (TCON.7) Timer1 flag T1 | 中断标志位 |
| TR1 | (TCON.6) Timer1 Run T1 | 运行控制位 |
| TF0 | (TCON.5) Timer0 flag T0 | 中断标志位 |
| TR0 | (TCON.4) Timer0 Run T0 | 运行控制位 |
| IE1 | (TCON.3) Interrupt1 exterior | 外部中断1中断标志位 |
| IT1 | (TCON.2)Interrupt1 touch | 外部中断1 触发方式选择位 |
| IE0 | (TCON.1)Interrupt0 exterior | 外部中断0中断标志位 |
| IT0 | (TCON.0)Interrupt0 touch | 0-电平触发 1-下降沿触发 |
| -- | -- | -- |
| IE | (A8H) interrupt enable | 中断允许寄存器 |
| EA | (IE.7) enable all interrupt | 中断总允许位 |
| ES | (IE.4) enable serial | 串行口中断允许位 |
| ET1 | (IE.3) enable timer 1 T1 | 中断允许位 |
| EX1 | (IE.2) enable exterior 1 | 外部中断1中断允许位 |
| ET0 | (IE.1) enable timer 0 | T0中断允许位 |
| EX0 | (IE.0) enable exterior 0 | 外部中断0中断允许位 |
| -- | -- | -- |
| IP | (B8H) interrupt priority | 中断优先级寄存器 |
| PS | (IP.4) priority serial | 串口优先级标志位 |
| PT1 | (IP.3) priority timer 1 | 定时器1优先级标志位 |
| PX1 | (IP.2) priority exterior 1 | 外部中断1优先级标志位 |
| PT0 | (IP.1) priority timer 0 | 定时器0优先级标志位 |
| PX0 | (IP.0) priority exterior 0 | 外部中断0优先级标志位 |
电路图

中断过程


中断源
外部中断
INT0 :外部中断0请求,低电平有效 (中断标志位IE0)
INT1 : 外部中断1请求,低电平有效 (中断标志位IE1)
内部中断
T0 : 定时/计数器0溢出中断请求 (中断标志位TF0)
T1 : 定时/计数器1溢出中断请求 (中断标志位TF1)
TXD/RXD : 串口中断请求,串口发送/接受完一帧数据时请求中断 ( 中断标志位RT or TI )
优先级
| 优先级左至右(高到低) | INT0 | T0 | INT1 | T1 | TXD/RXD |
|---|
TCON寄存器
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| addr:88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
| T1 | T0 | INT1 | INT1 | INT0 | INT0 |
- IT0和IT1是设置外部中断的触发方式
当其为0时,为低电平触发方式
当其为1时,为负跳变触发方式 - IE0和IE1是外部中断标志位
- 下面是定时/计数器的控制
TF0和TF1是定时器的中断标志
TR1和TR0是打开相应的定时器
IE寄存器
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| addr:A8H | EA | ES | ET1 | EX1 | ET0 | EX0 | ||
| 中断源 | 串 | T1 | INT1 | T0 | INT0 |
- EX0外部中断0允许位;
- ET0定时/计数器T0中断允许位;
- EX1 外部中断0允许位;
- ET1 定时/计数器T1中断允许位;
- ES 串行口中断允许位;
- EA CPU中断允许(总允许)位。
中断优先级寄存器(IP)
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| addr:B8H | PT2 | PS | PT1 | PX1 | PT0 | PX0 | ||
| 中断源 | 串 | T1 | INT1 | T0 | INT0 |
PX0 : 外部中断0优先级设定位
PT0 : 定时/计数器T0优先级设定位
PX1 : 外部中断1优先级设定位
PT1 : 定时/计数器T1优先级设定位
PS : 串行口优先级设定位;
PT2 : 定时/计数器T2优先级设定位
CPU处理中断三原则
- CPU同时接收到几个中断时,首先响应优先级别最高的中断请求
- 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断
- 正在进行的低优先级中断服务,能被高优先级中断请求所中断
中断响应条件
- 中断源有中断请求
- 此中断源的中断允许位为1
- CPU开中断(即EA=1)
中断服务函数
void 函数名 () interrupt 中断号
{
do anything that you want
}
| 中断编号 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 中断源编号 | INTI0 | T0 | INIT1 | T1 | 串 | T2 |
例子
#include<reg52.h>
//(低电平触发)给P3.2低电平触发中断,让led灯,在触发前后四位状态调换
void zhongduan_1()//电平触发
{
P1 = 0x0f; // 0000 1111 下面四个灯亮 上面四个灯灭
EX0 = 1; //INT0中断允许
EA = 1; //全局中断打开
IT0 = 0; //触发方式为低电平触发
while(1);
}
void low() interrupt 0 //外部中断编号
{
P1 = ~P1; //led亮灭反转
}
//(下降沿触发)按下按键触发P3.3下降沿,让led灯,在触发前后四位状态调换
void zhongduan_2() //下降沿触发
{
P1 = 0x0f; // 0000 1111 下面四个灯亮 上面四个灯灭
EX1 = 1; //INT1中断允许
EA = 1; //全局中断打开
IT1 = 1; //触发方式为下降沿触发
while(1);
}
void jump_low() interrupt 2 //外部中断编号
{
P1 = ~P1; //led亮灭反转
}
...Thank you for reading...

浙公网安备 33010602011771号