中斷控制要點1、當CPU正在處理某項事務(wù)的時候,如果外界或內(nèi)部發(fā)生了更緊急的事件,要求CPU暫停正在處理的工作轉(zhuǎn)而去處理這個緊急事件,待處理完以后再回到原來被中斷的地方,繼續(xù)執(zhí)行原來被中斷了的程序,這樣的過程稱為中斷。
本文引用地址:http://butianyuan.cn/article/201611/321805.htm(1)能夠?qū)崿F(xiàn)中斷處理功能的部件稱為中斷系統(tǒng)。
(2)向CPU提出中斷請求的源稱為中斷源,51系列單片機共有5個中斷源。
(3)中斷源向CPU提出的處理請求,稱為中斷請求或中斷申請。
(4)CPU同意處理中斷請求稱為中斷響應(yīng),處理中斷請求的程序稱為中斷服務(wù)子程序。
(5)當CPU暫時終止正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)子程序時,除了硬件自動把斷點地址(16位程序計數(shù)器PC的值)壓入堆棧之外,用戶應(yīng)注意保護有關(guān)的工作寄存器、累加器、標志位等信息,這稱為保護現(xiàn)場;在完成中斷服務(wù)子程序后,恢復(fù)有關(guān)的工作寄存器、累加器、標志位的內(nèi)容,稱為恢復(fù)現(xiàn)場;最后執(zhí)行中斷返回指令RETI,從堆棧中自動彈出斷點地址到PC,繼續(xù)執(zhí)行被中斷的程序,稱為中斷返回。
2、基本51單片機的中斷系統(tǒng)有5個中斷源,可任意分為2個中斷優(yōu)先級(高優(yōu)先級和低優(yōu)先級),可實現(xiàn)2級中斷服務(wù)程序嵌套。
(1)中斷優(yōu)先級寄存器IP的字節(jié)地址為B8H,可以位尋址。IP相應(yīng)的位為0則其對應(yīng)中斷的優(yōu)先級為低,否則優(yōu)先級為高。51單片機復(fù)位以后IP為0,各個中斷源均為低優(yōu)先級中斷??捎梦徊僮髦噶罨蜃止?jié)操作指令更改IP的內(nèi)容,以改變各中斷源的中斷優(yōu)先級。
(2)中斷允許寄存器IE的字節(jié)地址為A8H,可以位尋址。51單片機的CPU對中斷源的開放或屏蔽,是由片內(nèi)的中斷允許寄存器IE控制的,51單片機復(fù)位以后,IE被清0,由用戶程序置“1”或清“0”IE相應(yīng)的位,實現(xiàn)允許或禁止相應(yīng)中斷源的中斷申請。若允許某一個中斷源中斷,除了開放中斷總的允許位EA外,必須同時使CPU開放該中斷源的中斷允許位。
(3)51單片機有兩個中斷優(yōu)先級,對于每一個中斷請求源可編程為高優(yōu)先級中斷或低優(yōu)先級中斷。一個正在執(zhí)行的低優(yōu)先級中斷程序能被高優(yōu)先級的中斷源所中斷,但不能被另一個低優(yōu)先級的中斷源所中斷。若CPU正在執(zhí)行高優(yōu)先級的中斷,則不能被任何中斷源所中斷,一直執(zhí)行到中斷服務(wù)結(jié)束,遇到返回指令RETI。每次從中斷服務(wù)程序返回主程序后都必須再執(zhí)行一條指令后才能響應(yīng)新的中斷請求。中斷嵌套的兩條基本規(guī)則是:①低優(yōu)先級可被高優(yōu)先級中斷,而高優(yōu)先級中斷源不能被任何中斷源所中斷;②任何一種中斷(不管是高級還是低級),一旦得到響應(yīng),不會再被它的同級中斷所中斷。
(4)當幾個同優(yōu)先級的中斷同時申請中斷時,響應(yīng)哪一個中斷源將取決于由輔助優(yōu)先級決定的一個內(nèi)部查詢順序,具體就是中斷服務(wù)程序的入口地址越靠前(地址值越?。﹦t輔助優(yōu)先級越高。
3、如果總的中斷允許開放(即EA=1)則CPU在每個機器周期的S5P2時刻采樣中斷標志,并在下一個機器周期對采樣到的中斷進行查詢。如果前一個機器周期的S5P2有中斷標志,則在查詢周期內(nèi)便會查詢到,并按優(yōu)先級高低進行中斷處理,如果響應(yīng)中斷,中斷系統(tǒng)將控制程序轉(zhuǎn)入相應(yīng)的中斷服務(wù)子程序。CPU中斷響應(yīng)是有條件的,并不是查詢到的所有中斷請求都能被立即響應(yīng),當遇到下列三種情況之一時,中斷響應(yīng)被封鎖:
(1)CPU正在處理相同的或更高優(yōu)先級的中斷;
(2)現(xiàn)行的機器周期不是所執(zhí)行指令的最后一個機器周期;
(3)正在執(zhí)行的指令是RETI或是訪問IE或IP的指令(CPU在執(zhí)行RETI或訪問IE、IP的指令后,至少需要再執(zhí)行一條指令才會響應(yīng)新的中斷請求)。
4、TF0和TF1分別為定時/計數(shù)器0和定時/計數(shù)器1的中斷請求標志位,在已經(jīng)開放T0/T1中斷允許且已被啟動的前提下,T0/T1加1計滿溢出時 TF0/TF1標志位自動置“1”;CPU 檢測到TCON中TF0/TF1變“1”后,將自動保存當前PC值到堆棧,并將相應(yīng)中斷服務(wù)程序入口地址000BH/001BH賦值給PC,從而在下一條指令開始執(zhí)行中斷服務(wù);TF0/TF1標志位由硬件自動清“0”,以便進行下次中斷申請。
5、IE0和IE1分別為外部中斷0和外部中斷1中斷申請標志位。以外部中斷0為例,當IT0為0即選擇電平觸發(fā)方式時,每個機器周期的S5P2采樣-INT0,若-INT0為低電平,則IE0置“ 1”,否則IE0清“0”;當IT0為1即選擇邊沿觸發(fā)方式時,當前一個機器周期采樣到-INT0輸入為高,而本機器周期采樣到該引腳為低電平時,則置“1”IE0;IE0/IE1為1表示外部中斷0/1正在向CPU申請中斷。當CPU響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)子程序(入口地址0003H/0013H)時,由硬件自動清“0”IE0/IE1。
6、TI和RI分別是串行口的發(fā)送中斷和接收中斷的中斷請求標志。
(1)在串行口以方式0發(fā)送時,每當發(fā)送完8位數(shù)據(jù),由硬件置“1”TI;若以方式1、方式2或方式3發(fā)送時,在發(fā)送停止位的開始時置“1”TI。TI為1表示串行口發(fā)送器正在向CPU申請中斷,而CPU響應(yīng)串口發(fā)送器中斷請求,轉(zhuǎn)向執(zhí)行中斷服務(wù)程序時并不清“0”TI,TI必須由用戶的中斷服務(wù)子程序清0(即中斷服務(wù)子程序中必須用CLR TI或ANL SCON,#0FDH等清“0”TI的指令)。
(2)若串行口接收器允許接收,并以方式0工作,每當接收到第8位數(shù)據(jù)時置“1”RI;若以方式1、2、3工作,且(SM2)=0時,每當接收器接收到停止位的中間時置“1”RI,當串行口以方式2或方式3進行工作,且(SM2)=1時僅當接收到的第9位數(shù)據(jù)RB8為1后,同時還要在接收到停止位的中間位置“1”RI。RI為1表示串行口接收器正在向CPU申請中斷,而CPU響應(yīng)串口接收器中斷請求,轉(zhuǎn)向執(zhí)行中斷服務(wù)程序時并不清“0”RI,RI必須由用戶的中斷服務(wù)子程序清0(即中斷服務(wù)子程序中必須用CLR RI或ANL SCON,#0FEH等清“0”RI的指令)。
(3)實際上串口發(fā)送器中斷請求和串口接收器中斷請求對應(yīng)著同一個中斷服務(wù)程序入口地址0023H。在用戶的串口中斷服務(wù)子程序的開始應(yīng)首先判斷TI和RI標志以決定本次中斷是由發(fā)送結(jié)束引起還是由接收完成引起以便進一步轉(zhuǎn)入相應(yīng)的處理(也可能恰好即是發(fā)送結(jié)束又是接收完成)。
評論