由于自己对51单片机的中断优先级相关觉得比较混乱,有必要做个简单整理。
查询优先级&执行优先级
51单片机由两种优先级——查询优先级和执行优先级。
查询优先级
查询优先级是指当51单片机的多个中断源同时引起中断时,CPU逐个查询中断标志位的次序,高优先级的中断标志位将被优先查询到,但并不代表查询优先级高的中断一定可以打断正在执行中断处理的低优先级中断。查询优先级由51单片机本身的电路来决定,不能设置和更改。
举个栗子
- 当定时器中断0和外部中断1同时引起时(没有设置中断优先级控制寄存器),则会首先执行定时器中断0的请求;
- 当定时器中断0和外部中断1同时引起且外部中断1正在执行请求时(没有设置中断优先级控制寄存器),外部中断1不能被任何中断(包括定时器中断0)所打断。
执行优先级
执行优先级由中断优先级控制寄存器IP
来控制。
- 高两位置0
PT2
:定时器中断2优先级控制位PS
:串口中断优先级控制位PT1
:定时器中断1优先级控制位PX1
:外部中断1优先级控制位PT0
:定时器中断0优先级控制位PX0
:外部中断0优先级控制位
如果设置了IP
,执行优先级则只有两级——高优先级(IP
中的相应位置1)和低优先级(IP
中的相应位置0)。若没有设置IP
,则当多个中断同时产生时,单片机只会根据查询优先级来进行优先选择。
- 当多个中断源同时引起中断时,优先响应执行优先级高的中断;
- 同一执行优先级的中断则根据查询优先级依次响应;
- 一个正在执行的低优先级中断能被高优先级中断所打断,反之则不能;
- 一个正在执行的中断不能被新的同优先级中断所打断。
举个栗子
当IP
中的PX1
位和PT0
位置1,其余位置0时,中断的响应次序依次为:
定时器中断0 → 外部中断1 → 外部中断0 → 定时器中断1 → 串口中断 → 定时器中断2
补充
旧型号的51单片机(80C51系列)只有5个中断源,2个(执行)优先级;现在很多新型号的51单片机有更多的中断源和(执行)优先级。
参考资料: