新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機在片設備與中斷(3)

        51單片機在片設備與中斷(3)

        作者: 時間:2016-11-26 來源:網絡 收藏
        中斷控制要點

        1、當CPU正在處理某項事務的時候,如果外界或內部發生了更緊急的事件,要求CPU暫停正在處理的工作轉而去處理這個緊急事件,待處理完以后再回到原來被中斷的地方,繼續執行原來被中斷了的程序,這樣的過程稱為中斷。

        本文引用地址:http://www.104case.com/article/201611/321805.htm

        (1)能夠實現中斷處理功能的部件稱為中斷系統

        (2)向CPU提出中斷請求的源稱為中斷源,51系列單片機共有5個中斷源。

        (3)中斷源向CPU提出的處理請求,稱為中斷請求或中斷申請。

        (4)CPU同意處理中斷請求稱為中斷響應,處理中斷請求的程序稱為中斷服務子程序。

        (5)當CPU暫時終止正在執行的程序,轉去執行中斷服務子程序時,除了硬件自動把斷點地址(16位程序計數器PC的值)壓入堆棧之外,用戶應注意保護有關的工作寄存器、累加器、標志位等信息,這稱為保護現場;在完成中斷服務子程序后,恢復有關的工作寄存器、累加器、標志位的內容,稱為恢復現場;最后執行中斷返回指令RETI,從堆棧中自動彈出斷點地址到PC,繼續執行被中斷的程序,稱為中斷返回。

        2、基本51單片機的中斷系統有5個中斷源,可任意分為2個中斷優先級(高優先級和低優先級),可實現2級中斷服務程序嵌套。

        (1)中斷優先級寄存器IP的字節地址為B8H,可以位尋址。IP相應的位為0則其對應中斷的優先級為低,否則優先級為高。51單片機復位以后IP為0,各個中斷源均為低優先級中斷。可用位操作指令或字節操作指令更改IP的內容,以改變各中斷源的中斷優先級。

        (2)中斷允許寄存器IE的字節地址為A8H,可以位尋址。51單片機的CPU對中斷源的開放或屏蔽,是由片內的中斷允許寄存器IE控制的,51單片機復位以后,IE被清0,由用戶程序置“1”或清“0”IE相應的位,實現允許或禁止相應中斷源的中斷申請。若允許某一個中斷源中斷,除了開放中斷總的允許位EA外,必須同時使CPU開放該中斷源的中斷允許位。

        (3)51單片機有兩個中斷優先級,對于每一個中斷請求源可編程為高優先級中斷或低優先級中斷。一個正在執行的低優先級中斷程序能被高優先級的中斷源所中斷,但不能被另一個低優先級的中斷源所中斷。若CPU正在執行高優先級的中斷,則不能被任何中斷源所中斷,一直執行到中斷服務結束,遇到返回指令RETI。每次從中斷服務程序返回主程序后都必須再執行一條指令后才能響應新的中斷請求。中斷嵌套的兩條基本規則是:①低優先級可被高優先級中斷,而高優先級中斷源不能被任何中斷源所中斷;②任何一種中斷(不管是高級還是低級),一旦得到響應,不會再被它的同級中斷所中斷。

        (4)當幾個同優先級的中斷同時申請中斷時,響應哪一個中斷源將取決于由輔助優先級決定的一個內部查詢順序,具體就是中斷服務程序的入口地址越靠前(地址值越小)則輔助優先級越高。

        3、如果總的中斷允許開放(即EA=1)則CPU在每個機器周期的S5P2時刻采樣中斷標志,并在下一個機器周期對采樣到的中斷進行查詢。如果前一個機器周期的S5P2有中斷標志,則在查詢周期內便會查詢到,并按優先級高低進行中斷處理,如果響應中斷,中斷系統將控制程序轉入相應的中斷服務子程序。CPU中斷響應是有條件的,并不是查詢到的所有中斷請求都能被立即響應,當遇到下列三種情況之一時,中斷響應被封鎖:

        (1)CPU正在處理相同的或更高優先級的中斷;

        (2)現行的機器周期不是所執行指令的最后一個機器周期;

        (3)正在執行的指令是RETI或是訪問IE或IP的指令(CPU在執行RETI或訪問IE、IP的指令后,至少需要再執行一條指令才會響應新的中斷請求)。

        4、TF0和TF1分別為定時/計數器0和定時/計數器1的中斷請求標志位,在已經開放T0/T1中斷允許且已被啟動的前提下,T0/T1加1計滿溢出時 TF0/TF1標志位自動置“1”;CPU 檢測到TCON中TF0/TF1變“1”后,將自動保存當前PC值到堆棧,并將相應中斷服務程序入口地址000BH/001BH賦值給PC,從而在下一條指令開始執行中斷服務;TF0/TF1標志位由硬件自動清“0”,以便進行下次中斷申請。

        5、IE0和IE1分別為外部中斷0和外部中斷1中斷申請標志位。以外部中斷0為例,當IT0為0即選擇電平觸發方式時,每個機器周期的S5P2采樣-INT0,若-INT0為低電平,則IE0置“ 1”,否則IE0清“0”;當IT0為1即選擇邊沿觸發方式時,當前一個機器周期采樣到-INT0輸入為高,而本機器周期采樣到該引腳為低電平時,則置“1”IE0;IE0/IE1為1表示外部中斷0/1正在向CPU申請中斷。當CPU響應中斷,轉向中斷服務子程序(入口地址0003H/0013H)時,由硬件自動清“0”IE0/IE1。

        6、TI和RI分別是串行口的發送中斷和接收中斷的中斷請求標志。

        (1)在串行口以方式0發送時,每當發送完8位數據,由硬件置“1”TI;若以方式1、方式2或方式3發送時,在發送停止位的開始時置“1”TI。TI為1表示串行口發送器正在向CPU申請中斷,而CPU響應串口發送器中斷請求,轉向執行中斷服務程序時并不清“0”TI,TI必須由用戶的中斷服務子程序清0(即中斷服務子程序中必須用CLR TI或ANL SCON,#0FDH等清“0”TI的指令)。

        (2)若串行口接收器允許接收,并以方式0工作,每當接收到第8位數據時置“1”RI;若以方式1、2、3工作,且(SM2)=0時,每當接收器接收到停止位的中間時置“1”RI,當串行口以方式2或方式3進行工作,且(SM2)=1時僅當接收到的第9位數據RB8為1后,同時還要在接收到停止位的中間位置“1”RI。RI為1表示串行口接收器正在向CPU申請中斷,而CPU響應串口接收器中斷請求,轉向執行中斷服務程序時并不清“0”RI,RI必須由用戶的中斷服務子程序清0(即中斷服務子程序中必須用CLR RI或ANL SCON,#0FEH等清“0”RI的指令)。

        (3)實際上串口發送器中斷請求和串口接收器中斷請求對應著同一個中斷服務程序入口地址0023H。在用戶的串口中斷服務子程序的開始應首先判斷TI和RI標志以決定本次中斷是由發送結束引起還是由接收完成引起以便進一步轉入相應的處理(也可能恰好即是發送結束又是接收完成)。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 永新县| 玉环县| 南宁市| 林口县| 五寨县| 临湘市| 南汇区| 襄汾县| 沙坪坝区| 彰武县| 瓦房店市| 平昌县| 弥勒县| 昌江| 伊吾县| 通化县| 扎鲁特旗| 霸州市| 长海县| 锡林郭勒盟| 周口市| 平江县| 土默特左旗| 德州市| 右玉县| 南和县| 巴彦淖尔市| 宣城市| 六安市| 化隆| 佛冈县| 庄河市| 拉孜县| 淳安县| 石棉县| 富蕴县| 仙居县| 株洲县| 栾城县| 武安市| 内丘县|