【藍橋杯單片機07】徹底理解51單片機的中斷系統


【藍橋杯單片機07】徹底理解51單片機的中斷系統
廣東職業技術學院 歐浩源

    在接下來的教程中,將會介紹定時器、串口通信等外設的基本使用,而這些外設的使用都要涉及中斷,而且中斷是單片機或嵌入式開發中一個相當重要的概念。不能掌握中斷系統,就無法靈活應用這些外設。

1、什么是中斷?
    你正在追電視劇《神雕俠侶》,正看得入迷的時候,電話響了,你暫停電視劇,去接電話,在接電話的過程中,門鈴又響了,你暫時放下電話,去把門打開。如果追電視劇是在執行主程序,那么電話就是中斷源,電話鈴響了就是中斷請求,暫停電視就是現場保護,接電話就是中斷響應,門鈴響了是更高一級的中斷請求,去把門打開,那就是中斷嵌套。開完門回來接着聊電話,那是中斷返回,接完電話把電視劇暫停打開就是現場恢復
    內核與外設之間的主要交互方式有兩種:輪詢中斷。輪詢的方式貌似公平,但實際工作效率很低,且不能及時響應緊急事件;中斷系統使得內核具備了應對突發事件的能力
    中斷有個特點,就是你不知道中斷什么時候發生。因此,每個中斷都需要有一個中斷入口地址,也成為中斷向量。這樣,不管中斷在什么時候發生,它都有一個確定的程序執行起始點。中斷響應之后,執行的那段程序,我們稱作中斷服務函數,也就是這個函數專門是為該中斷服務的。

2、關於51單片機的中斷系統
    一般來說,51單片機有5個中斷源(忽略定時/計數器2),分2個優先級,這個5個中斷源按照自然優先級從高到低依次為:
    外部中斷0INT0
    定時/計數器0TF0
    外部中斷1INT1
    定時/計數器1TF1
    串口中斷RI/TI
    下面一圖將充分說明51單片機的中斷系統結構:

    每個中斷源都對應着一個固定的入口地址,也就是中斷向量,它們依次是:
    0  0x0003: INT0
    1  0x000B: TF0
    2  0x0013: INT1
    3  0x001B: TF1
    4  0x0023: RI/TI
    也就是說,不管主程序執行到什么地方,只要外部中斷1產生請求,內核要響應該中斷,就會到0x0013這個地址去執行代碼。如果你是在使用匯編語言進行程序開發的時候,你需要記住每個中斷源對應的地址;如果你使用的是C語言,你只需要記住中斷源的順序就可以了,也就是最左邊的中斷號

3、中斷相關的寄存器
    中斷相關的寄存器有4個,每個寄存器都是可以位尋址的,這該編程帶來了方便。

    其中2個為控制寄存器:IE寄存器與IP寄存器:

    另外2個為中斷請求標志:TCON寄存器與SCON寄存器:

4、關於中斷服務函數程序的編寫
    一般情況下,中斷的處理函數有兩個,其一為中斷初始化函數,其二為中斷服務函數。初始化函數就是一個普通的函數,而中斷服務函數卻有特殊的格式要求:
    <1> 中斷函數沒有返回值,也不能帶參數。
    <2> 函數名后面要跟一個關鍵字interrupt,說明這是一個中斷服務函數。
    <3> 在關鍵字interrupt后面要跟上中斷號,說明這個中斷服務函數是為那個中斷服務的。

    中斷服務函數的格式為:
    void   函數名()  interrupt  中斷號
    {

            ----函數體----

    }
    我們要利用定時器0來進行間隔定時,中斷程序架構我們C語言可以這樣寫:

5、結束語
    中斷系統很重要,務必徹底理解,熟練掌握,對於每一個款微處理器都是這樣!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM