久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 認識C51外部中斷(INT0)

認識C51外部中斷(INT0)

作者: 時間:2016-11-25 來源:網絡 收藏
以下將以紅外遙控解碼為例講一下C51外部中斷(INT0)的編程親身體會.

要對紅外遙控信號解碼那么就要使用C51外部中斷,并且要設置成為負跳變沿觸發方式.一般都會在主程序的開始外初始化中斷(或將初始化中斷程序寫成函數,將這個函數放入主程序)如下:

本文引用地址:http://cqxgywz.com/article/201611/321165.htm

void main(void)
{

 IT0=1;//負跳變觸發
 EX0=1;//開外部中斷0
 EA=1;//開總中斷

 .........//其它程序

 ..........
}

void INT0() interrupt 0

{

 .......//紅外信號解碼程序

}

根據需要打開外部中斷(EX0=1):

 以上程序在開始處便打開了外部中斷.從理論上是完全正確的!但在現實情況中要看具體情況來打開外部中斷!如果剛進入程序要處理其它事情暫時不能處理紅外信號,那么EX0=1就不能寫在主程序的開始處.而要寫在適當的位置.否則開機有紅外信號就會馬上進入紅外信號解碼程序.

關閉外部中斷(EX0=0):

 一但有中斷信號,單片機將很快對中斷產生響應進入中斷程序.中斷程序也就是紅外信號解碼程序.在中斷程序中一定不要忘記關閉中斷EX0=0!在按下遙控器的某個按鍵后,遙控器將一組一組的向外發送數據.即便是以最快的速度按下并放開按鍵,那么遙控已經發送出多組數據.單片機將多次解碼,主程序如果比較龐大解碼出來的數據還沒有來的急使用就被下一個數據覆蓋!關閉外部中斷后,能有效的避免干擾和分清當前一組數據是否接收解碼完畢!進入中斷程序就將外部中斷關閉,一組數據解碼結束并經主程序采用后在開啟外部中斷.這才是一個完整的過程!這一個完整的過程是在沒有干擾的情況下可正常完成.現實中干擾無時不在,一但無法正常解碼出數據那么主程序也不采用,那么外部中斷將不在打開.也就不在接受紅外信號.這時在紅外解碼程序的最后加一判斷,如果出錯就在解碼程序最后打開外部中斷為下一次接受紅外信號做好準備.

 

根據需要清空IE0(IE0=0):

 關閉中斷后遙控器并沒有停止發送信號,關閉中斷后的紅外信號將繼續使IE0置位.IE0的狀態根本不受EX0的控制.單片機執行了IT1=1語句,只要外部中斷有負跳變沿IE0就會置位.如果我們只處理EX0=1(即中斷開啟后的信號)以后的信號.那么在紅外信號解碼程序退出前要對IE0清零.如果不清零,只要打開外部中斷將會再次進入中斷.這一次進入中斷輕則是浪費時間,重則可能就會出錯(進入中斷后紅外線解碼采用查詢法時表現的很明顯).所以在EX0=1前面要加上一句IE0=0.



關鍵詞: C51外部中斷INT

評論


技術專區

關閉