現代的計算機都具有實時處理功能,當外界有突發事件時,cpu能夠及時的做出處理,這就是靠中斷來實現的。
當CPU正在處理某一命令時,這時外部發生了某一事件(如電平的變化,或者定時器/計數器溢出時)請求CPU去處理該事件,於是CPU停止處理當前的事件,並保存當前停止時的地址,轉去處理所發生的事件,處理完畢後,CPU返回原先保存的停止時的地址,繼續處理原先的事件,這樣的過程被稱爲中斷。
上圖即爲中斷過程示意圖,產生中斷的請求源被稱爲中斷源,中斷源向CPU提出的處理請求被稱爲中斷請求或中斷申請。CPU暫時中止當前的事件,轉去處理中斷請求所對應的事件稱爲CPU的中斷響應過程,對事件的整個處理過程稱爲中斷服務(中斷處理)。處理完畢後,返回到原先被中止的地方稱爲中斷返回。
因爲有中斷請求時,CPU當前執行的的程序是隨機的,所以CPU在執行中斷服務程序之前,除了硬件會自動把斷點地址壓入堆棧外,還要注意保護現場數據(相關的工作寄存器,累加器,標誌位等信息),以便於在執行完中斷服務程序之後恢復原先數據(稱爲恢復現場)。
89c51單片機的中斷系統如圖所示
89c51有5箇中斷源:
INT0 :外部中斷0請求,低電平有效。
INT1 : 外部中斷1請求,低電平有效。
T0 : 定時/計數器0溢出中斷請求。
T1 :定時/計數器1溢出中斷請求。
TXD/RXD : 串口中斷請求,當串口發送/接受完一幀數據時,便請求中斷。
其中 INT0/1是兩個外部中斷,T0/1,TXD/RXD是3個內部中斷
中斷控制
89c51有以下4個特殊功能寄存器
定時器控制寄存器TCON(用6位);
串行口控制寄存器SCON(用2位);
中斷允許寄存器IE;
中斷優先級寄存器IP.
其中,TCON和SCON只有一部分位用於中斷控制。通過對以上各種特殊功能寄存器的各位進行置位或復位操作,即可實現各種中斷控制的功能。
1、TCON中的中斷標誌位
TF1 : 定時/計數器1的中斷請求標誌位,當定時/計數器溢出時,該位自動置1,並向CPU發出中斷請求,當CPU響應中斷時,硬件會自動對該位清0。當然,你也可以用“位操作指令”對TF0進行置“1”或清“0”操作。
TF0 :定時/計數器0的中斷請求標誌位,與TF1原理相同。
IE1 : 外部中斷1的中斷請求標誌位,當檢測到外部中斷引腳上存在有效的中斷請求信號時,由硬件自動使IE1置1,當CPU響應該中斷請求時,由硬件自動使IE1清0。
IT1 : 外部中斷1的中斷觸發方式控制位
IT1 = 0 時,外部中斷1爲電平觸發方式。CPU在每一個機器週期採樣外部中斷1請求引腳的輸入電平,若外部中斷1請求引腳爲低電平,則使IE1位置1,若爲高電平,則IE1清0。
IT1 = 1 時,外部中斷1爲邊沿觸發方式。CPU如果在兩個連續的機器週期採樣過程中,一個爲高電平。接着下一個爲低電平,那麼IE1則置1,直到CPU響應該中斷時,才由硬件使IE1位清0。
IE0 : 外部中斷0的中斷請求標誌位,與IE1原理相同。
IT0 : 外部中斷0的中斷觸發方式控制位,與IT1原理相同。
2、串行控制寄存器SCON
TI : 串行口發送中斷請求標誌位。CPU將數據寫入SBUF時,就啓動發送,每發送完一幀串行數據後,硬件自動把TI位置1,但CPU響應中斷時,並不清除TI,必須在中斷服務程序中由軟件對TI清0。
RI :串行口接收中斷請求標誌位,在串口允許接收時,每接收完一個串行幀,硬件自動對RI置1.同樣CPU響應中斷時不會清除RI位,必須用軟件對其清0。
3、中斷允許控制寄存器IE
89c51對中斷源的開放和關閉由中斷允許寄存器控制,格式如下
中斷允許寄存器IE對中斷的開放和關閉實現兩級控制,所謂的兩級控制就是有一個總的開關中斷控制位EA,當EA=0時,屏蔽所有的中斷申請,及任何中斷申請都不接受,當EA=1時,CPU開放中斷,但5箇中斷源還有由其所對應的控制位的狀態進行中斷的允許控制。
EA : 中斷允許總控制位。 EA = 0 時,屏蔽所有的中斷請求,EA = 1時,CPU開放中斷,對於中斷源的請求是否允許還要取決於各中斷源的中斷允許控制位的狀態。
ES : 串行口中斷允許控制位。ES = 0時,禁止串行口中斷,ES = 1時,允許串行口中斷。
ET1 ;定時/計數器1的溢出中斷允許控制位。ET1 = 0時,禁止T1中斷,ET1 = 1時,允許T1中斷。
EX1 : 外部中斷1中斷允許控制位。EX1 = 0時,禁止外部中斷1中斷,EX1 = 1時,允許外部中斷1中斷。
ET0 : 定時/計數器0的溢出中斷允許控制位。ET0 = 0時,禁止T0中斷,ET0 = 1時,允許T0中斷。
EX0 : 外部中斷0中斷允許控制位。EX0 = 0時,禁止外部中斷0中斷,EX0 = 1時,允許外部中斷0中斷。
4、中斷優先級控制寄存器
89c51有兩個中斷優先級,每一箇中斷請求源均可編程爲高優先級中斷和低優先級中斷。
PS : 串行口中斷優先級控制位,置1時,爲高優先級,置0時,爲低優先級。
PT1 : 定時/計數器1中斷優先級控制位,控制方法同上。
PX1 : 外部中斷1中斷優先級控制位,控制方法同上。
PT0 : 定時/計數器0中斷優先級控制位,控制方法同上。
PX0 : 外部中斷0中斷優先級控制位,控制方法同上。
當同時接收到幾個同一優先級的中斷請求時,響應哪個中斷源則取決於內部硬件的查詢順序,如下圖所示
當CPU正在處理一箇中斷請求時,又出現了一個優先級比它高的中斷請求時,這時CPU會暫時中止對低優先級中斷源的處理,保護當前斷點,轉去響應優先級更高的中斷請求。
89c51中斷優先控制的基本原則:
高優先級的中斷可以中斷正在響應的低優先級的中斷,反之則不能
同優先級中斷不能互相中斷
同一中斷優先級中,若有多箇中斷源同時請求中斷,則CPU先響應優先權高的中斷,後響應優先權低的中斷。