|
這是回復(fù)題主的代碼,目的是觀察各中斷及返回用的,可以借鑒理解中斷的作用,我實(shí)踐是不會(huì)這樣寫的.
- #include <REG52.H>
- #include "intrins.h"
- #define uchar unsigned char
- bit K1=0,K2=0;//標(biāo)記邏輯組合可以替代中斷優(yōu)先
- void Delay(unsigned int i)//延時(shí)函數(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)先級(jí)
- PX1=1;//外部中斷1為高優(yōu)先級(jí)
- for(;;)
- {
- for(a=0;a<9;a++)
- {
- Delay(400);//延時(shí),切換會(huì)延時(shí)阻塞設(shè)定時(shí)間
- P1=display[a];//已定義的流水燈顯示數(shù)據(jù)送到P1口
- }
- }
- }
- void int0_isr() interrupt 0 //刪除using 0否則無法返回主函數(shù)外中斷0的中斷服務(wù)函數(shù)
- {
- unsigned char m=0;
- for(m=0;m<10;m++)//標(biāo)號(hào)為偶數(shù)的LED和奇數(shù)LED交替閃爍10次
- {
- P1=0x55;//標(biāo)號(hào)為偶數(shù)的LED燈點(diǎn)亮
- Delay(500);//延時(shí)
- P1=0xaa;//標(biāo)號(hào)為奇數(shù)的LED燈點(diǎn)亮
- Delay(500);//延時(shí)
- }
- }
- void int1_isr() interrupt 2 //using 1外中斷1的中斷服務(wù)函數(shù),體現(xiàn)了中斷優(yōu)先和返回
- {
- unsigned char n=0;
- for(n=0;n<5;n++)//8位LED全亮全滅5次
- {
- P1=0;//8位LED全亮
- Delay(500);//延時(shí)
- P1=0xff;//8位LED全滅
- Delay(500);//延時(shí)
- }
- }
復(fù)制代碼
|
|