這次是關于中斷的專題啦!
中斷源:是指引起中斷的原因或者裝置。
MCS-51單片機設定了5個中斷源,其中内部有3個中斷源,包括定時/計數器T0、T1和片内序列槽,外部有兩個中斷請求輸入,當系統産生中斷時,5個中斷源的中斷請求标志分别由特殊功能寄存器TCON和SCON的相應位來鎖存。
-
定時計數器控制器TCON
既能控制定時計數器T0、T1,又能鎖存外部中斷請求标志和定時計數器T0、T1的溢出中斷标志,具有雙重功能,相關位的定義如下:
TF0:定時計數器T0溢出标志。
TF1:定時計數器T1溢出标志。
定時計數器T0、T1啟動後,當計數産生溢出時,硬體自動置位TF0、TF1标志,并請求中斷,CPU響應中斷後,這兩個标志位既可通過軟體清除,也可通過硬體自動清除。
IE1:外部中斷1請求标志。
IE0:外部中斷0請求标志。
由CPU檢測外部中斷請求,當輸入信号有效觸發後,硬體自動置位IE0,IE1标志,并請求中斷,CPU響應中斷後,這兩個标志位被硬體自動清除。
IT0:外部中斷0觸發方式選擇位。
IT1:外部中斷1觸發方式選擇位。
可用程式控制為0或1,當該位為0,外部中斷為電平觸發方式,即低電平有效;當該位為1,外部中斷為邊沿觸發方式,即下降沿有效。
-
串行口控制寄存器SCON
既是串行口控制寄存器,當串行口發生中斷請求時,SCON低兩位又能鎖存其發送中斷和接收中斷,具有雙重功能,其相關位的定義如下:
T1:串行口發送中斷标志。
當CPU向串行口的發送資料緩沖器SBUF寫入一個資料或字元時,發送器就開始發送,當發完一幀資料後,硬體自動置位TI标志,表示序列槽正在向CPU發送中斷請求,請求發送下一幀資料,該标志必須由軟體進行清0.
RI:串行口接收中斷标志
若串行口接收器允許接收,當接收器接收到一幀資料後,硬體自動置位RI标志,表示序列槽接收器正在向CPU發送中斷請求,使CPU讀取接收資料緩沖器中的資料,該标志必須由軟體進行清0。
中斷系統:單片機中用于管理各類中斷的邏輯。
中斷的優點:
1、分時操作:中斷系統解決了CPU的快速運作與慢速外設、定時計數器及序列槽之間的“定時”沖突,這樣CPU在運作主程式的同時可以令定時器、序列槽及其他外設同時工作,當出現中斷後,CPU響應中斷,停止主程式的運作,轉入執行中斷服務程式,使CPU高效而有序的工作。
2、實時處理:中斷系統使CPU能及時處理實時控制系統中的許多随機參數和資訊,它們能在任何時候向CPU發出中斷請求,要求轉向中斷程式,CPU會對變化的現場資訊進行及時響應,使CPU具有随機應變和實時處理能力。
3、故障處理:中斷系統還可以使CPU處理系統中出現的故障,進而不必進行人工幹預或停機,提高了系統的穩定性和可靠性。
-
中斷控制
中斷系統的功能主要包括以下幾點:
1、中斷的打開與關閉:
2、中斷響應(有一個中斷優先級的問題)
中斷優先級:
簡單點說就是當同時來了多個中斷的時候,CPU必須判斷哪些中斷的優先級比較高,因為一些中斷會導緻系統功能無法實作甚至故障,自然優先級就高,CPU必須先處理。
是以我們需要對特殊功能寄存器IE程式設計,用來選擇允許或禁止哪些中斷,然後可以通過中斷優先級寄存器IP進行程式設計,定義被允許中斷的優先級。
-
IE:設定允許的中斷源,相關位如下:
EA: CPU總中斷允許位,為0時,禁止所有中斷;為1時允許中斷。
*ET2:MCS-52系列單片機中T2中斷允許位,為0禁止中斷;
ES:串行口中斷允許位,為0時,禁止串行口中斷;
ET1:定時/計數器T1中斷允許位,為0時,禁止中斷;
EX1: 外部中斷1中斷允許位,為0時,禁止中斷;
ET0: 定時/計數器T0中斷允許位,為0時,禁止中斷;
EX0:外部中斷0中斷允許位,為0時,禁止中斷。
-
中斷優先級寄存器IP,
用于控制不同中斷源的優先級的高低,相關位如下:
PT2:定時/計數器T2優先級設定,為0時,T2設定為低優先級;為1時,T2設定為高優先級。
PS:串行口優先級設定,為0時,串行口設定為低優先級;為1時,串行口設定為高優先;
PT1:定時/計數器T1優先級設定,為0時,T1設定為低優先級
PX1:外部中斷1優先級設定,為0時,外部中斷1設定為低優先級;
PT0:定時/計數器T0優先級設定,為0時,設為低優先級;
PX0:外部中斷0優先級設定,為0時,設為低優先級。
-
CPU在響應中斷請求時遵循兩個原則:
1、對于一個正在執行的低級中斷服務程式,可以被進階中斷請求所打斷,但不能被同等優先級的中斷請求所中斷。
2、一個正在執行的進階中斷服務程式,不能被任何中斷請求所中斷,隻有在執行完此進階中斷服務程式後,傳回主程式再執行一條指令才能響應新的中斷請求。
MCS-51單片機中隻設定有兩個優先級,必然會出現幾個中斷源處于同等的優先級狀态,當CPU同時接收到幾個同等優先級中斷請求時,按照内部硬體查詢邏輯,按照自然優先順序來查詢,優先順序由高到低為:外部中斷0->定時/計數器0->外部中斷1->定時計數器1->串行口->定時計數器2.
-
中斷響應:
51單片機在每個機器周期都順序查詢每一個中斷源,若接收到中斷請求,将在緊跟着的下一個機器周期執行該中斷,但是在遇到一些情況時中斷會暫時受阻。
-
最後扯扯51單片機的外部中斷源:
1、外部中斷源端口引腳:外部中斷0,端口引腳為12(P3^2),引腳符号為INTO^
外部中斷1:端口引腳13(P3^3),引腳符号為INT1^
2、外部中斷請求方式:負邊沿觸發,使控制位IT0=1即可;
低電平觸發,使控制位IT1=0即可
-
51單片機外部中斷源應用步驟
1、設定外部中斷請求允許位,設定IE寄存器中的EA、EX1、EX0;
2、選擇合适的外部中斷請求觸發方式,設定TCON寄存器中的IT1、IT0;
3、編寫中斷服務函數,函數格式為:
傳回值 函數名([參數]) interrupt n [using m]
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit key = P3^2;
sbit led = P1^0;
void delay(u16 num)
{
u16 x ,y;
for(x=num; x>0; --x)
for(y=110; y>0; --y)
{
; // 延時1ms
}
}
int main(void)
{
TCON |= 0x01; //設定外部中斷0觸發方式為邊沿觸發方式
IE = 0X81; //開放總中斷并且外部中斷0允許中斷
while(1)
{
;
}
}
void ext_int0(void) interrupt 0
{
delay(10);
if(key == 0)
{
led =~led;
}
while(!key);
}