知道了什么是中斷,就好比知道了如何去打開門鎖,接下來就是找到鑰匙即可。
在51單片機中,有五種比較常見的中斷源,分別是INT0、INT1、T0、T1、串口中斷。
這五個中斷就像是五把鑰匙,我們要熟練運用他們,才能讓單片機發揮它該有的意義。對于這五個中斷源來說,最簡單的就是INT0/INT1這兩個了,他們兩個只干中斷這一個活兒,比較實在,相比于T0/T1就比較能干了,身兼數職。然后是串口中斷,屬于精神分裂型,包含兩個中斷控制一個中斷源,不過,他僅僅只干通訊的活兒,其他不管。
所以柿子要挑軟的捏,就先搞這個INT0/INT1。
我們之前說了一個生活中的案例,就是看電視,然后水滾了,去關水,再回來看電視,這個水滾了的聲音就是一個觸發我們暫停電視的信號。那么在程序中,什么條件是我們暫停主程序,進入中斷的信號呢?
首先看下單片機的端口,在端口上,可以發現,有兩個針腳,定義就是INT0/INT1。
上圖中,我們可以一圖覽盡所有中斷,P3.0/RXD,是通訊寫入端口,內部對應是寫入中斷RX,P3.1/TXD,是通訊發出端口,內部對應是發出中斷TX,P3.2/INT0,外部中斷0,P3.3/INT1,外部中斷1,P3.4/T0,中斷0,P3.5/T1,中斷1,既然有針腳,就意味著,這個針腳是有用的,很顯然。
通過手冊我們可以知道,當P3.2/INT0針腳,處于低電位時,就會觸發INT0中斷程序,事實果真如此嗎?真相只有一個,那就是,哪有那么簡單。盡管我們找到了觸發的端口,也可以給他一個觸發的低電位,但是程序的響應,還需要很多工作要做,這就是中斷的難點所在了,需要對中斷進行配置。就好比我聽到水開了,可以至于怎么讓水停止沸騰,這還需要我之前有人教過,不然我只能站在水壺邊看著它開,無可奈何。
那么我們怎么才能使用這個中斷呢?
關于外部中斷的使用,要遵守以下步驟,不然還真使用不了。我們先說下使用步驟,然后再詳細介紹每個步驟的設置方法。
INT0的使用:
1,打開總中斷開關。
2,打開INT0中斷開關。
3,配置INT0中斷的觸發方式。
4,設置中斷響應程序。
開始前,我們要先了解一些中斷的配置信息,需要依據數據手冊。通過STC官網可以直接下載89C52的數據手冊。如果需要也可以留言或私信,我單獨發送給你。
這個是關于中斷的優先級,就是說,我們在處理中斷的時候,是有先后順序的,不然在水開的同時門鈴響了,一個人怎么可能既開門又關水?程序也是一樣,為了避免出現中斷同時發生時的尷尬場面,就給每個中斷設置了優先級,INT0和INT1同時觸發了中斷,那么就會先處理INT0的程序,燈處理完再處理INT1的程序。這樣就保證了程序的穩定有序。
光有這個還不行,首先,需要打開中斷的總開關,我們可以這么理解中斷的運行過程。我用一個電路圖來解釋一下。
中斷信號要想觸發中斷程序,那么就需要先打開總開關,還要打開INT0專用開關,還要設置觸發方式,然后才會正確進入中斷程序,完成中斷。
總中斷開關如何設置呢?
查表可以看到,總開關是EA,打開總開關是EA=1。
然后打開外部中斷0(INT0)的開關是EX0,EX0=1。
中斷開了,還要設置觸發方式,觸發方式在另一個表中,繼續查表。
查表可以知道,需要IT0設置,當設置為0時,引腳為低電平時會觸發中斷,就是說當電位變成0V時,才會進入中斷響應。當設置為1時,引腳輸入電平從高電位到低電位的過程中,就觸發中斷,這個為什么有兩種方式呢?其實都是可以的,不過需要知道的是,當我們采用一個穩定的信號作為觸發信號時,就會有這樣一個情況,就是當高電位變成低電位時,下降沿只有一次,但是低電位卻有很長時間,如果我們的觸發源沒有退出,就會在下一個檢測周期,持續觸發中斷。如下圖。
所以對于一些具有保持信號的觸發源,采用下降沿觸發還是比較好的。當然如果處理得當,低電位觸發也是可以很穩定的。
最后是觸發中斷后,需要進入中斷函數,中斷函數,是專門的函數,不在主函數中。需要單獨寫出來。
我們使用的是INT0的中斷,于是就需要用第一個:void into_Routine(void) interrupt 0。
這個中斷的名字into_Routine可以自己任意取,但是后邊的interrupt 0必須要一致,因為程序就是靠這個來知道你這個是不是INT0的中斷程序,寫錯了,就會出現響應不了或者出錯。到這一步,就算結束了。整個中斷流程也就結束了。
總結下之前的步驟:
1,開總中斷:EA=1;
2,開INT0中斷:EX0=1;
3,設置觸發方式:IT0=1/0;
4,設置中斷程序:void INT0(void) interrupt 0 {執行程序}。
責任編輯人:CC
-
單片機
+關注
關注
6037文章
44558瀏覽量
635359 -
中斷
+關注
關注
5文章
898瀏覽量
41502
發布評論請先 登錄
相關推薦
評論