天天看點

51單片機之中斷系統這次是關于中斷的專題啦!

這次是關于中斷的專題啦!

中斷源:是指引起中斷的原因或者裝置。

MCS-51單片機設定了5個中斷源,其中内部有3個中斷源,包括定時/計數器T0、T1和片内序列槽,外部有兩個中斷請求輸入,當系統産生中斷時,5個中斷源的中斷請求标志分别由特殊功能寄存器TCON和SCON的相應位來鎖存。

  • 定時計數器控制器TCON

既能控制定時計數器T0、T1,又能鎖存外部中斷請求标志和定時計數器T0、T1的溢出中斷标志,具有雙重功能,相關位的定義如下:

51單片機之中斷系統這次是關于中斷的專題啦!

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低兩位又能鎖存其發送中斷和接收中斷,具有雙重功能,其相關位的定義如下:

51單片機之中斷系統這次是關于中斷的專題啦!

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:設定允許的中斷源,相關位如下:

51單片機之中斷系統這次是關于中斷的專題啦!

EA: CPU總中斷允許位,為0時,禁止所有中斷;為1時允許中斷。

*ET2:MCS-52系列單片機中T2中斷允許位,為0禁止中斷;

ES:串行口中斷允許位,為0時,禁止串行口中斷;

ET1:定時/計數器T1中斷允許位,為0時,禁止中斷;

EX1: 外部中斷1中斷允許位,為0時,禁止中斷;

ET0: 定時/計數器T0中斷允許位,為0時,禁止中斷;

EX0:外部中斷0中斷允許位,為0時,禁止中斷。

  • 中斷優先級寄存器IP,

用于控制不同中斷源的優先級的高低,相關位如下:

51單片機之中斷系統這次是關于中斷的專題啦!

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);
}