天天看點

【STC51單片機自學筆記】——[中斷系統]1.微機的輸入輸出方式

1.微機的輸入輸出方式

CPU與外設交換資訊方式有以下幾種:

(1).程式控制方式    (2).中斷方式    (3).直接存儲器存取DMA方式

    (1)程式控制方式又分為:無條件傳送、條件傳送

        無條件傳送主要針對簡單外設進行簡單操作。優點是程式不必檢查外設的狀态,就可以進行輸入輸出。缺點是CPU與外設工作不同步時,傳輸資料不可靠,僅适用于慢速裝置。

        條件傳送是CPU在傳送資料之前,先執行一條輸入指令,讀取外設狀态口中的内容,了解外設目前狀态,判斷其是否準備好資料傳輸。如果準備好,就傳輸資料,如果沒有,繼續查詢等待,直到準備好為止。優點是通用性好。缺點是降低CPU效率。

    程式控制方式缺點:1主機和外設隻能串行工作2各個外設隻能進行串行的工作,主機在一段時間内隻能和一台外設交換資料。

    (2)引入中斷目的:為了使CPU和外設同時并行工作,提高系統效率,特備是發揮CPU高速運算能力,引入中斷概念。

        中斷傳送方式:可以實作外設和CPU并行工作,大大提高CPU使用率。缺點:外設的啟動、控制仍需要由CPU完成,這些操作和資料傳送沒有直接的關系,花費了CPU的不少時間,造成資料傳輸率的降低。為此又提出了外設和存儲器之間直接傳送資料的方式,即所謂的DMA。

    (3)DMA:适用于在存儲器和外設之間進行大規模資料傳送的方式。傳送過程不需要CPU的參與。當進行DMA傳送時,CPU隻需要對DMAC進行初始化後,讓出總線。外設和存儲器之間的傳送過程由DMAC進行控制,直到傳送結束為止。

2.中斷概念

    當CPU正在處理某件事情的時候,外部或者内部發生的某一事件請求CPU迅速去處理,于是CPU暫時中斷目前工作,轉去處理所發生的事件,處理完該事件後,再傳回到原來被中斷的地方繼續原來的工作,這樣的過程稱為中斷。

    引起CPU中斷的内部或外部事件就是中斷源。中斷源向CPU發起的處理請求叫中斷請求或中斷申請。CPU暫時中止正在處理的事情,轉去處理突發事件的過程,稱為CPU的中斷響應過程。實作中斷功能的部件稱為中斷系統。CPU響應中斷後,進行中斷事件的程式稱中斷服務程式。在CPU暫時中止執行的程式,轉去執行中斷服務程式前的PC值即為斷點位址。CPU執行完中斷服務程式後回到斷點的過程稱為中斷傳回。

    引入中斷後,主要功能有:

        1)  CPU與外設同步工作

        2)  實時處理

        3)  故障處理

3.MCS-51中斷結構

    (1)      結構框圖

【STC51單片機自學筆記】——[中斷系統]1.微機的輸入輸出方式

    (2)    MCS-51的中斷源

6個中斷源:“INT0’(Pin3.2)”、“INT1’(Pin3.3)”、片内定時器/計數器“0”、“1”、“2”的溢出中斷請求、“片内串行口發送/接收的中斷請求”。

  (3)  寄存器

        ①定時器0/1+外部中斷控制寄存器TCON:控制定時器T0/T1的寄存器

            功能:控制其啟動/停止,鎖存T0/T1溢出中斷标志和兩個外部中斷源的中斷标志。

            IT0/IT1(中斷觸發方式控制位) =0時外部中斷為低電平觸發方式;IT0/IT1 =1時外部中斷為下降沿觸發方式。

            IE0/IE1(中斷請求标志位):觸發時相應的變為高電平;IE0/IE1:非觸發時為低電平。

            TF0/TF1(定時器/計數器0/1溢出标志位):定時器/計數器計滿時,由硬體使它置位,如中斷允許則觸發中斷,之後由内部硬體電路自動清零。

            TR0/TR1(定時器/計數器0/1啟動控制位):功能如名。

        ②串行口控制寄存器SCON:

            TI(串行口發送中斷标志位):TI=1,通知CPU傳送結束。

            RI(串行口接收中斷标志位):RI=1,通知CPU取資料。

            無論哪個标志位置“1”,都請求串行口中斷。串行口中斷響應後,不能由硬體自動清零,必須由軟體對TI或RI清零。

        ③中斷允許寄存器IE:

            EA(中斷總允許位):=1時開放中斷,=0時屏蔽所有中斷。

            ET0/ET1/ET2(定時器/計數器0/1/2的溢出中斷允許位):=1時相應計數器/定時器允許中斷,=0時禁止中斷。

            EX0/EX1(外部中斷INT0/INT1中斷允許位):=1時禁止中斷,=0時相應允許中斷。

            ES(序列槽中斷允許位):=1時允許串行口中斷,=0時禁止中斷。

        ④中斷優先級控制寄存器IP:每個中斷源由兩級優先級控制:高與低。

            一般寄存器相應位=0時優先級為低,反之=1時為高。

            同級别優先級也有預設優先順序,由高到低依次為:外部中斷0、定時器/計數器0中斷、外部中斷1、定時器/計數器1中斷、串行口中斷、定時器/計數器2中斷。

        控制原則:

            a.    正在進行的中斷過程不能被新的同級或低優先級中斷請求所中斷,一直到該中斷服務程式結束,傳回主程式且執行了主程式中的一條指令後,CPU才響應新的中斷請求。

            b.    低優先級中斷請求不能打斷高優先級别的中斷服務;反之,則可以,進而實作兩級中斷嵌套。

            c.    CPU同時接收到幾個中斷請求時,首先響應優先級别最高的中斷請求。如果是同級中斷,則按照預設優先順序确定哪個中斷請求被響應。

4.中斷響應及處理過程

    中斷處理過程一般分為三個階段:中斷響應、中斷處理、中斷傳回。

    函數與中斷函數有着本質的差別:

        ●  函數的通路是在主程式中設定好的,中斷是随機的

        ●  函數和中斷程式都是以函數形式存在,中斷的調用看不到調用語句,是自動調用的,彙編中函數調用是用LCALL指令

        ● 中斷程式是在允許中斷情況下,是在設定中斷允許語句後随機調用的

        ●  中斷是可以屏蔽的,函數一旦調用就要被執行

        ●  彙編語言中,中斷服務程式系統配置設定固有的入口位址

        ●  彙編指令中,函數的傳回是RET指令,而中斷服務的傳回是RETI指令,兩者都能正确的傳回原程式的斷點處繼續往下執行,但兩者的職能略有不同

    中斷響應的條件:

        ●  中斷源由中斷請求

        ●  中斷總允許位EA=1

        ●  發出中斷請求的中斷源的中斷允許控制位為1

(這三條,是必要條件。在此基礎上,如果有下列任意一種情況存在,中斷響應都會受到阻斷):

        ●  CPU正在執行一個同級别或者高優先級的中斷服務程式

        ●  正在執行的指令尚未執行完

        ●  正在執行中斷傳回指令RETI或者對寄存器IE、IP進行讀/寫指令,CPU在執行完上述指令後,要再執行一條指令,才能響應中斷請求

    注意:除定時器/計數器2以及串行口RI/TI的請求标志位外,其餘中斷請求标志位在調用中斷服務子程式後,會被硬體自動的複位。而定時器/計數器2以及串行口RI/TI需要在中斷服務子程式中安排清除标志位指令,否則會産生二次中斷情況。

    中斷響應時間一般在3~8個機器周期,對于實時性要求高的系統,該誤差要加以考慮。

    C語言中斷服務程式結構:

Voidint0_int(void) interrupt n    //n為中斷号
{
 put your codes
}
           

    中斷服務程式初始化步驟:

    主程式中:

    a.       根據需要确定各中斷源的優先級别;

    b.       根據需要确定外部中斷的觸發方式,設定定時器控制寄存器TCON中相應的IT0/IT1;

    c.       設定總中斷控制位EA=1,設定中斷源所對應的終端允許控制位。

    中斷服務程式中:

    a.        進行中斷請求;

    b.        注意安排定時器/計數器2以及串行口RI/TI清除标志位指令。

繼續閱讀