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