這是回復題主的代碼,目的是觀察各中斷及返回用的,可以借鑒理解中斷的作用,我實踐是不會這樣寫的.
- #include <REG52.H>
- #include "intrins.h"
- #define uchar unsigned char
- bit K1=0,K2=0;//標記邏輯組合可以替代中斷優(yōu)先
- void Delay(unsigned int i)//延時函數(shù)
- {
- unsigned int j;
- for(;i>0;i--)
- for(j=0;j<125;j++)
- {;}//空函數(shù)
- }
- void main()//主函數(shù)https://ask.csdn.net/questions/8011758
- {
- unsigned char display [9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水燈顯示數(shù)據(jù)數(shù)組
- unsigned char a;
- EA=1;//總中斷允許
- EX0=1;//允許外部中斷0中斷
- EX1=1;//允許外部中斷1中斷
- IT0=1;//選擇外部中斷0為跳沿觸發(fā)方式
- IT1=1;//選擇外部中斷1為跳沿觸發(fā)方式
- PX0=0;//外部中斷0為低優(yōu)先級
- PX1=1;//外部中斷1為高優(yōu)先級
- for(;;)
- {
- for(a=0;a<9;a++)
- {
- Delay(400);//延時,切換會延時阻塞設定時間
- P1=display[a];//已定義的流水燈顯示數(shù)據(jù)送到P1口
- }
- }
- }
- void int0_isr() interrupt 0 //刪除using 0否則無法返回主函數(shù)外中斷0的中斷服務函數(shù)
- {
- unsigned char m=0;
- for(m=0;m<10;m++)//標號為偶數(shù)的LED和奇數(shù)LED交替閃爍10次
- {
- P1=0x55;//標號為偶數(shù)的LED燈點亮
- Delay(500);//延時
- P1=0xaa;//標號為奇數(shù)的LED燈點亮
- Delay(500);//延時
- }
- }
- void int1_isr() interrupt 2 //using 1外中斷1的中斷服務函數(shù),體現(xiàn)了中斷優(yōu)先和返回
- {
- unsigned char n=0;
- for(n=0;n<5;n++)//8位LED全亮全滅5次
- {
- P1=0;//8位LED全亮
- Delay(500);//延時
- P1=0xff;//8位LED全滅
- Delay(500);//延時
- }
- }
復制代碼
|