單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計第6章--中斷系統(tǒng)課件_第1頁
單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計第6章--中斷系統(tǒng)課件_第2頁
單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計第6章--中斷系統(tǒng)課件_第3頁
單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計第6章--中斷系統(tǒng)課件_第4頁
單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計第6章--中斷系統(tǒng)課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章 中斷系統(tǒng)單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計主要內(nèi)容1324中斷的基本概念單片機(jī)中斷請求中斷響應(yīng)中斷服務(wù)與中斷返回5中斷服務(wù)函數(shù)6單片機(jī)中斷應(yīng)用舉例6.1 中斷的基本概念6.1.1 中斷的概念中斷系統(tǒng)是為使CPU具有對外界緊急事件的實時處理能力而設(shè)置的。當(dāng)中央處理機(jī)CPU正在處理某件事的時候外界發(fā)生了緊急事件請求,要求CPU 暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個緊急事件,處理完以后,再回到原來被中斷的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。一個完整的中斷過程包括中斷請求、中斷響應(yīng)、中斷服務(wù)及中斷返回4個步驟,如圖6-1所示。打個比方,當(dāng)一位經(jīng)理正在處理文件時,電話鈴響了(中斷請求),不得不在文件上做一

2、個記號(斷點(diǎn)地址,即返回地址),暫停工作,去接電話(響應(yīng)中斷),并處理電話請求(中斷服務(wù)),然后,再靜下心來(恢復(fù)中斷前狀態(tài)),接著處理文件(中斷返回)。中斷響應(yīng)過程示意圖6.1.2 中斷源引起CPU中斷的根源或原因,稱為中斷源。中斷源向CPU提出的處理請求,稱為中斷請求或中斷申請。IAP15W4K58S4系列單片機(jī)提供了21個中斷請求源,它們分別是:外部中斷0(INT0)、定時器0中斷、外部中斷1(INT1)、定時器1中斷、串口1中斷、A/D轉(zhuǎn)換中斷、低壓檢測(LVD)中斷、CCP/PWM/PCA中斷、串口2中斷、SPI中斷、外部中斷2(/INT2)、外部中斷3(/INT3)、定時器2中斷、

3、外部中斷4(/INT4)、串口3中斷、串口4中斷、定時器3中斷、定時器4中斷、比較器 中斷、PWM中斷及PWM異常檢測中斷。 除外部中斷2(/INT2)、外部中斷3(/INT3)、定時器T2 中斷、外部中斷4(/INT4)、串口3中斷、串口4中斷、定時器3中斷、定時器4中斷及比較器中斷固定是最低優(yōu)先級中斷外,其它的中斷都具有2個中斷優(yōu)先級,可實現(xiàn)2級中斷服務(wù)程序嵌套。IAP15W4K58S4 中斷結(jié)構(gòu)圖6.1.3 中斷優(yōu)先級當(dāng)有多個中斷源同時向CPU提出中斷請求時,就存在CPU先響應(yīng)哪個中斷請求、后響應(yīng)哪個中斷請求的問題。為此,CPU要對每個中斷源事先確定一個優(yōu)先級別,稱為中斷優(yōu)先級。當(dāng)多個中

4、斷源同時提出中斷請求時CPU先響應(yīng)優(yōu)先級高的中斷請求,之后再響應(yīng)低優(yōu)先級的中斷請求。圖6-3 中斷嵌套6.2 單片機(jī)中斷請求6.2.1 中斷請求標(biāo)志1. TCON中的中斷標(biāo)志位TCON是定時器/計數(shù)器T0和T1的控制寄存器,鎖存了T0、T1的溢出中斷標(biāo)志位及外部中斷0和外部中斷1的中斷標(biāo)志位,地址為88H,復(fù)位值為00H。 特殊功能寄存器TCON中的各位分布如表6-1所示:位號B7B6B5B4B3B2B1B0位名稱TF1TR1TF0TR0IE1IT1IE0IT0TCON寄存器中和中斷請求及控制相關(guān)的位主要有:TF1:T1溢出中斷標(biāo)志。T1被允許計數(shù)以后,從初值開始加1計數(shù)。當(dāng)產(chǎn)生溢出時由硬件自

5、動使TF1置“1”,向CPU請求中斷,一直保持到CPU響應(yīng)中斷時,才由硬件清“0”(也可由查詢軟件清“0”)。TR1:定時器1的運(yùn)行控制位。TF0:T0溢出中斷標(biāo)志。T0被允許計數(shù)以后,從初值開始加1計數(shù),當(dāng)產(chǎn)生溢出時,由硬件自動使TF0置“1”,向CPU請求中斷,一直保持CPU響應(yīng)該中斷時,才由硬件清0(也可由查詢 軟件清0)。TR0:定時器0的運(yùn)行控制位。TCON寄存器中和中斷請求及控制相關(guān)的位主要有:IE1:外部中斷1 (INT1/P3.3)中斷請求標(biāo)志。IE1=1,外部中斷向CPU請求中斷,當(dāng)CPU響應(yīng)該中斷時由硬件對IE1清“0”。IT1:外部中斷1中斷源類型選擇位。IT1=0,IN

6、T1/P3.3引腳上的上升沿或下降沿信號均可觸發(fā)外部中斷1。IT1=1,外部中斷1為下降沿觸發(fā)方式。 IE0:外部中斷0 (INT0/P3.2)中斷請求標(biāo)志。IE0=1,外部中斷0向CPU請求中斷,當(dāng)CPU響應(yīng)外部中斷時,由硬件對IE0清“0”。IT0:外部中斷0中斷源類型選擇位。IT0=0,INT0/P3.2引腳上的上升沿或下降沿均可觸發(fā)外部中斷0。IT0=1,外部中斷0為下降沿觸發(fā)方式。2SCON中的中斷標(biāo)志位SCON是串行口1控制寄存器,鎖存了串行口1的發(fā)送、接收中斷標(biāo)志位TI和RI。地址為98H,復(fù)位值為00H。特殊功能寄存器SCON中各位分布如表6-2所示:位號B7B6B5B4B3B

7、2B1B0位名稱SM0/FESM1SM2RENTB8RB8TIRITI:串行口1發(fā)送中斷標(biāo)志。串行口1以方式0發(fā)送時,每當(dāng)發(fā)送完8位數(shù)據(jù),由硬件置1;若以方式1、方式2或方式3發(fā)送時,在發(fā)送停止位的開始時置TI=1表示串行口1正在向CPU 申請中斷(發(fā)送中斷)。值得注意的是,CPU響應(yīng)發(fā)送中斷請求,轉(zhuǎn)向執(zhí)行中斷服務(wù)程序 時并不將TI清零,TI必須由用戶在中斷服務(wù)程序中清零。RI:串行口 1接收中斷標(biāo)志若串行口1允許接收且以方式0工作,則每當(dāng)接收到第8位數(shù)據(jù)時置1;若以方式1、2、3工作且SM2=0時,則每當(dāng)接收到停止位的中間時置1;當(dāng)串行口以方式2或方式3工作且SM2=1時,則僅當(dāng)接收到的第9

8、位數(shù)據(jù)RB8為1后,同時還要接收到停止位的中間時置RI為1表示串行口1正向CPU申請中斷(接收中斷),RI必須由用戶的中斷服務(wù)程序清零。3ADC_CONTR中的中斷標(biāo)志位ADC_CONTR是ADC控制寄存器,鎖存了A/D轉(zhuǎn)換結(jié)束中斷標(biāo)志ADC_FLAG。地址為BCH,復(fù)位值為00H。特殊功能寄存器ADC_CONTR中的各位分布如表6-6所示:位號B7B6B5B4B3B2B1B0位名稱ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0ADC_CONTR中的中斷標(biāo)志位ADC_POWER:ADC電源控制位。當(dāng)ADC_POWER=0時,關(guān)閉ADC電源;

9、當(dāng)ADC_PWOER=1時,打開ADC電源。ADC_FLAG: ADC轉(zhuǎn)換結(jié)束標(biāo)志位,可用于請求A/D轉(zhuǎn)換的中斷。當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1,要用軟件清0。不管是A/D轉(zhuǎn)換完成后由該位申請產(chǎn)生中斷,還是由軟件查詢該標(biāo)志位A/D轉(zhuǎn)換是否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1,一定要軟件清0?!局攸c(diǎn)】ADC_START:ADC轉(zhuǎn)換啟動控制位,設(shè)置為“1”時,開始轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后為0。A/D轉(zhuǎn)換控制寄存器ADC_CONTR中的其他位與中斷無關(guān),在此不作介紹。4PCON中的中斷標(biāo)志位PCON是電源控制寄存器,鎖存了低電壓檢測中斷標(biāo)志位LVDF。地址為87H,復(fù)位值為00H。特殊功

10、能寄存器PCON中各位分布如表6-7所示:位號B7B6B5B4B3B2B1B0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDLPCON中的中斷標(biāo)志位LVDF:低壓檢測標(biāo)志位,同時也是低壓檢測中斷請求標(biāo)志位。在正常工作和空閑工作狀態(tài)時,如果內(nèi)部工作電壓Vcc低于低壓檢測門檻電壓,該位自動置1,與低壓檢測中斷是否被允許無關(guān)。即在內(nèi)部工作電壓Vcc低于低壓檢測門檻電壓時,不管有沒有允許低壓檢測中斷,該位都自動為1。該位要用軟件清0,清0后如內(nèi)部工作電壓Vcc繼續(xù)低于低壓檢測門檻電壓,該位又被自動設(shè)置為1。在進(jìn)入掉電工作狀態(tài)前,如果低壓檢測電路未被允許可產(chǎn)生中斷,則在進(jìn)入掉電模式 后,該低

11、壓檢測電路不工作以降低功耗。如果被允許可產(chǎn)生低壓檢測中斷,則在進(jìn)入掉電模式后,該低壓檢測電路繼續(xù)工作,在內(nèi)部工作電壓Vcc低于低壓檢測門檻電壓后,產(chǎn)生低壓檢測中斷,可將MCU從掉電狀態(tài)喚醒。電源控制寄存器PCON中的其他位與低壓檢測中斷無關(guān),在此不作介紹5CCON中的中斷標(biāo)志位CCON是PCA控制寄存器,鎖存了PCA計數(shù)器溢出中斷標(biāo)志位CF及CCF2、CCF1、CCF0。地址為D8H.,復(fù)位值為00H。特殊功能寄存器CCON中各位分布如表6-8所示:位號B7B6B5B4B3B2B1B0位名稱CFCR-CCF2CCF1CCF0CCON中的中斷標(biāo)志位CF:PCA計數(shù)器溢出標(biāo)志位。當(dāng)PCA計數(shù)溢出時

12、,由硬件將CF置1,并向CPU發(fā)出中斷請求。CPU響應(yīng)該中斷后不能通過硬件將CF位清0,用戶必須通過軟件將該位清零。CCF2/CCF1/CCF0:PCA各模塊的中斷標(biāo)志位。其中CCF2對應(yīng)模塊2,CCF1對應(yīng)模塊1,CCF0對應(yīng)模塊0。當(dāng)出現(xiàn)匹配或捕獲時由硬件將對應(yīng)標(biāo)志位置1,并向CPU發(fā)出中斷請求。CPU響應(yīng)該中斷后不能通過硬件將CCF2/CCF1/CCF0位清0,用戶必須通過軟件將該位清0。在中斷服務(wù)程序中,通過判斷各標(biāo)志位以確定是哪個模塊產(chǎn)生了中斷。6SPSTAT中的中斷標(biāo)志位SPSTAT是SPI狀態(tài)寄存器,鎖存了SPI傳輸完成中斷標(biāo)志位SPIF。地址為CDH,復(fù)位值為00H。特殊功能寄

13、存器SPSTAT中各位分布如表6-9:位號B7B6B5B4B3B2B1B0復(fù)位值SPIFWOOL- SPSTAT中的中斷標(biāo)志位SPIF為SPI傳輸完成的中斷標(biāo)志位。當(dāng)一次SPI傳輸完成時,由硬件將SPIF位置1,并向CPU發(fā)出中斷請求。CPU響應(yīng)該中斷后不能通過硬件將SPIF位清零,用戶必須通過軟件向該位寫1而清零?!局匾客獠恐袛?、外部中斷3及外部中斷4只能在下降沿觸發(fā),且這幾個中斷標(biāo)志位對用戶可不見。當(dāng)對應(yīng)的中斷響應(yīng)后或在EXn=0(n=2、3、4)時,這些中斷請求標(biāo)志位會自動被清零。定時器T2的中斷請求標(biāo)志位對用戶也是可不見的。當(dāng)T2的中斷被響應(yīng)后或ET2=0時,該中斷標(biāo)志位會自動被清

14、零。6.2.2 中斷允許的控制1. 中斷允許寄存器IE地址A8H,可位尋址,復(fù)值為00H。如表6-10所示:位號B7B6B5B4B3B2B1B0位名稱EAELVDEADCESET1EX1ET0EX0 中斷允許寄存器IEEA:CPU的總中斷允許控制位,EA=1,CPU開放中斷,EA=0,CPU屏蔽所有的中斷申請。EA的作用是使中斷允許形成多級控制。即各中斷源首先受EA控制;其次還受各中斷源自己的中斷允許控制位控制。ELVD:低壓檢測中斷允許位,ELVD=1,允許低壓檢測中斷,ELVD=0,禁止低壓檢測中斷。EADC:A/D轉(zhuǎn)換中斷允許位,EADC=1,允許A/D轉(zhuǎn)換中斷,EADC=0,禁止A/D

15、轉(zhuǎn)換中斷。ES:串行口1中斷允許位,ES=1,允許串行口1中斷,ES=0,禁止串行口1中斷。 中斷允許寄存器IEET1:定時/計數(shù)器T1的溢出中斷允許位,ET1=1,允許T1中斷,ET1=0,禁止T1中斷。EX1:外部中斷1中斷允許位,EX1=1,允許外部中斷1中斷,EX1=0,禁止外部中斷1中斷。ET0 :T0的溢出中斷允許位,ET0=1允許T0中斷,ET0=0禁止T0中斷。EX0 :外部中斷0中斷允許位,EX0=1允許中斷,EX0=0禁止中斷。2. 外部中斷允許和時鐘輸出寄存器INT_CLKO(AUXR2)地址為8FH,復(fù)位值為00H。如表6-12所示:位號B7B6B5B4B3B2B1B0

16、位名稱-EX4EX3EX2MCKO_S2T2CLKOT1CLKOT0CLKO 外部中斷允許和時鐘輸出寄存器INT_CLKO(AUXR2)EX4:外部中斷4()中斷允許位,EX4=1允許中斷,EX4=0禁止中斷。外部中斷4()只能下降沿觸發(fā)。EX3:外部中斷3()中斷允許位,EX3=1允許中斷,EX3=0禁止中斷。外部中斷3()也只能下降沿觸發(fā)。EX2:外部中斷2()中斷允許位,EX2=1允許中斷,EX2=0禁止中斷。外部中斷2()同樣只能下降沿觸發(fā)。MCKO_S2,T2CLKO,T1CLKO,T0CLKO與中斷無關(guān),在此不作介紹。IAP15W4K58S4單片機(jī)系統(tǒng)復(fù)位后,所有中斷源的中斷允許控

17、制位以及CPU中斷控制位(EA)均被清零,即禁止所有中斷。一個中斷要處于允許狀態(tài),必須滿足兩個條件:一是總中斷(CPU中斷)允許位EA為1,二是該中斷允許位為1。3. 中斷優(yōu)先級控制寄存器IP地址為B8H,可位尋址,復(fù)位值為00H。其格式如表6-13所示:位號B7B6B5B4B3B2B1B0位名稱PPCAPLVDPADCPSPT1PX1PT0PX0 中斷優(yōu)先級控制寄存器IPPPCA:PCA中斷優(yōu)先級控制位。當(dāng)PPCA=0時,PCA中斷為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PPCA=1時,PCA中斷為最高優(yōu)先級中斷(優(yōu)先級1)。PLVD:低壓檢測中斷優(yōu)先級控制位。當(dāng)PLVD=0時,低壓檢測中斷為最低優(yōu)

18、先級中斷(優(yōu)先級0);當(dāng)PLVD=1時,低壓檢測中斷為最高優(yōu)先級中斷(優(yōu)先級1)。PADC:A/D轉(zhuǎn)換中斷優(yōu)先級控制位。當(dāng)PADC=0時,A/D轉(zhuǎn)換中斷為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PADC=1時,A/D轉(zhuǎn)換中斷為最高優(yōu)先級中斷(優(yōu)先級1)。PS:串口 1中斷優(yōu)先級控制位。當(dāng)PS=0時,串口 1中斷為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PS=1時,串口 1中斷為最高優(yōu)先級中斷(優(yōu)先級1)。 中斷優(yōu)先級控制寄存器IPPT1:定時器1中斷優(yōu)先級控制位。當(dāng)PT1=0時,定時器1中斷為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PT1=1時,定時器1中斷為最高優(yōu)先級中斷(優(yōu)先級1)。PX1:外部中斷1優(yōu)先級控制位。當(dāng)P

19、X1=0時,外部中斷1為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PX1=1時,外部中斷1為最高優(yōu)先級中斷(優(yōu)先級1)。PT0:定時器0中斷優(yōu)先級控制位。當(dāng)PT0=0時,定時器0中斷為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PT0=1時,定時器0中斷為最高優(yōu)先級中斷(優(yōu)先級1)。PX0:外部中斷0優(yōu)先級控制位。當(dāng)PX0=0時,外部中斷0為最低優(yōu)先級中斷(優(yōu)先級0);當(dāng)PX0=1時,外部中斷0為最高優(yōu)先級中斷(優(yōu)先級1)。6.3 中斷響應(yīng)6.3.1 中斷響應(yīng)時間在中斷允許的條件下,中斷源發(fā)出中斷請求后,CPU肯定會響應(yīng)中斷,但若有下列任何一種情況存在,中斷響應(yīng)會受到阻斷,會不同程度地增加CPU響應(yīng)中斷的時間。(1)C

20、PU正在執(zhí)行同級或高級優(yōu)先級的中斷(2)正在執(zhí)行RETI中斷返回指令或訪問與中斷有關(guān)的寄存器指令,如訪問IE和IP的指令。(3)當(dāng)前指令未執(zhí)行完。 若存在上述任何一種情況,中斷查詢結(jié)果即被取消,CPU不響應(yīng)中斷請求,而在下一指令周期繼續(xù)查詢;若條件滿足,CPU在下一指令周期響應(yīng)中斷。 在每個指令周期的最后時刻,CPU對各中斷源采樣,并設(shè)置相應(yīng)的中斷標(biāo)志位;CPU在下一個指令周期的最后時刻按優(yōu)先級順序查詢各中斷標(biāo)志,如查到某個中斷標(biāo)志為“1”,將在下一個指令周期按優(yōu)先級的高低順序進(jìn)行處理。6.3.2 中斷響應(yīng)過程中斷響應(yīng)過程包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。CPU響應(yīng)中斷時,將相應(yīng)

21、的優(yōu)先級狀態(tài)觸發(fā)器置“1”,然后由硬件自動產(chǎn)生一個長調(diào)用指令LCALL。此指令首先把斷點(diǎn)地址壓入堆棧保護(hù),再將中斷服務(wù)程序的入口地址送到程序計數(shù)器PC,使程序轉(zhuǎn)向相應(yīng)的中斷服務(wù)程序。IAP15W4K58S4單片機(jī)各個中斷源中斷響應(yīng)的入口地址由硬件事先設(shè)定,如表6-16所示:其中,中斷號是在C語言程序中編寫中斷函數(shù)使用的。在中斷函數(shù)中,中斷號與各中斷源是一一對應(yīng)的,不能混淆。6.3.3 中斷請求標(biāo)志的撤銷問題CPU響應(yīng)中斷請求后即進(jìn)入中斷服務(wù)程序。在中斷返回前,應(yīng)撤除該中斷請求;否則,會重復(fù)引起中斷而導(dǎo)致錯誤。IAP15W4K58S4單片機(jī)各中斷源中斷請求撤除的方法不盡相同,如下所示:(1)定時

22、器中斷請求的撤除:對于定時器/計數(shù)器T0或T1溢出中斷,CPU在響應(yīng)中斷后,即由硬件自動清除其中標(biāo)志位TF0或TF1,無需采取其他措施。定時器T2、T3、T4中斷的中斷請求標(biāo)志位被隱藏起來,對用戶是不可見的。當(dāng)響應(yīng)的服務(wù)程序執(zhí)行后,這些中斷請求標(biāo)志位自動被清零。(2)串行口1中斷請求的撤除:對于串行口1中斷,CPU在響應(yīng)之后,硬件不會自動清除中斷請求標(biāo)志位TI或RI,必須在中斷服務(wù)程序中,在判別出是TI還是RI引起的中斷后,再用軟件將其清除。(3)外部中斷請求的撤除:外部中斷0和外部中斷1的觸發(fā)方式有ITx(x=0,1)設(shè)置,但無論ITx(x=0,1)設(shè)置為“0”還是“1”,都屬于邊沿觸發(fā)。C

23、PU在響應(yīng)中斷后,由硬件自動清除其中斷請求標(biāo)志位IE0或IE1,無需采取其他措施。外部中斷2、外部中斷3、外部中斷4的中斷請求標(biāo)志雖然是隱含的,但同樣屬于邊沿觸發(fā)。CPU在響應(yīng)中斷后,由硬件自動清除其中斷標(biāo)志位,無需采取其他措施。注:IT:Interrupt Trigger(4)電源低電壓檢測中斷:電源低電壓檢測中斷的中斷請求標(biāo)志位,在中斷響應(yīng)后,不會自動清零,需用軟件清除。6.4 中斷服務(wù)與中斷返回中斷請求的識別、中斷優(yōu)先級的判斷、響應(yīng)中斷的各種動作是由CPU自動完成的,而中斷處理與中斷返回需要由開發(fā)者編寫的中斷服務(wù)程序來完成。在編寫中斷服務(wù)程序時要考慮下列問題:(1)因為各中斷源的中斷服務(wù)

24、程序入口地址僅相隔8個字節(jié),一般容納不下中斷服務(wù)程序的執(zhí)行代碼,所以通常在中斷服務(wù)程序的入口處存放一條無條件轉(zhuǎn)移指令,在CPU響應(yīng)中斷時轉(zhuǎn)移到實際中斷服務(wù)程序的入口去執(zhí)行。6.4 中斷服務(wù)與中斷返回(2)如果在執(zhí)行實際中斷服務(wù)程序的過程中不允許高級別的中斷打斷程序的執(zhí)行,需要在實際中斷服務(wù)程序的入口處用軟件屏蔽CPU的中斷,而在中斷返回前再用軟件打開CPU中斷。(3)如果在中斷服務(wù)程序中要使用主程序(或能夠被該中斷源中斷的其他程序)所用的寄存器或存儲單元,就需要對它們進(jìn)行保護(hù),即保護(hù)現(xiàn)場。當(dāng)然,在保護(hù)現(xiàn)場之前應(yīng)先屏蔽CPU的中斷。6.4 中斷服務(wù)與中斷返回(4)因為在CPU響應(yīng)串行接口發(fā)送/接

25、收中斷時CPU不能使中斷標(biāo)志位自動復(fù)位,因此要在中斷服務(wù)程序中使用軟件將其中斷標(biāo)志位復(fù)位。對電平型外部信號觸發(fā)中斷也要考慮類似的問題。(5)如果在中斷服務(wù)程序中進(jìn)行了現(xiàn)場保護(hù),在中斷返回前一定要恢復(fù)現(xiàn)場。如果CPU的中斷被屏蔽了,一定要用軟件再打開CPU中斷。然后才是中斷服務(wù)程序的最后一條語句RETI,從中斷服務(wù)程序返回主程序。6.4 中斷服務(wù)與中斷返回(6)為了使應(yīng)用系統(tǒng)能夠及時響應(yīng)各中斷源的中斷請求,中斷服務(wù)程序要盡可能簡短,一些可以在主程序中完成的操作,應(yīng)安排在主程序中來完成,這樣可以減少中斷處理占用的時間,提高響應(yīng)速度。6.4 中斷服務(wù)與中斷返回中斷服務(wù)函數(shù)定義的一般形式為: 函數(shù)類型

26、 函數(shù)名(形式參數(shù)表)interrupt nusing m其中,關(guān)鍵字interrupt后面的n是中斷號,n的取值范圍為0-31。編譯器從8n+3處產(chǎn)生中斷向量,具體的中斷號n和中斷向量取決于不同的單片機(jī)芯片。關(guān)鍵字using用于選擇工作寄存器組,m為對應(yīng)的寄存器組號,m取值為0-3,對應(yīng)51單片機(jī)的0-3寄存器組。中斷源中斷號n中斷向量8n+3外部中斷000003H定時器/計數(shù)器中斷T01000BH外部中斷120013H定時器/計數(shù)器中斷T13001BH串行口1中斷40023HIAP15W4K58S4單片機(jī)常用的中斷源的中斷號如表6-17所示6.5 中斷服務(wù)函數(shù)對于匯編語言,通常在這些中斷響

27、應(yīng)的入口地址處存放一條無條件轉(zhuǎn)移指令,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序的起始地址上去。例如:ORG 001BH ;T1中斷響應(yīng)的入口LJMP T1_ISR ;轉(zhuǎn)向T1中斷服務(wù)程序中斷號是在C語言程序中編寫中斷函數(shù)使用的,在中斷函數(shù)中中斷號與各中斷源是一一對應(yīng)的,不能混淆。例如:void INT0_ISR(void)interrupt0 /外部中斷0中斷函數(shù)void Timer0_ISR(void)interrupt1 /定時器T0中斷函數(shù)void INT1_ISR(void)interrupt2 /外部中斷1中斷函數(shù)void Timer1_ISR(void)interrupt3 /定時器T1

28、中斷函數(shù)void UART_ISR(void)interrupt4 /串行口1中斷函數(shù)void LVD_ISR(void)interrupt6 /LVD中斷函數(shù)例6.1 外部中斷應(yīng)用利用外部中斷0、外部中斷1控制LED燈,當(dāng)外部中斷0輸入時,使LED1、LED2取反;當(dāng)外部中斷1輸入時,使LED3、LED4取反。原理圖如圖6-4所示:6.6 IAP15W4K58S4單片機(jī)中斷應(yīng)用舉例C語言參考程序如下:#include iap15w4k58s4.h #define uchar unsigned char#define uint unsigned int/* 位定義*/sbit LED1= P1

29、0;sbit LED2= P11;sbit LED3= P12;sbit LED4= P13;void main( ) P1M0=0X00; P1M1=0X00; IT0 = 1; /外部中斷0為下降沿觸發(fā)方式 IT1 = 1; /外部中斷1為下降沿觸發(fā)方式EX0 = 1; /允許外部中斷0 EX1 = 1; /允許外部中斷1 EA = 1; /總中斷允許 while(1);void INT0_ISR(void) interrupt 0 LED1 = LED1; LED2 = LED2;void INT1_ISR(void) interrupt 2 LED3 = LED3; LED4 = LE

30、D4; 例6.2 單片機(jī)外部中斷的擴(kuò)展利用外部中斷輸入線(如INT0和INT1腳),每一中斷輸入線可以通過邏輯與(或邏輯)門電路的輸入端連接多個外部中斷源,同時,利用并行輸入端口線作為多個中斷源的識別線。原理圖如圖6-5所示:圖6-5 一個外中斷擴(kuò)展成多個外中斷原理圖如圖6-6所示為一臺3機(jī)器故障檢測與指示系統(tǒng),當(dāng)無故障時,LED3燈亮;當(dāng)有故障時,LED3燈滅,0號故障時,LED0燈亮,1號故障時,LED1燈亮,2號故障時,LED2燈亮。圖6-6 機(jī)器故障檢測與指示系統(tǒng)原理圖C語言參考程序如下所示:#include iap15w4k58s4.h sbit P10Pl0;sbit P11Pl1

31、;sbit Pl2Pl2;sbit Pl3Pl3;sbit P14Pl4;sbit P15Pl5;sbit Pl6Pl6;sbit Pl7Pl7;void INT0_ISR(void)interrupt 0P11P10; /故障指示燈狀態(tài)與故障信號狀態(tài)相反 P13P12;P15P14; void main(void)unsigned char i;IT01; /外部中斷0為下降沿觸發(fā)方式EX01; /允許外部中斷0 EA 1; /總中斷允許 while(1) iPl; if (!(i0 x15) /若沒有故障,點(diǎn)亮工作指示燈LED3 Pl70; else Pl71; /若有故障,熄滅工作指示燈

32、LED3 例6.3 利用定時器中斷用T1方式0實現(xiàn)定時,在P1.0引腳輸出周期為10ms的方波。解:根據(jù)題意,采用T1方式0進(jìn)行定時,因此(TMOD)=00H。因為方波周期是10ms,因此T1的定時時間應(yīng)為5ms,每5ms時間到就對P1.0取反,就可實現(xiàn)在P1.0引腳輸出周期為10ms的方波。系統(tǒng)采用12M晶振,分頻系數(shù)為12,即定時脈鐘周期為1s,則T1的初值為:X = M 計數(shù)值= 65536 -5000 = 60536 =EC78H即:TH1 = ECH,TL1 = 78H。C語言參考程序如下所示:#include iap15w4k58s4.h /單片機(jī)IAP15W4K58S4頭文sbi

33、t Wave_out = P10;void Timer1_Init(void) /5ms12MHz AUXR &= 0 xBF; /定時器時鐘12T模式 TMOD &= 0 x00; /設(shè)置定時器模式 TL1 = 0 x78; /設(shè)置定時初值 TH1 = 0 xEC; /設(shè)置定時初值 TF1 = 0; /清除TF1標(biāo)志 TR1 = 1; /定時器1開始計 EA = 1; /總中斷打開 ET1 = 1; /定時器1中斷打開 void main( ) / 主函數(shù) P1M1=0X00; P1M0=0X00; Timer1_Init( ); while (1); /主循環(huán) void Timer1_is

34、r(void) interrupt 3 using 1 /中斷函數(shù) TL1 = 0 x78; /定時器初值 TH1= 0 xEC; /定時器初值 Wave_out = Wave_out; /每5ms取反,即產(chǎn)生10ms的方波6.6 IAP15W4K58S4單片機(jī)中斷應(yīng)用舉例串口1收到數(shù)據(jù),如果數(shù)據(jù)為“turnonled,LED點(diǎn)亮2秒后,再熄滅。波特率9600,數(shù)據(jù)位8,奇偶效驗無,停止位1,數(shù)據(jù)流控制無。C語言參考程序如下:#include iap15w4k58s4.h / 單片機(jī)iap15w4k58s4頭文件#include / 加入此頭文件后,可使用_nop_庫函數(shù)#include delay

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論