51單片機(jī)(中斷)9.ppt_第1頁(yè)
51單片機(jī)(中斷)9.ppt_第2頁(yè)
51單片機(jī)(中斷)9.ppt_第3頁(yè)
51單片機(jī)(中斷)9.ppt_第4頁(yè)
51單片機(jī)(中斷)9.ppt_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、51單片機(jī)接口,中斷系統(tǒng),微機(jī)的輸入/輸出方式,無(wú)條件傳送:CPU直接與外設(shè)傳送數(shù)據(jù)而不必預(yù)先檢查外設(shè)狀態(tài) 條件傳送:又稱為查詢方式, CPU與外設(shè)傳送數(shù)據(jù)之前,先檢查外設(shè)狀態(tài),只有在狀態(tài)滿足“準(zhǔn)備好”的情況下才可以傳送數(shù)據(jù)。,中斷傳送:中斷的情況下傳送數(shù)據(jù)。 DMA:外設(shè)不通過(guò)CPU,直接將數(shù)據(jù)存入存儲(chǔ)器,中斷的概念,中斷:計(jì)算機(jī)在執(zhí)行程序的過(guò)程中,當(dāng)出現(xiàn)異常情況或特殊請(qǐng)求時(shí),計(jì)算機(jī)停止現(xiàn)行程序的運(yùn)行,轉(zhuǎn)向這些異常情況或特殊請(qǐng)求的處理,處理結(jié)束后再返回現(xiàn)行程序的斷點(diǎn)處,繼續(xù)執(zhí)行原程序 中斷源:產(chǎn)生中斷的請(qǐng)求源。 中斷返回 中斷服務(wù),中斷的概念,服務(wù)程序的地址信息,使用“中斷向量”方式存放,C

2、PU的中斷機(jī)制會(huì)自動(dòng)查表獲得服務(wù)程序地址,從而能轉(zhuǎn)入服務(wù)程序執(zhí)行。 中斷服務(wù)過(guò)程與子程序調(diào)用過(guò)程類似,所不同僅在于:通過(guò)向量表獲得服務(wù)程序地址。子程序地址通過(guò)指令中的Label直接獲得。 一些CPU除了硬件申請(qǐng)中斷外,還允許軟件通過(guò)中斷向量表調(diào)用子程序。這個(gè)功能稱為“軟中斷”或者“中斷調(diào)用”。此時(shí)的“中斷”概念轉(zhuǎn)化成“使用中斷矢量表”。,中斷優(yōu)先級(jí)別 MCS-51系列單片機(jī)系統(tǒng)允許有幾個(gè)中斷源,當(dāng)幾個(gè)中斷源同時(shí)向CPU請(qǐng)求中斷,要求為它們服務(wù)的時(shí)候,CPU優(yōu)先響應(yīng)哪一個(gè)中斷請(qǐng)求源呢?此時(shí)將優(yōu)先響應(yīng)優(yōu)先級(jí)別高的中斷請(qǐng)求源。所謂中斷優(yōu)先級(jí)別是指根據(jù)中斷源(所發(fā)生的實(shí)時(shí)事件)的輕重緩急排隊(duì),優(yōu)先處理

3、最緊急事件的中斷請(qǐng)求。中斷優(yōu)先級(jí)別由編程或硬件設(shè)置或規(guī)定。,中斷嵌套 當(dāng)CPU正在處理一個(gè)中斷源請(qǐng)求的時(shí)候,又發(fā)生了另一個(gè)優(yōu)先級(jí)別比它高的中斷源請(qǐng)求,如果CPU能夠暫時(shí)終止執(zhí)行對(duì)原來(lái)中斷源的處理程序,轉(zhuǎn)而去處理優(yōu)先級(jí)別更高的中斷請(qǐng)求,待處理完后,再繼續(xù)執(zhí)行原來(lái)的低級(jí)中斷處理程序,這樣的過(guò)程稱為中斷嵌套。如圖11-1所示為2級(jí)中斷嵌套。,X86的中斷簡(jiǎn)介(微機(jī)原理),X86中斷向量表存放在地址00:000000:03FFH,共1024個(gè)地址,256個(gè)向量。 每個(gè)向量占用4個(gè)字節(jié),它就是子程序的入口地址:段地址:偏移地址CS:IP 每個(gè)向量以編號(hào)排序:0FFH排序。(中斷向量號(hào)) 硬件中斷(事件中

4、斷)發(fā)生時(shí),由8259A芯片發(fā)出此事件對(duì)應(yīng)的“中斷向量號(hào)”給CPU。 軟件中斷時(shí),使用指令:INT nnH,nn為向量號(hào)。 CPU將向量號(hào)乘以4后查表并讀取服務(wù)程序地址到CS:IP,進(jìn)而轉(zhuǎn)入服務(wù)程序執(zhí)行。 可編程中斷控制器8259A可以對(duì)8個(gè)外部中斷進(jìn)行管理,也可以再擴(kuò)展下級(jí)8259A。,51單片機(jī)的中斷系統(tǒng),51單片機(jī)的中斷全部都是“事件”中斷,即:由硬件產(chǎn)生! 51單片機(jī)有5個(gè)中斷源,他們是:定時(shí)器2個(gè),外部中斷2個(gè),串行接口1個(gè)。 中斷產(chǎn)生原因:定時(shí)器溢出時(shí);外部中斷引腳電平變低時(shí);串行接口收到數(shù)或者數(shù)據(jù)發(fā)送完畢時(shí)。其中之一“事件發(fā)生”時(shí),都可以申請(qǐng)中斷。 51單片機(jī)的中斷都是“可屏蔽”

5、的,即可以關(guān)斷某些不需要的中斷源。,中斷響應(yīng)過(guò)程,中斷響應(yīng)的條件:1.事件發(fā)生。2.此中斷被“允許/開(kāi)通”時(shí)并具有更高優(yōu)先級(jí)別時(shí)。 CPU執(zhí)行完當(dāng)前指令后,將當(dāng)前PC值壓入堆棧,然后按照中斷源不同,將中斷入口地址裝入PC,讀取中斷服務(wù)程序指令并執(zhí)行之。此過(guò)程將會(huì)耗去至少4個(gè)機(jī)器周期。 當(dāng)執(zhí)行到指令RETI時(shí),從堆棧中讀回保存的原PC值并裝入PC,讀取中斷前的“下一條指令”回到斷點(diǎn)處繼續(xù)執(zhí)行。 回到斷點(diǎn)處執(zhí)行一條指令,然后檢測(cè)是否有中斷申請(qǐng),如果有,就重復(fù)2過(guò)程。 51單片機(jī)中斷入口地址是固定的,CPU廠家設(shè)計(jì)為:不同中斷源對(duì)應(yīng)地址自動(dòng)裝入PC。 有時(shí)也將中斷響應(yīng)過(guò)程解釋為CPU(硬件)自動(dòng)執(zhí)行

6、一條長(zhǎng)調(diào)用指令:LCALL 入口地址,51單片機(jī)的中斷入口地址,51中斷的入口地址是廠家規(guī)定的,廠家設(shè)計(jì)好的,不能改動(dòng)!編程者必須按照規(guī)定設(shè)計(jì)?。承〤PU可以自己設(shè)定) C51使用: “ 中斷函數(shù)名 interrupt n using m” 定義中斷向量和寄存器組,其中n*8+3=入口地址, m為寄存器組號(hào),外部中斷INT0,INT1,CPU可以響應(yīng)外部的中斷申請(qǐng),只要把申請(qǐng)信號(hào)連接到引腳INT0或INT1便可。 INT0,INT1引腳電平由高變底就可申請(qǐng)中斷服務(wù)。 51單片機(jī)允許選擇“下降沿”或者“低電平”申請(qǐng)中斷,通過(guò)設(shè)置“IT0;IT1”控制位進(jìn)行選擇。 一旦以上信號(hào)變化,就會(huì)產(chǎn)生中斷

7、申請(qǐng)標(biāo)志“IE0;IE1” CPU每執(zhí)行一條指令后都要檢測(cè)引腳電平變化,因此其反應(yīng)時(shí)間最快為1個(gè)機(jī)器周期,低電平的時(shí)間至少保持1個(gè)機(jī)器周期以上。,INT1框圖與INT0一樣。 IT0=1 選擇“下降沿”觸發(fā) IT0=0 選擇“低電平”觸發(fā),“低電平”“下降沿”選擇參考,外部引入的中斷申請(qǐng)信號(hào)有時(shí)“低電平”時(shí)間很長(zhǎng),例如1秒周期的方波,此時(shí)低電平時(shí)間長(zhǎng)達(dá)0.5秒! 如果中斷服務(wù)程序執(zhí)行時(shí)間2毫秒(約1500條指令,假定晶振12兆),那么服務(wù)結(jié)束時(shí),INT引腳仍為“低電平”,于是再次進(jìn)入中斷服務(wù)!周而復(fù)始直到INT引腳變?yōu)楦唠娖?!這是不允許的。 如果采用“下降沿觸發(fā)”,以上情況可以避免。 許多外部

8、芯片在申請(qǐng)中斷期間,CPU對(duì)其訪問(wèn)過(guò)后就能自動(dòng)拆消“低電平”的申請(qǐng)信號(hào),這時(shí)采用“低電平”觸發(fā)可以提高抗干擾能力。 一些教材推薦右圖電路進(jìn)行處理:在中斷服務(wù)程序中,通過(guò)P1.0送出負(fù)脈沖清除此申請(qǐng)信號(hào)。,定時(shí)器中斷和串口中斷,定時(shí)器溢出時(shí),產(chǎn)生標(biāo)志:TF0和TF1,它們就可以申請(qǐng)中斷。 串行接口有一個(gè)發(fā)送緩沖器,其中的數(shù)據(jù)一位一位地順序發(fā)送,當(dāng)數(shù)據(jù)發(fā)送完畢,緩沖器“空”時(shí),置標(biāo)志“TI” 串行接口有一個(gè)接收緩沖器,數(shù)據(jù)一位一位地接收,當(dāng)數(shù)據(jù)接收完畢,緩沖器“滿”時(shí),置標(biāo)志“RI”,TI和RI之一變成1時(shí),都會(huì)申請(qǐng)中斷。,中斷申請(qǐng),5個(gè)中斷源6個(gè)標(biāo)志位,中斷申請(qǐng),TCON討論,IT0,IT1外部

9、中斷觸發(fā)方式選擇,1選擇下降沿 IE0,IE1外部中斷申請(qǐng)標(biāo)志,1有申請(qǐng) TR0,TR1定時(shí)器“啟?!笨刂?,1啟動(dòng) TF0,TF1定時(shí)器溢出標(biāo)志,1有溢出 附:TI串口“發(fā)送完畢”標(biāo)志,1發(fā)送完成 附:RI串口“收到數(shù)據(jù)”標(biāo)志,1數(shù)據(jù)收到,中斷申請(qǐng)的撤銷(xiāo),對(duì)IE0,IE1,TF0,TF1,這4個(gè)標(biāo)志可以通過(guò)執(zhí)行“RETI”指令自動(dòng)清除。 一些教材說(shuō):中斷響應(yīng)后,硬件自動(dòng)把標(biāo)志位清0,實(shí)際工作原理是“RETI”指令的效果。 對(duì)TI和RI,需要用指令CLR RI 和CLR TI 將其清除。 前面可以從“中斷入口地址”和中斷申請(qǐng)機(jī)制(RI+TI)看出,無(wú)論收到數(shù)或者發(fā)完數(shù),其中斷入口只有一個(gè):地址0

10、023H。服務(wù)程序需要對(duì)這兩個(gè)標(biāo)志依次判斷后處理,因此不能簡(jiǎn)單地進(jìn)行全部清除。例如對(duì)發(fā)送處理后,需要對(duì)TI清0,程序再判,如果RI=1則對(duì)接收處理,并對(duì)RI清0。 這些標(biāo)志使用過(guò)后,應(yīng)當(dāng)清除,否則將還會(huì)再次申請(qǐng)中斷。,SCON中斷相關(guān)位討論,SCON是串行接口控制寄存器 SM0SM2串口模式選擇位 REN串口允許接收 TB8,RB8串口數(shù)據(jù)第9位 TI串口數(shù)據(jù)發(fā)送完畢時(shí)自動(dòng)置1,可用于申請(qǐng)中斷服務(wù),程序服務(wù)后用軟件清0。 RI串口收到數(shù)據(jù)時(shí)自動(dòng)置1,可用于申請(qǐng)中斷服務(wù),程序服務(wù)后用軟件清0。,中斷控制,中斷允許寄存器IE,可以“位尋址”,正邏輯, 1允許 EA中斷允許總控 EX0INT0中斷允

11、許 ET0T0中斷允許 EX1INT1中斷允許 ET1T1中斷允許 ES串行接口中斷允許 ET2T2中斷允許(52單片機(jī)),中斷優(yōu)先寄存器IP,51單片機(jī)只允許兩層中斷嵌套。 IP=00時(shí),某個(gè)正在執(zhí)行的中斷服務(wù)不會(huì)被其它中斷打斷,即:5個(gè)中斷是同級(jí)優(yōu)先的。 當(dāng)IP中某位被置1時(shí),此中斷可以打斷其它正在服務(wù)的中斷,執(zhí)行新的中斷。 當(dāng)IP中所有位都置1時(shí),就又形成了“同級(jí)優(yōu)先” 同級(jí)優(yōu)先情況時(shí),如果若干中斷同時(shí)發(fā)生,CPU按照:“INT0-T0-INT1-T1-串口”順序依次完成服務(wù),中間不會(huì)發(fā)生“中斷嵌套”。 IP寄存器可以“位尋址” 普遍意義的優(yōu)先(升序):主程序普通中斷優(yōu)先的中斷。,中斷程

12、序必須保護(hù)現(xiàn)場(chǎng),為什么要保護(hù)現(xiàn)場(chǎng)? 當(dāng)中斷服務(wù)時(shí),服務(wù)程序需要用到一些寄存器,例如:A,Rn,PSW,DPTR等寄存器!如果被打斷的程序在這些寄存器中存著數(shù)據(jù),并且中斷返回后還要使用這些數(shù)據(jù)!那么中斷服務(wù)程序不應(yīng)當(dāng)破壞這些寄存器內(nèi)的數(shù)據(jù)。 將這些寄存器內(nèi)的數(shù)據(jù)設(shè)法保存/保護(hù)起來(lái),稱為“保護(hù)現(xiàn)場(chǎng)”,保護(hù)現(xiàn)場(chǎng)的方法,切換Rn的寄存器“組”。 把一些寄存器內(nèi)容壓入堆棧。 服務(wù)程序沒(méi)用到的寄存器不必保存。 Rn寄存器組設(shè)計(jì)為一個(gè)級(jí)別用一組:最多使用3個(gè)組!,切換寄存器Rn方法: PUSH PSW MOV PSW,#000XX000B POP PSW RETI 紅色XX表示寄存器組號(hào)。也可以用SETB/

13、CLR修改RS1,RS1。 入棧方法: A用ACC代替 DPTR用DPH,DPL代替 最先入棧的寄存器最后出來(lái),必須配對(duì):有進(jìn)有出!,定時(shí)器 “定時(shí)中斷”舉例,假定使用T0每2mS產(chǎn)生一次中斷,用于調(diào)用動(dòng)態(tài)顯示程序DISPLAY,主程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP DISPLAY ORG 0030H MAIN:,MAIN: MOV SP,#40H MOV WEIZHI,#00 MOV TMOD,#00000001B; T0方式1 MOV TH0,#0F8H; MOV TL0,#30H;F830H=63536=65536-2000 SETB TR0

14、 SETB ET0 SETB EA 其他程序略,中斷服務(wù)程序舉例,DISPLAY: PUSH ACC PUSH PSW SETB RS0 CLR RS1 CLR TR0 MOV TH0,#0F8H MOV TL0,#30H SETB TR0 MOV A,WEIZHI SWAP A MOV R1,A MOV A,WEIZHI ADD A,#BUFF ;顯示緩沖區(qū)地址 MOV R0,A,MOV A,R0 ORL A,R1 SETB P2.6 MOVX R0,A CLR P2.6 INC WEIZHI MOV A,WEIZHI CJNE A,#8,DSP0 DSP0: JC RETURN MOV W

15、EIZHI,#0 RETURN: POP PSW POP ACC RETI,顯示程序,動(dòng)態(tài)顯示電路解說(shuō),顯示數(shù)據(jù)處理,顯示器地址:A14=1或者P2.6=1選中顯示鎖存器74LS273 74LS273鎖存CPU送來(lái)的8位數(shù)據(jù)(用MOVX指令,地址可用多種方法指定) 鎖存器低4位為顯示數(shù)據(jù)的BCD碼,經(jīng)74LS47譯碼驅(qū)動(dòng),送到數(shù)碼管“筆劃” 高4位為顯示“位置”。經(jīng)74LS138譯碼選擇其中一個(gè)數(shù)碼管,經(jīng)三極管驅(qū)動(dòng)后將其點(diǎn)亮。 每送一個(gè)數(shù)據(jù),只有一個(gè)數(shù)碼管亮。 每個(gè)數(shù)碼管保持25mS時(shí)間發(fā)光,然后點(diǎn)亮另一個(gè)數(shù)碼管。 保證每秒鐘對(duì)8個(gè)數(shù)碼管刷新25次以上。否則顯示器有閃爍感。,11.3 中斷系統(tǒng)

16、應(yīng)用舉例,例1 利用AT89C51的外部中斷實(shí)現(xiàn)單步操作。 如圖11-5所示是實(shí)現(xiàn)單步操作的簡(jiǎn)單電路工作原理圖。,工作原理:由于中斷處理程序中有RETI指令,所以AT89C51響應(yīng)中斷后,執(zhí)行完RETI須返回主程序執(zhí)行一條指令,然后才能響應(yīng)新的中斷。這樣,只要引腳平時(shí)為低電平,且編程為電平觸發(fā),則CPU響應(yīng)中斷,進(jìn)入中斷服務(wù)程序,并在該服務(wù)程序中停留,直到引腳上接收一個(gè)脈沖(從低高低),才返回主程序執(zhí)行一條指令,然后又立即進(jìn)入中斷服務(wù)程序,等待下一個(gè)脈沖的到來(lái),又返回主程序執(zhí)行一條指令,如此反復(fù),直到執(zhí)行一個(gè)完整的程序。該單步操作可用作調(diào)試檢查程序。,ORG 0000H RESET:AJMP

17、MAIN;主程序 ORG 0003H AJMP INT0;中斷服務(wù)程序 ;初始化程序段 MAIN: CLR IT0;設(shè)置為電平觸發(fā) SETB PX0 ;定義為高優(yōu)先級(jí)中斷 SETB EA ; 設(shè)置CPU開(kāi)放中斷 SETB EX0 ;允許外部中斷中斷。 AJMP $ ;動(dòng)態(tài)暫存 INT0: NOP HERE0:JNB P3.2,HERE0;=0,循環(huán)轉(zhuǎn)移 HERE1:JB P3.2,HERE1 ;=1,循環(huán)轉(zhuǎn)移 RETI ;中斷返回,例2 編制一段程序,使P1.0端口線上輸出周期為2ms的方波脈沖。設(shè)單片機(jī)晶振頻率Fosc6MHZ。 方法:利用定時(shí)器T0作1ms定時(shí),達(dá)到定時(shí)值后引起中斷,在中斷

18、服務(wù)程序中,使P1.0的狀態(tài)取一次反,并再次定時(shí)1ms。 計(jì)算定時(shí)初值:機(jī)器周期MC12/fosc2us。所以定時(shí)lms所需的機(jī)器周期個(gè)數(shù)為500D,亦即0lF4H。設(shè)T0為工作方式1(16位方式),則定時(shí)初值是(01F4H)求補(bǔ)FEOCH,ORG 0000H RESET:AJMP MAIN;主程序 ORG 000BH AJMP IST0;轉(zhuǎn)入T0中斷服務(wù)程序入口地址IST0 ;初始化程序段 MAIN: MOV TMOD, #01H;T0為定時(shí)器狀態(tài),工作方式1 MOV TL0,#0CH;T0的低位定時(shí)初值 MOV TH0,#0FEH;T0的高位定時(shí)初值 MOV TCON,#10H;打開(kāi)T0 SETB EA ;EA=1,即允許全局中斷 SETB ET0 ;1ET0=1,即允許T0中斷 AJMP $ ;動(dòng)態(tài)暫存 IST0: MOV TL0,#0CH ;重置定時(shí)器初值 MOV TH0,#0FEH;重置定時(shí)器初值 CPL P1.0 ;P1.0取反 RET1 ;中斷返回,習(xí)題,1. 在一個(gè)MCS-

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論