設計一中斷嵌套程序:要求K1和K2都未按下時,P1口8只LED呈流水燈顯示,當按一下K1時,產(chǎn)生一個低優(yōu)先級外中斷0請求(跳沿觸發(fā)),進入外中斷0中斷服務程序,上下4只LED交替閃爍。此時按一下K2時,產(chǎn)生一個高優(yōu)先級的外中斷1請求(跳沿觸發(fā)),進入外中斷1中斷服務程序,使8只LED全部閃爍。當顯示5次后,再從外中斷1返回繼續(xù)執(zhí)行外中斷0中斷服務程序,即P1口控制8只LED,上、下4只LED交替閃爍。設置外中斷0為低優(yōu)先級,外中斷1為高優(yōu)先級。
電路原理圖如下:
單片機源程序如下:
- #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, 下載次數(shù): 48)
2018-12-16 12:55 上傳
點擊文件名下載附件
|