@
中断相关缩写全称(初学容易记)
| 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...