1. 程式人生 > 其它 >外部中斷控制LED燈開關

外部中斷控制LED燈開關

技術標籤:微控制器筆記微控制器

在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觸發方式控制位

在開發板上完成以下任務:

  1. 啟動後,燈L11閃爍,其他LED燈熄滅
  2. S4按鍵,即引腳外部中斷INT1設定為下降沿觸發
  3. 設計中斷服務函式,外部中斷響應後,將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();
		}
}