ABOV單片機外部引腳中斷EINT實現講解及示例代碼-[MC96F6332D]

一、準備工作

1、KEIL C51編譯環境

2、CodeGen8 代碼生成器

3、MC96F6332D 開發板

4、USB-OCD II仿真器

二、生成外部引腳中斷的代碼

1、在CodeGen8 代碼生成器的外設窗口中選擇內部RC時鐘作爲時鐘源,設置時鐘源的頻率爲8MHz,配置GPIO引腳P02和P52分別爲外部的可中斷輸入引腳,使能MCU內部的上拉電阻和防抖動功能;具體配置如下圖①、②所示,GPIO配置生成的代碼如下圖⑧所示:

2、配置外部中斷引腳的中斷方式爲下降沿觸發(因爲有配置引腳內部的上拉電阻),使能引腳的中斷功能;GUI的配置見下圖⑤、⑥所示,在下圖⑦中可以看到配置後的引腳高亮顯示了當前的引腳複用功能;中斷功能配置生產的代碼如上圖③所示;

3、點擊CodeGen8 中的C 圖標,自動打開KEIL C51軟件;下一步進行代碼的修改、編譯和程序下載

4、在中斷函數中添加代碼,對外部中斷進行狀態標誌,避免在中斷函數中進行數據的處理(中斷函數講究快進快出);

//定義2個全局變量,用來表示外部中斷的狀態
unsigned char EXIT8_STA = 0;
unsigned char EXIT0_STA = 0;

//======================================================
// interrupt routines
//======================================================

void INT_Ext8() interrupt 6
{
	// External interrupt 8 
	EXIT8_STA = 1;		//外部中斷8標誌使能
	
}



void INT_Ext0_7() interrupt 5
{
	// External interrupt 0 ~ 7
	//判斷外部引腳0是否被按下
		if(EIFLAG0 & 0x01)
			{
				EIFLAG0 &= 0xFE;
				EXIT0_STA = 1;		//外部中斷0標誌使能
			}
}

特別注意:外部中斷0-7中斷後需要軟件手動清除標誌位;在規格書中也同樣有體現:

5、關於引腳的方向和上拉寄存器在此不再贅述,之前的GPIO章節有詳細講解;

此處針對消抖做下介紹:現代單片機MCU內部可以對引腳進行消抖處理,所以引腳外部可以不增加濾波電容或電阻等硬件電路;關於消抖的使用:需要先配置消抖的時鐘,然後對需要消抖的I/O口進行配置即可;消抖時鐘寄存器和端口引腳的消抖配置如下圖所示:

6、關於外部中斷的觸發條件配置:MCU外部的中斷觸發有3種可供選擇,一般情況下會選用最多的是上升或下降沿觸發,因爲之前GPIO引腳有配置內部的上拉電阻,所以此處配置爲下降沿觸發;

特別注意:在代碼生成器中自動生成的EIPOL1寄存器配置爲了0x56;見文章前面的圖④所示:此處應該配置0x02即可;

建議:因爲外部中斷設置都是單獨打開和關閉,所以只要使用的中斷引腳觸發條件配置正確即可,當然還是推薦採用正確配置,便於之後代碼的調試工作。

7、使能外部引腳對應的中斷,可以看到總中斷的開關也是在IE寄存器中進行配置。

外部中斷8在IE1寄存器中進行配置,如下圖所示:

8、在主函數中增加判斷外部中斷標誌的代碼

//主函數中增加如下代碼

if(EXIT8_STA)		//判斷外部中斷8是否存在
		{
			EXIT8_STA = 0;
			printf("EXIT 8 Interrupt.\r\n");
			
		}
		else if(EXIT0_STA)	//判斷外部中斷0是否存在
		{
			EXIT0_STA = 0;
			printf("EXIT 0 Interrupt.\r\n");
		}

9、點擊編譯器的下載按鈕,將剛剛編譯好的代碼下載到MCU中進行調試仿真。

10、連接串口助手到PC端,可以看到代碼可以正常運行。

三、實驗現象(具體內容可以參考工程中的Readme.txt文件)

1、MCU主頻選擇爲內部8MHz;

2、當引腳P02和P52有下降沿時會觸發中斷,在主函數中會判斷對應的中斷狀態是否爲真,如果爲真,串口會打印對應的中斷內容提示有中斷觸發,見上圖;

3、具體的代碼可以訪問鏈接:https://share.weiyun.com/5efkBCB;進行免費下載。


因爲小編自己能力水平有限,文中難免有錯誤或表達失誤的信息,還望廣大閱讀者留言批評指正,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章