/*INT0中斷練習程式,低準位觸發練習,INT0按著會一直重複執行中斷程式 平時 LED 閃爍 INT0中斷 LED 左旋一圈 */ #include #include #define RR(x) _cror_(x,1); //重新定義 RR右旋函式 #define RL(x) _crol_(x,1); //重新定義 RL左旋函式 void delay(int t); // 宣告延遲函式 void main() { IE=0x81; // 啟用INT 0中斷 P2 = 0x0F; // 設定P2埠的初始值,P2.7~P2.4亮 while(1) { delay(1000); // 延遲副程式 P2 = ~P2; // P2埠狀態左旋 } } void int0_test(void) interrupt 0 // INT0 中斷副程式開始 { unsigned char i,j; i=P2; // 儲存中斷前P2狀態 P2=0xfe; // 初始狀態=1111 1110,最右燈亮 for(j=0;j<7;j++) // j迴圈,左移7次 { delay(500); // 延遲500*1m=0.5s P2 = RL(P2); // 左移1位後,LSB設為1 } // j迴圈結束 P2=i; // 寫回中斷前P2狀態 } void delay(int t) // 延遲函數開始 { int i,j; // 宣告整數變數i,j for (i=0;i