中断
中断,是单片机的一种运行机制。
标准的51单片机有两个控制中断的寄存器。一个是中断使能寄存器,另一个是中断优先级寄存器。
IE——中断使能寄存器的位分配(地址0XA8,可位寻址 )
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符号 | EA | —— | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
复位值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
IE——中断使能寄存器的位描述
位 | 符号 | 描述 |
---|---|---|
7 | EA | 总中断使能,相当于总开关 |
6 | —— | —— |
5 | ET2 | 定时器2中断使能 |
4 | ES | 串口中断使能 |
3 | ET1 | 定时器1中断使能 |
2 | EX1 | 外部中断1使能 |
1 | ET0 | 定时器0中断使能 |
0 | EX0 | 外部中断0使能 |
中断查询序列
中断函数编号 | 中断名称 | 中断标志位 | 中断使能位 | 中断向量地址 | 默认优先级(1最高) |
---|---|---|---|---|---|
0 | 外部中断0 | IE0 | EX0 | 0X0003 | 1 |
1 | T0中断 | TF0 | ET0 | 0X000B | 2 |
2 | 外部中断1 | IE1 | EX1 | 0X0013 | 3 |
3 | T1中断 | TF1 | ET1 | 0X001B | 4 |
4 | UART中断 | T1/RI | ES | 0X0023 | 5 |
5 | T2中断 | TF2/EXF2 | ET2 | 0X002B | 6 |
中断的优先级
中断有两种优先级。一种是抢占优先级,另一种是固有优先级。
抢占优先级
参考C语言的优先级理解。单片机会先执行优先级高的中断。
这里需要认识一个现象——中断嵌套。
如果单片机在执行低优先级中断时发生了高优先级中断,单片机会马上进入高优先级中断执行。高优先级中断处理完后,单片机返回处理低优先级中断。这个过程叫中断嵌套。
IP寄存器通过将优先级控制位置1,将该位设置为高优先级。
IP——中断优先级寄存器的位分配(地址0XB8、可位寻址)
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符号 | —— | —— | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
复位值 | —— | —— | 0 | 0 | 0 | 0 | 0 | 0 |
IP——中断优先级寄存器的位描述
位 | 符号 | 描述 |
---|---|---|
7 | —— | —— |
6 | —— | —— |
5 | PT2 | 定时器2中断优先级控制位 |
4 | PS | 串口中断优先级控制位 |
3 | PT1 | 定时器1中断优先级控制位 |
2 | PX1 | 外部中断1优先级控制位 |
1 | PT0 | 定时器0中断优先级控制位 |
0 | PX0 | 外部中断0优先级控制位 |
固有优先级
即,非抢占优先级。它不具备抢占性!如果在一个低优先级中断时出现了高优先级中断,单片机会先执行完当前的低优先级中断,再执行高优先级中断。
上表中断查询序列中的默认优先级,就是固有优先级。
注意:固有优先级中,数字越小等级越高。
两个优先级的协同使用,既不会无休止地嵌套,又保证了紧急任务优先进行,使单片机中断系统工作有条不紊的进行。