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