微控制器中斷系統
中斷系統的概念和基本結構
中斷髮生:CPU正在處理某一程式時,發生了另一突發
事件請求CPU迅速去處理;
中斷響應: CPU暫時停止當前的工作,轉到需要處理的
中斷源的服務程式的入口,一般在入口處執行
一跳轉指令轉去處理中斷事件(中斷服務);
中斷返回:待CPU將中斷事件處理完畢後,再回到原來
程式被中斷的地方繼續處理執行程式,這一處
理過程稱為中斷返回。
當CPU與外設交換資訊時,由於外設的速度比較慢,若用查詢的方式,則CPU就要浪費很多時間去等待外設。
這樣就存在一個快速的CPU與慢速的外設之間的矛盾。為了解決這個問題,就引入了“中斷”的概念
中斷的優點
分時操作
有了中斷功能,就可以使CPU和多個外設同時工作。提高了CPU的利用率。
實時處理
實時控制時,需要現場的各種引數、資訊,可在任何時間發出中斷申請,CPU就可以馬上響應加以處理。
故障處理
計算機在執行過程中,往往會出現事先預料不到的情況,或出現一些故障。
中斷源
引起中斷的原因,或能發出中斷申請的來源,稱為中斷源。通常中斷源有以下幾種:
外部輸入、輸出裝置
故障源
控制物件
定時/計數脈衝,當定時/計數器溢位時產生中斷請求。 對於每種中斷事件,要求其能夠發出中斷請求訊號,而且要符合CPU響應中斷的條件,即要明確屬於哪種中斷源。中斷源是系統規定的可引起中斷的部件或來源。
中斷系統的功能
實現中斷及返回
能實現優先權排隊
高階中斷源能中斷低階的中斷處理
MCS-51微控制器的中斷系統提供5箇中斷申請源
外部中斷0和外部中斷1;
定時/計數器(T0)和(T1)的溢位中斷;
序列介面的接收和傳送中斷。
這5箇中斷源可分為兩個優先順序,可實現兩級中斷服務程式巢狀。
MCS-51微控制器的中斷系統可以提供5箇中斷申請源,它們的控制與實現由片內4個SFR來完成。
定時/計數器的控制暫存器(TCON)和序列介面控制暫存器(SCON)的相應位規定中斷型別和觸發方式;
中斷允許暫存器(IE)控制CPU是否響應中斷請求;
中斷優先順序暫存器(IP)安排各中斷源的優先順序,同一優先順序內各中斷同時提出中斷請求時,由內部的查詢邏輯按規定的自然優先順序確定其響應次序。
MCS-51的中斷源
外部中斷0:來自P3.2引腳上的外部中斷請求;
外部中斷1:來自P3.3引腳上的外部中斷請求;
T0:片內定時/計數器0溢位(TF0)中斷請求;
T1:片內定時/計數器1溢位(TF1)中斷請求;
序列介面:片內序列介面完成一幀資料的傳送或接收後,產生中斷請求TI或RI。
和中斷有關的特殊功能暫存器
定時/計數器控制暫存器TCON(88H)
TCON:它鎖存2個定時/計數器的溢位中斷標誌及外部中斷( )和( )的中斷標誌,與中斷有關的各位定義如下:
IT0:外部中斷0觸發方式控制位。
當IT0=0,外部中斷0選擇為電平觸發方式(低電平有效)當IT0=1外部中斷0選擇為邊沿觸發方式(下降沿有效)。
IE0:外部中斷0中斷請求標誌位。
IE0=1時,表示向CPU請求中斷。
IT1:外部中斷1觸發方式控制位。
IE1:外部中斷1中斷請求標誌位。
TF0:定時/計數器T0溢位中斷請求標誌位。
在T0啟動後就開始由初值加“1”計數,直至最高位產生溢位由硬體置位(TF0),向CPU請求中斷。CPU響應中斷時,TF0由硬體自動清“0”。
TF1:定時/計數器T1溢位中斷請求標誌位。
序列介面控制暫存器(98H)
SCON是序列介面控制暫存器,與中斷有關的是它的低位TI和RI。
RI:串列埠接收中斷標誌位。
當允許串列埠接收資料時,每接收完一個序列幀,由硬體置位RI,向CPU請求中斷。CPU響應中斷時,不能自動清除RI,RI必須由軟體清除。
TI:串列埠傳送中斷標誌位。
當CPU將一個傳送資料寫入串列埠傳送緩衝器時,就啟動了傳送過程。每傳送完一個序列幀,由硬體置位(TI),向CPU請求中斷。同樣,TI必須由軟體清除。
中斷允許暫存器IE(A8H)
CPU對中斷系統所有中斷以及某個中斷源的開放和遮蔽是由中斷允許暫存器(IE)控制的。
IE的狀態可通過程式由軟體設定;
某位設定為“1”,相應的中斷源中斷允許;
某位設定為“0”,相應的中斷源中斷遮蔽;
CPU復位時,IE各位清“0”,禁止所有中斷。
IE各位的定義如下:
EX0:外部中斷(0)中斷允許位;
ET0:定時/計數器T0中斷允許位;
EX1:外部中斷(1)中斷允許位;
ET1:定時/計數器(T1)中斷允許位;
ES: 序列介面中斷允許位;
EA: CPU中斷總允許位。
中斷優先順序暫存器IP(B8H)
MCS-51微控制器有兩個中斷優先順序,即可實現二級中斷服務巢狀。
每個中斷源的中斷優先順序都是由中斷優先順序暫存器(IP)中的相應位的狀態來規定的。
某位設定為“1”,則相應的中斷源為高優先順序中斷;
某位設定為“0”,則相應的中斷源為低優先順序中斷。
微控制器復位時,IP各位清“0”,各中斷源同為低優先順序中斷。
PX0:外部中斷0中斷優先順序設定位;
PT0:定時/計數器T0中斷優先順序設定位;
PX1:外部中斷1中斷優先順序設定位;
PT1:定時/計數器T1中斷優先順序設定位;
PS:串列埠中斷優先順序設定位。
同一優先順序的中斷優先權排隊,由中斷系統硬體 確定的自然優先順序形成,其排列如下表所示。
MCS-51微控制器的中斷優先順序控制原則
不同級的中斷源同時申請中斷時,先響應高階後響應低階。
同級的中斷源同時申請中斷時,按事先規定執行。即MCS-51微控制器中規定的同級中斷優先順序。
處理低階中斷又收到高階中斷請求時,停止低階轉去先執行高階。
處理高階中斷又收到低階中斷請求時,不響應它,等待做完高階處理後再處理低階中斷。
4.1.4 中斷響應條件和時間
中斷處理過程分為4個階段:中斷請求→中斷響應→中斷服務→中斷返回。
中斷響應條件
有中斷請求
相應的中斷允許位為1
CPU開中斷(即EA=1)
遇下面情況之一將不被響應(此間中斷條件失效,中斷丟失)
正在處理同級或高階中斷
當前查詢週期不是所執行指令的最後一個機器週期
正在執行RETI或訪問IE或IP 的指令
中斷響應至少需要3個完整的機器週期(3~8個)!
受阻時要附加3~5個機器週期(無同級或高階中斷正進行)
查詢週期不是當前指令的最後機器週期(如MUL,+3)
查詢週期恰逢RETI類指令(且後跟MUL指令+5)
CPU響應中斷過程
將相應優先順序狀態觸發器置1(阻斷後來同級或低階中斷 )
執行硬體LCALL指令(PC入棧,中斷服務程式入口址送PC )
執行中斷服務程式
編寫中斷服務程式注意
中斷服務程式入口存放指令LJMP或AJMP
現場保護與現場恢復
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0 ;轉外中斷0
ORG 000BH ;沒有用定時器0中斷,在此放一條RETI
;萬一 “不小心”產生了中斷,
RETI ; 也不會有太大的後果。
ORG 0030H
MAIN:…… ;主程式開始
;在此間發生中斷
......
INT0: ...... ;中斷服務程式開始
RETI ;中斷服務程式返回
END
4.1.6 中斷返回
中斷服務程式最後指令必須是RETI,其功能:
將斷點從堆疊彈送PC,CPU從原斷點繼續執行
將相應優先順序狀態觸發器清0,恢復原來工作狀態
不能用RET代替RETI
中斷服務程式中PUSH和POP必須成對使用
中斷與子程式呼叫的不同點
● 子程式呼叫是固定的,專用指令,位置固定。
● 中斷的執行是隨機的,沒有呼叫指令,任何位置。
中斷工作方式的優點:
1)外設與CPU可並行工作
CPU與多個外設同時工作,互不干擾
2)實現了實時處理、實時控制
CPU能及時處理外部資訊,如資料採集,監控
3)能及時處理隨機故障
中斷處理過程(彙總中斷響應→中斷服務→中斷返回)
(1)CPU在每個機器週期的S5P2時刻對各個中斷源的中斷標誌
進行取樣。
(2)這些取樣值在下一個機器週期內按優先順序和內部順序被
依次查詢。如果某個中斷標誌在上一個機器週期的S5P2
被置成了1,那麼它將於現在的查詢週期中及時被發現。
(3) 將相應的優先順序狀態觸發器置“1”(以阻斷後來的
同級或低階的中斷請求);
(4) 執行一條硬體LCALL指令,把程式計數器(PC)的內容壓入
堆疊儲存,再將相應中斷服務程式的入口地址送入PC;
(5) 進入中斷服務程式後,CPU自動清除中斷請求標誌TF0、
TF1、IE0、IE1,但不能清除TI和RI。
(6)在主程式中事先進行中斷初始化,在中斷服務程式
入口地址單元放一條長轉移指令LJMP,這樣中斷服
務程式能靈活地安排在64KB程式儲存器的任何地方。
(7) 在中斷服務程式中,首先用軟體保護現場,在中斷服
務之後、中斷返回前恢復現場,以防止中斷返回後,
丟失原暫存器的內容。
(8) 當執行到RETI時,中斷服務程式結束。
(9) 將中斷響應時壓入堆疊儲存的斷點地址從棧頂彈出送
回PC,CPU從原來中斷的地方繼續執行程式;
(10)將相應中斷優先順序狀態觸發器清“0”,通知中斷系
統,中斷服務程式已執行完畢。
4.1.7 中斷請求撤除
定時器中斷請求的撤除
串列埠中斷請求的撤除
外部中斷請求的撤除
——邊沿觸發
由於外部中斷源在每個機器週期被取樣1次,所以輸入的高電平或低電平必須至少保持12個振盪週期,以保證能被取樣到。
——電平觸發
微控制器在每個機器週期的S5P2期間取樣中斷輸入訊號,若為低電平,則可直接觸發外部中斷。在這種觸發方式中,中斷源必須持續請求,直至中斷產生為止,且要求在中斷服務程式返回之前,必須撤除中斷請求訊號,否則機器將認為又發生了另一次中斷請求。
外部電平中斷申請的撤除
在中斷服務程式中用以下兩條指令來撤除中斷請求:ANL P1,#0FEH ;P1.0=0,則S=1,D觸發器置位,Q=1 ORL P1,#01H ;P1.0=1,則S=0,D觸發器接收訊號 第1條指令使P1.0為0,而P1口其他各位的狀態不變。由於P1.0接至D觸發器的置“1”端(S),所以D觸發器的Q=1,從而撤除了中斷請求訊號。第2條指令又使P1.0為1,即S=0,以便能繼續接收新的外部中斷請求訊號。
4.1.8 中斷系統設計舉例
中斷系統的設計過程通常由以下幾個部分構成
(1) 中斷初始化,在主程式中完成;
(2) 在中斷入口地址處安排一跳轉指令,跳轉至中斷
服務子程式入口;
(3) 中斷服務子程式開始保護現場,保護與主程式或
其他中斷系統共享的資源,如A,PSW,DPTR,
Rn等,如果沒有共享資源,可以不必保護;
(4) 編制中斷服務子程式功能主體;
(5) 恢復現場;
【例4.1】試編寫設定外部中斷0和序列介面中斷為高優先順序,外部中斷1為低優先順序,並遮蔽T0和T1中斷請求的初始化程式段。
解:根據題目要求,只要能將中斷請求優先順序暫存器IP的第0、4位置“l”。其餘位置“0”,將中斷請求允許暫存器的第0、2、4、7位置“l”,其餘位置“0”就可以了。
ORG 0000H
SJMP MAIN
ORG 0003H ;外部中斷0的入口地址
LJMP INT0INT ;跳轉到外部中斷0的中斷服務程式
ORG 0013H ;外部中斷1的入口地址
LJMP INT1INT ;跳轉到外部中斷1的中斷服務程式
ORG 0023 ;串列埠中斷的入口地址
LJMP SIOINT ;跳轉到串列埠中斷的中斷服務程式
ORG 0030H
MAIN:… ;編寫主程式
MOV IP,#00010001B ;設外部中斷0和;序列口中斷
;為高優先順序
MOV IE,#10010101B ;允許INT0、序列口中斷,開CPU中斷
思考: 試寫一段中斷初始化程式,使其允許T0、T1和串列埠中
斷,且INT0為邊沿觸發方式,串列埠為高優先順序中斷。
【例4.2】利用微控制器的定時器計數來產生中斷,假定微控制器晶振選擇12MHZ,選擇使用T0每1mS產生一次中斷請求,用於呼叫動態顯示程式DISP,即顯示程式在此屬於中斷服務程式。
解:先安排好不同程式的入口地址,在主程式中完成定時器和中斷的初始化,然後開啟對應中斷允許位和總中斷允許位,在中斷服務程式中要注意保護和恢復現場。
;主程式如下
ORG 0000H
LJMP MAIN ;跳轉到主程式入口
ORG 000BH
LJMP DISP ;跳轉到定時器T0中斷入口地址
ORG 0030H
MAIN:………
;=進行定時器初始化=
MOV TMOD,#00000001B ;設定T0工作在模式1
MOV TH0,#0FCH ;
MOV TL0,#18H ; 設定計數初值FC18H=64536=65536-1000
SETB TR0 ; TR0=1,啟動定時器T0 開始計數
SETB ET0 ; 開放定時器T0 中斷允許位
SETB EA ;開放總中斷允許位,等待T0 計數滿溢位;
…略……
;中斷服務程式程式碼:
DISP:
PUSH ACC
PUSH PSW ;保護現場;
CLR TR0 ;因為已經響應中斷請求,故停止定時器T0
MOV TH0,#0FCH
MOV TL0,#18H ;重新賦計數初值
SETB TR0 ;重新啟動定時器T0
……. ;顯示程式程式碼(略)…..
POP PSW
POP ACC ;按先入後出次序恢復現場;
RETI ; 中斷服務程式結束,返回斷點,必須用RETI指令;
【例4.3】如下圖所示,按S接至外部中斷,按一次鍵LED點亮,蜂鳴器發聲,再按一次鍵LED滅,蜂鳴器關閉,迴圈往復。
——實現程式——
ORG 0000H
LED BIT P0.0
BUZZER BIT P2.7
LJMP MAIN ;跳轉至主程式
ORG 0013H
LJMP INT1_INT ;跳轉至中斷服務程式
……
ORG 0100H
MAIN: SETB IT1 ;外中斷採用下降沿觸發
SETB EX1 ;允許中斷
SETB EA ;開總中斷
SETB F0 ;按鍵切換標誌,F0=1,LED滅; ;F0=0,LED亮
……
INT1_INT:CPL F0 ;不需保護現
MOV C,F0
MOV LED,C ;控制LED輸出
MOV BUZZER,C ;控制蜂鳴器輸出
RETI ;中斷返回
另:請考慮用查詢方式實現該功能,如何程式設計?二者有何差異?
中斷總結
51微控制器共有5箇中斷源,由4個SFR(TCON、 SCON、IE和IP)進行管理和控制。
初始化時,需要對5個內容進行設定:
1)中斷服務程式入口地址的設定;
2)某一中斷源中斷請求的允許和禁止;
3)對於外部中斷請求,還需進行觸發方式的設定;
4)各中斷優先級別的設定;
5)CPU開中斷與關中斷。