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