设计一中断嵌套程序:要求K1和K2都未按下时,P1口8只LED呈流水灯显示,当按一下K1时,产生一个低优先级外中断0请求(跳沿触发),进入外中断0中断服务程序,上下4只LED交替闪烁。此时按一下K2时,产生一个高优先级的外中断1请求(跳沿触发),进入外中断1中断服务程序,使8只LED全部闪烁。当显示5次后,再从外中断1返回继续执行外中断0中断服务程序,即P1口控制8只LED,上、下4只LED交替闪烁。设置外中断0为低优先级,外中断1为高优先级。
电路原理图如下:
单片机源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- void Delay(unsigned int i)
- {
- unsigned int j;
- for(;i > 0;i--)
- for(j=0;j<125;j++)
- {;}
- }
- void main()
- {
- uchar display [9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar a;
- for(; ;)
- {
- EA=1;
- EX0=1;
- EX1=1;
- IT0=1;
- IT1=1;
- PX0=0;
- PX1=1;
- for(a=0;a<9;a++)
- {
- Delay(500);
- P1=display[a];
- }
- }
- }
- void int0_isr(void) interrupt 0 using 0
- {
- for(; ;)
- {
- P1=0x0f;
- Delay(400);
- P1=0xf0;
- Delay(400);
- }
- }
- void int1_isr (void) interrupt 2 using 1
- {
- uchar m;
- for(m=0;m<5;m++)
- {
- P1=0;
- Delay(500);
- P1=0xff;
- Delay(500);
- }
- }
复制代码
所有资料51hei提供下载:
中断嵌套的应用.rar
(58.31 KB, 下载次数: 48)
|