外部中斷控制LED燈開關
阿新 • • 發佈:2021-01-26
在51微控制器中,有2路外部中斷輸入INT0(P3.2)和INT1(P3.3);2路中斷觸發訊號:低電平觸發和下降沿觸發。
中斷允許暫存器IE(0:禁止中斷;1:使能中斷)
定時/計數器中斷控制暫存器TCON暫存器
TF1:定時/計數器T1溢位中斷請求標誌位(0:無中斷請求;1:有中斷請求)
TR1::定時/計數器T1啟動位(0:停止:定時/計數器;1:啟動:定時/計數器)
TF0:定時/計數器T0溢位中斷請求標誌位
TR0:定時/計數器T0啟動位0
IE1:外部中斷1請求標誌位
IT1:外部中斷1觸發方式控制位(0:低電平觸發;1:高電平觸發)
IE0:外部中斷0請求標誌位
IT0:外部中斷0觸發方式控制位
在開發板上完成以下任務:
- 啟動後,燈L11閃爍,其他LED燈熄滅
- S4按鍵,即引腳外部中斷INT1設定為下降沿觸發
- 設計中斷服務函式,外部中斷響應後,將L12燈的開關狀態翻轉
#include "reg52.h" //關閉外設 void Cls_Peripheral(void) { P0 = 0xFF; P2 = P2 & 0x1F | 0x80; // P27~P25清零,再定位Y4C P2 &= 0x1F; // P27~P25清零 P0 = 0; P2 = P2 & 0x1F | 0xA0; // P27~P25清零,再定位Y5C P2 &= 0x1F; // P27~P25清零 } sbit L11=P3^0; sbit L12=P3^1; void Delay (unsigned int t) //具體延時的長度可以通過引數傳遞 { while(t--); } void led_shan() //L11燈閃爍函式 { L11=0; Delay(40000); L11=1; Delay(40000); } // 系統初始化 void Sys_Init(void) { IT1 = 1; // 邊沿觸發方式(下降沿) EX1 = 1; EA = 1; // 開啟總中斷 } //中斷服務函式 void isr_intr_1(void) interrupt 2 { L12=~L12; //S4按下,LED燈狀態翻轉 } //主函式 void main() { Cls_Peripheral(); Sys_Init(); while(1) { led_shan(); } }