單片機中斷系統(tǒng)精選課件_第1頁
單片機中斷系統(tǒng)精選課件_第2頁
單片機中斷系統(tǒng)精選課件_第3頁
單片機中斷系統(tǒng)精選課件_第4頁
單片機中斷系統(tǒng)精選課件_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 本章介紹的主要內(nèi)容中斷的基本概念中斷的系統(tǒng)結(jié)構(gòu)中斷的響應(yīng)過程中斷的的應(yīng)用編程第6章 MCS-51單片機的中斷系統(tǒng) 在CPU和外設(shè)交換信息時,存在著快速CPU和慢速外設(shè)間的矛盾,機器內(nèi)部有時也可能出現(xiàn)突發(fā)事件,為此,計算機中通常采用中斷技術(shù)。中斷 CPU和外設(shè)并行工作,當(dāng)外設(shè)數(shù)據(jù)準(zhǔn)備好( 或有某種突發(fā)事件發(fā)生)時向CPU提出請求,CPU暫停正在執(zhí)行的程序轉(zhuǎn)而為該外設(shè)服務(wù)(或處理緊急事件),處理完畢再回到原斷點繼續(xù)執(zhí)行原程序。中斷源 引起中斷的原因,中斷申請的來源,稱為中斷源, 可以是I/O設(shè)備、故障、時鐘、調(diào)試中人為設(shè)置。中斷優(yōu)先級 當(dāng)有多個中斷源同時 向CPU申請中斷時,CPU優(yōu)先響應(yīng)最需緊

2、急處理的中斷請求,處理完畢再響應(yīng)優(yōu)先級別較低的 ,這種預(yù)先安排的響應(yīng)次序。 中斷的嵌套 在中斷系統(tǒng)中,高優(yōu)先級的中斷請求能中斷正在進行的較低級的中斷源處理。中斷系統(tǒng) 能實現(xiàn)中斷功能并能對中斷進行管理的硬件和軟件稱為中斷系統(tǒng)。 本章將討論MCS51系列單片機的中斷系統(tǒng)。 中斷請求是在執(zhí)行程序的過程中的隨機發(fā)生的,中斷系統(tǒng)要解決的問題是: 1)CPU在不斷的執(zhí)行指令中,是如何檢測到隨機發(fā)生的中斷請求? 2)如何使中斷的雙方(CPU方和中斷源方)均能人為控制,允許中斷或禁止中斷。 3)由于中斷產(chǎn)生的隨機性,不可能在程序中安排調(diào)子程序指令或轉(zhuǎn)移指令,那么如何實現(xiàn)正確的轉(zhuǎn)移,以便為該中斷源服務(wù)呢? 4)

3、中斷源有多個,而CPU只有一個,當(dāng)有多個中斷源同時有中斷請求時,用戶怎么控制 CPU 按照自己的需要安排響應(yīng)次序? 5)中斷服務(wù)完畢,如何正確地返回到原斷點處? 8XX51有5個中斷源,3個在片內(nèi),2個在片外,它們在程序存貯器中有固定的中斷入口地址,當(dāng)CPU響應(yīng)中斷時,硬件自動形成這些地址,由此進入中斷服務(wù)程序;5個中斷源有兩級中斷優(yōu)先級,可形成中斷嵌套; 8XX51有5個中斷源,其符號、名稱、產(chǎn)生條件及中斷服務(wù)程序的入口地址如表6.1。6.1 中斷系統(tǒng)結(jié)構(gòu) 002BH定時計數(shù)器2中斷(TF2或T2EX信號)定時器2中斷 T20023H串行通信完成一幀數(shù)據(jù)發(fā)送或接收引起中斷 串行口中斷 TI/

4、RI 001BH定時計數(shù)器1計數(shù)回零溢出 定時器1中斷 T1000BH定時計數(shù)器0計數(shù)回零溢出 定時器0中斷 T00013HP3.3引腳的低電平或下降沿信號 外部中斷1INT10003H P3.2引腳的低電平或下降沿信號 外部中斷0 INT0中斷服務(wù)程序入口中 斷 引 起 原 因 名 稱 符號 EA - ET2 ES ET1 EX1 ET0 EX0中斷總控允/禁 不 用 T2允/禁 串行口允/禁 T1允/禁 INT1允/禁 T0允/禁 INT0允/禁 二、中斷控制的有關(guān)寄存器 (1)中斷的允許和禁止中斷控制寄存器IE IE寄存器的各位對應(yīng)相應(yīng)的中斷源,如果允許該中斷源中斷則該位置1,禁止中斷則

5、該位0 。EA:中斷總控開關(guān),是CPU是否響應(yīng)中斷的前提。 EA=1,CPU開中斷; EA=0, CPU關(guān)中斷。ES: 串行口中斷允許位, ES=1,允許串行口發(fā)送/接收中斷; ES=0,禁止串行口中斷。ET1:定時器T1中斷允許位, ET1=1,允許T1計數(shù)溢出中斷; ET1=0,禁止T1中斷。ET0: 定時器T0中斷允許位, ET0=1,允許T1計數(shù)溢出中斷; ET0=0,禁止T0中斷。EX1: 外部中斷INT1允許位, EX1=1,允許INT1中斷; EX1= 0,禁止INT1中斷。EX0: 外部中斷INT0允許位, EX0=1,允許INT0中斷; EX0= 0,禁止INT0中斷。 IN

6、T0方式下沿/低電平 INT0請求有/無 INT1方式下沿/ 低電平 INT1 請求有/無 T0 工作啟/停 T0 請求有/無 T1工作啟/停 T1 請求有/無 IT0 IE0IT1IE1TR0 TF0 TR1 TF1(2)中斷請求標(biāo)志及外部中斷方式選擇寄存器TCON說明:IT0和IT1為外中斷INT0 和INT1中斷觸發(fā)方式選擇,若選下降沿觸發(fā)則相應(yīng)位置1;若選低電平觸發(fā) ,IT相應(yīng)位置0。 某中斷源有中斷請求,該中斷標(biāo)志置1,無中斷請求,該中斷標(biāo)志置0 。TR0 和 TR1 為定時器T0和T1 工作啟動和停止控制。-PT2PSPT1PX1PT0PX0無用位無用位T2高/低串行 口高/低 T

7、1高/低INT1高/低 T0高/低 INT0高/低 當(dāng) 某幾個中斷源在IP寄存器相應(yīng)位同為1或同為零時,由內(nèi)部查詢確定優(yōu)先級,查詢的順序是:CPU優(yōu)先響應(yīng)先查詢的中斷請求T0T1串行口T2INT0INT1 五個中斷源的優(yōu)先級別由IP寄存器管理,相應(yīng)位置1,則該中斷源優(yōu)先級別高,置0的優(yōu)先級別低。 (3)中斷優(yōu)先級管理寄存器IP MCS51系列單片機的中斷結(jié)構(gòu)可以用圖6.1示。6.2 中斷響應(yīng)過程一、中斷處理過程 中斷處理過程分為四個階段:中斷請求,中斷響應(yīng),中斷處理、中斷返回。MCS-51系列單片機的中斷過程流程如圖6.2所示。 NNYYYN執(zhí) 行 指 令中斷標(biāo)志1?(中斷請求?) 指令最后一

8、個T周期?EA=1?允 許 位 = 1?CPU 判 別優(yōu) 先權(quán) ,響 應(yīng)優(yōu) 先權(quán)高 的中斷斷點的PC進棧, 中斷服務(wù)入口地址送PC撤 除 中 斷 標(biāo) 志中 斷 服 務(wù)中 斷 返 回, 斷 點 出 棧 送 PC 中斷請求.中斷響應(yīng)中斷服務(wù)中斷返回1)中斷請求、中斷響應(yīng)過程由硬件完成。2)中斷服務(wù)程序應(yīng)根據(jù)需要進行編寫。程序中要注意保護現(xiàn)場和恢復(fù)現(xiàn)場。3)中斷返回是通過執(zhí)行一條RETI中斷返回指令,使堆棧中被壓入的斷 點地址送PC,從而返回主程序的斷點繼續(xù)執(zhí)行主程序。 另外RETI還有恢復(fù)優(yōu)先級狀態(tài)觸發(fā)器 的作用,因此不能以RET指令代替“RETI”指令。 若某個中斷源通過編程設(shè)置,處于被打開的狀

9、態(tài),并滿足中斷響應(yīng)的條件,然而下面三種情況單片機不響應(yīng)此中斷: 當(dāng)前正在執(zhí)行的那條指令沒執(zhí)行完; 當(dāng)前響應(yīng)了同級或高級中斷; 正在操作IE、IP中斷控制寄存器或執(zhí)行RETI指令。在正常的情況下,從中斷請求信號有效開始,到中斷得到響應(yīng),通常需要3個機器周期到8個機器周期。二、中斷請求的撤除 CPU響應(yīng)中斷后,應(yīng)撤除該中斷請求標(biāo)志,否則會再次中斷。 1)對定時計數(shù)器T0、T1的溢出中斷,CPU響應(yīng)中斷后,硬件自動清除中斷請求標(biāo)志TF0和TF1。2)對邊沿觸發(fā)的外部中斷INT1和INT0,CPU響應(yīng)中斷后硬件自動清除中斷請求標(biāo)志IE0和IE1。3)對電平觸發(fā)的外部中斷,CPU在響應(yīng)中斷時也不會自動清

10、除中斷標(biāo)志,因此,在CPU響應(yīng)中斷后應(yīng)立即撤除INT1或INT0的低電平信號。 4)對于串行口中斷,CPU響應(yīng)中斷后,沒有用硬件清除中斷請求標(biāo)志TI、RI,即這些中斷標(biāo)志不會自動清除,必須用軟件清除,這是在編串行通信中斷服務(wù)中應(yīng)該注意的。6.3 中斷的匯編語言程序和C語言程序設(shè)計 用戶對中斷的控制和管理,實際是對4個與中斷有關(guān)的寄存器IE、TCON、IP、SCON進行控制或管理。這幾個寄存器在單片機復(fù)位時是清零的,因此必須根據(jù)需要對這幾個寄存器的有關(guān) 位進行預(yù)置。 在中斷程序的編制中應(yīng)注意:開中斷總控開關(guān)EA,置位中斷源的中斷允許位。對外部中斷INT0、INT1應(yīng)選擇中斷觸發(fā)方式多個中斷源中斷

11、,應(yīng)設(shè)定中斷優(yōu)先級,預(yù)置IP。編寫中斷服務(wù)程序,并注意用保護現(xiàn)場和恢復(fù)現(xiàn)場,以免中斷返回時,丟失原寄存器、累加器中的信息。若要在執(zhí)行當(dāng)前中斷程序時禁止更高優(yōu)先級中斷,可以采用軟件關(guān)CPU中斷或禁止某中斷源中斷,在中斷返回前再開放中斷。一、匯編語言中斷程序的設(shè)計 匯編語言的中斷服務(wù)程序按規(guī)定的中斷矢量地址存入,由于五個中斷矢量地址0003H、000BH 、0013H、001BH、0023H之間相距很近,往往裝不下一個中斷服務(wù)程序,通常將中斷服務(wù)程 序安排在程序存貯器的其他地址空間,而在矢量地址的單元中安排一條轉(zhuǎn)移指令。 例1. 在圖6.3中P1.4P1.7接有四個發(fā)光二極管,P1.0P1.3接有

12、四個開關(guān),消抖電路用于 產(chǎn)生中斷請求信號,當(dāng)消抖電路的開關(guān)來回拔動一次將產(chǎn)生一個下降沿信號,通過INT0向CPU申請中斷,要求:初時發(fā)光二極管全黑,每中斷一次,P1.0P1.3所接的開關(guān)狀態(tài)反映到發(fā)光二極管上,且要求開關(guān)斷開的對應(yīng)發(fā)光二極管亮,電路和現(xiàn)象如下: 、 ORG 0000H AJMP MAIN ORG 0003H ;INT0中斷入口 AJMP WBI ; 轉(zhuǎn)中斷服務(wù)程序 ORG 0030H ;主程序 MAIN: MOV P1,#0FH ;高4位燈滅,低四位輸入先寫1 SETB IT0 ; 邊沿觸發(fā)中斷 SETB EX0 ;允許外中斷0中斷 SETB EA ;開中斷開關(guān) SJMP $

13、;等待中斷 WBI:MOV P1,#0FH ;P1先寫入“1”且燈滅 MOV A,P1 ;輸入開關(guān)狀態(tài)換到高4位 SWAP A ;低4位開關(guān)狀態(tài)電平 MOV P1,A ;輸出到P1高4位 RETI END 此例的執(zhí)行現(xiàn)象是,每重置一次四個開關(guān)的開、合狀態(tài),四個發(fā)光二極管維持原來的亮、滅 狀態(tài),僅當(dāng)來回拔動消抖電路開關(guān)后,產(chǎn)生了中斷,發(fā)光二極管才反映新置的開關(guān)狀態(tài)。 例2. 89C51的P1口接一個共陰極的數(shù)碼管,利用消抖開關(guān)產(chǎn)生中斷請求信號,每來回拔動一 次開關(guān),產(chǎn)生一次中斷,用數(shù)碼管顯示中斷的次數(shù)(最多不超過15次)。 ORG 0000H AJMP MAIN ORG 0013H ;INT1中

14、斷入口 AJMP INT1 ;轉(zhuǎn)中斷服務(wù)程序 ORG 0030H ;主程序MAIN: SETB IT1 ;邊沿觸發(fā)中斷 SETB EX1 ;允許INT1中斷 SETB EA ;開中斷開關(guān) MOV R0,#0 ;計數(shù)初值為0 MOV A,#3FH ;“0”的字形碼送AAL1: MOV P1,A ;顯示數(shù)碼 AL2: CJNE R0,#0FH,AL1 ;沒滿15次循環(huán)顯示 MOV R7,#0FFH ;滿15次,顯F,延時 DJNZ R7, MOV P1,#0 ;關(guān)顯示 CLR EA ;關(guān)中斷 SJMP ;結(jié)束INT1: INC R0 ;中斷次數(shù)加1 MOV A,R0 MOV DPTR,TAB ;D

15、PTR指向字形碼表首址 MOVC A,A+DPTR ;查表 POP DPH POP DPL ;彈出斷點 MOV DPTR,#AL1 PUSH DPL PUSH DPH ;修改中斷返回點,AL1壓入堆棧 RETI ;從堆棧AL1地址PC,返主程序AL1處TAB: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H ;段碼表(字形碼) END 上面程序每中斷一次,執(zhí)行一次中斷服務(wù)程序INT1。在中斷服務(wù)程序中,累計中斷次數(shù)并查字形表,返回到主程序AL1地址執(zhí)行顯示。 ORG 0000H AJMP MAIN

16、 ORG 0013H AJMP INT1 ORG 0030HMAIN:SETB TI1 SETB EX1 SETB EA MOV R0,#0 MOV A,#3FHAL1:MOV P1,A AL2:CJNE R0,#0FH,AL1 MOV R7,#0FFH DJNZ R7, MOV P1,#0 CLR EA SJMP INT1:INC R0 MOV A,R0 MOV DPTR,TAB MOVC A,A+DPTR POP DPH POP DPL MOV DPTR,#AL1 PUSH DPL PUSH DPH RETI ;AL1地址PC, 返主程序AL1 TAB: DB 3FH,06H,5BH, 以

17、上中斷在AL1或AL2兩指令處發(fā)生,究竟是哪一指令處中斷是隨機的,為保證返回到AL1顯示F ,這里采用修改中斷返回點的辦法, 即先從棧中彈出中斷響應(yīng)時壓入的 斷點彈到DPTR中,修改DPTR為用戶需要的返回點,并將其壓 入堆棧,再通過執(zhí)行RETI指令彈出棧中內(nèi)容到PC、彈出的即為修改后的地址,從而返回到主 程序中用所希望的地址執(zhí)行。 上例中中斷次數(shù)在主程序判斷,目的是使讀者了解修改中斷返回點的方法,如果改在中斷服 務(wù)程序中判斷,編程簡潔些,下面僅介紹和上例中的不同部分的程序。 ORG 0000H AJMP MAIN ORG 0013H ;INT1中斷入口 AJMP INT1 ;轉(zhuǎn)中斷服務(wù)程序

18、ORG 0030H ;主程序MAIN: SETB IT1 ;邊沿觸發(fā)中斷 SETB EX1 ;允許INT1中斷 SETB EA ;開中斷開關(guān) MOV R0, #0 ;計數(shù)初值為0 MOV P1, #3FH ;顯示0 MOV DPTR,#TAB ;指向字形碼表AGA: SJMP ;等待中斷INT1:INC R0 ;中斷次數(shù)加1 MOV A, R0 MOVC A, A+DPTR ;查字形碼表 MOV P1, A ;顯示 CJNE R0, #0FH, RE ; 15次中斷未到轉(zhuǎn)RE CLR EA ;15次到關(guān)中斷RE: RETI ;返回主程序的AGA處TAB: DB 3FH,06H,5BH,4FH,

19、66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H C51使用戶能編寫高效的中斷服務(wù)程序,編譯器在規(guī)定的中斷源的矢量地址中放入無條件轉(zhuǎn)移指令,使CPU響應(yīng)中斷后自動地從矢量地址跳轉(zhuǎn)到中斷服務(wù)程序的實際地址,而無需用戶去安排。中斷服務(wù)程序定義為函數(shù),函數(shù)的完整定義如下。返回值 函數(shù)名(參數(shù))模式再入interrupt nusing m 其中interrupt n 表示將函數(shù)聲明為中斷服務(wù)函數(shù),n 為中斷源編號,可以是031間的整數(shù) ,不允許是帶運算符的表達式,n 通常取以下值: 0 外部中斷0; 1 定時器/計數(shù)器0溢出中斷; 2 外部中斷1;

20、3 定時器/計數(shù)器1溢出中斷; 4 串行口發(fā)送與接收中斷; Using m 定義函數(shù)使用的工作寄存器組,m的取值范圍為03,可缺省,它 對目標(biāo)代碼的影響是:函數(shù)入口處將當(dāng)前寄存器保存,使用m指定的寄存器組,函數(shù)退出時原寄存器組恢復(fù)。選不同的工作寄存器組,可方便實現(xiàn)寄存器組的現(xiàn)場保護。再入: 屬性關(guān)鍵字reentrant將函數(shù)定義為再入的,在C51中,普通函數(shù)(非再入的)不能遞歸調(diào)用, 只有再入函數(shù)才可被遞歸調(diào)用。 中斷服務(wù)函數(shù)不允許用于外部函數(shù),它對目標(biāo)代碼影響如下:當(dāng)調(diào)用函數(shù)時,SFR中的ACC、B、DPH、DPL和PSW(當(dāng)需要時入棧)。如果不使用寄存器組切換,中斷函數(shù)所需的所有工作寄存器

21、Rn都入棧。函數(shù)退出前,所有工作寄存器出棧。函數(shù)由“RETI”指令終止。例如,對本節(jié)的例1用C語言編程#includevoid int0(void) interrupt 0 /*INT0中斷函數(shù)*/ P1=0 x0f; /*輸入端先置1,燈滅*/ P1=4; /* 讀入開關(guān)狀態(tài),并左移四位, 使開關(guān)反映在發(fā)光二極管上*/ main( ) EA=1; /*開中斷總開關(guān)*/ EX0=1; /*允許INT0中斷*/ IT0=1; /*下降沿產(chǎn)生中斷*/ while(1); /*等待中斷*/ 主函數(shù)執(zhí)行while(1);語句進入死循環(huán)等待中斷,當(dāng)撥動INT0的開關(guān)后,進入中斷函數(shù),讀入P1.0P1.3

22、的開關(guān)狀態(tài)并將狀態(tài)數(shù)據(jù)右移四位到P1.4P1.7的位置上輸出控制LED亮,執(zhí)行完中斷,返回到等待中斷的while(1)語句,等待下一次的中斷。例2 對本節(jié)的例2記錄并顯示中斷次數(shù)改用C語言編程,可有兩種編程方法。方法1:在主程序中控制中斷次數(shù)#includechar i;code char tab16= 0 x3f,0 x06,0 x5b, 0 x4F,0 x66,0 x6d,0 x7d, 0 x07, 0 x7f,0 x6f,0 x77, 0 x7c,0 x39, 0 x5e,0 x79,0 x71;void int(void) interrupt 2i+; /*計中斷次數(shù)*/ P1=tabi; /*查表,次數(shù)送顯示*/main() EA=1; EX1=1; IT1=1; ap5: P1=0 x3f; /*顯示“0”*/ for(i=0;i16;); /*當(dāng)I1

溫馨提示

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

評論

0/150

提交評論