知道了什么是中斷,就好比知道了如何去打開門鎖,接下來就是找到鑰匙即可。
在51單片機(jī)中,有五種比較常見的中斷源,分別是INT0、INT1、T0、T1、串口中斷。
這五個(gè)中斷就像是五把鑰匙,我們要熟練運(yùn)用他們,才能讓單片機(jī)發(fā)揮它該有的意義。對(duì)于這五個(gè)中斷源來說,最簡(jiǎn)單的就是INT0/INT1這兩個(gè)了,他們兩個(gè)只干中斷這一個(gè)活兒,比較實(shí)在,相比于T0/T1就比較能干了,身兼數(shù)職。然后是串口中斷,屬于精神分裂型,包含兩個(gè)中斷控制一個(gè)中斷源,不過,他僅僅只干通訊的活兒,其他不管。
所以柿子要挑軟的捏,就先搞這個(gè)INT0/INT1。
我們之前說了一個(gè)生活中的案例,就是看電視,然后水滾了,去關(guān)水,再回來看電視,這個(gè)水滾了的聲音就是一個(gè)觸發(fā)我們暫停電視的信號(hào)。那么在程序中,什么條件是我們暫停主程序,進(jìn)入中斷的信號(hào)呢?

首先看下單片機(jī)的端口,在端口上,可以發(fā)現(xiàn),有兩個(gè)針腳,定義就是INT0/INT1。

上圖中,我們可以一圖覽盡所有中斷,P3.0/RXD,是通訊寫入端口,內(nèi)部對(duì)應(yīng)是寫入中斷RX,P3.1/TXD,是通訊發(fā)出端口,內(nèi)部對(duì)應(yīng)是發(fā)出中斷TX,P3.2/INT0,外部中斷0,P3.3/INT1,外部中斷1,P3.4/T0,中斷0,P3.5/T1,中斷1,既然有針腳,就意味著,這個(gè)針腳是有用的,很顯然。
通過手冊(cè)我們可以知道,當(dāng)P3.2/INT0針腳,處于低電位時(shí),就會(huì)觸發(fā)INT0中斷程序,事實(shí)果真如此嗎?真相只有一個(gè),那就是,哪有那么簡(jiǎn)單。盡管我們找到了觸發(fā)的端口,也可以給他一個(gè)觸發(fā)的低電位,但是程序的響應(yīng),還需要很多工作要做,這就是中斷的難點(diǎn)所在了,需要對(duì)中斷進(jìn)行配置。就好比我聽到水開了,可以至于怎么讓水停止沸騰,這還需要我之前有人教過,不然我只能站在水壺邊看著它開,無可奈何。
那么我們?cè)趺床拍苁褂眠@個(gè)中斷呢?
關(guān)于外部中斷的使用,要遵守以下步驟,不然還真使用不了。我們先說下使用步驟,然后再詳細(xì)介紹每個(gè)步驟的設(shè)置方法。
INT0的使用:
1,打開總中斷開關(guān)。
2,打開INT0中斷開關(guān)。
3,配置INT0中斷的觸發(fā)方式。
4,設(shè)置中斷響應(yīng)程序。
開始前,我們要先了解一些中斷的配置信息,需要依據(jù)數(shù)據(jù)手冊(cè)。通過STC官網(wǎng)可以直接下載89C52的數(shù)據(jù)手冊(cè)。如果需要也可以留言或私信,我單獨(dú)發(fā)送給你。

這個(gè)是關(guān)于中斷的優(yōu)先級(jí),就是說,我們?cè)谔幚碇袛嗟臅r(shí)候,是有先后順序的,不然在水開的同時(shí)門鈴響了,一個(gè)人怎么可能既開門又關(guān)水?程序也是一樣,為了避免出現(xiàn)中斷同時(shí)發(fā)生時(shí)的尷尬場(chǎng)面,就給每個(gè)中斷設(shè)置了優(yōu)先級(jí),INT0和INT1同時(shí)觸發(fā)了中斷,那么就會(huì)先處理INT0的程序,燈處理完再處理INT1的程序。這樣就保證了程序的穩(wěn)定有序。
光有這個(gè)還不行,首先,需要打開中斷的總開關(guān),我們可以這么理解中斷的運(yùn)行過程。我用一個(gè)電路圖來解釋一下。

中斷信號(hào)要想觸發(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)定的信號(hào)作為觸發(fā)信號(hào)時(shí),就會(huì)有這樣一個(gè)情況,就是當(dāng)高電位變成低電位時(shí),下降沿只有一次,但是低電位卻有很長(zhǎng)時(shí)間,如果我們的觸發(fā)源沒有退出,就會(huì)在下一個(gè)檢測(cè)周期,持續(xù)觸發(fā)中斷。如下圖。

所以對(duì)于一些具有保持信號(hào)的觸發(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)注
6074文章
45340瀏覽量
663598 -
中斷
+關(guān)注
關(guān)注
5文章
913瀏覽量
43565
發(fā)布評(píng)論請(qǐng)先 登錄
單片機(jī)中斷優(yōu)先級(jí)應(yīng)用案例
單片機(jī)教程十七:單片機(jī)的中斷系統(tǒng)
51單片機(jī)定時(shí)器中斷_51單片機(jī)中斷系統(tǒng)_51單片機(jī)擴(kuò)展中斷的四種方法
單片機(jī)中斷系統(tǒng)介紹_51單片機(jī)中斷系統(tǒng)結(jié)構(gòu)
51單片機(jī)有幾個(gè)中斷?單片機(jī)的中斷號(hào)對(duì)應(yīng)的中斷類型說明
單片機(jī)--中斷系統(tǒng)實(shí)驗(yàn)
C51單片機(jī)學(xué)習(xí)筆記(四)——單片機(jī)的中斷系統(tǒng)及應(yīng)用
51單片機(jī)—中斷
單片機(jī):簡(jiǎn)單中斷LED的設(shè)計(jì)

單片機(jī)中斷如何打開
評(píng)論