51單片機中斷系統(tǒng)學習和實驗_第1頁
51單片機中斷系統(tǒng)學習和實驗_第2頁
51單片機中斷系統(tǒng)學習和實驗_第3頁
51單片機中斷系統(tǒng)學習和實驗_第4頁
51單片機中斷系統(tǒng)學習和實驗_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、51單片機中斷系統(tǒng)學習和實驗丁炳亮通過幾個實驗代碼來學習和理解教科書上關(guān)于中斷的講解,因為中斷在單片機學習中是一個非常重 要的內(nèi)容,很多代碼實現(xiàn)都要使用到中斷。之前在使用外部中斷中遇到外部下降沿觸發(fā)方式如果用按鍵 觸發(fā)會發(fā)生兩次中斷,這個問題其實很好解釋的通但是想的過程中就冒出了很多新問題,下面就是針對 自己的理解分析這些問題的。實驗一:測試在沒有開啟外部中斷允許的情況下,如果有外部低電平或下降沿 觸發(fā),外部中斷標志位是否會置位實驗現(xiàn)象:電平觸發(fā)模式?jīng)]有開中斷時,只有低電平存在才會置位IE0標志位,當電平 變高后IE0標志位自動清零。下降沿觸發(fā)模式?jīng)]有開中斷時,觸發(fā)一次就使IE0標志位一直置位

2、,不會自動清零。如 果下降沿觸發(fā)開中斷而沒有中斷函數(shù)結(jié)果和沒開中斷一樣,只有開中斷且又有中斷函數(shù)IE0 被置位馬上就被清零(串口持續(xù)輸出IE0=0)。結(jié)論及解釋:首先了解下外部觸發(fā)的兩種方式的區(qū)別。當IT0=0時,INT0為電平觸發(fā) 方式。CPU在每個機器周期的S5P2取樣INT0引腳電平,當取樣到低電平時,置IE0=1 表示INT0向CPU請求中斷;取樣到高電平時,將IE0清0。必須注意,在電平觸發(fā)方式下, CPU響應中斷時,不能自動清除IE0標志。也就是說,IE0狀態(tài)完全由INT0狀態(tài)決定。所 以,在中斷返回前必須撤除INT0引腳的低電平。當IT0=1時,INT0為邊沿觸發(fā)方式(下降沿有效

3、)。CPU在每個機器周期的S5P2取樣 INT0引腳電平,如果在連續(xù)的兩個機器周期檢測到INT0引腳由高電平變?yōu)榈碗娖?,即第?個周期取樣到INT0=1,第二個周期取樣到INT0=0,則置IE0=1,產(chǎn)生中斷請求。在邊沿觸 發(fā)方式下,CPU響應中斷時,能由硬件自動清除IE0標志。注意,為保證CPU能檢測到負 跳變,INT0的高、低電平時間至少應保持1個機器周期。硬件必須在CPU響應中斷后才自動清零IE0標志,CPU響應中斷需要滿足三個條件。第 一,中斷源有中斷請求;第二,此中斷源的中斷允許位為1;第三,CPU開中斷(即EA=1);下降沿觸發(fā)模式如果沒開中斷則達不到CPU響應中斷的條件就不能響應

4、中斷硬件也就不會 自動清零IE0標志。那為什么下降沿觸發(fā)模式?jīng)]有中斷函數(shù)的情況下也無法自動清零IE0呢?這里要考慮到中斷的響應和處理過程,我們下面了解下中斷的響應和處理過程。CPU執(zhí)行程序過程中,在每個機器周期的S5P2期間,中斷系統(tǒng)對各個中斷源進行取樣。這些取樣值在下一個機器周期內(nèi)按優(yōu)先級和內(nèi)部順序被依次查詢。如果某個中斷標志在上一 個機器周期的S5P2時被置成了 1,那么它將于現(xiàn)在的查詢周期中及時被發(fā)現(xiàn)。接著CPU便 執(zhí)行一條由中斷系統(tǒng)提供的硬件LCALL指令,轉(zhuǎn)向被稱作中斷向量的特定地址單元,進入相應的中斷服務程序。如下圖所示:若遇到下列任一條件,硬件將受阻,不能產(chǎn)生LCALL指令:CP

5、U正在處理同級或高優(yōu)先級中斷;2)當前查詢的機器周期不是所執(zhí)行指令的最后一個機器周期。即在完成所執(zhí)行指令前, 不會響應中斷,從而保證指令在執(zhí)行過程中不被打斷;3)正在執(zhí)行的指令為RET、RETI或任何訪問IE或IP寄存器的指令。即只有在這些指 令后面至少再執(zhí)行一條指令時才能接受中斷請求。若由于上述條件的阻礙中斷未能得到響應,當條件消失時該中斷標志卻已不再有效,那 么該中斷將不被響應。就是說,中斷標志曾經(jīng)有效,但未獲響應,查詢過程在下個機器周期 將重新進行。CPU響應中斷的過程如下:1)將相應的優(yōu)先級狀態(tài)觸發(fā)器置1(以阻斷后來的同級或低級的中斷請求);2)執(zhí)行一條硬件LCALL指令,即把程序計數(shù)

6、器PC的內(nèi)容壓入堆棧保存,再將相應的中斷服務程序的入口地址送入PC;3)執(zhí)行中斷服務程序。LCALL指令執(zhí)行中斷服務函數(shù)開始中斷響應過程的前兩步是由中斷系統(tǒng)內(nèi)部自動完成的。中斷服務程序的最后一條指令必 須是中斷返回指令RETI。RETI指令能使CPU結(jié)束中斷服務程序的執(zhí)行,返回到曾經(jīng)被中 斷過的程序處,繼續(xù)執(zhí)行主程序。RETI指令的具體功能是:1)將中斷響應時壓入堆棧保存的斷點地址從棧頂彈出送回PC,CPU從原來中斷的地方 繼續(xù)執(zhí)行程序。2)將相應中斷優(yōu)先級狀態(tài)觸發(fā)器清0,通知中斷系統(tǒng),中斷服務程序已執(zhí)行完畢。注意,不能用RET指令代替RETI指令,因為用RET指令雖然也能控制PC返回到原 來

7、中斷的地方,但RET指令沒有清零中斷優(yōu)先級狀態(tài)觸發(fā)器的功能,中斷控制系統(tǒng)會認為中 斷仍在進行,其后果是與此同級的中斷請求將不被響應。所以中斷服務程序結(jié)束時必須使用 RETI指令。若用戶在中斷服務程序中進行了入棧操作,則在RETI指令執(zhí)行前應進行相應 的出棧操作,使棧頂指針SP與保護斷點后的值相同,即在中斷服務程序中PUSH指令與POP 指令必須成對使用,否則不能正確返回斷點。從上面的關(guān)于中斷的響應和處理過程中很容易明白如果沒有中斷服務函數(shù),則中斷響應 后把將相應的優(yōu)先級狀態(tài)觸發(fā)器置1以阻斷后來的同級或低級的中斷請求,沒有中斷服務函 數(shù)也就沒有RETI指令,相應的中斷優(yōu)先級狀態(tài)觸發(fā)器就不會清零。

8、這樣導致了 CPU轉(zhuǎn)入中 斷服務函數(shù)接口后沒有遇到RETI指令只能一直執(zhí)行下去直到又一次從頭開始執(zhí)行主程序, 但是相應的優(yōu)先級狀態(tài)觸發(fā)器還是置1,以后的中斷也無法執(zhí)行,因為波動引起的第二次下 降沿觸發(fā)使IE0標志置位就不能被清零。下面我們用實驗測試二來驗證下發(fā)出中斷響應但沒 有中斷服務函數(shù)導致優(yōu)先級狀態(tài)觸發(fā)器不能清零而程序無法繼續(xù)響應中斷。實驗二:驗證發(fā)出中斷響應但沒有中斷服務函數(shù)導致優(yōu)先級狀態(tài)觸發(fā)器不能清 零而程序無法繼續(xù)響應中斷。實驗代碼1:ET0 = 1;EA = 1;TRO = 1;while(1)if(P3_5 = 0)TRO = 0;if(TFO)printf (,TF0=ln,)

9、;elseprintf (TFO=0n,);void TimeO(void) interrupt 1 I實驗代碼2:ETO = 1;EA = 1;TRO = 1;while(1)if(P3_5 = 0) TRO = 0;if(TFO)printf (,TFO=lnH);elseprintf (,TFO=On);實驗代碼3:oid main(void)InitUART();EXI = 1;EXO = 1; EA = 1;while (1);old TimeO(void) interrupt 0printf(IE0=ln);實驗代碼4:void main(void)I InitUART();EXI

10、 = 1;EXO = 1;EA = 1;while(1);void TimeO(void) interrupt 2printf(IEl=ln);實驗現(xiàn)象:實驗代碼1輸出的是“TF0=1”,關(guān)閉定時器后輸出的是“TF0=0”。實驗代碼 2輸出的是“TF0=1”,關(guān)閉定時器后輸出的是“TF0=1”。實驗代碼3先觸發(fā)外部中斷1再觸 發(fā)外部中斷0仍然可以輸出“IE0=1”。實驗代碼4如果先觸發(fā)外部中斷0再觸發(fā)外部中斷1 則沒有輸出。解釋:定時器溢出發(fā)生中斷是執(zhí)行完中斷服務函數(shù)后再清零中斷標志位的。實驗代碼1 有中斷服務函數(shù)所以運行正常。實驗代碼2沒有中斷服務函數(shù)在第一次發(fā)生中斷響應后將相 應的優(yōu)先級狀

11、態(tài)觸發(fā)器置1,CPU轉(zhuǎn)到中斷函數(shù)入口但是沒有遇到RETI所以不能清零優(yōu)先 級狀態(tài)觸發(fā)器裝置。實驗代碼3是由于外部中斷0優(yōu)先級高于外部中斷1,外部中斷1的優(yōu) 先級狀態(tài)觸發(fā)器置位不能阻止更高級的中斷響應(這里要注意:實際上在執(zhí)行中斷服務函數(shù) 如果是相同的邏輯優(yōu)先級中斷是無法嵌套執(zhí)行中斷函數(shù)的)。實驗代碼4是實驗代碼3的對照 組。實驗三:測試手動置位中斷標志位CUP是否會響應中斷?實驗代碼1:void main(void)InitUART();ITO = 0;EXO = 1;EA = 1;while(1)if(P3_5 = 0)IE0 = 1;實驗代碼2:);void main(void)InitU

12、ART();ITO = 1;EXO = 1;EA = 1;while(1)if(P3_5 = 0)I IE0 = 1;void TimeO(void) interrupt 0printf(HIE0=ln);實驗代碼3:void main(void)I InitUART();ETO = 1;EA = 1;while(1)if(P3_5 = 0)TF0 = 1;void TimeO(void) interrupt 1j printf(TF0=ln);實驗現(xiàn)象:實驗代碼1無法通過手動置位中斷標志位來使CPU響應中斷。實驗代碼2、3可以通過 手動置位來使CPU響應中斷。解釋:很明顯除了外部低電平觸發(fā)無法通過手動置位中斷標志位使CPU發(fā)生中斷響應外其定時器和 邊沿外部觸發(fā)方

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論