51单片机中断: 寄存器与优先级
中断与定时器
-
通常定时器一般用法都是采取中断方式来做,但中断和定时器并非同一种东西,定时器按照一定设置后会触发中断,但还有
外部中断
,UART
这些设置后都可以触发中断.-
定时器
是单片机模块的一个资源,确确实实存在的一个模块。 -
中断
是单片机的一种运行机制。
-
中断相关寄存器
-
IE
: 中断使能寄存器的位分配(地址0xA8, 可位寻址)位 7 6 5 4 3 2 1 0 符号 EA — ET2 ES ET1 EX1 ET0 EX0 复位值 0 — 0 0 0 0 0 0 -
中断使能寄存器的位描述
位 符号 描述 7 EA 总中断使能位,相当于总开关 6 — 5 ET2 定时器 2 中断使能 4 ES 串口中断使能 3 ET1 定时器 1 中断使能 2 EX1 外部中断 1 使能 1 ET0 定时器 0 中断使能 0 EX0 外部中断 0 使能
中断函数的使用
单片机如何找到中断函数的?
-
单片机借助
中断向量地址
来调用中断函数,中断向量地址又是如何计算的?- 中断函数
interrupt
后面中断函数标号的数字x
就是根据中断向量地址得出的,其计算方法为:\[向量地址 = x * 8 + 3
\]
- 中断函数
-
具体向量地址见下一节中断序列查询表
中断序列查询
-
中断序列查询表
中断函数编号 中断名称 中断标志位 中断使能位 中断向量地址 默认优先级 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中断 TI/RI ES 0x0023 5 5 T2中断 TF2/EXF2 ET2 0x002B 6
中断优先级寄存器
- 中断优先级有两种,一种是
抢占优先级
,一种是固有优先级
抢占优先级
-
IP
寄存器-中断优先级寄存器的位分配(地址 0xB8、可位寻址)位 7 6 5 4 3 2 1 0 符号 — — PT2 PS PT1 PX1 PT0 PX0 复位值 — — 0 0 0 0 0 0 -
中断优先级寄存器的位描述
位 符号 描述 7 — 6 — 5 PT2 定时器 2 中断优先级控制位 4 PS 串口中断优先级控制位 3 PT1 定时器 1 中断优先级控制位 2 PX1 外部中断 1 中断优先级控制位 1 PT0 定时器 0 中断优先级控制位 0 PX0 外部中断 0 中断优先级控制位 -
IP
这个寄存器的每一位,表示对应中断的抢占优先级,每一位的复位值都是0
,当把某一位设置为1
的时候,这一位的优先级就比其它位的优先级高了。- 如果将
PT0
位设置为1,一旦定时器0发生中断则立即打断其他中断。 - 如果
T0
中断正在运行,其他中断发生,则还是运行T0中断,直到T0中断执行完毕。
- 如果将
中断嵌套
-
当进入低优先级中断中执行时,如又发生了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级级中断后,再返回处理低优先级中断,这个过程就叫做中断嵌套。也称为
抢占
-
抢占的概念:
-
优先级高的中断可以打断优先级低的中断的执行,形成嵌套。
-
优先级低的中断是不能打断优先级高的中断的。
-
固有优先级
-
在中断序列查询,一般都是数字越小优先级越高。单片机中优先级一共分为6级优先级,该优先级与抢占优先级不同点就是它不具备抢占特性:
- 低优先级的中断执行过程中,如果发生了高优先级的中断,那么这个高优先级中断也只可以等到低优先级中断执行完后才能得到响应。
-
固有优先级不具备抢占,那么其作用是什么?
- 多个中断同时存在时的仲裁。一般来说多个中断同时发生的情况比较少,因为这种情况的概率会很低。
- 但如果因为某种原因暂时关闭了中断(
EA=0
),然后执行完一段代码后,又重新使能了总中断(EA=1
),在关闭的那会中断得不到响应,那这种情况就可能有多个中断触发了,这时候就必须要有个先后执行顺序才行,谁优先级高就先响应谁,然后中断编号排队,依次得到响应,这就是固有优先级的作用了。
中断优先级总结
- 抢占优先级和非抢占优先级的协同,可以使单片机中断系统有条不紊的工作,既不会无休止的嵌套,又可以保证必要时紧急任务得到优先处理。