【51单片机快速入门指南】3:中断系统
目錄
- 硬知識
- 中斷概念
- 中斷系統(tǒng)
- 中斷結(jié)構(gòu)
- 中斷優(yōu)先級
- 中斷處理
普中51-單核-A2
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0
硬知識
選自《普中51單片機(jī)開發(fā)攻略_V1.2》、《STC89C52系列單片機(jī)器件手冊》
中斷概念
???????中斷是為使單片機(jī)具有對外部或內(nèi)部隨機(jī)發(fā)生的事件實時處理而設(shè)置的, 中斷功能的存在,很大程度上提高了單片機(jī)處理外部或內(nèi)部事件的能力。它也是單片機(jī)最重要的功能之一,是我們學(xué)習(xí)單片機(jī)必須要掌握的。很多初學(xué)者被困在中斷中,學(xué)了很久仍然不知道中斷究竟是如何運(yùn)作的。千萬不要認(rèn)為它有多難, 其實只要掌握正確的學(xué)習(xí)方法,沒有哪個知識點是學(xué)不會的。
???????為了能讓大家更容易理解中斷概念, 我們先來舉一個生活事例: 你打開火, 燒上一壺水。然后去洗衣服,在洗衣服的過程中,突然聽到水壺發(fā)出水開的報警聲,這時,你停止洗衣服動作,立即去關(guān)掉火,然后將開水灌入暖水瓶中,灌完開水后,你又回去繼續(xù)洗衣服。這個過程中實際上就發(fā)生了一次中斷。
???????對于單片機(jī)來講,中斷是指 CPU 在處理某一事件 A 時,發(fā)生了另一事件 B, 請求 CPU 迅速去處理(中斷發(fā)生);CPU 暫時停止當(dāng)前的工作(中斷響應(yīng)), 轉(zhuǎn)去處理事件 B(中斷服務(wù));待 CPU 將事件 B 處理完畢后,再回到原來事件 A 被 中斷的地方繼續(xù)處理事件 A(中斷返回),這一過程稱為中斷。
???????再回來看前面講的生活事例,與單片機(jī)中斷結(jié)合分析,你的主任務(wù)是洗衣服, 水開報警這是一個中斷請求,這一時刻相當(dāng)于斷點處,你響應(yīng)中斷去關(guān)火,然后將開水灌入暖水瓶中,這一動作實際上就是處理中斷程序,灌完開水后再回去繼續(xù)洗衣服,相當(dāng)于處理完中斷程序后再返回主程序繼續(xù)執(zhí)行主程序。這里需要注 意的是,水開是隨時都有可能的,但是無論什么時候開,只要一開你將立即去處理它,處理完后再回來繼續(xù)接著洗剛才那件衣服。單片機(jī)在執(zhí)行程序時,中斷也隨時有可能發(fā)生,但無論何時發(fā)生,只要一旦發(fā)生,單片機(jī)將立即暫停當(dāng)前程序,趕去處理中斷程序,處理完中斷程序后再返回剛才暫停處接著執(zhí)行原來的程序。
???????單片機(jī)在執(zhí)行程序時其程序流程圖如下:
???????引起 CPU 中斷的根源稱為中斷源。中斷源向 CPU 提出中斷請求,CPU 暫時中斷原來的事務(wù) A,轉(zhuǎn)去處理事件 B,對事件 B 處理完畢后,再回到原來被中斷的地方(即斷點),稱為中斷返回。實現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。
???????中斷的開啟與關(guān)閉、設(shè)置啟用哪一個中斷等都是由單片機(jī)內(nèi)部的一些特殊功能寄存器來決定的。
???????隨著計算機(jī)技術(shù)的應(yīng)用,人們發(fā)現(xiàn)中斷技術(shù)不僅解決了快速主機(jī)與慢速 I/O 設(shè)備的數(shù)據(jù)傳送問題,而且還具有如下優(yōu)點:
①分時操作。CPU 可以分時為多個 I/O 設(shè)備服務(wù),提高了計算機(jī)的利用率;
②實時響應(yīng)。CPU 能夠及時處理應(yīng)用系統(tǒng)的隨機(jī)事件,系統(tǒng)的實時性大大增 強(qiáng);
③可靠性高。CPU 具有處理設(shè)備故障及掉電等突發(fā)性事件能力,從而使系統(tǒng) 可靠性提高。
中斷系統(tǒng)
???????中斷系統(tǒng)是為使CPU具有對外界緊急事件的實時處理能力而設(shè)置的。
???????當(dāng)中央處理機(jī)CPU正在處理某件事的時候外界發(fā)生了緊急事件請求,要求CPU暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個緊急事件,處理完以后,再回到原來被中斷的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。實現(xiàn)這種功能的部件稱為中斷系統(tǒng),請示CPU中斷的請求源稱為中斷源。微型機(jī)的中斷系統(tǒng)一般允許多個中斷源,當(dāng)幾個中斷源同時向CPU請求中斷,要求為它服務(wù)的時候,這就存在CPU優(yōu)先響應(yīng)哪一個中斷源請求的問題。通常根據(jù)中斷源的輕重緩急排隊,優(yōu)先處理最緊急事件的中斷請求源,即規(guī)定每一個中斷源有一個優(yōu)先級別。CPU總是先響應(yīng)優(yōu)先級別最高的中斷請求。
???????當(dāng)CPU正在處理一個中斷源請求的時候(執(zhí)行相應(yīng)的中斷服務(wù)程序),發(fā)生了另外一個優(yōu)先級比它還高的中斷源請求。如果CPU能夠暫停對原來中斷源的服務(wù)程序,轉(zhuǎn)而去處理優(yōu)先級更高的中斷請求源,處理完以后,再回到原低級中斷服務(wù)程序,這樣的過程稱為中斷嵌套。這樣的中斷系統(tǒng)稱為多級中斷系統(tǒng),沒有中斷嵌套功能的中斷系統(tǒng)稱為單級中斷系統(tǒng)。
???????STC89C52系列單片機(jī)提供了8個中斷請求源,它們分別是:外部中斷0(INT0)、定時器0中斷、外部中斷1(INT1)、定時器1中斷、串口(UART)中斷、定時器2中斷、外部中斷2(INT2)、外部中斷3(NT3)。所有的中斷都具有4個中斷優(yōu)先級。用戶可以用關(guān)總中斷允許位(EA/IE.7)或相應(yīng)中斷的允許位來屏蔽所有的中斷請求,也可以用打開相應(yīng)的中斷允許位來使CPU響應(yīng)相應(yīng)的中斷申請;每一個中斷源可以用軟件獨(dú)立地控制為開中斷或關(guān)中斷狀態(tài);每一個中斷的優(yōu)先級別均可用軟件設(shè)置。高優(yōu)先級的中斷請求可以打斷低優(yōu)先級的中斷,反之,低優(yōu)先級的中斷請求不可以打斷高優(yōu)先級及同優(yōu)先級的中斷。當(dāng)兩個相同優(yōu)先級的中斷同時產(chǎn)生時,將由查詢次序來決定系統(tǒng)先響應(yīng)哪個中斷。STC89C52系列單片機(jī)的各個中斷查詢次序如下表所示:
???????通過設(shè)置新增加的特殊功能寄存器IPH中的相應(yīng)位,可將中斷優(yōu)先級設(shè)為四級,如果只設(shè)置IP或XICON,那么中斷優(yōu)先級就只有兩級,與傳統(tǒng)8051單片機(jī)兩級中斷優(yōu)先級完全兼容。
???????中斷優(yōu)先級控制寄存器IP和IPH的各位都由可用戶程序置“1”和清“0"。但IP寄存器可位操作,所以可用位操作指令或字節(jié)操作指令更新IP的內(nèi)容。而IPH寄存器的內(nèi)容只能用字節(jié)操作指令來更新。STC89C52系列單片機(jī)復(fù)位后IP和IPH均為00H,各個中斷源均為低優(yōu)先級中斷。
???????如果使用C語言編程,中斷查詢次序號就是中斷號,例如:
中斷結(jié)構(gòu)
外部中斷
???????外部中斷0(INT0)、外部中斷1(INT1)、外部中斷2(INT2)和外部中斷3(INT3)既可低電平觸發(fā),也可下降沿觸發(fā)。請求四個外部中斷的標(biāo)志位是位于寄存器TCON中的IE0/TCON.1、IE1/TCON.3,IE2/XICON.2和IE3/XICON.5,當(dāng)外部中斷服務(wù)程序被響應(yīng)后,中斷請求標(biāo)志位IE0,IE1,IE2和IE3會自動被清0,TCON寄存器中的ITO/TCON.0,IT1/TCON.2,IT2/XICON.0和IT3/XICON.4決定了外部中斷0、1、2和3是低電平觸發(fā)方式還是下降沿觸發(fā)方式。如果ITx = 0(x =0,1,2,3),那么系統(tǒng)在INTx(x = 0,1,2,3)腳探測到低電平后可產(chǎn)生外部中斷。如果ITx = 1(x=0,1,2,3),那么系統(tǒng)在INTx(x= 0,1,2,3)腳探測下降沿后可產(chǎn)生外部中斷。外部中斷0(INT0)、外部中斷1(INT1)、外部中斷2(INT2)和外部中斷3(NT3)還可以用于將單片機(jī)從掉電模式喚醒。
定時器中斷
???????定時器0和1的中斷請求標(biāo)志位是TF0和TF1,當(dāng)定時器寄存器THx/TLx(x= 0,1)溢出時,溢出標(biāo)志位TFx(x= 0,1)會被置位,定時器中斷發(fā)生。當(dāng)單片機(jī)轉(zhuǎn)去執(zhí)行該定時器中斷時,定時器的溢出標(biāo)志位TFx(x=0,1)會被硬件清除。
???????定時器2的中斷請求標(biāo)志位是TF2和EXF2,當(dāng)定時器寄存器TH2/TL2溢出時,溢出標(biāo)志位TF2會被置位,定時器中斷發(fā)生。當(dāng)單片機(jī)轉(zhuǎn)去執(zhí)行該定時器中斷時,定時器的溢出標(biāo)志位TF2會被硬件清除。當(dāng)EXEN2=1且T2EX的負(fù)跳變產(chǎn)生捕獲或重裝時,EXF2置位。定時器2中斷使能時,EXF2=1也將使CPU從中斷向量處執(zhí)行定時器2中斷子程序。
串口中斷
???????當(dāng)串行口接收中斷請求標(biāo)志位RI和串行口1發(fā)送中斷請求標(biāo)志位TI中的任何一個被置為后,串行口中斷都會產(chǎn)生。
中斷優(yōu)先級
???????STC89C52系列單片機(jī)的所有的中斷都具有4個中斷優(yōu)先級,對于這些中斷請求源可編程為高優(yōu)先級中斷或低優(yōu)先級中斷,可實現(xiàn)兩級中斷服務(wù)程序嵌套。一個正在執(zhí)行的低優(yōu)先級中斷能被高優(yōu)先級中斷所中斷,但不能被另一個低優(yōu)先級中斷所中斷,一直執(zhí)行到結(jié)束,遇到返回指令RETI,返回主程序后再執(zhí)行一條指令才能響應(yīng)新的中斷申請。以上所述可歸納為下面兩條基本規(guī)則:
1,低優(yōu)先級中斷可被高優(yōu)先級中斷所中斷,反之不能。
2,任何一種中斷(不管是高級還是低級),一旦得到響應(yīng),不會再被它的同級中斷所中斷
???????當(dāng)同時收到幾個同一優(yōu)先級的中斷要求時,哪一個要求得到服務(wù),取決于內(nèi)部的查詢次序。這相當(dāng)于在每個優(yōu)先級內(nèi),還同時存在另一個輔助優(yōu)先級結(jié)構(gòu),STC89C52系列單片機(jī)各中斷優(yōu)先查詢次序如下:
中斷處理
當(dāng)某中斷產(chǎn)生而且被CPU響應(yīng),主程序被中斷,接下來將執(zhí)行如下操作:
???????中斷服務(wù)程序ISR完成和該中斷相應(yīng)的一些操作。ISR以RETI(中斷返回)指令結(jié)束,將PC值從棧中取回,并恢復(fù)原來的中斷設(shè)置,之后從主程序的斷點處繼續(xù)執(zhí)行。
???????當(dāng)某中斷被響應(yīng)時,被裝載到程序計數(shù)器PC中的數(shù)值稱為中斷向量,是同該中斷源相對應(yīng)的中斷服務(wù)程序的起始地址。各中斷源服務(wù)程序的入口地址(即中斷向量)為:
???????當(dāng)“轉(zhuǎn)去執(zhí)行中斷”時,引起中斷的標(biāo)志位將被硬件自動清零。由于中斷向量入口地址位于程序存儲器的開始部分,所以主程序的第1條指令通常為跳轉(zhuǎn)指令,越過中斷向量區(qū)(LJMP MAIN).
???????注意:不能用RET指令代替RETI指令
???????RET指令雖然也能控制PC返回到原來中斷的地方,但RET指令沒有清零中斷優(yōu)先級狀態(tài)觸發(fā)器的功能,中斷控制系統(tǒng)會認(rèn)為中斷仍在進(jìn)行,其后果是與此同級或低級的中斷請求將不被響應(yīng)。
???????若用戶在中斷服務(wù)程序中進(jìn)行了入棧操作,則在RETI指令執(zhí)行前應(yīng)進(jìn)行相應(yīng)的出棧操作,即在中斷服務(wù)程序中PUSH指令與POP指令必須成對使用,否則不能正確返回斷點。
總結(jié)
以上是生活随笔為你收集整理的【51单片机快速入门指南】3:中断系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android -上传文件到服务器
- 下一篇: 计算机关机的命令行,自动关机命令,win