外部中斷控制
#includereg51.h> unsigned char flag=0; sbit p33=P3^3; unsigned char code port3[4][4]= { 0x28,0x28,0x28,0x28, 0x29,0x29,0x29,0x29, 0x29,0x29,0x29,0x29, 0x29,0x29,0x29,0x29, }; unsigned char code port1[4][4]= { 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x20,0x20,0x20,0x20, 0x24,0x24,0x24,0x24, }; main() { unsigned char i; unsigned int j,count=0; EA=1; //總中斷允許 IT0=1; //脈沖觸發(fā)方式,下降沿有效 EX0=1; //外中斷0允許 while(1) { while(1) { if(flag==1) break; } flag=0; for(i=0;i4;i++) { while(1) { for(j=0;j4;j++) { P3=port3[j]; P1=port1[j]; } if(++count==8000) {count=0;break;} } } p33=0; //本單片機效果走完,改變p33,使下一單片機,外部中斷0下降沿觸發(fā)} } void int0(void) interrupt 0 { flag=1; }
對程序稍加修改,昨天的程序,燈有點亂亮。
上電馬上中斷:由于單片機復位后,各IO口為高電平。我給發(fā)中斷信號的單片機,程序起始就給下一個中斷入口置低電平,所以上電后,下一個單片機進入中斷了。
漸變:本程序為四個亮度等級。第一行不斷輪流循環(huán)執(zhí)行了8000次。
break跳出整個循環(huán)。continue跳出本次循環(huán),重新執(zhí)行下一循環(huán)。goto語句應盡量少用,通常與if連用,跳到對應標號處執(zhí)行
以下為發(fā)送中斷單片機的程序,沒有完成想要的效果。
#includereg51.h>sbit p33=P3^3;unsigned int count=0;main() {p33=0;EA=1; //總中斷允許IT0=1; //脈沖觸發(fā)方式,下降沿有效EX0=1; while(1){;}}void int0(void) interrupt 0{p33=1;p33=0;}
前一個單片機輸出p33,接后一單片機外部中斷0輸入p32
單片機為2051
評論