四川省建设厅工地安全网站,滨州网站seo,uehtml wordpress,免费做logo的网站文章来源#xff1a;《51单片机原理及应用#xff08;第3版#xff09;》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。
当CPU处理低优先级中断#xff0c;又发生更高级中断时#xff0c;此时中断处理过程如下图所示。
一个正在执行的低优先级中断服… 文章来源《51单片机原理及应用第3版》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。
当CPU处理低优先级中断又发生更高级中断时此时中断处理过程如下图所示。
一个正在执行的低优先级中断服务程序能被高优先级中断源的中断申请所中断形成中断嵌套。 相同级别的中断源不能相互中断其服务程序也不能被另一个低优先级的中断源所中断。 如果CPU正在执行高优先级的中断服务子程序不能被任何中断源所中断。 上电时中断优先级寄存器IP被清零每个中断源都处于同一个优先级这时如果其中几个中断同时产生中断请求则CPU按照片内硬件优先级链路的顺序即自然优先级响应中断硬件优先级有高到低的顺序如下表所示
中断源默认中断级别中断号外部中断0——INT0最高0定时/计数器0中断——T0第21外部中断1——INT1第32定时/计数器1中断——T1第43串口中断——TI/RI第54定时/计数器2中断——INT252独有第65
如果希望某个中断源有更高的优先级可以通过设置中断优先级寄存器IP指定更高优先级的中断。IP各位如下表
位序D7D6D5D4D3D2D1D0位名称///PSPT1PX1PT0PX0
IP中的某位设置为则相应的中断就是高优先级否则就是低优先级在同一个优先级下中断响应的顺序和自然优先一样。IP可位寻址。
各个位说明
PS串口中断优先级控制位PT1定时器1优先级控制位PX1外部中断1优先级控制位PT0定时器0优先级控制位PX0外部中断0优先级控制位
比如要求将外部中断1定时器0设为高优先级其它为低优先级那么应该置PT01PX11高三位取任意值设置为0那么IP的值应该为00000110B06H此时如果5个中断同时发生中断响应的次序为定时器0中断→外部中断1→外部中断0→定时器1→串口中断。
中断优先级应用示例
设置外部中断1为高优先级在两个外部中断引脚(P3.2和P3.3)接两个按键P1口连接LED。连接P3.2口的按键按下后LED循环点亮连接P3.3口的按键按下后LED全部点亮-熄灭连续3次。
Proteus设计原理电路图如下 软件设计
源程序清单
/*实现功能中断优先级使用示例设置外部中断1为高优先级P1口连接LEDP3.2和P3.3分别连接两个按键连接P3.2的按键INT0按下后LED循环点亮连接P3.3的按键INT1按下后LED全部点亮-熄灭闪烁3次。通过先按下按键INT0然后再按下按键INT1可以看到LED依次点亮-全部点亮熄灭闪烁3次-依次点亮直观显示中断优先级的作用。[2024-01-31] zoya
*/#include reg51.h
#include intrins.htypedef unsigned char uchar;#define GPIO_LED P1void delay(uchar c)
{uchar i,j;for(;c0;c--){for(i0;i142;i)for(j0;j2;j);}
}void main()
{EX01; // 外部中断0允许位EX11; // 外部中断1允许位IT01; // 定时器0允许位IT11; // 定时器1允许位EA1; // 总中断允许位IP0x04; // 中断优先级设置外部中断1高优先级GPIO_LED0xff;while(1);
}void Int0() interrupt 0
{uchar i, tmp;EX00; // 关闭外部中断0防止执行过程中再次发生中断delay(20);EX01; // 开外部中断0while(1){tmp0xFE;GPIO_LEDtmp;for(i0;i8;i){tmp_crol_(tmp,1);delay(100);GPIO_LEDtmp;}}
}void Int1() interrupt 2
{EX10; // 关闭外部中断1防止执行过程中再次发生中断delay(20);EX11; // 开外部中断1GPIO_LED0x00; delay(100);GPIO_LED0xff; delay(100);GPIO_LED0x00; delay(100);GPIO_LED0xff; delay(100);GPIO_LED0x00; delay(100);GPIO_LED0xff; delay(100);
}仿真结果