任務(wù)34中斷的原理及實現(xiàn)_第1頁
任務(wù)34中斷的原理及實現(xiàn)_第2頁
任務(wù)34中斷的原理及實現(xiàn)_第3頁
任務(wù)34中斷的原理及實現(xiàn)_第4頁
任務(wù)34中斷的原理及實現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、3.2 中斷的概念和應(yīng)用任務(wù)3.4 中斷的概念和應(yīng)用3.4.1 任務(wù)介紹中斷和定時器是單片機中最重要的資源之一,中斷功能的存在很大程度上提高了單片機處理外部或者內(nèi)部事件的能力。什么是中斷,我們從一個生活中的例程引入。你正在家中看書,突然電話鈴響了,你放下書本,去接電話,和來電話的人交談,然后放下電話,回來繼續(xù)看你的書。這就是生活中的“中斷”的現(xiàn)象,就是正常的工作過程被突如其來的事件打斷了。本節(jié)的任務(wù)是:單片機外接兩個兩個發(fā)光二極管和一個按鍵,其中一個發(fā)光二極管以0.5Hz的頻率閃爍,另外一個發(fā)光二極管,按鍵每按下一次改變一下狀態(tài),按鍵用采用外部中斷的方式。3.4.2知識準備1、中斷的基本概念(

2、1)單片機中為什么需要中斷我們先根據(jù)之前學(xué)過的知識試著編寫一下任務(wù)要求的程序,程序如下:/.省略了程序開頭部分while(1) LED1=1; /LED1滅DelayMs(1000); /延時1000msLED1=0; /LED1亮DelayMs(1000); /延時1000msif(KeyInput=0) /檢測按鍵是否按下 DelayMs(10); /10ms延時消抖 if(KeyInput=0) /再次判斷按鍵是否按下 LED2=!LED2; /按鍵按下,LED2狀態(tài)取反 while(!KeyInput); /等待按鍵彈起 燒錄到單片機后,我們發(fā)現(xiàn)程序運行的效果并非和我們想象中的一樣,如

3、果按鍵不按下,LED1閃爍正常,按鍵按下,LED1不再閃爍,直到按鍵彈起。LED2也并非是每次按鍵按下都改變狀態(tài),按鍵有的時候沒有檢測到。我們先來分析一下按鍵為什么沒有檢測到的原因。主程序中有兩個任務(wù),任務(wù)1:LED1以2Hz頻率閃爍,任務(wù)2:按鍵按下LED2狀態(tài)取反。這兩個任務(wù)在大循環(huán)中順序運行,即任務(wù)1執(zhí)行完后,才能執(zhí)行任務(wù)2。LED1閃爍一次需要2000ms(亮1000ms+滅1000ms),按鍵按下到彈起來大約需要200ms-500ms左右。如果程序剛開始執(zhí)行任務(wù)1,這個時候按鍵也按下了,那么按鍵所對應(yīng)的任務(wù)2必須等待任務(wù)1執(zhí)行完了,才能執(zhí)行。任務(wù)1執(zhí)行完了,2000ms過后,再掃描按

4、鍵,按鍵早就釋放了,本次按鍵無效。我們的生活中也會遇到這樣的問題,以接電話為例。你正在看著書,如果沒有別的事情會一直看下去,這個時候電話響了,如果我們按照程序的思路,任務(wù)1執(zhí)行完了,才能執(zhí)行任務(wù)2,那么我們只有把書看完了,才能去接電話,這顯然是不合理的。我們把所有需要處理的事件都放到大循環(huán)while(1)中去一個個的執(zhí)行的方式是行不通的,一些緊急的事件必須立即處理,不能等待。中斷就具有處理緊急事件的能力。(2)中斷的響應(yīng)過程正在看書,這是電話鈴響了,在接電話之前,我們要把正在看的那一頁書做個標記,接完電話后后我們按照之前的標記繼續(xù)看書。單片機響應(yīng)中斷的過程和看書接電話的過程類似。中斷事件產(chǎn)生后

5、,首先要保存當前執(zhí)行程序的地址,然后再去執(zhí)行中斷函數(shù),中斷函數(shù)執(zhí)行完后,再從保存的地址處開始執(zhí)行程序。(3)中斷的種類傳統(tǒng)的8051單片機一共有5個中斷源(DIP封裝的STC89C52有6個中斷),它們的符號、名稱和產(chǎn)生的條件分別解釋如下:INT0:外部中斷0,由P32端口引入,低電平或下降沿引起。:INT1:外部中斷1,由P33端口引入,低電平或下降沿引起。:T0:定時/計數(shù)器0中斷,由定時/計數(shù)器0溢出引起。:T1:定時/計數(shù)器1中斷,由定時/計數(shù)器1溢出引起。:TI/RI:串行口中斷,由串行口發(fā)送或者接受一幀數(shù)據(jù)引起。本節(jié)當中我們只關(guān)注兩個外部中斷,定時器和串口的中斷在后面的章節(jié)會詳細介

6、紹。(4)中斷優(yōu)先級和嵌套在某些時刻,2個或者更多個中斷同時到來,單片機應(yīng)該響應(yīng)哪一個中斷呢?設(shè)想一下,你正在看書,電話鈴響了,同時又有人按了門鈴,你該先做那樣呢?如果你正在等一個很重要的電話,你一般不會去理會門鈴的,而反之,你正在等一個重要的客人,則可能就不會去理電話了。總之這里存在一個優(yōu)先級的問題,單片機的5個中斷也有優(yōu)先級,即兩個以上的中斷同時觸發(fā),CPU先響應(yīng)哪一個。另外還可能存在這樣一種情況,你正在看書,電話鈴響了,去接電話,在接電話的過程當中,這時又有人按門鈴,我們的做法是先暫停通話,打開門,然后再接聽電話,接聽電話完后再繼續(xù)看書。一個正在執(zhí)行的中斷任務(wù)被另外一個級別更高的中斷任務(wù)

7、打斷,稱之為中斷的嵌套。51單片機的優(yōu)先級有兩大類:高優(yōu)先級和低優(yōu)先級,如果不對優(yōu)先級做任何的設(shè)置,系統(tǒng)默認的是低優(yōu)先級。在同類優(yōu)先級中,也有一個先后順序,稱為自然優(yōu)先級。在51單片機中自然優(yōu)先級的順序為,外部中斷0 > 定時/計數(shù)器0 > 外部中斷1 > 定時/計數(shù)器1 > 串口。在同類優(yōu)先級中,當同時有幾個中斷到達,自然優(yōu)先級高的中斷會先得到響應(yīng),但不能實現(xiàn)中斷的嵌套,例如,定時/計數(shù)器0和外中斷0同為低優(yōu)先級,當它們同時到來時,由于外部中斷0 > 定時/計數(shù)器0,系統(tǒng)先進入到外部中斷0的程序,然后再執(zhí)行定時/計數(shù)器0的中斷程序。要想實現(xiàn)中斷的嵌套,中斷A能打

8、斷中斷B的執(zhí)行,則中斷A和中斷B不能在同一類型優(yōu)先級中,中斷A應(yīng)設(shè)置為高優(yōu)先級,中斷B設(shè)置為低優(yōu)先級。例如:串口中斷在同類優(yōu)先級中的排位是最低的,但如果把串口中斷設(shè)置為高優(yōu)先級,而其他中斷設(shè)為低優(yōu)先級,則串口中斷不僅可以在兩個中斷到來時優(yōu)先執(zhí)行,而且可以在別的中斷正在運行時,打斷別的中斷轉(zhuǎn)而執(zhí)行串口中斷。2、中斷的寄存器配置51單片機中斷系統(tǒng)框圖可用圖3.4.1來表示。圖3.4.1 51單片機中斷系統(tǒng)框圖中斷的系統(tǒng)框圖分為幾個部分:1 系統(tǒng)框圖的前半部分是5個中斷源及對應(yīng)的觸發(fā)標志。5個中斷源分別是外部中斷0()、定時器0(T0)、外部中斷1()、定時器1(T1)和串口中斷(TI或RI)。對應(yīng)

9、的觸發(fā)標志分別為IE0、TF0、IE1、TF1和TI(RI),分別放在TCON和SCON寄存器當中,中斷沒有觸發(fā),這些中斷觸發(fā)標志位置0,中斷觸發(fā),則對應(yīng)的中斷觸發(fā)標志置1。2 系統(tǒng)框圖的后半部分是中斷的優(yōu)先級配置和中斷的響應(yīng)請求。5個中斷的優(yōu)先級配置位分別是PX0、PT0、PX1、PT1和PS,置1為高優(yōu)先級,置0或者默認為低優(yōu)先級,這些位在寄存器IP中。需要注意的是,這些位不可單獨位尋址,舉個例子:設(shè)置外部中斷0的優(yōu)先級為高優(yōu)先級,不能在程序中,寫成PX0=1,而應(yīng)該是對寄存器IP配置,即IP=0x01。中斷觸發(fā)后,根據(jù)優(yōu)先級的配置,向CPU申請響應(yīng)。3 系統(tǒng)框圖的中間部分是中斷的允許開關(guān)

10、。前面部分中斷觸發(fā)后,要得到后面CPU的響應(yīng),必須把中間部分的開關(guān)合上去,即通常說的“開中斷”。中斷開關(guān)又分兩級,即總開關(guān)EA和每一個中斷源各自的開關(guān)(分別是EX0、ET0、EX1、ET1和ES),這些位的配置在于寄存器IE中,置0關(guān)中斷,置1開中斷,初始化為置0。這些位可以單獨尋址,舉例例子:開外部中斷0,程序應(yīng)該這樣配置:EA=1; /開總中斷EX0=1;/開外部中斷0IE寄存器和IP寄存器具體各個位的關(guān)系如表3.4.1和表3.4.2所示。表3.4.1 IP寄存器和IE寄存器位配置表位序號D7D6D5D4D3D2D1D0IE(開關(guān))EAESET1EX1ET0EX0IP(優(yōu)先級)PSPT1P

11、X1PT0PX0說明總開關(guān)串口定時器1外中斷1定時器0外中斷03、外部中斷的特點和中斷服務(wù)函數(shù)的編寫51單片機有和兩個外部中斷源,分別由外部引腳P32和P33上的電平變化或狀態(tài)變化作為中斷觸發(fā)信號。(1)外部中斷觸發(fā)方式51單片機的外部中斷有兩種觸發(fā)方式:一種是電平觸發(fā)方式,另外一種是下降沿觸發(fā)方式。低電平觸發(fā)的特點是只要外中斷輸入引腳P32或P33保持低電平,將會一直產(chǎn)生中斷申請。下降沿觸發(fā)的特點是當檢測到外中斷輸入引腳P32或P33由高電平跳變到低電平的瞬間時產(chǎn)生中斷申請。外中斷觸發(fā)方式的選擇在TCON寄存器中配置,如表3.4.3所示。表3.4.3 TCON寄存器位配置表 定時/計數(shù)器 外

12、中斷位序號D7D6D5D4D3D2D1D0位符號TF1TR1TF0TR0IE1IT1IE0IT0說明定時器1溢出標志位定時器1運行控制位定時器0運行控制位定時器0運行控制位外中斷1請求標志位外中斷1觸發(fā)方式選擇位外中斷0請求標志位外中斷0觸發(fā)方式選擇位TCON寄存器中的高四位用于定時/計數(shù)器,低四位用于外中斷。IE0和IT0屬于外部中斷0,IE1和IT1屬于外中斷1。IT0:外中斷0觸發(fā)方式選擇位:當IT0=0,為低電平觸發(fā)方式;當IT0=1,為下降沿觸發(fā)方式。IE0:外中斷0請求標志位,當觸發(fā)中斷時,IE0由0變1,中斷結(jié)束后IE0自動清零。IT1、IE1同IT0、IE1使用方法相同。(2)

13、中斷服務(wù)函數(shù)的編寫在講解中斷服務(wù)函數(shù)之前,我們先來了解一下中斷現(xiàn)場的保護和恢復(fù)。術(shù)語過于專業(yè),我們以之前講過的看書接電話為例:看書類比于主程序在執(zhí)行任務(wù),突然之間接到一個電話,類比于產(chǎn)生了中斷,在去接電話之前,需要把看到的那頁紙張做個標記(把正在看的紙張折一下),給紙張做標記的動作就是中斷現(xiàn)場保護,單片機在去處理中斷前,也需要給主程序中的任務(wù)做個標記,記錄主程序從哪一行暫停和當前運行變量的值。電話接完了,根據(jù)之前的書上的標記接著看書,單片機中斷也是,處理完了中斷任務(wù)后,CPU又從主程序被中斷的哪一行接著運行,這個過程稱為中斷現(xiàn)場的恢復(fù)。我們在用keilC51(高級語言開發(fā)環(huán)境)編寫中斷服務(wù)程序

14、時,不必考慮中斷現(xiàn)場的保護和恢復(fù),這是由于編譯器在編譯中斷服務(wù)程序時,會在生成的目標代碼中自動加入相應(yīng)的中斷現(xiàn)場保護和恢復(fù)的指令。在keilC51中,中斷服務(wù)程序必須定義成一個特殊的函數(shù),稱為中斷服務(wù)函數(shù),函數(shù)按照以下格式定義:void 函數(shù)名() interrupt 中斷號 using 工作組 中斷服務(wù)程序中斷服務(wù)函數(shù)的前半部分與普通函數(shù)的定義是一樣的,函數(shù)類型 函數(shù)名()。不同之處在于中斷服務(wù)函數(shù)多了一個關(guān)鍵字interrupt。interrupt用來聲明該函數(shù)為中斷服務(wù)函數(shù),Interrupt后是中斷向量號,CPU會根據(jù)中斷向量號去計算該中斷在中斷向量表里的位置,然后跳到中斷服務(wù)函數(shù)里,

15、每一個中斷源都會有一個特定的中斷向量號如表3.4.4所示。最后面的“using 工作組”是指這個中斷函數(shù)使用單片機內(nèi)存中4個工作寄存器中的哪一組。C51編譯器在編譯程序時自動分配工作組,我們在編寫程序時通常省略“using 工作組”。 表3.4.4 中斷號中斷名稱外部中斷0定時器0中斷外部中斷1定器1中斷串口中斷中斷號01234三、任務(wù)實施有了以上的知識準備,我們來完成本節(jié)的任務(wù)。按鍵接單片機的P3.2引腳(外部中斷0),按鍵每按下一次,P3.2的引腳的電平從高電平到低電平變化一次,我們可以利用外部中斷0的下降沿觸發(fā)來完成按鍵的檢測。程序如下:#include<reg52.h>#d

16、efine uchar unsigned char#defien uint unsigned int sbit LED1=P10;sbit LED2=P11; /兩位LED分別接P10和P11 sbit KeyInput=P32; /按鍵接P3.2引腳 /ms級延時子函數(shù)void DelayMs(uint xms) uint i,j;for(i=0;i<xms;i+)for(j=0;j<122;j+);/主函數(shù)void main(void) IT0=1; /下降沿觸發(fā)外部中斷 EX0=1; /使能外部中斷0 EA=1; /使能總中斷 while(1)LED1=1; /LED1滅De

17、layMs(1000); LED2=0; /LED2亮DelayMs(1000); /外部中斷0函數(shù)void EXT0() interrupt 0 EX0=0; /關(guān)外部中斷0DelayMs(10); /消抖延時if(KeyInput=0) led2=!led2; /發(fā)光二極管2狀態(tài)取反 While(!KeyInput); EX0=1; /開外部中斷 程序解釋:(1) 外部中斷觸發(fā)的按鍵程序和查詢按鍵程序相比,按鍵的檢測不需要主程序去處理,而是直接交給了中斷服務(wù)函數(shù),主函數(shù)只需要完成LED1的閃爍就可以了,一旦按鍵被按下,P3.2口的下降沿觸發(fā)外部中斷0,則CPU立即暫停主程序中的任務(wù),以最快的速度去執(zhí)行中斷服務(wù)函數(shù)中的按鍵處理程序,中斷服務(wù)函數(shù)執(zhí)行完后,又回到主程序繼續(xù)執(zhí)行。按鍵由查詢方式改為中斷方式后,按鍵檢測的實時性得到了保證,也不會出現(xiàn)檢測不到按鍵按下的現(xiàn)象。(2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論