當幾個中斷源同時向CPU請求中斷時,按所發(fā)生的實時事件的輕重緩急排隊,優(yōu)先處理最緊急事件的中斷請求,于是單片機規(guī)定每個中斷源的優(yōu)先級別。
當CPU正在處理一個中斷請求,又發(fā)生另一個優(yōu)先級比它高的中斷請求,CPU暫時中止對前一中斷處理,轉而去處理優(yōu)先級更高的中斷請求,待處理完后,再繼續(xù)執(zhí)行原來的中斷處理程序,這樣的過程稱為中斷嵌套,這樣的中斷系統(tǒng)稱為多級中斷系統(tǒng)。
由于外界異步事件中斷CPU正在執(zhí)行的程序時隨機的,CPU轉向去執(zhí)行中斷服務程序時,除了硬件會自動把斷電地址,即16位PC程序計數器的值壓入堆棧之外,用戶還得注意保護有關工作寄存器,累加器,標志位等信息,這個過程通常稱為保護現場 。以便在完成中斷服務程序后,恢復原工作寄存器,累加器,標志位等的內容,這個過程稱恢復現場;最后執(zhí)行中斷返回指令,自動彈出斷電到PC,返回主程序,繼續(xù)執(zhí)行被中斷的程序。
下面我們看看8051中斷系統(tǒng)結構及中斷控制:
8051單片機有五個中斷請求源,四個用于中斷控制的寄存器IE.IP.TCON和SCON,用于控制中斷的類型,中斷允許,中斷起停和各種中斷源的優(yōu)先級別。
五個中斷源有兩個優(yōu)先級,每個中斷源可以編程為高優(yōu)先級或低優(yōu)先級中斷,可以實現二級中斷服務程序嵌套。8051的中斷源包括:INT0,INT1引腳輸入的外部中斷源;三個內部的中斷源,即定時器T0的溢出中斷源,定時器T1的溢出中斷源和串行口的發(fā)送/接收中斷源。
從INT0,INT1引腳輸入的兩個外部中斷源和它們的觸發(fā)方式控制位鎖存在特殊功能寄存器TCON的低四位,其格式如下:
IE1,即TCON.3:外部中斷INT1請求標志位。當CPU檢測到在INT1引腳上出現的外部中斷信號時,由硬件置位IE1=1,請求中斷。CPU執(zhí)行中斷服務程序后,IE1位被硬件自動清0.
IT1,即TCON.2:外部中斷INT1請求類型,觸發(fā)方式控制位,由軟件來置1或清0,以控制外部中斷1的觸發(fā)類型。
IT1=0,外部中斷1被設置為電平觸發(fā)方式,當引腳INT1輸入低電平時,置位IE1,申請中斷。CPU在每個機器周期的S5P2期間采樣INT1的輸入電平,當采樣到低電平時,置IE1=1。采用電平觸發(fā)方式時,輸入到引腳INT1的外部中斷源必須保持電平有效,直到該直到程序被CPU響應。同時,在該中斷服務程序執(zhí)行完之前,外部中斷源有效電平必須被撤銷,否則將產生,另一次中斷。
IT1=1,外部中斷1被設置為邊緣觸發(fā)方式,CPU在每個機器周期采樣引腳INT1的電平。如果相繼的兩次采樣中,一個周期采樣到引腳INT1為高電平,接著下一個周期采樣到引腳INT1為低電平,INE1由硬件自動清0.因為每個機器周期采樣一次外部中斷輸入電平,外部中斷源輸入的高電平和低電平時間必須保持12個振蕩周期以上,才能保證CPU檢測到負跳變信號,即下降沿。
IEO,即TCON.1:外部中斷請求標志位。IE0=1時,外部中斷0向CPU請求中斷,當CPU響應外部中斷后,IE0由硬件清0。
ITO,即TCON.0:外部中斷0觸發(fā)方式控制位。IT0=0,外部中斷0被設置為邊沿觸發(fā)方式。IT0=1時,外部中斷0被設置為邊電平發(fā)方式。其功能和IT1類似。
中斷控制:除特殊功能寄存器TCON和SCON中某些位與中斷有關外,還有兩個特殊功能寄存器IE和IP專門用于中斷控制。
中斷允許IE:
8051單片機中,特殊功能寄存器IE位中斷允許寄存器,控制CPU對中斷源總的允許或禁止以及每個中斷源是否允許中斷。其格式為:
EA:中斷總允許位。EA=1,CPU允許中斷;EA=0,CPU禁止所有的中斷請求。
ES:串行中斷允許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。
EX1:T0溢出中斷允許位。ET0=1,允許T0中斷;ET0=0,禁止T0中斷。
EX0:外部中斷允許位。EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。
8051系統(tǒng)復位后,IE中各位均被清0,即禁止所有中斷。
中斷優(yōu)先級設定寄存器IP。8051單片機具有兩個中斷優(yōu)先級,每個中斷源可編程為高優(yōu)先級中斷或低優(yōu)先級中斷,并可實現二級中斷嵌套。高優(yōu)先級中斷源可中斷正在執(zhí)行的低優(yōu)先級中斷服務程序。
同級或低優(yōu)先級的中斷源不能中斷正在執(zhí)行的中斷程序。為此,在8051中斷系統(tǒng)中,內部有兩個優(yōu)先級狀態(tài)觸發(fā)器,它們分別指示出CPU是否在執(zhí)行高優(yōu)先級或低優(yōu)先級中斷服務程序,從而分別屏蔽所有的中斷申請和同一級的其他中斷源申請。
特殊功能寄存器IP為中斷優(yōu)先級寄存器。
各中斷源優(yōu)先級的控制位,用戶可用軟件設定。其格式如下:
PS:串行中斷優(yōu)先控制位。PS=1,設定串行口為高優(yōu)先級中斷;PS=0,為低優(yōu)先級。
PT1:T1中斷優(yōu)先控制位。PT1=1,設定定時器T1為高優(yōu)先級中斷;PT=0,為低優(yōu)先級。
TX1:外部中斷1中斷優(yōu)先級別控制位。PX1=1設定外部中斷1為高優(yōu)先級中斷;PC1=0,為低優(yōu)先級。
PT1:T1中斷優(yōu)先控制位。PT1=1,設定定時器T1為高優(yōu)先級中斷;PT1=0,為低優(yōu)先級。
PT0:T0中斷優(yōu)先控制位。PT1=1,設定定時器T0為高優(yōu)先級中斷;PT0=0,為低優(yōu)先級。
PX0:外部中斷中斷優(yōu)先控制位。PX0=1,設定INT1為高優(yōu)先級。PX0=0,為低優(yōu)先級。
8051復位后,IP低五位全部清0,將所有中斷源設置為低優(yōu)級中斷。
如果幾個同優(yōu)先級的中斷源同時向CPU申請中斷,哪一個申請得到服務,取決于它們在CPU內部動登記排隊的序號。CPU通過內部硬件查詢登記號,按自然優(yōu)先級決定優(yōu)先響應哪個中斷請求。自然優(yōu)先級按從高到低的順序依次為:外中斷0,定時器0,外中斷1,定時器1,串行中斷。