版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
7-11/25內(nèi)容提綱一中斷的概念二8051單片機(jī)的中斷系統(tǒng)及其管理2/25目標(biāo)掌握中斷的概念及8051單片機(jī)的中斷系統(tǒng)結(jié)構(gòu)及管理。3/25中斷的概念一4/25中斷的概念中斷的概念是在20世紀(jì)50年代中期提出的,是計算機(jī)中的一個很重要的技術(shù),它既和硬件有關(guān),也和軟件有關(guān)。正是因為有了中斷技術(shù),才使得計算機(jī)的工作更加靈活、效率更高。中斷技術(shù)的出現(xiàn)使得計算機(jī)的發(fā)展和應(yīng)用大大的推進(jìn)了一步。所以,中斷功能的強(qiáng)弱已成為衡量一臺計算機(jī)功能完善與否的重要指標(biāo)。最初引進(jìn)中斷技術(shù)的目的是為了提高計算機(jī)輸入輸出的效率,改善計算機(jī)的整體性能。當(dāng)CPU需要與外部設(shè)備交換一批數(shù)據(jù)時,由于CPU的工作速度遠(yuǎn)遠(yuǎn)高于外設(shè)的工作速度,每傳送一組數(shù)據(jù)后,CPU等待“很長”時間才能傳送下一組數(shù)據(jù),在等待期間CPU處在空運(yùn)行狀態(tài),造成CPU的浪費(fèi)。所謂中斷是指計算機(jī)在執(zhí)行其他程序的過程中,當(dāng)出現(xiàn)了某些異常事件或某種請求時,CPU暫時中止正在執(zhí)行的程序,而轉(zhuǎn)去執(zhí)行對異常事件或某種請求的服務(wù)程序。當(dāng)服務(wù)完畢后,CPU再回到被暫時中止的程序繼續(xù)執(zhí)行。5/25中斷的概念計算機(jī)采用中斷技術(shù),大大提高了工作效率和處理問題的靈活性,主要表現(xiàn)在3個方面:1)解決了快速CPU和慢速外設(shè)之間的矛盾,可使CPU和外設(shè)并行工作。2)可及時處理控制系統(tǒng)中許多隨機(jī)參數(shù)和信息。3)具備了處理故障的能力,提高了機(jī)器自身的可靠性。中斷類似于程序設(shè)計中的調(diào)用子程序,但它們又有區(qū)別,主要區(qū)別見表7-1。一般保護(hù)斷點(diǎn)是硬件完成的,保護(hù)現(xiàn)場須在中斷處理程序中用相應(yīng)的指令完成。表7-1中斷和調(diào)用子程序之間的區(qū)別中
斷調(diào)用子程序產(chǎn)生是隨機(jī)的程序中事先安排好的既保護(hù)斷點(diǎn),又保護(hù)現(xiàn)場可只保護(hù)斷點(diǎn)為外設(shè)服務(wù)和為處理各種事件服務(wù)為主程序服務(wù)(與外設(shè)無關(guān))6/258051單片機(jī)的中斷系統(tǒng)及其管理二7/251.中斷源及其優(yōu)先級管理中斷源是指能發(fā)出中斷請求,引起中斷的裝置或事件。8051單片機(jī)提供5個中斷請求源,其中2個為外部中斷請求
和 (由P3.2和P3.3輸入),2個為片內(nèi)定時/計數(shù)器T0和T1的溢出中斷請求TF0和TF1,另一個為片內(nèi)串行口發(fā)送中斷請求TI或接收中斷請求RI,這些中斷請求信號分別鎖存在特殊功能寄存器TCON和SCON中。(1)TCON:定時/計數(shù)器T0和T1的控制寄存器該寄存器同時鎖存T0和T1的溢出中斷請求標(biāo)志及外部中斷
和的中斷請求標(biāo)志。TCON的各位定義如下:
地址b7b6b5b4b3b2b1b0復(fù)位值88HTF1TR1TF0TR0IE1IT1IE0IT000H其中,與中斷有關(guān)的位有:1)IT0:外部中斷觸發(fā)方式控制位??捎绍浖?或清0。0:電平觸發(fā)方式,低電平有效。1:邊沿觸發(fā)方式,輸入腳上電平由高到低的負(fù)跳變有效。一、中斷源8/25
2)IE0:外部中斷請求標(biāo)志。當(dāng)IT0=0即電平觸發(fā)方式時,每個機(jī)器周期的S5P2采樣,若
為低電平,將直接觸發(fā)外部中斷。當(dāng)IT0=1即
為邊沿觸發(fā)方式時,當(dāng)?shù)谝粋€機(jī)器周期采樣到
為高電平,第二個機(jī)器周期采樣到
為低電平時,由硬件置位IE0,并以此來向CPU請求中斷。當(dāng)CPU響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序時由硬件清0。3)IT1:外部中斷
觸發(fā)方式控制位,與IT0類似。4)IE1:外部中斷
請求標(biāo)志,其意義和IE0相同。外部中斷輸入信號、中斷申請標(biāo)志IEx及外部中斷申請觸發(fā)方式控制位ITx三者關(guān)系如圖7-1所示(x=0,1)。5)TF0:定時/計數(shù)器T0溢出中斷標(biāo)志。在啟動T0計數(shù)后,定時/計數(shù)器T0從初值開始加1計數(shù),當(dāng)最高位產(chǎn)生溢出時,由硬件置TF0為1,向CPU申請中斷,CPU響應(yīng)TF0中斷時清0該標(biāo)志位。TF0也可用軟件清0(查詢方式)。6)TF1:定時/計數(shù)器T1的溢出中斷標(biāo)志,功能和TF0類似。9/25(2)SCON:串行口控制寄存器(地址為98H,復(fù)位值為00H)用于對串行口的工作方式進(jìn)行控制,其最低兩位鎖存串行發(fā)送中斷標(biāo)志TI和串行接收中斷標(biāo)志RI。SCON的各位定義如下:位號b7b6b5b4b3b2b1b0位名稱SM0SM1SM2RENTB8RB8TIRI與中斷有關(guān)的標(biāo)志位有:1)TI:串行口發(fā)送中斷標(biāo)志。在串行口以方式0發(fā)送時,每當(dāng)發(fā)送完8位數(shù)據(jù),由硬件置1;若以方式1、方式2或方式3發(fā)送時,在發(fā)送停止位的開始時置1。TI=1表示串行口發(fā)送器正在向CPU申請中斷。值得注意的是,CPU響應(yīng)發(fā)送器中斷請求,轉(zhuǎn)向執(zhí)行中斷服務(wù)程序時并不將TI清0,TI必須由用戶在中斷服務(wù)程序中清0。2)RI:串行口接收中斷標(biāo)志。若串行口接收器允許接收,并以方式0工作,每當(dāng)接收到第8位數(shù)據(jù)時置1;若以方式1、2、3工作,且SM2=0時,每當(dāng)接收器接收到停止位的中間時置1;當(dāng)串行口以方式2或方式3工作,且SM2=1時,僅當(dāng)接收到的第9位數(shù)據(jù)RB8為1后,同時還要接收到停止位的中間時置1。RI為1表示串行口接收器正向CPU申請中斷,同樣RI必須由用戶的中斷服務(wù)程序清0。10/25二、中斷的開放、禁止及優(yōu)先級(1)中斷的開放和禁止8051單片機(jī)中斷的開放和禁止是通過對中斷允許寄存器IE的相應(yīng)位的設(shè)置實現(xiàn)的,對中斷源的開放和禁止是由兩級控制組成的,即總控制和對每個中斷源的分別控制??偪刂朴糜跊Q定整個中斷系統(tǒng)是開放還是關(guān)閉,當(dāng)整個中斷系統(tǒng)關(guān)閉時,CPU不響應(yīng)任何中斷請求。對于每個中斷源的分別控制是在中斷系統(tǒng)開放的前提下,決定某一個中斷源是開放還是禁止。IE(地址為0A8H,復(fù)位值為00H)中的各中斷允許控制位定義如下:位號b7b6b5b4b3b2b1b0位名稱EA--ESET1EX1ET0EX01)EA:中斷允許總控制位。
0:關(guān)閉中斷系統(tǒng),所有中斷源的中斷請求均被禁止,稱為關(guān)中斷。
1:開放中斷系統(tǒng),所有中斷源的中斷請求均被開放,稱為開中斷,但某一個中斷源的請
求是否開放,還要由該中斷源所對應(yīng)的中斷允許控制位所決定。11/252)ES:串行口中斷允許控制位。
1:允許串行口中斷; 0:禁止串行口中斷。3)ET1:定時器1中斷允許控制位。
1:允許定時器1中斷; 0:禁止定時器1中斷。4)EXl:外部中斷中斷允許控制位。
1:允許外部中斷1中斷; 0:禁止外部中斷1中斷。5)ET0:定時器0中斷允許控制位。
1:允許定時器0中斷; 0:禁止定時器0中斷。6)EX0:外部中斷源中斷允許控制位。
1:允許外部中斷0中斷; 0:禁止外部中斷0中斷。8051單片機(jī)復(fù)位后,各中斷允許寄存器控制位均被清0,即禁止所有中斷。如果需要開放某些中斷,可在程序中將相應(yīng)中斷控制位置為1。12/25(2)中斷的優(yōu)先級8051單片機(jī)具有兩個中斷優(yōu)先級,即高優(yōu)先級和低優(yōu)先級,可以實現(xiàn)兩級中斷嵌套。每一個中斷源都可以由軟件設(shè)定為高優(yōu)先級或低優(yōu)先級,優(yōu)先級的設(shè)定通過中斷優(yōu)先級寄存器IP完成。在低優(yōu)先級中斷服務(wù)程序運(yùn)行期間,如果來了一個高優(yōu)先級的中斷請求,除非在低優(yōu)先級的服務(wù)程序中關(guān)中斷或禁止某些高優(yōu)先級的中斷請求,否則將允許高優(yōu)先級的中斷請求中斷低優(yōu)先級的服務(wù)程序,轉(zhuǎn)去執(zhí)行高優(yōu)先級的中斷服務(wù)程序,低級或同級的中斷請求不能中斷正在執(zhí)行的中斷服務(wù)程序。中斷優(yōu)先級寄存器IP(地址為0B8H,復(fù)位值為00H)中各位的作用如下:位號b7b6b5b4b3b2b1b0位名稱---PSPT1PX1PT0PX013/251=為高優(yōu)先級; 0=為低優(yōu)先級。1)PS:串行口中斷優(yōu)先級控制位。
1=串行口中斷為高優(yōu)先級; 0=串行口中斷為低優(yōu)先級。2)PT1:定時器T1中斷優(yōu)先級控制位。
1=定時器T1中斷為高優(yōu)先級; 0=定時器T1中斷為低優(yōu)先級。3)PX1:外部中斷
優(yōu)先級控制位。
1=外部中斷1中斷為高優(yōu)先級; 0=外部中斷1中斷為低優(yōu)先級。4)PT0:定時器T0中斷優(yōu)先級控制位。
1=定時器T0中斷為高優(yōu)先級; 0=定時器T0中斷為低優(yōu)先級。5)PX0:外部中斷
優(yōu)先級控制位。
1=外部中斷0中斷為高優(yōu)先級;
0=外部中斷0為低優(yōu)先級。用戶可據(jù)需要對IE中相應(yīng)的位置1或清0,來允許或禁止各中斷源的中斷申請。欲使某中斷源允許中斷,必須同時使EA=1,首先使CPU開放中斷。所以EA相當(dāng)于中斷允許的“總開關(guān)”。至于中斷優(yōu)先級寄存器IP,復(fù)位時將清0,會把各個中斷源置為低優(yōu)先級中斷,同樣,用戶也可對相應(yīng)位置1或清0,來改變各中斷源的中斷優(yōu)先級。整個中斷系統(tǒng)結(jié)構(gòu)如圖7-2所示。14/25圖7-28051單片機(jī)的中斷系統(tǒng)15/258051單片機(jī)對中斷優(yōu)先級的處理原則是:
1)不同級的中斷源同時申請中斷時,先高后低;
2)處理低級中斷又收到高級中斷請求時,停低轉(zhuǎn)高;
3)處理高級中斷卻收到低級中斷請求時,高不睬低;
4)同一級的中斷源同時申請中斷時,事先規(guī)定。8051單片機(jī)復(fù)位后,默認(rèn)的中斷優(yōu)先級順序見表7-2:表7-28051單片機(jī)復(fù)位后各中斷源的優(yōu)先級次序中斷源中斷標(biāo)志優(yōu)先級順序外部中斷IE0最高優(yōu)先級
最低優(yōu)先級定時/計數(shù)器T0溢出中斷TF0外部中斷IE1定時/計數(shù)器T1溢出中斷TF1串行口中斷RI或TI16/252.單片機(jī)中斷處理過程(1)中斷響應(yīng)的條件及過程當(dāng)中斷源向CPU發(fā)出中斷請求時,如果中斷的條件滿足,CPU將進(jìn)入中斷響應(yīng)周期。單片機(jī)響應(yīng)中斷的條件是:1)中斷源有請求。2)中斷允許寄存器IE相應(yīng)位置1。3)CPU中斷開放(EA=1)。CPU響應(yīng)中斷時,將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1,然后由硬件自動產(chǎn)生一個長調(diào)用指令LCALL,此指令首先把斷點(diǎn)地址壓入堆棧保護(hù),再將中斷服務(wù)程序的入口地址送入到程序計數(shù)器PC,使程序轉(zhuǎn)向相應(yīng)的中斷服務(wù)程序。8051各個中斷源所對應(yīng)的中斷服務(wù)程序首地址見表7-3。17/25表7-38051單片機(jī)各個中斷服務(wù)程序入口地址中斷源入口地址中斷號外部中斷0003H0定時/計數(shù)器T0溢出中斷000BH1外部中斷0013H2定時/計數(shù)器T1溢出中斷001BH3串行口中斷0023H4其中,中斷號是在C語言程序中編寫中斷函數(shù)時使用的。從表7-3中可以看出,每個入口地址之間只相隔8個單元,如果中斷服務(wù)程序的長度少于8個字節(jié),可以直接存放到入口地址開始的存儲區(qū)中。但是一般中斷服務(wù)程序的長度都超過8個字節(jié),這時可以將中斷服務(wù)程序存放到存儲器的其他區(qū)域,然后在中斷入口處安排一條轉(zhuǎn)移指令LJMP,轉(zhuǎn)向中斷服務(wù)程序。18/25例如:
ORG 0003H ;外部中斷0入口地址
LJMP INT0_ISR ··· ;其他程序代碼
INT0_ISR: ;外部中斷0服務(wù)程序 ··· RETI
這樣,當(dāng)CPU響應(yīng)外部中斷0的中斷請求時,進(jìn)入到0003H單元,執(zhí)行LJMP INT0_ISR指令后,轉(zhuǎn)入執(zhí)行程序存儲器的INT0_ISR標(biāo)號處的外部中斷0服務(wù)程序。在程序的運(yùn)行過程中,并不是任何時刻都可以響應(yīng)中斷請求。對于8051單片機(jī),當(dāng)出現(xiàn)下列情況時,CPU不會響應(yīng)中斷請求:
1)中斷允許總控制位EA=0或發(fā)出中斷請求的中斷所對應(yīng)的中斷允許控制位為0。
2)CPU正在執(zhí)行一個同級或高一級的中斷服務(wù)程序。
3)當(dāng)前執(zhí)行的機(jī)器周期不是指令周期的最后一個機(jī)器周期。
4)正在執(zhí)行的指令是中斷返回指令RETI或者是訪問專用寄存器IE或IP的指令時,CPU
至少要再執(zhí)行一條指令才能響應(yīng)中斷請求。19/25(2)中斷服務(wù)中斷服務(wù)程序從入口地址開始執(zhí)行,直到執(zhí)行返回指令RETI為止。RETI指令表示中斷服務(wù)程序的結(jié)束,CPU執(zhí)行該指令,一方面清除中斷響應(yīng)時所置位的優(yōu)先級有效觸發(fā)器,一方面由棧頂彈出斷點(diǎn)地址送程序計數(shù)器PC,從而返回主程序。中斷服務(wù)程序由四個部分組成,即保護(hù)現(xiàn)場、中斷服務(wù)、恢復(fù)現(xiàn)場以及中斷返回。由于在主程序中一般都會用到累加器A和程序狀態(tài)字寄存器PSW,所以在現(xiàn)場保護(hù)時一般都需要保護(hù)A和PSW,其他寄存器根據(jù)使用情況決定是否需要保護(hù)。在編寫中斷服務(wù)程序時應(yīng)注意以下兩點(diǎn):1)8051單片機(jī)響應(yīng)中斷后,不會自動關(guān)閉中斷系統(tǒng)。如果用戶程序不希望出現(xiàn)中斷嵌套,則必須在中斷服務(wù)程序的開始處關(guān)閉中斷,從而禁止更高優(yōu)先級的中斷請求中斷當(dāng)前的服務(wù)程序。2)為了保證保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場能夠連續(xù)進(jìn)行,在保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場之前應(yīng)先關(guān)中斷,當(dāng)現(xiàn)場保護(hù)或現(xiàn)場恢復(fù)結(jié)束后,再根據(jù)實際需要決定是否需要開中斷。20/253.中斷請求的撤除中斷源向CPU發(fā)出中斷請求后,中斷請求被鎖存在特殊功能寄存器TCON和SCON中,當(dāng)某個中斷源的請求被CPU響應(yīng)后,應(yīng)將相應(yīng)的中斷請求標(biāo)志清除,否則CPU會再一次響應(yīng)該中斷源的請求,這將使CPU進(jìn)入死循環(huán)。對于不同的中斷源,清除中斷請求的方法不同。(1)定時器/計數(shù)器T0、T1中斷請求的撤除當(dāng)CPU響應(yīng)T0或T1的中斷請求后,由硬件自動清除中斷相應(yīng)的中斷請求標(biāo)志TF0或TF1。由于定時器/計數(shù)器的中斷請求由硬件自動清除,所以在處理定時器/計數(shù)器的中斷時,用戶無需關(guān)心清除中斷請求標(biāo)志的問題。(2)外部中斷請求的撤除外部中斷請求有兩種觸發(fā)方式,對于邊沿觸發(fā)方式,CPU響應(yīng)中斷后,由硬件自動清除中斷請求標(biāo)志IE0或IE1;在電平觸發(fā)方式下,外部中斷標(biāo)志IE0或IE1是依靠CPU檢測
或
上的低電平而設(shè)置的。盡管CPU響應(yīng)中斷請求后,可以由硬件自動清除中斷請求標(biāo)志,但是如果外部中斷源不能及時撤除它在
或
上的低電平,在下一個機(jī)器周期,CPU檢測外部中斷輸入
或
時,就又會使IE0或IE1置1,再次產(chǎn)生中斷請求。因此,在電平觸發(fā)方式下,當(dāng)CPU響應(yīng)中斷請求后,必須使外部中斷請求輸入端
或
由0變?yōu)?。撤除電平觸發(fā)方式的中斷請求應(yīng)由軟件和外部硬件電路共同完成。21/25(3)串行口中斷請求的撤除CPU響應(yīng)串行口中斷后,不能由硬件自動清除串行口中斷標(biāo)志TI或RI。由于串行口的發(fā)送中斷和接收中斷使用相同的入口地址,CPU響應(yīng)串行中斷后,首先應(yīng)檢測這兩個中斷標(biāo)志位,以判斷是發(fā)送中斷還是接收中斷。當(dāng)檢測結(jié)束后,應(yīng)通過軟件將串行口中斷標(biāo)志TI或RI清0。22/254.
外部中斷的觸發(fā)方式及響應(yīng)時間(1)外部中斷的觸發(fā)方式由TCON寄存器中的IT1和IT0位的0、1狀態(tài)可決定外部中斷源是電平觸發(fā)方式還是邊沿觸發(fā)方式。若ITx=0(x=0或1,下同),外部中斷為電平觸發(fā)方式。單片機(jī)在每一個機(jī)器周期的S5P2期間采樣中斷輸入信號
的狀態(tài),若為低電平,即可直接觸發(fā)外部中斷,這就使得CPU對來自外部申請能得以及時響應(yīng)。在這一觸發(fā)方式中,中斷源必須持續(xù)請求,一直到中斷實際產(chǎn)生為止。在中斷服務(wù)程序返回之前,必須撤消中斷請求信號,否則,單片機(jī)將認(rèn)為又發(fā)生另一次中斷請求。所以電平觸發(fā)方式適合于外部中斷輸入為低電平,且在中斷服務(wù)程序中能清除該中斷源申請信號的情況。若ITx=1,外部中斷為邊沿觸發(fā)方式(下跳沿觸發(fā))。在這種方式中.如果在端連續(xù)采樣到一個周期的高電平和緊接著一個周期的低電平,則在TCON寄存器中的中斷請求標(biāo)志位IEx就被置位,由IEx標(biāo)志位請求中斷。顯然,這種方式的中斷請求即使CPU暫時不能響應(yīng),中斷申請標(biāo)志由于被保存也不會丟失,而一旦CPU響應(yīng)中斷,進(jìn)人中斷服務(wù)程序時,IEx會被CPU自動清除。所以該方式適合于以負(fù)脈沖形式輸入的外部中斷請求。由于外中斷源在每個機(jī)器周期被采樣一次,所以輸入的高電平或低電平至少必須保持12個振蕩周期,以保證能被采樣到。23/25(2)外部中斷的響應(yīng)時間外中斷申請信號
,在每個機(jī)器周期的S5P2期間被采樣并鎖存,但須等到下一個機(jī)器周期才被查詢并被確定是否有效,若中斷被激活,并且滿足響應(yīng)條件,則轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。這樣,產(chǎn)生外部中斷申請到得到CPU確認(rèn),需一個機(jī)器周期,而CPU保護(hù)斷點(diǎn),自動轉(zhuǎn)入中斷處理程序需2個機(jī)器周期,所以外部中斷響應(yīng)時間至少需要三個機(jī)器周期。如果已經(jīng)在執(zhí)行另一個同級或更高級的中斷,附加的等待時間取決于正在執(zhí)行的中斷服務(wù)程序的長短,以及是否還有更高級的中斷源存在。若正處理指令未執(zhí)行到最后的機(jī)器周期,所需的額外等待時間不會超過三個周期??紤]極限情況,所執(zhí)行指令為RETI或者存取IE或IP的指令,其下相鄰指令為MUL或DIV,則前者需一個機(jī)器周期,后者需4個機(jī)器周期,這時額外的等待時間不會多于5個機(jī)器周期。所以,在一個單一中斷源的情況下,中斷響應(yīng)時間一般在3~8個機(jī)器周期之間。24/25下一講內(nèi)容
1、STC8A8K64S4A12單片機(jī)的中斷源
2、STC8A8K64S4A12的中斷相關(guān)寄存器25/257-226/30內(nèi)容提綱一
STC8A8K64S4A12單片機(jī)的中斷源二STC8A8K64S4A12的中斷相關(guān)寄存器27/30目標(biāo)掌握STC8A8K64S4A12中斷系統(tǒng)的增強(qiáng)功能。28/30STC8A8K64S4A12單片機(jī)的中斷源一29/301.中斷源STC8A8K64S4A12單片機(jī)共有22個中斷源,它們分別是:外部中斷0~4(INT0~INT4)定時器0~4(Timer0~Timer4)串口1~4(UART1~UART4)串行外設(shè)接口中斷(SPI)I2C總線中斷模數(shù)轉(zhuǎn)換中斷(ADC),低壓檢測中斷(LVD),捕獲中斷(CCP/PCA/PWM),比較器中斷(CMP),增強(qiáng)型PWM中斷,PWM異常檢測中斷(PWMFD)。除外部中斷2、外部中斷3、串口3、串口4、定時器2、定時器3、定時器4固定是最低優(yōu)先級中斷外,其它的中斷都具有4個中斷優(yōu)先級可以設(shè)置。STC8A8K64S4A12的中斷系統(tǒng)結(jié)構(gòu)如圖7-4所示,圖中說明了中斷源、中斷控制、中斷允許及中斷優(yōu)先級管理之間的關(guān)系。30/302.中斷系統(tǒng)構(gòu)成圖7-4
中斷系統(tǒng)結(jié)構(gòu)示意圖(1)31/302.中斷系統(tǒng)構(gòu)成圖7-4
中斷系統(tǒng)結(jié)構(gòu)示意圖(2)32/303.中斷標(biāo)志位外部中斷0(INT0)和外部中斷1(INT1)既可雙邊沿觸發(fā)(即上升沿和下降沿都可以觸發(fā)),也可以只有下降沿觸發(fā)。這兩個外部中斷的請求標(biāo)志位分別是寄存器TCON中的IE0/TCON.1和IE1/TCON.3。當(dāng)外部中斷服務(wù)程序被響應(yīng)后,中斷標(biāo)志位IE0和IE1會自動清0。外部中斷0(INT0)和外部中斷1(INT1)還可以用于將單片機(jī)從掉電模式喚醒。
外部中斷2~4(INT2~INT4)只能下降沿觸發(fā)。外部中斷2~4的中斷請求標(biāo)志位分別是寄存器AUXINTIF中的INT2IF、INT3IF、INT4IF,當(dāng)外部中斷服務(wù)程序被響應(yīng)后,相應(yīng)的中斷標(biāo)志位需要軟件清零。外部中斷2~4(INT2~INT4)也可以用于將單片機(jī)從掉電模式喚醒。定時器0和1的中斷請求標(biāo)志位是TF0和TF1。當(dāng)定時器寄存器THx/TLx溢出時,溢出標(biāo)志位TFx被置位,定時器中斷發(fā)生。當(dāng)單片機(jī)轉(zhuǎn)去執(zhí)行該定時器中斷服務(wù)程序時,定時器的溢出標(biāo)志位TFx被硬件清0。定時器2、定時器3和定時器4的中斷請求標(biāo)志位是寄存器AUXINTIF中T2IF、T3IF、T4IF。當(dāng)相應(yīng)的中斷服務(wù)程序執(zhí)行后,相應(yīng)的中斷標(biāo)志位需要軟件清零。33/303.中斷標(biāo)志位當(dāng)串行口1接收中斷請求標(biāo)志位RI和串行口1發(fā)送中斷請求標(biāo)志位TI中的任何一個被置為1后,串口1中斷都會產(chǎn)生。標(biāo)志位RI和TI都需要軟件清0。當(dāng)串行口2接收中斷請求標(biāo)志位S2RI和串行口2發(fā)送中斷請求標(biāo)志位S2TI中的任何一個被置為1后,串口2中斷都會產(chǎn)生。標(biāo)志位S2RI和S2TI都需要軟件清0。當(dāng)串行口3接收中斷請求標(biāo)志位S3RI和串行口3發(fā)送中斷請求標(biāo)志位S3TI中的任何一個被置為1后,串口3中斷都會產(chǎn)生。標(biāo)志位S3RI和S3TI都需要軟件清0。當(dāng)串行口4接收中斷請求標(biāo)志位S4RI和串行口4發(fā)送中斷請求標(biāo)志位S4TI中的任何一個被置為1后,串口4中斷都會產(chǎn)生。標(biāo)志位S4RI和S4TI都需要軟件清0。所有串口的標(biāo)志位必須用軟件清0。當(dāng)SPI傳輸完成時,SPIF置位,SPI接口會產(chǎn)生中斷。SPIF需要用軟件清0。ADC模塊的中斷請求標(biāo)志是ADC_FLAG,該位需用軟件清0。低壓檢測(LVD)中斷請求標(biāo)志是LVDF,該位也需用軟件清0。34/303.中斷標(biāo)志位比較器中斷標(biāo)志位CMPIF=(CMPIF_p||CMPIF_n),其中CMPIF_p是內(nèi)置的標(biāo)志比較器上升沿中斷的寄存器,CMPIF_n是內(nèi)置的標(biāo)志比較器下降中斷的寄存器;當(dāng)CPU去讀取CMPIF的數(shù)值時會讀到(CMPIF_p||CMPIF_n);當(dāng)CPU對CMPIF寫“0”后CMPIF_p及CMPIF_n會被自動設(shè)置為“0”。因此,當(dāng)比較器的比較結(jié)果由LOW變成HIGH時,那么內(nèi)置的標(biāo)志比較器上升沿中斷的寄存器CMPIF_p會被設(shè)置成1,即比較器中斷標(biāo)志位CMPIF也會被設(shè)置成1,如果比較器上升沿中斷已被允許,即PIE已被設(shè)置成1,則向CPU請求中斷,單片機(jī)轉(zhuǎn)去執(zhí)行該比較器上升中斷;同理,當(dāng)比較器的比較結(jié)果由HIGH變成LOW時,那么內(nèi)置的標(biāo)志比較器下降沿中斷的寄存器CMPIF_n會被設(shè)置成1,即比較器中斷標(biāo)志位CMPIF也會被設(shè)置成1,如果比較器下降沿中斷已被允許,即NIE已被設(shè)置成1,則向CPU請求中斷,單片機(jī)轉(zhuǎn)去執(zhí)行該比較器下降中斷。中斷響應(yīng)完成后,比較器中斷標(biāo)志位CMPIF不會自動被清零,用戶需通過軟件向其寫入“0”清零。35/30STC8A8K64S4A12的中斷相關(guān)寄存器二36/301.中斷使能寄存器(IE、IE2、INTCLKO)(1)中斷使能寄存器IE
地址b7b6b5b4b3b2b1b0復(fù)位值A(chǔ)8HEAELVDEADCESET1EX1ET0EX000H其中,除了ELVD和EADC外,其他各位的定義與標(biāo)準(zhǔn)8051單片機(jī)的IE的定義相同。 1)ELVD:低壓檢測中斷允許位。
0:禁止低壓檢測中斷; 1:允許低壓檢測中斷。 2)EADC:A/D轉(zhuǎn)換中斷允許位。
0:禁止A/D轉(zhuǎn)換中斷; 1:允許A/D轉(zhuǎn)換中斷。37/30(2)中斷使能寄存器2(IE2)地址b7b6b5b4b3b2b1b0復(fù)位值A(chǔ)FH-ET4ET3ES4ES3ET2ESPIES200H1)ET4:定時/計數(shù)器T4的溢出中斷允許位。
0:禁止T4中斷; 1:允許T4中斷。2)ET3:定時/計數(shù)器T3的溢出中斷允許位。
0:禁止T3中斷; 1:允許T3中斷。3)ES4:串行口4中斷允許位。
0:禁止串行口4中斷; 1:允許串行口4中斷。4)ES3:串行口3中斷允許位。
0:禁止串行口3中斷; 1:允許串行口3中斷。5)ET2:定時/計數(shù)器T2的溢出中斷允許位。
0:禁止T2中斷; 1:允許T3中斷。6)ESPI:SPI中斷允許位。
0:禁止SPI中斷; 1:允許SPI中斷。7)ES2:串行口2中斷允許位。
0:禁止串行口2中斷; 1:允許串行口2中斷。38/30(3)外部中斷與時鐘輸出控制寄存器INTCLKO地址b7b6b5b4b3b2b1b0復(fù)位值8FH-EX4EX3EX2-T2CLKOT1CLKOT0CLKOx000,x000 1)EX4:外部中斷4中斷允許位。
0:禁止INT4中斷; 1:允許INT4中斷。 2)EX3:外部中斷3中斷允許位。
0:禁止INT3中斷; 1:允許INT3中斷。 3)EX2:外部中斷2中斷允許位。
0:禁止INT2中斷; 1:允許INT2中斷。39/30(4)PCA/CCP/PWM中斷控制寄存器符號地址b7b6b5b4b3b2b1b0CMODD9HCIDL---CPS[2:0]ECFCCAPM0DAH-ECOM0CCAPP0CCAPN0MAT0TOG0PWM0ECCF0CCAPM1DBH-ECOM1CCAPP1CCAPN1MAT1TOG1PWM1ECCF1CCAPM2DCH-ECOM2CCAPP2CCAPN2MAT2TOG2PWM2ECCF2CCAPM3DDH-ECOM3CCAPP3CCAPN3MAT3TOG3PWM3ECCF3與中斷使能有關(guān)的位有:1)ECF:PCA計數(shù)器中斷允許位。
0:禁止PCA計數(shù)器中斷;1:允許PCA計數(shù)器中斷。2)ECCF0~ECCF3分別是PCA模塊0~PCA模塊3的中斷允許位。
0:禁止PCA模塊0中斷;1:允許PCA模塊0中斷。40/30(5)CMPCR1(比較器控制寄存器1)符號地址b7b6b5b4b3b2b1b0CMPCR1E6HCMPENCMPIFPIENIEPISNISCMPOECMPRES1)PIE:比較器上升沿中斷允許位。
0:禁止比較器上升沿中斷;1:允許比較器上升沿中斷。2)NIE:比較器下降沿中斷允許位。
0:禁止比較器下降沿中斷;1:允許比較器下降沿中斷。符號地址b7b6b5b4b3b2b1b0PWMCRFEHENPWMECBI------ECBI:增強(qiáng)PWM計數(shù)器中斷允許位。0:禁止PWM計數(shù)器中斷; 1:允許PWM計數(shù)器中斷。(6)PWM控制寄存器PWMCR符號地址b7b6b5b4b3b2b1b0PWMFDCRF7HINVCMPINVIOENFDFLTFLIOEFDIFDCMPFDIOFDIFEFDI:PWM外部異常事件中斷允許位。
0:禁止PWM外部異常事件中斷;1:允許PWM外部異常事件中斷。(7)PWM異常檢測控制寄存器PWMFDCR41/30(8)增強(qiáng)型PWM控制寄存器符號地址b7b6b5b4b3b2b1b0PWM0CRFF04HENC0OC0INI-C0_S[1:0]EC0IEC0T2SIEC0T1SIPWM1CRFF14HENC1OC1INI-C1_S[1:0]EC1IEC1T2SIEC1T1SIPWM2CRFF24HENC2OC2INI-C2_S[1:0]EC2IEC2T2SIEC2T1SIPWM3CRFF34HENC3OC3INI-C3_S[1:0]EC3IEC3T2SIEC3T1SIPWM4CRFF44HENC4OC4INI-C4_S[1:0]EC4IEC4T2SIEC4T1SIPWM5CRFF54HENC5OC5INI-C5_S[1:0]EC5IEC5T2SIEC5T1SIPWM6CRFF64HENC6OC6INI-C6_S[1:0]EC6IEC6T2SIEC6T1SIPWM7CRFF74HENC7OC7INI-C7_S[1:0]EC7IEC7T2SIEC7T1SI1)ECnI:PWM通道n電平翻轉(zhuǎn)中斷允許位。
0:禁止第n通道PWM中斷; 1=允許第n通道PWM中斷。2)ECnT2SI:PWM通道n第2個翻轉(zhuǎn)點(diǎn)中斷允許位。
0:禁止第n通道PWM的第2個翻轉(zhuǎn)點(diǎn)中斷;1:允許第n通道PWM的第2個翻轉(zhuǎn)點(diǎn)中斷。3)ECnT1SI:PWM通道n第1個翻轉(zhuǎn)點(diǎn)中斷允許位。
0:禁止第n通道PWM的第1個翻轉(zhuǎn)點(diǎn)中斷;1:允許第n通道PWM的第1個翻轉(zhuǎn)點(diǎn)中斷。42/30(9)I2C控制寄存器
符號地址b7b6b5b4b3b2b1b0I2CMSCRFE81HEMSI----MSCMD[2:0]I2CSLCRFE83H-ESTAIERXIETXIESTOI--SLRST與中斷使能有關(guān)的位有:1)EMSI:I2C主機(jī)模式中斷允許位。
0:禁止I2C主機(jī)模式中斷; 1:允許I2C主機(jī)模式中斷。2)ESTAI:I2C從機(jī)接收START事件中斷允許位。
0:禁止I2C從機(jī)接收START事件中斷; 1:允許I2C從機(jī)接收START事件中斷。3)ERXI:I2C從機(jī)接收數(shù)據(jù)完成事件中斷允許位。
0:禁止I2C從機(jī)接收數(shù)據(jù)完成事件中斷; 1:允許I2C從機(jī)接收數(shù)據(jù)完成事件中斷。4)ETXI:I2C從機(jī)發(fā)送數(shù)據(jù)完成事件中斷允許位。
0:禁止I2C從機(jī)發(fā)送數(shù)據(jù)完成事件中斷; 1:允許I2C從機(jī)發(fā)送數(shù)據(jù)完成事件中斷。5)ESTOI:I2C從機(jī)接收STOP事件中斷允許位。
0:禁止I2C從機(jī)接收STOP事件中斷; 1:允許I2C從機(jī)接收STOP事件中斷。43/302.中斷請求寄存器(1)定時器寄存器(TCON)
定時器寄存器TCON的各位定義與標(biāo)準(zhǔn)8051相同。(2)中斷標(biāo)志輔助寄存器(AUXINTIF)中斷標(biāo)志輔助寄存器AUXINTIF中鎖存了INT2~INT4、T2~T4的中斷請求標(biāo)志,各位定義如下:地址b7b6b5b4b3b2b1b0復(fù)位值EFH-INT4IFINT3IFINT2IF-T4IFT3IFT2IFx000,x0001)INT4IF:外部中斷4中斷請求標(biāo)志。需要軟件清零。2)INT3IF:外部中斷3中斷請求標(biāo)志。需要軟件清零。3)INT2IF:外部中斷2中斷請求標(biāo)志。需要軟件清零。4)T4IF:定時器4溢出中斷標(biāo)志。需要軟件清零。5)T3IF:定時器3溢出中斷標(biāo)志。需要軟件清零。6)T2IF:定時器2溢出中斷標(biāo)志。需要軟件清零。44/30(3)串口1控制寄存器(SCON)
用于對串口1的工作方式進(jìn)行控制,其最低兩位鎖存串口1串行發(fā)送中斷標(biāo)志TI和串行接收中斷標(biāo)志RI。SCON的各位定義與標(biāo)準(zhǔn)8051相同。(4)串口2控制寄存器(S2CON)地址b7b6b5b4b3b2b1b0復(fù)位值9AHS2SM0-S2SM2S2RENS2TB8S2RB8S2TIS2RI40H5)串口3控制寄存器(S3CON)地址b7b6b5b4b3b2b1b0復(fù)位值A(chǔ)CHS3SM0S3ST3S3SM2S3RENS3TB8S3RB8S3TIS3RI00H(6)串口4控制寄存器(S4CON)地址b7b6b5b4b3b2b1b0復(fù)位值84HS4SM0S4ST4S4SM2S4RENS4TB8S4RB8S4TIS4RI00H45/30(7)電源管理寄存器(PCON)地址b7b6b5b4b3b2b1b0復(fù)位值87HSMODSMOD0LVDFPOFGF1GF0PDIDL30H與中斷有關(guān)的為是LVDF。LVDF是低電壓檢測標(biāo)志位,同時也是低電壓檢測中斷請求標(biāo)志位。在正常工作和空閑工作狀態(tài)時,如果內(nèi)部工作電壓Vcc低于低電壓檢測門檻電壓,低電壓中斷請求標(biāo)志位(LVDF/PCON.5)自動置1,與低電壓檢測中斷是否被允許無關(guān)。即在內(nèi)部工作電壓Vcc低于低電壓檢測門檻電壓時,不管有沒有允許低電壓檢測中斷,LVDF/PCON.5都自動為1。該位要用軟件清0,清0后,如內(nèi)部工作電壓Vcc低于低電壓檢測門檻電壓,該位又被自動設(shè)置為1。在進(jìn)入掉電工作狀態(tài)前,如果低電壓檢測電路未被允許可產(chǎn)生中斷,則在進(jìn)入掉電模式后,該低電壓檢測電路不工作以降低功耗。如果被允許可產(chǎn)生低電壓檢測中斷(相應(yīng)的中斷允許位是ELVD/IE.6,中斷請求標(biāo)志位是LVDF/PCON.5),則在進(jìn)入掉電模式后,該低電壓檢測電路繼續(xù)工作,在內(nèi)部工作電壓Vcc低于低電壓檢測門檻電壓后,產(chǎn)生低電壓檢測中斷,可將MCU從掉電狀態(tài)喚醒。46/30(8)PCA控制寄存器(CCON)地址b7b6b5b4b3b2b1b0復(fù)位值D8HCFCR--CCF3CCF2CCF1CCF000xx,0000B1)CF:PCA計數(shù)器中斷請求標(biāo)志。當(dāng)PCA計數(shù)器溢出時,CF由硬件置位。如果CMOD寄存器的ECF位置位,CF標(biāo)志可用來產(chǎn)生中斷。CF位可通過硬件或軟件置位,但只能通過軟件清0。2)CCF3/CCF2/CCF1/CCF0:PCA各個模塊的標(biāo)志。其中,CCF0對應(yīng)模塊0,CCF1對應(yīng)模塊1,CCF2對應(yīng)模塊2,CCF3對應(yīng)模塊3。當(dāng)發(fā)生匹配或比較時由硬件置位相應(yīng)的標(biāo)志位。這些標(biāo)志只能通過軟件清除。在中斷服務(wù)程序中,通過判斷各個標(biāo)志確定是哪個模塊產(chǎn)生了中斷。(9)ADC控制寄存器(ADC_CONTR)地址b7b6b5b4b3b2b1b0復(fù)位值BCHADC_POWERADC_STARTADC_FLAG-ADC_CHS[3:0]000x,0000
與中斷相關(guān)的位是A/D轉(zhuǎn)換結(jié)束標(biāo)志位ADC_FLAG。當(dāng)ADC完成一次轉(zhuǎn)換后,硬件會自動將此位置1。若允許ADC轉(zhuǎn)換中斷(EADC=1,EA=1),則由該位申請產(chǎn)生中斷。也可以由軟件查詢該標(biāo)志位判斷A/D轉(zhuǎn)換是否結(jié)束。不管是A/D轉(zhuǎn)換完成后由該位申請產(chǎn)生中斷,還是由軟件查詢該標(biāo)志位A/D轉(zhuǎn)換是否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1,一定要由軟件將其清0。47/30(10)SPI狀態(tài)寄存器(SPSTAT)地址b7b6b5b4b3b2b1b0復(fù)位值CDHSPIFWCOL------00xx,xxxxSPIF是SPI中斷標(biāo)志位。此標(biāo)志位必須用戶通過軟件方式向此位寫1進(jìn)行清零。(11)I2C狀態(tài)寄存器(I2CMSST、I2CSLST)符號地址b7b6b5b4b3b2b1b0復(fù)位值I2CMSSTFE82HMSBUSYMSIF----MSACKIMSACKO00xx,xx00I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIFTXINGSLACKISLACKO0000,00001)MSIF:I2C主機(jī)模式中斷請求標(biāo)志。需要軟件清零。2)STAIF:I2C從機(jī)接收START事件中斷請求標(biāo)志。需要軟件清零。3)RXIF:I2C從機(jī)接收數(shù)據(jù)完成事件中斷請求標(biāo)志。需要軟件清零。4)TXIF:I2C從機(jī)發(fā)送數(shù)據(jù)完成事件中斷請求標(biāo)志。需要軟件清零。5)STOIF:I2C從機(jī)接收STOP事件中斷請求標(biāo)志。需要軟件清零。
除了上述寄存器外,還有比較器控制寄存器1(CMPCR1,用于比較器模塊的中斷控制)、PWM控制寄存器(PWMCFG,用于設(shè)置PWM計數(shù)器中斷)、PWM中斷標(biāo)志寄存器(PWMIF,保存0~7通道的中斷標(biāo)志)、PWM異常檢測控制寄存器(PWMFDCR,用于PWM異常檢測中斷使能控制和保存PWM異常檢測中斷標(biāo)志),PWM0~7的控制寄存器(PWM0CR,PWM1CR,…,PWM7CR)。詳細(xì)內(nèi)容請參考產(chǎn)品手冊。48/303.中斷優(yōu)先級寄存器(IP、IPH、IP2、IP2H)除外部中斷2、外部中斷3、串口3中斷、串口4中斷、定時器2中斷、定時器3中斷、定時器4中斷固定是最低優(yōu)先級中斷外,通過設(shè)置特殊功能寄存器(IP、IPH、IP2、IP2H)中的相應(yīng)位(每一種中斷由兩個位確定優(yōu)先級),STC8A8K64S4A12單片機(jī)的其他所有中斷請求源的中斷優(yōu)先級可設(shè)為四級,實現(xiàn)四級中斷嵌套。00:中斷優(yōu)先級為0級(最低級)01:中斷優(yōu)先級為1級(較低級)10:中斷優(yōu)先級為2級(較高級)11:中斷優(yōu)先級為3級(最高級)STC8A8K64S4A12單片機(jī)對中斷優(yōu)先級的處理原則與8051單片機(jī)相同。49/303.中斷優(yōu)先級寄存器(IP、IPH、IP2、IP2H)
符號地址b7b6b5b4b3b2b1b0復(fù)位值IPB8HPPCAPLVDPADCPSPT1PX1PT0PX000HIPHB7HPPCAHPLVDHPADCHPSHPT1HPX1HPT0HPX0H00HIP2B5H-PI2CPCMPPX4PPWMFDPPWMPSPIPS2x000,0000IP2HB6H-PI2CHPCMPHPX4HPPWMFDHPPWMHPSPIHPS2Hx000,00001)PX0H,PX0:外部中斷0中斷優(yōu)先級控制位。2)PT0H,PT0:定時器0中斷優(yōu)先級控制位。3)PX1H,PX1:外部中斷1中斷優(yōu)先級控制位。4)PT1H,PT1:定時器1中斷優(yōu)先級控制位。5)PSH,PS:串口1中斷優(yōu)先級控制位。。6)PADCH,PADC:ADC中斷優(yōu)先級控制位。7)PLVDH,PLVD:低壓檢測中斷優(yōu)先級控制位。8)PPCAH,PPCA:CCP/PCA中斷優(yōu)先級控制位。9)PS2H,PS2:串口2中斷優(yōu)先級控制位。10)PSPIH,PSPI:SPI中斷優(yōu)先級控制位。11)PPWMH,PPWM:增強(qiáng)型PWM中斷優(yōu)先級控制位。12)PPWMFDH,PPWMFD:增強(qiáng)型PWM異常檢測中斷優(yōu)先級控制位。13)PX4H,PX4:外部中斷4中斷優(yōu)先級控制位。14)PCMPH,PCMP:比較器中斷優(yōu)先級控制位。15)PI2CH,PI2C:I2C中斷優(yōu)先級控制位。50/30STC8A8K64S4A12單片機(jī)的中斷源及其相關(guān)控制見表7-4。中斷優(yōu)先級控制寄存器的各位都可由用戶程序置“1”或清“0”。表7-4中的中斷號即為默認(rèn)中斷優(yōu)先級次序號,在使用C語言編寫中斷函數(shù)時會用到。表7-4STC8A8K64S4A12中斷源中斷源中斷入口地址中斷號優(yōu)先級設(shè)置優(yōu)先級中斷請求位中斷允許位INT00003H0PX0,PX0H0/1/2/3IE0EX0Timer0000BH1PT0,PT0H0/1/2/3TF0ET0INT10013H2PX1,PX1H0/1/2/3IE1EX1Timer1001BH3PT1,PT1H0/1/2/3TF1ET1UART10023H4PS,PSH0/1/2/3RI||TIESADC002BH5PADC,PADCH0/1/2/3ADC_FLAGEADCLVD0033H6PLVD,PLVDH0/1/2/3LVDFELVDPCA003BH7PPCA,PPCAH0/1/2/3CFECFCCF0ECCF0CCF1ECCF1CCF2ECCF2CCF3ECCF351/30UART20043H8PS2,PS2H0/1/2/3S2RI||S2TIES2SPI004BH9PSPI,PSPIH0/1/2/3SPIFESPIINT20053H100INT2IFEX2INT3005BH110INT3IFEX3Timer20063H120T2IFET2INT40083H16PX4,PX4H0/1/2/3INT4IFEX4UART3008BH170S3RI||S3TIES3UART40093H180S4RI||S4TIES4Timer3009BH190T3IFET3Timer400A3H200T4IFET4CMP00ABH21PCMP,PCMPH0/1/2/3CMPIFPIE|NIE52/30PWM00B3H22PPWM,PPWMH0/1/2/3CBIFECBIC0IFEC0I&&EC0T1SIEC0I&&EC0T2SIC1IFEC1I&&EC1T1SIEC1I&&EC1T2SIC2IFEC2I&&EC2T1SIEC2I&&EC2T2SIC3IFEC3I&&EC3T1SIEC3I&&EC3T2SIC4IFEC4I&&EC4T1SIEC4I&&EC4T2SIC5IFEC5I&&EC5T1SIEC5I&&EC5T2SIC6IFEC6I&&EC6T1SIEC6I&&EC6T2SIC7IFEC7I&&EC7T1SIEC7I&&EC7T2SI53/30PWMFD00BBH23PPWMFD,PPWMFDH0/1/2/3FDIFEFDII2C00C3H24PI2C,PI2CH0/1/2/3MSIFEMSISTAIFESTAIRXIFERXITXIFETXISTOIFESTOI
54/30下一講內(nèi)容中斷應(yīng)用開發(fā)舉例55/307-356/15內(nèi)容提綱中斷應(yīng)用開發(fā)舉例57/15目標(biāo)掌握STC8A8K64S4A12中斷的應(yīng)用開發(fā)方法。58/151.中斷使用過程中需要注意的問題
在嵌入式系統(tǒng)中,中斷是一種很有效的事件處理方式。但是,如果使用中斷不當(dāng),往往會出現(xiàn)一些意想不到的結(jié)果。為了獲得正確的結(jié)果可能要花費(fèi)大量的調(diào)試時間,而且中斷服務(wù)子程序的錯誤是比較難于被發(fā)現(xiàn)和糾正的。為了避免發(fā)生類似的問題,下面介紹中斷使用過程中需要注意的問題。(1)寄存器保護(hù) 在主程序的執(zhí)行過程中,在任何地方都有可能進(jìn)入中斷程序,因此,必須保證在任何時候都要做好中斷現(xiàn)場的保護(hù)工作。例如: CLR C MOV A,#25H ADDC
A,#10H
經(jīng)過以上的處理,累加器將會得到35H。然而,如果在MOV指令后發(fā)生一個中斷將出現(xiàn)什么狀況呢?在這個中斷期間,進(jìn)位標(biāo)志被置位,累加器的值變?yōu)?0H,當(dāng)中斷結(jié)束時,控制權(quán)重新交給主程序,ADDC將把10H加到40H上,由于進(jìn)位標(biāo)志的置位,再加上一個附加的01H,那么累加器在執(zhí)行結(jié)束時將得到51H。如果這樣,累加器似乎得到了一個錯誤的結(jié)果,25H加上10H怎么會等于51H呢?這顯然是不合理的。如何解決這樣的問題?59/15在中斷開始時和中斷結(jié)束時使用PUSH和POP指令進(jìn)行現(xiàn)場的保護(hù)和恢復(fù)。例如,在中斷服務(wù)程序中可以書寫類似于下面的代碼: PUSH
ACC PUSH
PSW MOV A,#0FFH ADD A,#02H POP PSW POP ACC通常情況下,在中斷服務(wù)子程序中,需要保護(hù)那些在主程序中用到而不想被中斷服務(wù)子程序修改內(nèi)容的寄存器。例如,在中斷服務(wù)子程序中使用PUSH和POP指令對DPTR加以保護(hù)和恢復(fù)的代碼:PUSH
DPHPUSH
DPL;其他代碼POP DPLPOP DPHRETI如果用C語言編寫中斷處理程序,通常開發(fā)環(huán)境本身會自動進(jìn)行寄存器保護(hù),因此用戶不必再編寫現(xiàn)場保護(hù)代碼。60/15(2)使用中斷常出現(xiàn)的問題如果使用了中斷,而程序又不能正確的執(zhí)行或不能達(dá)到預(yù)期的目標(biāo),可以檢查下面與中斷有關(guān)的內(nèi)容:1)寄存器保護(hù)和恢復(fù)。保證所有前面提及的寄存器被保護(hù)。如果忘記保護(hù)主程序使用的寄存器,可能會產(chǎn)生錯誤結(jié)果。如果寄存器未按預(yù)期的愿望改變其中的值或者出現(xiàn)錯誤的值,這很可能是因為寄存器沒有被保護(hù)。中斷結(jié)束后忘記將保護(hù)數(shù)據(jù)從堆棧中彈出。2)中斷服務(wù)子程序返回時使用了RET指令而不是RETI。中斷的返回應(yīng)使用RETI指令,而有時錯用了RET指令。而RET指令不能結(jié)束中斷。通常情況下,使用RET指令代替RETI指令會引起主程序的混亂。若發(fā)現(xiàn)中斷僅僅執(zhí)行了一次,那么可以檢查子程序是否使用了RETI指令。3)中斷程序盡量短小。中斷服務(wù)子程序應(yīng)該盡量短小,這樣其執(zhí)行速度更快。例如,一個接收串行中斷應(yīng)該從SBUF中讀一個字節(jié),并且將其復(fù)制到用戶定義的臨時緩沖區(qū)中,然后退出中斷程序,由主程序來處理在緩沖區(qū)中的數(shù)據(jù)。中斷的時間消耗越少,那么在中斷發(fā)生時就可以更快的處理中斷。4)注意中斷標(biāo)志的清除問題。某些中斷的中斷標(biāo)志不是在響應(yīng)相應(yīng)中斷時由硬件自動清除的,用戶需要在中斷服務(wù)程序返回前,使用指令將標(biāo)志位清零,否則,中斷返回后,還將產(chǎn)生一次新的中斷。例如外部中斷2~5、定時/計數(shù)器2、串行通信中斷以及所有的輔助中斷。61/152.
中斷應(yīng)用開發(fā)舉例【例7-1】利用引入單脈沖,每來一個負(fù)脈沖,將連接到P6口的發(fā)光二極管循環(huán)點(diǎn)亮(假設(shè)輸出點(diǎn)亮LED采用灌電流方式,即輸出低電平時LED亮,高電平時LED滅)。解:利用的下降沿觸發(fā)中斷。匯編語言程序如下:$INCLUDE(STC8.INC)ORG 0000H
LJMP MAIN ORG 0003H LJMP INT0_ISR ORG 0100HMAIN: MOV SP,#60H MOV P6M1,#00H MOV P6M0,#00H MOV A,#01H MOV P6,#0FFH
SETB IT0 ;設(shè)置下降沿觸發(fā)中斷 SETB EX0 ;開放外部中斷1 SETB EA ;開放總中斷 SJMP $ ;等待,本條指令相當(dāng)于“HERE:LJMPHERE”INT0_ISR: CPL AMOV P6,A RL A RETI END62/15對應(yīng)的C語言版本如下:#include"stc8.h" //包含單片機(jī)寄存器定義頭文件voidINT0_ISR(void)interrupt0{
staticunsignedchari=0x01;
i<<=1; if(i==0)i=1; //移位8次后,i將變?yōu)?,因此需要重新賦值
P6=~i;}voidmain(void){ P6M1=0; P6M0=0; //將整個P6口所有口線設(shè)置為準(zhǔn)雙向口模式
P6=0xff; IT0=1; EX0=1; EA=1; while(1); //循環(huán)等待}由以上例子可以
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026北京西城區(qū)教委人才引進(jìn)(含博士后出站人員)招聘16人參考考試題庫及答案解析
- 喜鵲策劃婚禮活動方案(3篇)
- 2026上半年玉溪師范學(xué)院招聘6人備考考試試題及答案解析
- 門診處方管理制度課件下載(3篇)
- 偽裝門施工方案(3篇)
- 2026浙江浙建好房子裝飾科技有限公司招聘備考考試試題及答案解析
- 2026廣東茂名市電白區(qū)旦場中學(xué)2026年招聘部分學(xué)科臨聘教師備考考試題庫及答案解析
- 2026重慶市南岸區(qū)彈子石小學(xué)校信科教師招聘1人參考考試題庫及答案解析
- 2026吉林大學(xué)第二醫(yī)院招聘勞務(wù)派遣制護(hù)理員崗位人員10人備考考試試題及答案解析
- 2026年臨沂市市直部分事業(yè)單位公開招聘綜合類崗位工作人員(21名)考試備考試題及答案解析
- 2025年二級造價師《土建工程實務(wù)》真題卷(附解析)
- 智慧農(nóng)業(yè)管理中的信息安全對策
- 港口安全生產(chǎn)知識培訓(xùn)課件
- 通信凝凍期間安全培訓(xùn)課件
- 股東查賬申請書規(guī)范撰寫范文
- 腎囊腫護(hù)理查房要點(diǎn)
- 2025年掛面制造行業(yè)研究報告及未來發(fā)展趨勢預(yù)測
- 艾媒咨詢2025年中國新式茶飲大數(shù)據(jù)研究及消費(fèi)行為調(diào)查數(shù)據(jù)
- 遼寧省錦州市2024-2025學(xué)年八年級下學(xué)期期末物理試題(含答案)
- 頂管施工臨時用電方案
- 廣東省惠州市高三上學(xué)期第一次調(diào)研考英語試題-1
評論
0/150
提交評論