版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第5章
中斷系統(tǒng)
1第5章中斷系統(tǒng)內(nèi)容概要本章介紹AT89S51片內(nèi)中斷系統(tǒng)的硬件結(jié)構(gòu)和工作原理。中斷系統(tǒng)能夠?qū)崟r地響應片內(nèi)功能部件和外圍設備發(fā)出的中斷請求并及時進入中斷服務子程序進行處理。通過本章學習,讀者應重點掌握與中斷系統(tǒng)有關的特殊功能寄存器以及中斷系統(tǒng)的應用特性,以及熟練地進行中斷系統(tǒng)應用的編程。2第5章中斷系統(tǒng)5.1AT89S51中斷技術概述在單片機系統(tǒng)中,中斷技術主要用于實時監(jiān)測與控制,也就是要求單片機能及時地響應中斷請求源提出的服務請求,并作出快速響應并及時處理。這些工作就是由單片機片內(nèi)的中斷系統(tǒng)來實現(xiàn)的。當中斷請求源發(fā)出中斷請求時,如果中斷請求被允許的話,單片機暫時中止當前正在執(zhí)行的主程序,轉(zhuǎn)到中斷服務處理程序處理中斷服務請求。中斷服務處理程序處理完中斷服務請求后,再回到原來被中止的程序之處(斷點),繼續(xù)執(zhí)行被中斷的主程序。圖5-1顯示了單片機對外圍設備中斷服務請求的整個中斷響應和處理過程。3第5章中斷系統(tǒng)圖5-1中斷響應和處理過程4第5章中斷系統(tǒng)如果單片機沒有中斷系統(tǒng),單片機的大量時間可能會浪費在查詢是否有服務請求發(fā)生的定時查詢操作上,即不論是否有服務請求發(fā)生,都必須去查詢。采用中斷技術完全消除了單片機在查詢方式中的等待現(xiàn)象,大大地提高了單片機的工作效率和實時性。由于中斷工作方式的優(yōu)點極為明顯,因此,單片機的片內(nèi)硬件中都帶有中斷系統(tǒng)。5.2AT89S51中斷系統(tǒng)結(jié)構(gòu)中斷系統(tǒng)結(jié)構(gòu)如圖5-2所示。共有5個中斷請求源(簡稱中斷源),2個中斷優(yōu)先級,可實現(xiàn)2級中斷服務程序嵌套。每一中斷源可用軟件獨立地控制為允許中斷或關中斷狀態(tài);每一中斷源的中斷優(yōu)先級別均可用軟件來設置。
5第5章中斷系統(tǒng)圖5-2AT89S51的中斷系統(tǒng)結(jié)構(gòu)6第5章中斷系統(tǒng)由圖5-2可見,中斷系統(tǒng)共有5個中斷請求源,它們是:(1)INT0*—外部中斷請求0,中斷請求信號由引腳輸入,中斷請求標志為IE0。(2)INT1*—外部中斷請求1,中斷請求信號由引腳輸入,中斷請求標志為IE1。(3)定時器/計數(shù)器T0計數(shù)溢出發(fā)出的中斷請求,中斷請求標志為TF0。(4)定時器/計數(shù)器T1計數(shù)溢出發(fā)出的中斷請求,中斷請求標志為TF1。(5)串行口中斷請求,中斷請求標志為發(fā)送中斷TI或接收中斷RI。7第5章中斷系統(tǒng)5.2.2中斷請求標志寄存器5個中斷請求源的中斷請求標志分別由特殊功能寄存器TCON和SCON的相應位鎖存(見圖5-2)。1.TCON寄存器為定時器/計數(shù)器的控制寄存器,字節(jié)地址為88H,可位尋址。該寄存器中既包括T0和T1的溢出中斷請求標志位TF0和TF1,也包括了兩個外部中斷請求的標志位IE1與IE0,此外還包括了兩個外部中斷請求源的中斷觸發(fā)方式選擇位。特殊功能寄存器TCON的格式如圖5-3所示。
8第5章中斷系統(tǒng)圖5-3特殊功能寄存器TCON的格式TCON寄存器中與中斷系統(tǒng)有關的各標志位的功能如下:(1)TF1—片內(nèi)定時器/計數(shù)器T1的溢出中斷請求標志位。當啟動T1計數(shù)后,定時器/計數(shù)器T1從初值開始加1計數(shù),當最高位產(chǎn)生溢出時,由硬件使TF1置“1”,向CPU申請中斷。CPU響應TF1中斷時,TF1標志由硬件自動清“0”,TF1也可由軟件清“0”。9第5章中斷系統(tǒng)(2)TF0—片內(nèi)定時器/計數(shù)器T0的溢出中斷請求標志位,功能與TF1類似。(3)IE1—外部中斷請求1的中斷請求標志位。(4)IE0—外部中斷請求0的中斷請求標志位,其功能與IE1類似。(5)IT1—選擇外部中斷請求1為跳沿觸發(fā)方式還是電平觸發(fā)方式。IT1=0,為電平觸發(fā)方式,加到INT1*引腳上的外部中斷請求輸入信號為低電平有效,并把IE1置“1”。轉(zhuǎn)向中斷服務程序時,則由硬件自動把IE1清“0”。IT1=1,為跳沿觸發(fā)方式,加到INT1*引腳上的外部中斷請求輸10第5章中斷系統(tǒng)入信號電平從高到低的負跳變有效,并把IE1置“1”。轉(zhuǎn)向中斷服務程序時,則由硬件自動把IE1清“0”。(6)IT0—選擇外部中斷請求0為跳沿觸發(fā)方式還是電平觸發(fā)方式,其意義與IT1類似。當AT89S51復位后,TCON被清“0”,5個中斷源的中斷請求標志均為0。TR1(D6位)、TR0(D4位)這2位與中斷系統(tǒng)無關,僅與定時器/計數(shù)器T1和T0有關,將在第6章介紹。2.SCON寄存器SCON為串行口控制寄存器,字節(jié)地址為98H,可位尋址。SCON的低二位鎖存串行口的發(fā)送中斷和接收中斷的中斷11第5章中斷系統(tǒng)圖5-4SCON中的中斷請求標志位SCON中各標志位的功能如下:(1)TI—串行口的發(fā)送中斷請求標志位。CPU將一個字節(jié)的數(shù)據(jù)寫入串行口的發(fā)送緩沖器SBUF時,就啟動一幀串行數(shù)據(jù)的發(fā)送,每發(fā)送完一幀串行數(shù)據(jù)后,硬件使TI自動置“1”。請求標志TI和RI,其格式如圖5-4所示。12第5章中斷系統(tǒng)CPU響應串行口發(fā)送中斷時,并不清除TI中斷請求標志,TI標志必須在中斷服務程序中用指令對其清“0”。(2)RI—串行口接收中斷請求標志位。在串行口接收完一個串行數(shù)據(jù)幀,硬件自動使RI中斷請求標志置“1”。CPU在響應串行口接收中斷時,RI標志并不清“0”,必須在中斷服務程序中用指令對RI清“0”。5.3中斷允許與中斷優(yōu)先級的控制實現(xiàn)中斷允許控制和中斷優(yōu)先級控制分別由特殊功能寄存器區(qū)中的中斷允許寄存器IE和中斷優(yōu)先級寄存器IP來實現(xiàn)的。下面介紹這兩個特殊功能寄存器。13第5章中斷系統(tǒng)5.3.1中斷允許寄存器IEAT89S51的CPU對各中斷源的開放或屏蔽,是由片內(nèi)的中斷允許寄存器IE控制的。IE的字節(jié)地址為A8H,可進行位尋址,其格式如圖5-5所示。圖5-5中斷允許寄存器IE的格式14第5章中斷系統(tǒng)(2)ES—串行口中斷允許位。ES=0,禁止串行口中斷。ES=1,允許串行口中斷。(3)ET1—定時器/計數(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ù)器T0的溢出中斷允許位。ET0=0,禁止T0溢出中斷。ET0=1,允許T0溢出中斷。(6)EX0—外部中斷0中斷允許位。EX0=0,禁止外部中斷0中斷。EX0=1,允許外部中斷0中斷。AT89S51復位以后,IE被清“0”,所有的中斷請求被禁止。IE16第5章中斷系統(tǒng)中與各個中斷源相應的位可用指令置“1”或清“0”,即可允許或禁止各中斷源的中斷申請。若使某一個中斷源被允許中斷,除了IE相應的位被置“1”外,還必須使EA位置“1”。5.3.2中斷優(yōu)先級寄存器IP中斷請求源有兩個中斷優(yōu)先級,每一中斷請求源可由軟件設置為高優(yōu)先級中斷或低優(yōu)先級中斷,也可實現(xiàn)兩級中斷嵌套。所謂兩級中斷嵌套,就是AT89S51正在執(zhí)行低優(yōu)先級中斷的服務程序時,可被高優(yōu)先級中斷請求所中斷,待高優(yōu)先級中斷處理完畢后,再返回低優(yōu)先級中斷服務程序。兩級中斷嵌套的過程如圖5-6所示。17第5章中斷系統(tǒng)圖5-6兩級中斷嵌套的過程18第5章中斷系統(tǒng)關于各中斷源的中斷優(yōu)先級關系,可歸納為下面兩條基本規(guī)則:(1)低優(yōu)先級可被高優(yōu)先級中斷,高優(yōu)先級不能低優(yōu)先級中斷。(2)任何一種中斷(不管是高級還是低級),一旦得到響應,不會再被它的同級中斷源所中斷。如果某一中斷源被設置為高優(yōu)先級中斷,在執(zhí)行該中斷源的中斷服務程序時,則不能被任何其他的中斷源的中斷請求所中斷。AT89S51的片內(nèi)有一個中斷優(yōu)先級寄存器IP,其字節(jié)地址為B8H,可位尋址。只要用程序改變其內(nèi)容,即可進行各中斷源中斷優(yōu)先級的設置,IP寄存器的格式如圖5-7所示。
19第5章中斷系統(tǒng)中斷優(yōu)先級寄存器IP各位的含義如下:(1)PS—串行口中斷優(yōu)先級控制位PS=1,串行口中斷為高優(yōu)先級PS=0,串行口中斷為低優(yōu)先級(2)PT1—定時器T1中斷優(yōu)先級控制位PT1=1,定時器T1中斷為高優(yōu)先級PT1=0,定時器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—定時器T0中斷優(yōu)先級控制位PT0=1,定時器T0中斷為高優(yōu)先級PT0=0,定時器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復位以后,IP的內(nèi)容為0,各個中斷源均為低優(yōu)先級中斷。下面簡單介紹AT89S51的中斷優(yōu)先級結(jié)構(gòu)。AT89S51的中斷系統(tǒng)有兩個不可尋址的“優(yōu)先級激活觸發(fā)器”,其中一個指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來的中斷均被阻止;另一個觸發(fā)器指示某低優(yōu)先級的中斷正在執(zhí)行,所有同級的中斷都被阻止,但不阻斷高優(yōu)先級的中斷請求。
22第5章中斷系統(tǒng)在同時收到幾個同一優(yōu)先級的中斷請求時,哪一個中斷請求能優(yōu)先得到響應,取決于內(nèi)部的查詢順序。這相當于在同一個優(yōu)先級內(nèi),還同時存在另一個輔助優(yōu)先級結(jié)構(gòu),其查詢順序如表5-1所示。
由此可見,各中斷源在同一個優(yōu)先級的條件下,外部中斷0的中斷優(yōu)先權(quán)最高,串行口中斷的優(yōu)先權(quán)最低。23第5章中斷系統(tǒng)5.4響應中斷請求的條件一個中斷源的中斷請求被響應,必須滿足以下必要條件:(1)總中斷允許開關接通,即IE寄存器中的中斷總允許位EA=1。(2)該中斷源發(fā)出中斷請求,即該中斷源對應的中斷請求標志為“1”。(3)該中斷源的中斷允許位=1,即該中斷被允許。(4)無同級或更高級中斷正在被服務。中斷響應就是CPU對中斷源提出的中斷請求的接受。當CPU查詢到有效中斷請求時,在滿足上述條件時,緊接著就進行中斷響應。24第5章中斷系統(tǒng)中斷響應的主要過程:首先由硬件自動生成一條長調(diào)用指令“LCALLaddr16”。這里的addr16就是程序存儲區(qū)中相應的中斷入口地址。例如,對于外部中斷1的響應,硬件自動生成的長調(diào)用指令為LCALL 0013H生成LCALL指令后,緊接著就由CPU執(zhí)行該指令。首先將程序計數(shù)器PC的內(nèi)容壓入堆棧以保護斷點,再將中斷入口地址裝入PC,使程序轉(zhuǎn)向響應中斷請求的中斷入口地址。各中斷源服務程序的入口地址是固定的,如表5-2所示。25第5章中斷系統(tǒng)其中兩個中斷入口間只相隔8字節(jié),一般情況下難以安放一個完整的中斷服務程序。因此,通常總是在中斷入口地址處放置一條無條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向在其他地址存放的中斷服務程序入口。26第5章中斷系統(tǒng)中斷響應是有條件的,并不是查詢到的所有中斷請求都能被立即響應,當遇到下列三種情況之一時,中斷響應被封鎖:(1)CPU正在處理同級或更高優(yōu)先級的中斷。因為當一個中斷被響應時,要把對應的中斷優(yōu)先級狀態(tài)觸發(fā)器置“1”(該觸發(fā)器指出CPU所處理的中斷優(yōu)先級別),從而封鎖了低級中斷請求和同級中斷請求。(2)所查詢的機器周期不是當前正在執(zhí)行指令的最后一個機器周期。設定這個限制的目的是只有在當前指令執(zhí)行完畢后,才能進行中斷響應,以確保當前指令執(zhí)行的完整性。(3)正在執(zhí)行的指令是RETI或是訪問IE或IP的指令。因為按照AT89S51中斷系統(tǒng)的規(guī)定,在執(zhí)行完這些指令后,需要再27第5章中斷系統(tǒng)執(zhí)行完一條指令,才能響應新的中斷請求。如果存在上述三種情況之一,CPU將丟棄中斷查詢結(jié)果,不能對中斷進行響應。5.5外部中斷的響應時間在設計者使用外部中斷時,有時需考慮從外部中斷請求有效(外部中斷請求標志置“1”)到轉(zhuǎn)向中斷入口地址所需要的響應時間。下面來討論這個問題。外部中斷的最短響應時間為3個機器周期。其中中斷請求標志位查詢占1個機器周期,而這個機器周期恰好處于指令的最后一個機器周期。在這個機器周期結(jié)束后,中斷即被響應,28第5章中斷系統(tǒng) CPU接著執(zhí)行一條硬件子程序調(diào)用指令LCALL以轉(zhuǎn)到相應的中斷服務程序入口,這需要2個機器周期。外部中斷響應的最長時間為8個機器周期。這種情況發(fā)生在CPU進行中斷標志查詢時,剛好才開始執(zhí)行RETI或訪問IE或IP的指令,則需把當前指令執(zhí)行完再繼續(xù)執(zhí)行一條指令后,才能響應中斷。執(zhí)行上述的RETI或訪問IE或IP的指令,最長需要2個機器周期。而接著再執(zhí)行一條指令,我們按最長的指令(乘法指令MUL和除法指令DIV)來算,也只有4個機器周期。再加上硬件子程序調(diào)用指令LCALL的執(zhí)行,需要2個機器周期,所以,外部中斷響應的最長時間為8個機器周期。29第5章中斷系統(tǒng)如果已經(jīng)在處理同級或更高級中斷,外部中斷請求的響應時間取決于正在執(zhí)行的中斷服務程序的處理時間,這種情況下,響應時間就無法計算了。這樣,在一個單一中斷的系統(tǒng)里,AT89S51單片機對外部中斷請求的響應時間總是在3~8個機器周期之間。5.6外部中斷的觸發(fā)方式選擇外部中斷有兩種觸發(fā)方式:電平觸發(fā)方式和跳沿觸發(fā)方式。5.6.1電平觸發(fā)方式若外部中斷定義為電平觸發(fā)方式,外部中斷申請觸發(fā)器的狀態(tài)隨著CPU在每個機器周期采樣到的外部中斷輸入引腳的電平變化而變化,這能提高CPU對外部中斷請求的響應速
30第5章中斷系統(tǒng)度。當外部中斷源被設定為電平觸發(fā)方式時,在中斷服務程序返回之前,外部中斷請求輸入必須無效(即外部中斷請求輸入已由低電平變?yōu)楦唠娖剑?,否則CPU返回主程序后會再次響應中斷。所以電平觸發(fā)方式適合于外部中斷以低電平輸入且中斷服務程序能清除外部中斷請求源(即外部中斷輸入電平又變?yōu)楦唠娖剑┑那闆r。如何清除電平觸發(fā)方式的外部中斷請求源的電平信號,將在本章的后面介紹。5.6.2跳沿觸發(fā)方式外部中斷若定義為跳沿觸發(fā)方式,外部中斷申請觸發(fā)器能鎖存外部中斷輸入線上的負跳變。即便是CPU暫時不能響應,中斷請求標志也不會丟失。在這種方式下,如果相繼連續(xù)兩次31第5章中斷系統(tǒng)采樣,一個機器周期采樣到外部中斷輸入為高,下一個機器周期采樣為低,則中斷申請觸發(fā)器置“1”,直到CPU響應此中斷時,該標志才清“0”。這樣就不會丟失中斷,但輸入的負脈沖寬度至少保持12個時鐘周期(若晶振頻率為6MHz,則為2s),才能被CPU采樣到。外部中斷的跳沿觸發(fā)方式適合于以負脈沖形式輸入的外部中斷請求。5.7中斷請求的撤銷某個中斷請求被響應后,就存在著一個中斷請求的撤銷問題。下面按中斷請求源的類型分別說明中斷請求的撤銷。
32第5章中斷系統(tǒng)1.定時器/計數(shù)器中斷請求的撤銷定時器/計數(shù)器中斷的中斷請求被響應后,硬件會自動把中斷請求標志位(TF0或TF1)清“0”,因此定時器/計數(shù)器中斷請求是自動撤銷的。2.外部中斷請求的撤銷(1)跳沿方式外部中斷請求的撤銷跳沿方式的外部中斷請求的撤銷,包括兩項內(nèi)容:中斷標志位清“0”和外中斷信號的撤銷。其中,中斷標志位(IE0或IE1)清“0”是在中斷響應后由硬件自動完成的。而外中斷請求信號的撤銷,由于跳沿信號過后也就消失了,所以跳沿方式的外部中斷請求也是自動撤銷的。33第5章中斷系統(tǒng)(2)電平方式外部中斷請求的撤銷對于電平方式外部中斷請求的撤銷,中斷請求標志的撤銷是自動的,但中斷請求信號的低電平可能繼續(xù)存在,在以后的機器周期采樣時,又會把已清“0”的IE0或IE1標志位重新置“1”。為此,要徹底解決電平方式外部中斷請求的撤銷,除了標志位清“0”之外,必要時還需在中斷響應后把中斷請求信號輸入引腳從低電平強制改變?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ā)器不影響中斷請求。中斷響應后,為了撤銷中斷請求,可利用D觸發(fā)器的直接置“1”端SD實現(xiàn),即把SD端接AT89S51的P1.0端。因此,只要P1.0端輸出一個負脈沖就可以使D觸發(fā)器置“1”,從而就撤銷低電平的中斷請求信號。所需的負脈沖可在中斷服務程序中先把P1.0置1.再讓P1.0為0,再把P1.0置1,從而產(chǎn)生一個負脈沖。3.串行口中斷請求的撤銷串行口中斷請求的撤銷只有標志位清“0”的問題。串行口中斷的標志位是TI和RI,但對這兩個中斷標志CPU不進行自動清“0”。因為在響應串行口的中斷后,CPU無法知道
36第5章中斷系統(tǒng)是接收中斷還是發(fā)送中斷,還需測試這兩個中斷標志位的狀態(tài),以判定是接收操作還是發(fā)送操作,然后才能清除。所以串行口中斷請求的撤銷只能使用軟件的方法,在中斷服務程序中進行,即使用軟件在中斷服務程序中把串行口中斷標志位TI、RI清0。5.8中斷函數(shù)為直接使用C51編寫中斷服務程序,C51中定義了中斷函數(shù)。由于C51編譯器在編譯時對聲明為中斷服務程序的函數(shù)自動添加了相應的現(xiàn)場保護、阻斷其他中斷、返回時自動恢復現(xiàn)場等處理的程序段,因而在編寫中斷函數(shù)時可不必考慮這些問題,減小了用戶編寫中斷服務程序的繁瑣程度。37第5章中斷系統(tǒng)第3章中介紹的中斷服務函數(shù)的一般形式為:函數(shù)類型函數(shù)名(形式參數(shù)表)interruptnusingn關鍵字interrupt后面的n是中斷號,對于51單片機,n的取值為0~4,編譯器從8×n+3處產(chǎn)生中斷向量。AT89S51單片機的中斷源對應的中斷號和中斷向量見表5-3。38第5章中斷系統(tǒng)AT89S51單片機在內(nèi)部RAM中可使用4個工作寄存器區(qū),每個工作寄存器區(qū)包含8個工作寄存器(R0~R7)。C51擴展了一個關鍵字using,using后面的n專門用來選擇AT89S51的4個不同的工作寄存器區(qū)。using是一個選項,如果不選用該項,中斷函數(shù)中的所有工作寄存器的內(nèi)容將被保存到堆棧中。關鍵字using對函數(shù)目標代碼的影響如下:在中斷函數(shù)的入口處將當前工作寄存器區(qū)的內(nèi)容保護到堆棧中,函數(shù)返回前將被保護的寄存器區(qū)的內(nèi)容從堆棧中恢復。使用關鍵字using在函數(shù)中確定一個工作寄存器區(qū)時須十分小心,要保證任何工作寄存器區(qū)的切換都只在指定的控制區(qū)域中發(fā)39第5章中斷系統(tǒng)生,否則將產(chǎn)生不正確的函數(shù)結(jié)果。例如,外中斷1的中斷服務函數(shù)如下:voidint1()interrupt2using0 /*中斷號n=2,選擇0區(qū)工作寄存器區(qū)*/中斷調(diào)用與標準C的函數(shù)調(diào)用是不一樣的,當中斷事件發(fā)生后,對應的中斷函數(shù)被自動調(diào)用,中斷函數(shù)既沒有參數(shù),也沒有返回值。中斷函數(shù)會帶來如下影響。(1)編譯器會為中斷函數(shù)自動生成中斷向量。(2)退出中斷函數(shù)時,所有保存在堆棧中的工作寄存器及特殊功能寄存器被恢復。40第5章中斷系統(tǒng)(3)在必要時特殊功能寄存器Acc、B、DPH、DPL以及PSW的內(nèi)容被保存到堆棧中。編寫AT89S51單片機中斷程序時,應遵循以下規(guī)則:(1)中斷函數(shù)沒有返回值,如果定義了一個返回值,將會得到不正確的結(jié)果。因此建議將中斷函數(shù)定義為void類型,以明確說明沒有返回值。(2)中斷函數(shù)不能進行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導致編譯出錯。(3)在任何情況下都不能直接調(diào)用中斷函數(shù),否則會產(chǎn)生編譯錯誤。因為中斷函數(shù)的返回是由匯編語言指令RETI完成的。RETI指令會影響AT89S51單片機中的硬件中斷系統(tǒng)內(nèi)41第5章中斷系統(tǒng)的不可尋址的中斷優(yōu)先級寄存器的狀態(tài)。如果在沒有實際的中斷請求的情況下,直接調(diào)用中斷函數(shù),也就不會執(zhí)行RETI指令,其操作結(jié)果有可能產(chǎn)生一個致命的錯誤。(4)如果在中斷函數(shù)中再調(diào)用其他函數(shù),則被調(diào)用的函數(shù)所使用的寄存器區(qū)必須與中斷函數(shù)使用的寄存器區(qū)不同。5.9C51編程舉例本節(jié)通過幾個例程介紹有關中斷應用的程序的編寫。5.9.1單一外中斷的應用42第5章中斷系統(tǒng)【例5-2】在51單片機的P1口上接有8只LED。在外部中斷0輸入引腳P3.2(INT0*)引腳接有一只按鈕開關K1。程序要求將外部中斷0設置為負跳沿觸發(fā)。在程序啟動時,P1口上的8只LED亮。按一次按鈕開關K1,使引腳接地,產(chǎn)生一個負跳沿觸發(fā)的外中斷0中斷請求,在中斷服務程序中,讓低4位的LED和高4位的LED交替閃爍。具體電路如圖5-9所示。43第5章中斷系統(tǒng)圖5-9控制8只LED交替閃爍的電路44第5章中斷系統(tǒng)參考程序如下:#include<reg51.h>voidDelay(unsignedinti) /*延時函數(shù)Delay(),i為形式參數(shù),不能賦初值*/{ unsignedintj;for(;i>0;i--) for(j=0;j<333;j++) /*晶振為12MHz,j的選擇與晶振頻率有關*/{;} /*空函數(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的中斷服務函數(shù)*/{ EX0=0; /*禁止外部中斷0中斷*/P1=0x0f; /*低4位LED滅,高4位LED亮*/Delay(800); /*延時800ms*/P1=0xf0; /*高4位LED滅,低4位LED亮*/Delay(800); /*延時800ms*/EX0=1; /*中斷返回前,打開外部中斷0中斷*/}本例程包含了兩個部分,一是中斷系統(tǒng)初始化部分,另一是中斷處理服務函數(shù)部分。46第5章中斷系統(tǒng)5.9.2兩個外中斷的應用當多個中斷源時,只需增加相應的中斷服務函數(shù)即可。例5-3是處理兩個外中斷請求的例子【例5-3】如圖5-10所示,在51單片機的P1口上接有8只LED。在外部中斷0輸入引腳P3.2(INT0*)引腳接有一只按鈕開關K1。在外部中斷1輸入引腳P3.3(INT1*)引腳接有一只按鈕開關K2。程序要求K1和K2都未按下時,P1口的8只LED呈流水燈顯示,僅K1(P3.2)按下時,左右4只LED交替閃爍。僅按下K2(P3.3),P1口的8只LED全部閃亮。兩個外中斷的優(yōu)先級相同。47第5章中斷系統(tǒng)圖5-10兩個外中斷控制8只LED顯示的電路48第5章中斷系統(tǒng)參考程序如下。#include<reg51.h>voidDelay(unsignedinti) /*延時函數(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) /*延時*/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; /*兩個外部中斷均為低優(yōu)先級*/}}50第5章中斷系統(tǒng)voidint0_isr(void)interrupt0using0/*外中斷0的中斷服務函數(shù)*/{ for(;;) P1=0x0f; /*低4位LED滅,高4位LED亮*/ Delay(500); /*延時*/ P1=0xf0; /*高4位LED滅,低4位LED亮*/ Delay(500); /*延時*/}voidint1_isr(void)interrupt2using1 /*外中斷1的中斷服務函數(shù)*/{ for(;;) { P1=0xff; /*全滅*/ Delay(500); /*延時*/ P1=0; /*全亮*/ Delay(500);} /*延時*/}51第5章中斷系統(tǒng)5.9.3中斷嵌套中斷嵌套只能發(fā)生在單片機正在執(zhí)行一個低優(yōu)先級中斷服務程序的時候,此時又有一個高優(yōu)先級中斷產(chǎn)生,就會產(chǎn)生高優(yōu)先級中斷打斷低優(yōu)先級中斷服務程序,去執(zhí)行高優(yōu)先級中斷服務程序。高優(yōu)先級中斷服務程序完成后,再繼續(xù)執(zhí)行低優(yōu)先級中斷服務程序。【例5-4】電路仍如圖5-10所示,設計一個中斷嵌套程序。要求K1和K2都未按下時,P1口的8只LED呈流水燈顯示,當K1按下再松開時,產(chǎn)生一個低優(yōu)先級的外中斷0請求(跳沿觸發(fā)),進入外中斷0中斷服務程序,左右4只LED交替閃爍。此時按下K2再松開時,產(chǎn)生一個高優(yōu)先級的外中斷1請求52第5章中斷系統(tǒng)(跳沿觸發(fā)),進入外中斷1中斷服務程序,P1口的8只LED全部閃爍。當顯示一段時間后,再從外中斷1返回繼續(xù)執(zhí)行外中斷0中斷服務程序,即P1口控制8只LED左右4只LED交替閃爍。。設置外中斷1為高優(yōu)先級,外中斷0為低優(yōu)先級。參考程序如下。#include<reg51.h>voidDelay(unsignedinti) /*延時函數(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) /*延時*/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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《社會心理因素》課件
- 《電信業(yè)風云》課件
- 寒假自習課 25春初中道德與法治八年級下冊教學課件 第二單元 第2課時 公民基本義務
- 《沙盤規(guī)則介紹》課件
- 《定價的基本策略》課件
- 班干部工作總結(jié)3篇
- 2023年學校志愿者心得體會字萬能-學校志愿者工作總結(jié)(5篇)
- 安全生產(chǎn)月基本知識培訓116
- 《紅樓夢導讀》課件
- 圖像上傳隱私保護-洞察分析
- 推板式造波機的機械結(jié)構(gòu)設計
- SAPHR快速指南
- 廣東海洋大學大數(shù)據(jù)庫課程設計
- 商業(yè)發(fā)票INVOICE模板
- (完整版)食堂管理制度及流程
- 某醫(yī)院后備人才梯隊建設方案
- 二年級上冊英語教案Unit6 Lesson22︱北京課改版
- 桂枝加龍骨牡蠣湯_金匱要略卷上_方劑加減變化匯總
- 電機與電氣控制技術PPT課件
- 廢棄鉆井泥漿和壓裂返排液無害化處理研究報告
- 論文-基于單片機的搶答器.doc
評論
0/150
提交評論