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