第5章-中斷系統(tǒng)-課件_第1頁
第5章-中斷系統(tǒng)-課件_第2頁
第5章-中斷系統(tǒng)-課件_第3頁
第5章-中斷系統(tǒng)-課件_第4頁
第5章-中斷系統(tǒng)-課件_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章

中斷系統(tǒng)

1第5章中斷系統(tǒng)內(nèi)容概要本章介紹AT89S51片內(nèi)中斷系統(tǒng)的硬件結(jié)構(gòu)和工作原理。中斷系統(tǒng)能夠?qū)崟r(shí)地響應(yīng)片內(nèi)功能部件和外圍設(shè)備發(fā)出的中斷請求并及時(shí)進(jìn)入中斷服務(wù)子程序進(jìn)行處理。通過本章學(xué)習(xí),讀者應(yīng)重點(diǎn)掌握與中斷系統(tǒng)有關(guān)的特殊功能寄存器以及中斷系統(tǒng)的應(yīng)用特性,以及熟練地進(jìn)行中斷系統(tǒng)應(yīng)用的編程。2第5章中斷系統(tǒng)5.1AT89S51中斷技術(shù)概述在單片機(jī)系統(tǒng)中,中斷技術(shù)主要用于實(shí)時(shí)監(jiān)測與控制,也就是要求單片機(jī)能及時(shí)地響應(yīng)中斷請求源提出的服務(wù)請求,并作出快速響應(yīng)并及時(shí)處理。這些工作就是由單片機(jī)片內(nèi)的中斷系統(tǒng)來實(shí)現(xiàn)的。當(dāng)中斷請求源發(fā)出中斷請求時(shí),如果中斷請求被允許的話,單片機(jī)暫時(shí)中止當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)到中斷服務(wù)處理程序處理中斷服務(wù)請求。中斷服務(wù)處理程序處理完中斷服務(wù)請求后,再回到原來被中止的程序之處(斷點(diǎn)),繼續(xù)執(zhí)行被中斷的主程序。圖5-1顯示了單片機(jī)對外圍設(shè)備中斷服務(wù)請求的整個(gè)中斷響應(yīng)和處理過程。3第5章中斷系統(tǒng)圖5-1中斷響應(yīng)和處理過程4第5章中斷系統(tǒng)如果單片機(jī)沒有中斷系統(tǒng),單片機(jī)的大量時(shí)間可能會浪費(fèi)在查詢是否有服務(wù)請求發(fā)生的定時(shí)查詢操作上,即不論是否有服務(wù)請求發(fā)生,都必須去查詢。采用中斷技術(shù)完全消除了單片機(jī)在查詢方式中的等待現(xiàn)象,大大地提高了單片機(jī)的工作效率和實(shí)時(shí)性。由于中斷工作方式的優(yōu)點(diǎn)極為明顯,因此,單片機(jī)的片內(nèi)硬件中都帶有中斷系統(tǒng)。5.2AT89S51中斷系統(tǒng)結(jié)構(gòu)中斷系統(tǒng)結(jié)構(gòu)如圖5-2所示。共有5個(gè)中斷請求源(簡稱中斷源),2個(gè)中斷優(yōu)先級,可實(shí)現(xiàn)2級中斷服務(wù)程序嵌套。每一中斷源可用軟件獨(dú)立地控制為允許中斷或關(guān)中斷狀態(tài);每一中斷源的中斷優(yōu)先級別均可用軟件來設(shè)置。

5第5章中斷系統(tǒng)圖5-2AT89S51的中斷系統(tǒng)結(jié)構(gòu)6第5章中斷系統(tǒng)由圖5-2可見,中斷系統(tǒng)共有5個(gè)中斷請求源,它們是:(1)INT0*—外部中斷請求0,中斷請求信號由引腳輸入,中斷請求標(biāo)志為IE0。(2)INT1*—外部中斷請求1,中斷請求信號由引腳輸入,中斷請求標(biāo)志為IE1。(3)定時(shí)器/計(jì)數(shù)器T0計(jì)數(shù)溢出發(fā)出的中斷請求,中斷請求標(biāo)志為TF0。(4)定時(shí)器/計(jì)數(shù)器T1計(jì)數(shù)溢出發(fā)出的中斷請求,中斷請求標(biāo)志為TF1。(5)串行口中斷請求,中斷請求標(biāo)志為發(fā)送中斷TI或接收中斷RI。7第5章中斷系統(tǒng)5.2.2中斷請求標(biāo)志寄存器5個(gè)中斷請求源的中斷請求標(biāo)志分別由特殊功能寄存器TCON和SCON的相應(yīng)位鎖存(見圖5-2)。1.TCON寄存器為定時(shí)器/計(jì)數(shù)器的控制寄存器,字節(jié)地址為88H,可位尋址。該寄存器中既包括T0和T1的溢出中斷請求標(biāo)志位TF0和TF1,也包括了兩個(gè)外部中斷請求的標(biāo)志位IE1與IE0,此外還包括了兩個(gè)外部中斷請求源的中斷觸發(fā)方式選擇位。特殊功能寄存器TCON的格式如圖5-3所示。

8第5章中斷系統(tǒng)圖5-3特殊功能寄存器TCON的格式TCON寄存器中與中斷系統(tǒng)有關(guān)的各標(biāo)志位的功能如下:(1)TF1—片內(nèi)定時(shí)器/計(jì)數(shù)器T1的溢出中斷請求標(biāo)志位。當(dāng)啟動(dòng)T1計(jì)數(shù)后,定時(shí)器/計(jì)數(shù)器T1從初值開始加1計(jì)數(shù),當(dāng)最高位產(chǎn)生溢出時(shí),由硬件使TF1置“1”,向CPU申請中斷。CPU響應(yīng)TF1中斷時(shí),TF1標(biāo)志由硬件自動(dòng)清“0”,TF1也可由軟件清“0”。9第5章中斷系統(tǒng)(2)TF0—片內(nèi)定時(shí)器/計(jì)數(shù)器T0的溢出中斷請求標(biāo)志位,功能與TF1類似。(3)IE1—外部中斷請求1的中斷請求標(biāo)志位。(4)IE0—外部中斷請求0的中斷請求標(biāo)志位,其功能與IE1類似。(5)IT1—選擇外部中斷請求1為跳沿觸發(fā)方式還是電平觸發(fā)方式。IT1=0,為電平觸發(fā)方式,加到INT1*引腳上的外部中斷請求輸入信號為低電平有效,并把IE1置“1”。轉(zhuǎn)向中斷服務(wù)程序時(shí),則由硬件自動(dòng)把IE1清“0”。IT1=1,為跳沿觸發(fā)方式,加到INT1*引腳上的外部中斷請求輸10第5章中斷系統(tǒng)入信號電平從高到低的負(fù)跳變有效,并把IE1置“1”。轉(zhuǎn)向中斷服務(wù)程序時(shí),則由硬件自動(dòng)把IE1清“0”。(6)IT0—選擇外部中斷請求0為跳沿觸發(fā)方式還是電平觸發(fā)方式,其意義與IT1類似。當(dāng)AT89S51復(fù)位后,TCON被清“0”,5個(gè)中斷源的中斷請求標(biāo)志均為0。TR1(D6位)、TR0(D4位)這2位與中斷系統(tǒng)無關(guān),僅與定時(shí)器/計(jì)數(shù)器T1和T0有關(guān),將在第6章介紹。2.SCON寄存器SCON為串行口控制寄存器,字節(jié)地址為98H,可位尋址。SCON的低二位鎖存串行口的發(fā)送中斷和接收中斷的中斷11第5章中斷系統(tǒng)圖5-4SCON中的中斷請求標(biāo)志位SCON中各標(biāo)志位的功能如下:(1)TI—串行口的發(fā)送中斷請求標(biāo)志位。CPU將一個(gè)字節(jié)的數(shù)據(jù)寫入串行口的發(fā)送緩沖器SBUF時(shí),就啟動(dòng)一幀串行數(shù)據(jù)的發(fā)送,每發(fā)送完一幀串行數(shù)據(jù)后,硬件使TI自動(dòng)置“1”。請求標(biāo)志TI和RI,其格式如圖5-4所示。12第5章中斷系統(tǒng)CPU響應(yīng)串行口發(fā)送中斷時(shí),并不清除TI中斷請求標(biāo)志,TI標(biāo)志必須在中斷服務(wù)程序中用指令對其清“0”。(2)RI—串行口接收中斷請求標(biāo)志位。在串行口接收完一個(gè)串行數(shù)據(jù)幀,硬件自動(dòng)使RI中斷請求標(biāo)志置“1”。CPU在響應(yīng)串行口接收中斷時(shí),RI標(biāo)志并不清“0”,必須在中斷服務(wù)程序中用指令對RI清“0”。5.3中斷允許與中斷優(yōu)先級的控制實(shí)現(xiàn)中斷允許控制和中斷優(yōu)先級控制分別由特殊功能寄存器區(qū)中的中斷允許寄存器IE和中斷優(yōu)先級寄存器IP來實(shí)現(xiàn)的。下面介紹這兩個(gè)特殊功能寄存器。13第5章中斷系統(tǒng)5.3.1中斷允許寄存器IEAT89S51的CPU對各中斷源的開放或屏蔽,是由片內(nèi)的中斷允許寄存器IE控制的。IE的字節(jié)地址為A8H,可進(jìn)行位尋址,其格式如圖5-5所示。圖5-5中斷允許寄存器IE的格式14第5章中斷系統(tǒng)(2)ES—串行口中斷允許位。ES=0,禁止串行口中斷。ES=1,允許串行口中斷。(3)ET1—定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。ET1=0,禁止T1溢出中斷。ET1=1,允許T1溢出中斷。(4)EX1—外部中斷1中斷允許位。EX1=0,禁止外部中斷1中斷。EX1=1,允許外部中斷1中斷

15第5章中斷系統(tǒng)(4)EX1—外部中斷1中斷允許位。EX1=0,禁止外部中斷1中斷。EX1=1,允許外部中斷1中斷。(5)ET0—定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位。ET0=0,禁止T0溢出中斷。ET0=1,允許T0溢出中斷。(6)EX0—外部中斷0中斷允許位。EX0=0,禁止外部中斷0中斷。EX0=1,允許外部中斷0中斷。AT89S51復(fù)位以后,IE被清“0”,所有的中斷請求被禁止。IE16第5章中斷系統(tǒng)中與各個(gè)中斷源相應(yīng)的位可用指令置“1”或清“0”,即可允許或禁止各中斷源的中斷申請。若使某一個(gè)中斷源被允許中斷,除了IE相應(yīng)的位被置“1”外,還必須使EA位置“1”。5.3.2中斷優(yōu)先級寄存器IP中斷請求源有兩個(gè)中斷優(yōu)先級,每一中斷請求源可由軟件設(shè)置為高優(yōu)先級中斷或低優(yōu)先級中斷,也可實(shí)現(xiàn)兩級中斷嵌套。所謂兩級中斷嵌套,就是AT89S51正在執(zhí)行低優(yōu)先級中斷的服務(wù)程序時(shí),可被高優(yōu)先級中斷請求所中斷,待高優(yōu)先級中斷處理完畢后,再返回低優(yōu)先級中斷服務(wù)程序。兩級中斷嵌套的過程如圖5-6所示。17第5章中斷系統(tǒng)圖5-6兩級中斷嵌套的過程18第5章中斷系統(tǒng)關(guān)于各中斷源的中斷優(yōu)先級關(guān)系,可歸納為下面兩條基本規(guī)則:(1)低優(yōu)先級可被高優(yōu)先級中斷,高優(yōu)先級不能低優(yōu)先級中斷。(2)任何一種中斷(不管是高級還是低級),一旦得到響應(yīng),不會再被它的同級中斷源所中斷。如果某一中斷源被設(shè)置為高優(yōu)先級中斷,在執(zhí)行該中斷源的中斷服務(wù)程序時(shí),則不能被任何其他的中斷源的中斷請求所中斷。AT89S51的片內(nèi)有一個(gè)中斷優(yōu)先級寄存器IP,其字節(jié)地址為B8H,可位尋址。只要用程序改變其內(nèi)容,即可進(jìn)行各中斷源中斷優(yōu)先級的設(shè)置,IP寄存器的格式如圖5-7所示。

19第5章中斷系統(tǒng)中斷優(yōu)先級寄存器IP各位的含義如下:(1)PS—串行口中斷優(yōu)先級控制位PS=1,串行口中斷為高優(yōu)先級PS=0,串行口中斷為低優(yōu)先級(2)PT1—定時(shí)器T1中斷優(yōu)先級控制位PT1=1,定時(shí)器T1中斷為高優(yōu)先級PT1=0,定時(shí)器T1中斷為低優(yōu)先級圖5-7IP寄存器的格式20第5章中斷系統(tǒng)(3)PX1—外部中斷1中斷優(yōu)先級控制位PX1=1,外部中斷1中斷為高優(yōu)先級PX1=0,外部中斷1中斷為低優(yōu)先級(4)PT0—定時(shí)器T0中斷優(yōu)先級控制位PT0=1,定時(shí)器T0中斷為高優(yōu)先級PT0=0,定時(shí)器T0中斷為低優(yōu)先級(5)PX0—外部中斷0中斷優(yōu)先級控制位PX0=1,外部中斷0中斷為高優(yōu)先級PX0=0,外部中斷0中斷為低優(yōu)先級21第5章中斷系統(tǒng)中斷優(yōu)先級控制寄存器IP的各位都可由用戶程序置“1”和清“0”,用位操作指令或字節(jié)操作指令可更新IP的內(nèi)容,以改變各中斷源的中斷優(yōu)先級。AT89S51復(fù)位以后,IP的內(nèi)容為0,各個(gè)中斷源均為低優(yōu)先級中斷。下面簡單介紹AT89S51的中斷優(yōu)先級結(jié)構(gòu)。AT89S51的中斷系統(tǒng)有兩個(gè)不可尋址的“優(yōu)先級激活觸發(fā)器”,其中一個(gè)指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來的中斷均被阻止;另一個(gè)觸發(fā)器指示某低優(yōu)先級的中斷正在執(zhí)行,所有同級的中斷都被阻止,但不阻斷高優(yōu)先級的中斷請求。

22第5章中斷系統(tǒng)在同時(shí)收到幾個(gè)同一優(yōu)先級的中斷請求時(shí),哪一個(gè)中斷請求能優(yōu)先得到響應(yīng),取決于內(nèi)部的查詢順序。這相當(dāng)于在同一個(gè)優(yōu)先級內(nèi),還同時(shí)存在另一個(gè)輔助優(yōu)先級結(jié)構(gòu),其查詢順序如表5-1所示。

由此可見,各中斷源在同一個(gè)優(yōu)先級的條件下,外部中斷0的中斷優(yōu)先權(quán)最高,串行口中斷的優(yōu)先權(quán)最低。23第5章中斷系統(tǒng)5.4響應(yīng)中斷請求的條件一個(gè)中斷源的中斷請求被響應(yīng),必須滿足以下必要條件:(1)總中斷允許開關(guān)接通,即IE寄存器中的中斷總允許位EA=1。(2)該中斷源發(fā)出中斷請求,即該中斷源對應(yīng)的中斷請求標(biāo)志為“1”。(3)該中斷源的中斷允許位=1,即該中斷被允許。(4)無同級或更高級中斷正在被服務(wù)。中斷響應(yīng)就是CPU對中斷源提出的中斷請求的接受。當(dāng)CPU查詢到有效中斷請求時(shí),在滿足上述條件時(shí),緊接著就進(jìn)行中斷響應(yīng)。24第5章中斷系統(tǒng)中斷響應(yīng)的主要過程:首先由硬件自動(dòng)生成一條長調(diào)用指令“LCALLaddr16”。這里的addr16就是程序存儲區(qū)中相應(yīng)的中斷入口地址。例如,對于外部中斷1的響應(yīng),硬件自動(dòng)生成的長調(diào)用指令為LCALL 0013H生成LCALL指令后,緊接著就由CPU執(zhí)行該指令。首先將程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧以保護(hù)斷點(diǎn),再將中斷入口地址裝入PC,使程序轉(zhuǎn)向響應(yīng)中斷請求的中斷入口地址。各中斷源服務(wù)程序的入口地址是固定的,如表5-2所示。25第5章中斷系統(tǒng)其中兩個(gè)中斷入口間只相隔8字節(jié),一般情況下難以安放一個(gè)完整的中斷服務(wù)程序。因此,通??偸窃谥袛嗳肟诘刂诽幏胖靡粭l無條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向在其他地址存放的中斷服務(wù)程序入口。26第5章中斷系統(tǒng)中斷響應(yīng)是有條件的,并不是查詢到的所有中斷請求都能被立即響應(yīng),當(dāng)遇到下列三種情況之一時(shí),中斷響應(yīng)被封鎖:(1)CPU正在處理同級或更高優(yōu)先級的中斷。因?yàn)楫?dāng)一個(gè)中斷被響應(yīng)時(shí),要把對應(yīng)的中斷優(yōu)先級狀態(tài)觸發(fā)器置“1”(該觸發(fā)器指出CPU所處理的中斷優(yōu)先級別),從而封鎖了低級中斷請求和同級中斷請求。(2)所查詢的機(jī)器周期不是當(dāng)前正在執(zhí)行指令的最后一個(gè)機(jī)器周期。設(shè)定這個(gè)限制的目的是只有在當(dāng)前指令執(zhí)行完畢后,才能進(jìn)行中斷響應(yīng),以確保當(dāng)前指令執(zhí)行的完整性。(3)正在執(zhí)行的指令是RETI或是訪問IE或IP的指令。因?yàn)榘凑誂T89S51中斷系統(tǒng)的規(guī)定,在執(zhí)行完這些指令后,需要再27第5章中斷系統(tǒng)執(zhí)行完一條指令,才能響應(yīng)新的中斷請求。如果存在上述三種情況之一,CPU將丟棄中斷查詢結(jié)果,不能對中斷進(jìn)行響應(yīng)。5.5外部中斷的響應(yīng)時(shí)間在設(shè)計(jì)者使用外部中斷時(shí),有時(shí)需考慮從外部中斷請求有效(外部中斷請求標(biāo)志置“1”)到轉(zhuǎn)向中斷入口地址所需要的響應(yīng)時(shí)間。下面來討論這個(gè)問題。外部中斷的最短響應(yīng)時(shí)間為3個(gè)機(jī)器周期。其中中斷請求標(biāo)志位查詢占1個(gè)機(jī)器周期,而這個(gè)機(jī)器周期恰好處于指令的最后一個(gè)機(jī)器周期。在這個(gè)機(jī)器周期結(jié)束后,中斷即被響應(yīng),28第5章中斷系統(tǒng) CPU接著執(zhí)行一條硬件子程序調(diào)用指令LCALL以轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序入口,這需要2個(gè)機(jī)器周期。外部中斷響應(yīng)的最長時(shí)間為8個(gè)機(jī)器周期。這種情況發(fā)生在CPU進(jìn)行中斷標(biāo)志查詢時(shí),剛好才開始執(zhí)行RETI或訪問IE或IP的指令,則需把當(dāng)前指令執(zhí)行完再繼續(xù)執(zhí)行一條指令后,才能響應(yīng)中斷。執(zhí)行上述的RETI或訪問IE或IP的指令,最長需要2個(gè)機(jī)器周期。而接著再執(zhí)行一條指令,我們按最長的指令(乘法指令MUL和除法指令DIV)來算,也只有4個(gè)機(jī)器周期。再加上硬件子程序調(diào)用指令LCALL的執(zhí)行,需要2個(gè)機(jī)器周期,所以,外部中斷響應(yīng)的最長時(shí)間為8個(gè)機(jī)器周期。29第5章中斷系統(tǒng)如果已經(jīng)在處理同級或更高級中斷,外部中斷請求的響應(yīng)時(shí)間取決于正在執(zhí)行的中斷服務(wù)程序的處理時(shí)間,這種情況下,響應(yīng)時(shí)間就無法計(jì)算了。這樣,在一個(gè)單一中斷的系統(tǒng)里,AT89S51單片機(jī)對外部中斷請求的響應(yīng)時(shí)間總是在3~8個(gè)機(jī)器周期之間。5.6外部中斷的觸發(fā)方式選擇外部中斷有兩種觸發(fā)方式:電平觸發(fā)方式和跳沿觸發(fā)方式。5.6.1電平觸發(fā)方式若外部中斷定義為電平觸發(fā)方式,外部中斷申請觸發(fā)器的狀態(tài)隨著CPU在每個(gè)機(jī)器周期采樣到的外部中斷輸入引腳的電平變化而變化,這能提高CPU對外部中斷請求的響應(yīng)速

30第5章中斷系統(tǒng)度。當(dāng)外部中斷源被設(shè)定為電平觸發(fā)方式時(shí),在中斷服務(wù)程序返回之前,外部中斷請求輸入必須無效(即外部中斷請求輸入已由低電平變?yōu)楦唠娖剑駝tCPU返回主程序后會再次響應(yīng)中斷。所以電平觸發(fā)方式適合于外部中斷以低電平輸入且中斷服務(wù)程序能清除外部中斷請求源(即外部中斷輸入電平又變?yōu)楦唠娖剑┑那闆r。如何清除電平觸發(fā)方式的外部中斷請求源的電平信號,將在本章的后面介紹。5.6.2跳沿觸發(fā)方式外部中斷若定義為跳沿觸發(fā)方式,外部中斷申請觸發(fā)器能鎖存外部中斷輸入線上的負(fù)跳變。即便是CPU暫時(shí)不能響應(yīng),中斷請求標(biāo)志也不會丟失。在這種方式下,如果相繼連續(xù)兩次31第5章中斷系統(tǒng)采樣,一個(gè)機(jī)器周期采樣到外部中斷輸入為高,下一個(gè)機(jī)器周期采樣為低,則中斷申請觸發(fā)器置“1”,直到CPU響應(yīng)此中斷時(shí),該標(biāo)志才清“0”。這樣就不會丟失中斷,但輸入的負(fù)脈沖寬度至少保持12個(gè)時(shí)鐘周期(若晶振頻率為6MHz,則為2s),才能被CPU采樣到。外部中斷的跳沿觸發(fā)方式適合于以負(fù)脈沖形式輸入的外部中斷請求。5.7中斷請求的撤銷某個(gè)中斷請求被響應(yīng)后,就存在著一個(gè)中斷請求的撤銷問題。下面按中斷請求源的類型分別說明中斷請求的撤銷。

32第5章中斷系統(tǒng)1.定時(shí)器/計(jì)數(shù)器中斷請求的撤銷定時(shí)器/計(jì)數(shù)器中斷的中斷請求被響應(yīng)后,硬件會自動(dòng)把中斷請求標(biāo)志位(TF0或TF1)清“0”,因此定時(shí)器/計(jì)數(shù)器中斷請求是自動(dòng)撤銷的。2.外部中斷請求的撤銷(1)跳沿方式外部中斷請求的撤銷跳沿方式的外部中斷請求的撤銷,包括兩項(xiàng)內(nèi)容:中斷標(biāo)志位清“0”和外中斷信號的撤銷。其中,中斷標(biāo)志位(IE0或IE1)清“0”是在中斷響應(yīng)后由硬件自動(dòng)完成的。而外中斷請求信號的撤銷,由于跳沿信號過后也就消失了,所以跳沿方式的外部中斷請求也是自動(dòng)撤銷的。33第5章中斷系統(tǒng)(2)電平方式外部中斷請求的撤銷對于電平方式外部中斷請求的撤銷,中斷請求標(biāo)志的撤銷是自動(dòng)的,但中斷請求信號的低電平可能繼續(xù)存在,在以后的機(jī)器周期采樣時(shí),又會把已清“0”的IE0或IE1標(biāo)志位重新置“1”。為此,要徹底解決電平方式外部中斷請求的撤銷,除了標(biāo)志位清“0”之外,必要時(shí)還需在中斷響應(yīng)后把中斷請求信號輸入引腳從低電平強(qiáng)制改變?yōu)楦唠娖?。為此,可在系統(tǒng)中增加如圖5-8所示的電路。34第5章中斷系統(tǒng)圖5-8電平方式的外部中斷請求的撤銷電路35第5章中斷系統(tǒng)由圖5-8可見,用D觸發(fā)器鎖存外來的中斷請求低電平,并通過D觸發(fā)器的輸出端Q接到INT0*(或INT1*)。所以,增加的D觸發(fā)器不影響中斷請求。中斷響應(yīng)后,為了撤銷中斷請求,可利用D觸發(fā)器的直接置“1”端SD實(shí)現(xiàn),即把SD端接AT89S51的P1.0端。因此,只要P1.0端輸出一個(gè)負(fù)脈沖就可以使D觸發(fā)器置“1”,從而就撤銷低電平的中斷請求信號。所需的負(fù)脈沖可在中斷服務(wù)程序中先把P1.0置1.再讓P1.0為0,再把P1.0置1,從而產(chǎn)生一個(gè)負(fù)脈沖。3.串行口中斷請求的撤銷串行口中斷請求的撤銷只有標(biāo)志位清“0”的問題。串行口中斷的標(biāo)志位是TI和RI,但對這兩個(gè)中斷標(biāo)志CPU不進(jìn)行自動(dòng)清“0”。因?yàn)樵陧憫?yīng)串行口的中斷后,CPU無法知道

36第5章中斷系統(tǒng)是接收中斷還是發(fā)送中斷,還需測試這兩個(gè)中斷標(biāo)志位的狀態(tài),以判定是接收操作還是發(fā)送操作,然后才能清除。所以串行口中斷請求的撤銷只能使用軟件的方法,在中斷服務(wù)程序中進(jìn)行,即使用軟件在中斷服務(wù)程序中把串行口中斷標(biāo)志位TI、RI清0。5.8中斷函數(shù)為直接使用C51編寫中斷服務(wù)程序,C51中定義了中斷函數(shù)。由于C51編譯器在編譯時(shí)對聲明為中斷服務(wù)程序的函數(shù)自動(dòng)添加了相應(yīng)的現(xiàn)場保護(hù)、阻斷其他中斷、返回時(shí)自動(dòng)恢復(fù)現(xiàn)場等處理的程序段,因而在編寫中斷函數(shù)時(shí)可不必考慮這些問題,減小了用戶編寫中斷服務(wù)程序的繁瑣程度。37第5章中斷系統(tǒng)第3章中介紹的中斷服務(wù)函數(shù)的一般形式為:函數(shù)類型函數(shù)名(形式參數(shù)表)interruptnusingn關(guān)鍵字interrupt后面的n是中斷號,對于51單片機(jī),n的取值為0~4,編譯器從8×n+3處產(chǎn)生中斷向量。AT89S51單片機(jī)的中斷源對應(yīng)的中斷號和中斷向量見表5-3。38第5章中斷系統(tǒng)AT89S51單片機(jī)在內(nèi)部RAM中可使用4個(gè)工作寄存器區(qū),每個(gè)工作寄存器區(qū)包含8個(gè)工作寄存器(R0~R7)。C51擴(kuò)展了一個(gè)關(guān)鍵字using,using后面的n專門用來選擇AT89S51的4個(gè)不同的工作寄存器區(qū)。using是一個(gè)選項(xiàng),如果不選用該項(xiàng),中斷函數(shù)中的所有工作寄存器的內(nèi)容將被保存到堆棧中。關(guān)鍵字using對函數(shù)目標(biāo)代碼的影響如下:在中斷函數(shù)的入口處將當(dāng)前工作寄存器區(qū)的內(nèi)容保護(hù)到堆棧中,函數(shù)返回前將被保護(hù)的寄存器區(qū)的內(nèi)容從堆棧中恢復(fù)。使用關(guān)鍵字using在函數(shù)中確定一個(gè)工作寄存器區(qū)時(shí)須十分小心,要保證任何工作寄存器區(qū)的切換都只在指定的控制區(qū)域中發(fā)39第5章中斷系統(tǒng)生,否則將產(chǎn)生不正確的函數(shù)結(jié)果。例如,外中斷1的中斷服務(wù)函數(shù)如下:voidint1()interrupt2using0 /*中斷號n=2,選擇0區(qū)工作寄存器區(qū)*/中斷調(diào)用與標(biāo)準(zhǔn)C的函數(shù)調(diào)用是不一樣的,當(dāng)中斷事件發(fā)生后,對應(yīng)的中斷函數(shù)被自動(dòng)調(diào)用,中斷函數(shù)既沒有參數(shù),也沒有返回值。中斷函數(shù)會帶來如下影響。(1)編譯器會為中斷函數(shù)自動(dòng)生成中斷向量。(2)退出中斷函數(shù)時(shí),所有保存在堆棧中的工作寄存器及特殊功能寄存器被恢復(fù)。40第5章中斷系統(tǒng)(3)在必要時(shí)特殊功能寄存器Acc、B、DPH、DPL以及PSW的內(nèi)容被保存到堆棧中。編寫AT89S51單片機(jī)中斷程序時(shí),應(yīng)遵循以下規(guī)則:(1)中斷函數(shù)沒有返回值,如果定義了一個(gè)返回值,將會得到不正確的結(jié)果。因此建議將中斷函數(shù)定義為void類型,以明確說明沒有返回值。(2)中斷函數(shù)不能進(jìn)行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導(dǎo)致編譯出錯(cuò)。(3)在任何情況下都不能直接調(diào)用中斷函數(shù),否則會產(chǎn)生編譯錯(cuò)誤。因?yàn)橹袛嗪瘮?shù)的返回是由匯編語言指令RETI完成的。RETI指令會影響AT89S51單片機(jī)中的硬件中斷系統(tǒng)內(nèi)41第5章中斷系統(tǒng)的不可尋址的中斷優(yōu)先級寄存器的狀態(tài)。如果在沒有實(shí)際的中斷請求的情況下,直接調(diào)用中斷函數(shù),也就不會執(zhí)行RETI指令,其操作結(jié)果有可能產(chǎn)生一個(gè)致命的錯(cuò)誤。(4)如果在中斷函數(shù)中再調(diào)用其他函數(shù),則被調(diào)用的函數(shù)所使用的寄存器區(qū)必須與中斷函數(shù)使用的寄存器區(qū)不同。5.9C51編程舉例本節(jié)通過幾個(gè)例程介紹有關(guān)中斷應(yīng)用的程序的編寫。5.9.1單一外中斷的應(yīng)用42第5章中斷系統(tǒng)【例5-2】在51單片機(jī)的P1口上接有8只LED。在外部中斷0輸入引腳P3.2(INT0*)引腳接有一只按鈕開關(guān)K1。程序要求將外部中斷0設(shè)置為負(fù)跳沿觸發(fā)。在程序啟動(dòng)時(shí),P1口上的8只LED亮。按一次按鈕開關(guān)K1,使引腳接地,產(chǎn)生一個(gè)負(fù)跳沿觸發(fā)的外中斷0中斷請求,在中斷服務(wù)程序中,讓低4位的LED和高4位的LED交替閃爍。具體電路如圖5-9所示。43第5章中斷系統(tǒng)圖5-9控制8只LED交替閃爍的電路44第5章中斷系統(tǒng)參考程序如下:#include<reg51.h>voidDelay(unsignedinti) /*延時(shí)函數(shù)Delay(),i為形式參數(shù),不能賦初值*/{ unsignedintj;for(;i>0;i--) for(j=0;j<333;j++) /*晶振為12MHz,j的選擇與晶振頻率有關(guān)*/{;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{ EA=1; /*總中斷允許*/EX0=1; /*允許外部中斷0中斷*/IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/{P1=0;} /*P1口的8只LED全亮*/45第5章中斷系統(tǒng)While(1) /*循環(huán)*/}voidint0()interrupt0using0 /*外中斷0的中斷服務(wù)函數(shù)*/{ EX0=0; /*禁止外部中斷0中斷*/P1=0x0f; /*低4位LED滅,高4位LED亮*/Delay(800); /*延時(shí)800ms*/P1=0xf0; /*高4位LED滅,低4位LED亮*/Delay(800); /*延時(shí)800ms*/EX0=1; /*中斷返回前,打開外部中斷0中斷*/}本例程包含了兩個(gè)部分,一是中斷系統(tǒng)初始化部分,另一是中斷處理服務(wù)函數(shù)部分。46第5章中斷系統(tǒng)5.9.2兩個(gè)外中斷的應(yīng)用當(dāng)多個(gè)中斷源時(shí),只需增加相應(yīng)的中斷服務(wù)函數(shù)即可。例5-3是處理兩個(gè)外中斷請求的例子【例5-3】如圖5-10所示,在51單片機(jī)的P1口上接有8只LED。在外部中斷0輸入引腳P3.2(INT0*)引腳接有一只按鈕開關(guān)K1。在外部中斷1輸入引腳P3.3(INT1*)引腳接有一只按鈕開關(guān)K2。程序要求K1和K2都未按下時(shí),P1口的8只LED呈流水燈顯示,僅K1(P3.2)按下時(shí),左右4只LED交替閃爍。僅按下K2(P3.3),P1口的8只LED全部閃亮。兩個(gè)外中斷的優(yōu)先級相同。47第5章中斷系統(tǒng)圖5-10兩個(gè)外中斷控制8只LED顯示的電路48第5章中斷系統(tǒng)參考程序如下。#include<reg51.h>voidDelay(unsignedinti) /*延時(shí)函數(shù)Delay(),i為形式參數(shù),不能賦初值*/{ unsignedintj;for(;i>0;i--) for(j=0;j<125;j++) {;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{unsignedcharplay[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*定義了流水燈的顯示數(shù)據(jù)*/unsignedchara;49第5章中斷系統(tǒng)for(;;) { for(a=0;a<9;a++) { { Delay(500) /*延時(shí)*/P1=play[a]; /*將已經(jīng)定義的流水燈顯示數(shù)據(jù)送到P1口*/} EA=1; /*總中斷允許*/ EX0=1; /*允許外部中斷0中斷*/ EX1=1 /*允許外部中斷1中斷*/ IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/ IT1=1; /*選擇外部中斷1為跳沿觸發(fā)方式*/ IP=0; /*兩個(gè)外部中斷均為低優(yōu)先級*/}}50第5章中斷系統(tǒng)voidint0_isr(void)interrupt0using0/*外中斷0的中斷服務(wù)函數(shù)*/{ for(;;) P1=0x0f; /*低4位LED滅,高4位LED亮*/ Delay(500); /*延時(shí)*/ P1=0xf0; /*高4位LED滅,低4位LED亮*/ Delay(500); /*延時(shí)*/}voidint1_isr(void)interrupt2using1 /*外中斷1的中斷服務(wù)函數(shù)*/{ for(;;) { P1=0xff; /*全滅*/ Delay(500); /*延時(shí)*/ P1=0; /*全亮*/ Delay(500);} /*延時(shí)*/}51第5章中斷系統(tǒng)5.9.3中斷嵌套中斷嵌套只能發(fā)生在單片機(jī)正在執(zhí)行一個(gè)低優(yōu)先級中斷服務(wù)程序的時(shí)候,此時(shí)又有一個(gè)高優(yōu)先級中斷產(chǎn)生,就會產(chǎn)生高優(yōu)先級中斷打斷低優(yōu)先級中斷服務(wù)程序,去執(zhí)行高優(yōu)先級中斷服務(wù)程序。高優(yōu)先級中斷服務(wù)程序完成后,再繼續(xù)執(zhí)行低優(yōu)先級中斷服務(wù)程序?!纠?-4】電路仍如圖5-10所示,設(shè)計(jì)一個(gè)中斷嵌套程序。要求K1和K2都未按下時(shí),P1口的8只LED呈流水燈顯示,當(dāng)K1按下再松開時(shí),產(chǎn)生一個(gè)低優(yōu)先級的外中斷0請求(跳沿觸發(fā)),進(jìn)入外中斷0中斷服務(wù)程序,左右4只LED交替閃爍。此時(shí)按下K2再松開時(shí),產(chǎn)生一個(gè)高優(yōu)先級的外中斷1請求52第5章中斷系統(tǒng)(跳沿觸發(fā)),進(jìn)入外中斷1中斷服務(wù)程序,P1口的8只LED全部閃爍。當(dāng)顯示一段時(shí)間后,再從外中斷1返回繼續(xù)執(zhí)行外中斷0中斷服務(wù)程序,即P1口控制8只LED左右4只LED交替閃爍。。設(shè)置外中斷1為高優(yōu)先級,外中斷0為低優(yōu)先級。參考程序如下。#include<reg51.h>voidDelay(unsignedinti) /*延時(shí)函數(shù)Delay()*/{ unsignedintj;for(;i>0;i--) for(j=0;j<125;j++) {;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{53第5章中斷系統(tǒng)unsignedcharplay[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*定義流水燈的顯示數(shù)據(jù)*/unsignedchara;for(;;) { for(a=0;a<9;a++) { { Delay(500) /*延時(shí)*/P1=play[a]; /*將已經(jīng)定義的流水燈顯示數(shù)據(jù)送到P1口*/} EA=1; /*總中斷允許*/ EX0=1; /*允許外部中斷0中斷*/ EX1=1 /*允許外部中斷1中斷*/ IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/ IT1=1; /*選擇外部中斷1為跳沿觸發(fā)方式*54第5章中斷系統(tǒng)PX0=0; /*外部中斷0為低優(yōu)先級*/PX1=1; /*外部中斷1為高

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論