




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章中斷系統(tǒng)
5.1微機(jī)的輸入/輸出方式5.2中斷的概念5.389C51中斷系統(tǒng)結(jié)構(gòu)及中斷控制5.4中斷處理過(guò)程5.5外部中斷擴(kuò)展方法5.6中斷程序舉例1
5.1微機(jī)的輸入/輸出方式
單片機(jī)系統(tǒng)的運(yùn)行同其他微機(jī)系統(tǒng)一樣,CPU不斷地與外部輸入/輸出設(shè)備交換信息。CPU與外部設(shè)備交換信息通常有以下幾種方式:
①
程序控制傳送方式,指用輸入/輸出指令,來(lái)控制信息傳輸?shù)姆绞?,是一種軟件控制方式。根據(jù)程序控制的方法,分為無(wú)條件傳送方式和查詢(條件)傳送方式。
②
中斷傳送方式。
③
直接存儲(chǔ)器存?。―MA)方式。什么是外部設(shè)備?25.1.1無(wú)條件傳送方式
這種數(shù)據(jù)傳送方式有些類似于CPU和存儲(chǔ)器之間的數(shù)據(jù)傳送,即CPU總是認(rèn)為外設(shè)在任何時(shí)刻都是處于“準(zhǔn)備好”的狀態(tài)。因此,這種傳送方式不需要交換狀態(tài)信息,只需在程序中加入訪問(wèn)外設(shè)的指令,數(shù)據(jù)傳送便可以實(shí)現(xiàn),但此種方法很少使用。適用于那些能隨時(shí)讀寫的設(shè)備。
3輸入狀態(tài)信息準(zhǔn)備好?傳送數(shù)據(jù)5.1.2查詢(條件)傳送方式查詢傳送方式:通過(guò)查詢外設(shè)的狀態(tài)信息,確信外設(shè)已處于“準(zhǔn)備好”,計(jì)算機(jī)才發(fā)出訪問(wèn)外設(shè)的指令,實(shí)現(xiàn)數(shù)據(jù)的傳送。在輸入時(shí),需要查詢外設(shè)的輸入數(shù)據(jù)是否準(zhǔn)備好;當(dāng)數(shù)據(jù)準(zhǔn)備好后,發(fā)出一個(gè)選通信號(hào),一邊把數(shù)據(jù)送入鎖存器,一邊使D觸發(fā)器為“1”,給出“準(zhǔn)備好”的狀態(tài)信號(hào)。而數(shù)據(jù)與狀態(tài)必須由不同的端口輸至CPU數(shù)據(jù)總線。45.1.2查詢(條件)傳送方式在輸出時(shí),在輸出時(shí)CPU也必須了解外設(shè)的狀態(tài),看外設(shè)是否有空查詢方式下CPU利用率低(程序循環(huán)等待),接口需向CPU提供查詢狀態(tài)。適用于CPU不太忙,傳送速度要求不高的場(chǎng)合。55.1.3直接存儲(chǔ)器存?。―MA)方式
DMA:DirectMemoryAccess外設(shè)利用專用的接口(DMA控制器)直接與存儲(chǔ)器進(jìn)行高速數(shù)據(jù)傳送,并不經(jīng)過(guò)CPU(CPU不參與數(shù)據(jù)傳送工作),總線控制權(quán)不在CPU處,而由DMA控制器控制。其特點(diǎn)是接口電路復(fù)雜,硬件開銷大。大批量數(shù)據(jù)傳送速度極快。適用于存儲(chǔ)器與存儲(chǔ)器之間、存儲(chǔ)器與外設(shè)之間的大批量數(shù)據(jù)傳送的場(chǎng)合。同其他計(jì)算機(jī)系統(tǒng)一樣,單片機(jī)系統(tǒng)還有另一種非常重要的數(shù)據(jù)輸入/輸出方式——中斷方式。
6
5.2中斷的概念CPU正在執(zhí)行主程序,突然,被意外事情打斷,轉(zhuǎn)去執(zhí)行新程序。CPU執(zhí)行新程序結(jié)束后,又回到主程序中繼續(xù)執(zhí)行。這樣的過(guò)程就叫中斷某人看書 執(zhí)行主程序
中斷過(guò)程電話鈴響
中斷信號(hào)INTx=0 中斷請(qǐng)求暫??磿?暫停執(zhí)行主程序中斷響應(yīng)書中作記號(hào)當(dāng)前PC值入棧 保護(hù)斷點(diǎn)電話談話
執(zhí)行中斷程序 中斷服務(wù)繼續(xù)看書 返回主程序 中斷返回7中斷系統(tǒng)中的幾個(gè)基本概念:中斷源:能引起中斷的事件主程序:中斷發(fā)生前CPU正在執(zhí)行的的程序代碼斷點(diǎn):中斷發(fā)生時(shí),主程序被斷開的位置中斷服務(wù)子程序:處理隨機(jī)事件的程序中斷系統(tǒng):在微處理器中,能夠?qū)崿F(xiàn)中斷響應(yīng)、中斷處理中斷返回的功能部件8中斷流程圖執(zhí)行主程序主程序繼續(xù)執(zhí)行主程序斷點(diǎn)中斷請(qǐng)求中斷響應(yīng)執(zhí)行中斷處理程序中斷返回9
對(duì)突發(fā)事故,做出緊急處理。根據(jù)現(xiàn)場(chǎng)隨時(shí)變化的各種參數(shù)、信息,做出實(shí)時(shí)監(jiān)控。
CPU與外部設(shè)備并行工作,以中斷方式相聯(lián)系,提高工作效率。解決快速CPU與慢速外設(shè)之間的矛盾。在多項(xiàng)外部設(shè)備同時(shí)提出中斷請(qǐng)求情況下,CPU能根據(jù)輕重緩急(優(yōu)先級(jí))響應(yīng)外設(shè)的中斷請(qǐng)求。中斷的作用:10
5.389C51中斷結(jié)構(gòu)及中斷控制
89C51有5個(gè)中斷源(89C52有6個(gè)),4個(gè)中斷控制寄存器,2個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷嵌套。11中斷是計(jì)算機(jī)的一個(gè)重要功能。采用中斷技術(shù)能實(shí)現(xiàn)以下的功能:
①
分時(shí)操作 可以使CPU和多個(gè)外設(shè)同時(shí)工作,并分時(shí)為各外設(shè)提供服務(wù),從而提高了CPU的利用率和輸入和輸出的速度②
實(shí)時(shí)處理 當(dāng)計(jì)算機(jī)用于實(shí)時(shí)控制時(shí),請(qǐng)求CPU提供服務(wù)時(shí)隨機(jī)發(fā)生的。有了中斷系統(tǒng),CPU就可以立即響應(yīng)并加以處理③
故障處理。 有了中斷系統(tǒng),當(dāng)出現(xiàn)故障時(shí),CPU可及時(shí)轉(zhuǎn)去執(zhí)行故障處理程序,自行處理故障而不必停機(jī)。12中斷源:能發(fā)出中斷請(qǐng)求信號(hào)的各種事件89C51中斷系統(tǒng)的五個(gè)中斷源為:外部中斷2個(gè):①INT0:外部中斷0請(qǐng)求,由P3.2引腳輸入②INT1:外部中斷1請(qǐng)求,由P3.3引腳輸入內(nèi)部中斷3個(gè):③T0:定時(shí)器/計(jì)數(shù)器0溢出中斷請(qǐng)求,無(wú)引入端。④T1:定時(shí)器/計(jì)數(shù)器1溢出中斷請(qǐng)求,無(wú)引入端。⑤TXD/RXD:串行口中斷請(qǐng)求,當(dāng)串行口完成一幀數(shù)據(jù)的發(fā)送或接收時(shí),便請(qǐng)求中斷,無(wú)引入端。每個(gè)中斷源都對(duì)應(yīng)一個(gè)中斷請(qǐng)求標(biāo)志位,他們?cè)O(shè)置在特殊功能寄存器TCON和SCON中。5.3.189C51中斷源1389C51中斷系統(tǒng)有以下四個(gè)特殊功能寄存器:1)中斷請(qǐng)求標(biāo)志
定時(shí)控制寄存器TCON(用六位)串行口控制寄存器SCON(用二位)2)中斷允許控制
中斷允許寄存器IE3)中斷優(yōu)先級(jí)控制中斷優(yōu)先級(jí)寄存器IP
其中,TCON和SCON只有一部分位用于中斷控制。通過(guò)對(duì)以上各特殊功能寄存器的各位進(jìn)行置位或復(fù)位等操作,可實(shí)現(xiàn)各種中斷控制功能。
5.3.2中斷控制
14TF1——定時(shí)器/計(jì)數(shù)器T1的溢出中斷請(qǐng)求標(biāo)志位。當(dāng)CPU響應(yīng)中斷時(shí),硬件將自動(dòng)對(duì)TF1清0。TF0——(TimeoverflowFlag)定時(shí)器/計(jì)數(shù)器T0的溢出中斷請(qǐng)求標(biāo)志位。含義與TF1相同。IE1——(InterruptEdgeflag)外部中斷1的中斷請(qǐng)求標(biāo)志。當(dāng)CPU響應(yīng)該中斷請(qǐng)求時(shí),由硬件使IE1清0。IT1——外部中斷1的中斷觸發(fā)方式控制位。
IE0——外部中斷0的中斷請(qǐng)求標(biāo)志。其含義與IE1相同。
IT0——(InterruptTypeControl)外部中斷0的中斷觸發(fā)方式控制位。其含義與IT1同。1、TCON中的中斷標(biāo)志位TF1TF0IE1IT1IE0IT0TCON(88H)15IT1/0(InterruptTypeControlbit)IT1/0=0:電平觸發(fā)方式,CPU每個(gè)機(jī)器周期S5P2期間采樣外部中斷請(qǐng)求引腳,若引腳為低電平,則使IE1置1;為高電平使IE1清0。IT1/0=1:邊沿觸發(fā)方式,在連續(xù)的2個(gè)機(jī)器周期內(nèi),若外部中斷1/0的中斷請(qǐng)求為先高后低(下降沿),則使IE1置1。當(dāng)CPU響應(yīng)該中斷時(shí),由硬件使IE1清0。16SCON為串行口控制寄存器,其低2位鎖存串行口的接收中斷和發(fā)送中斷標(biāo)志RI和TI。
①TI——串行口發(fā)送中斷請(qǐng)求標(biāo)志。CPU將一個(gè)數(shù)據(jù)寫入發(fā)送緩沖器SBUF時(shí),就啟動(dòng)發(fā)送。每發(fā)送完一幀串行數(shù)據(jù)后,硬件置位TI。但CPU響應(yīng)中斷時(shí),并不清除TI,必須在中斷服務(wù)程序中由軟件對(duì)TI清0。
②RI——串行口接收中斷請(qǐng)求標(biāo)志。在串行口允許接收時(shí),每接收完一個(gè)串行幀,硬件置位RI。同樣,CPU響應(yīng)中斷時(shí)不會(huì)清除RI,必須用軟件對(duì)其清0。
2.SCON中的中斷標(biāo)志位
TIRISCON98H172)中斷允許控制
89C51對(duì)中斷源的開放或屏蔽是由中斷允許寄存器IE控制的。中斷允許寄存器IE對(duì)中斷的開放和關(guān)閉實(shí)現(xiàn)兩級(jí)控制。所謂兩級(jí)控制,就是有一個(gè)總的開關(guān)中斷控制位EA(IE.7),當(dāng)EA=0時(shí),屏蔽所有的中斷申請(qǐng),即任何中斷申請(qǐng)都不接受;當(dāng)EA=1時(shí),CPU開放中斷,但五個(gè)中斷源還要由IE的低5位的各對(duì)應(yīng)控制位的狀態(tài)進(jìn)行中斷允許控制。18
IE中各位的含義如下:
①
EA——(EnableAllInterrupt)中斷允許總控制位②
ES——(EnabletheSerialPort)串行口中斷允許位。③
ET1—(EnabletheTimer)定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。④
EX1——(EnabletheExternalInterrupt)外部中斷1中斷允許位。⑤ET0——定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位。⑥
EX0——外部中斷0中斷允許位。該位是“1”時(shí),為允許中斷,該位是“0”時(shí),為禁止中斷EAESET1EX1ET0EX0IE
A8H19例5-1:假設(shè)允許片內(nèi)定時(shí)器/計(jì)數(shù)器中斷,禁止其他中斷。試根據(jù)假設(shè)條件設(shè)置IE的相應(yīng)值。
解:(a)用字節(jié)操作指令MOVIE,#8AH或MOVA8H,#8AH;#8AH=10001010B(b)用位操作指令SETBET0;定時(shí)器/計(jì)數(shù)器0允許中斷SETBET1;定時(shí)器/計(jì)數(shù)器1允許中斷SETBEA;CPU開中斷2089C51有兩個(gè)中斷優(yōu)先級(jí)。每一個(gè)中斷請(qǐng)求源均可編程為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷。各位的含義如下:①
PS——串行口中斷優(yōu)先級(jí)控制位。②
PT1——定時(shí)器/計(jì)數(shù)器T1中斷優(yōu)先級(jí)控制位。③
PX1——外部中斷1中斷優(yōu)先級(jí)控制位。④
PT0——定時(shí)器/計(jì)數(shù)器T0中斷優(yōu)先級(jí)控制位。⑤
PX0——外部中斷0中斷優(yōu)先級(jí)控制位。
IP
B8H該位是“1”時(shí),為高級(jí)優(yōu)先級(jí),該位是“0”時(shí),為低級(jí)優(yōu)先級(jí)3)中斷優(yōu)先級(jí)(priority)控制PSPT1PX1PT0PX021/INT0中斷
T0溢出中斷
/INT1中斷
T1溢出中斷串口中斷
高低出廠前已由廠家固化順序——事先約定同一級(jí)中的5個(gè)中斷源的優(yōu)先順序是:22中斷優(yōu)先原則:(概括為四句話)1、低級(jí)不打斷高級(jí)2、高級(jí)不睬低級(jí)3、同級(jí)不能打斷4、同級(jí)、同時(shí)中斷,事先約定。23低級(jí)中斷請(qǐng)求響低應(yīng)中級(jí)斷響高應(yīng)中級(jí)斷序主回返程回返低中級(jí)斷
CPU執(zhí)行CPU執(zhí)行低級(jí)CPU執(zhí)行高級(jí)主程序中斷服務(wù)程序中斷服務(wù)程序圖5-9二級(jí)中斷嵌套24例5-2:設(shè)89C51的片外中斷為高優(yōu)先級(jí),片內(nèi)中斷為低優(yōu)先級(jí)。試設(shè)置IP相應(yīng)值。
解:(a)用字節(jié)操作指令MOVIP,#05H或MOV0B8H,#05H;#05H=00000101B(b)用位操作指令SETBPX0SETBPX1CLRPSCLRPT0CLRPT125中斷源觸發(fā)方式中斷請(qǐng)求標(biāo)志位中斷允許中斷優(yōu)先級(jí)外部中斷0(INT0)IT0電平/邊沿IE0硬件置1,邊沿-硬件清0EX0PX0外部中斷1(INT1)IT1電平/邊沿IE1硬件置1,硬件清0EX1PX1定時(shí)器/計(jì)數(shù)器0(T0)無(wú)TF0硬件置1,硬件清0ET0PT0定時(shí)器/計(jì)數(shù)器1(T1)無(wú)TF1硬件置1,硬件清0ET1PT1串行口中斷TXD無(wú)TI硬件置1,軟件清0ESPSRXD無(wú)RI硬件置1,軟件清026中斷處理過(guò)程可分為三個(gè)階段,即中斷響應(yīng)、中斷處理和中斷返回。在中斷響應(yīng)時(shí),首先應(yīng)在堆棧中保護(hù)主程序的斷點(diǎn)地址,以便中斷返回時(shí),執(zhí)行RETI指令能將斷點(diǎn)地址從堆棧中彈出到PC,正確返回。由此可見,CPU執(zhí)行的中斷服務(wù)程序如同子程序一樣,因此又被稱作中斷服務(wù)子程序。但兩者的區(qū)別在于,子程序是用LCALL指令來(lái)調(diào)用的,而中斷服務(wù)子程序是通過(guò)中斷請(qǐng)求實(shí)現(xiàn)的。所以,在中斷服務(wù)子程序中也存在保護(hù)現(xiàn)場(chǎng)、恢復(fù)現(xiàn)場(chǎng)的問(wèn)題。
5.4中斷處理過(guò)程
27圖5-10中斷處理的大致流程保護(hù)現(xiàn)場(chǎng)為外設(shè)服務(wù)恢復(fù)現(xiàn)場(chǎng)主程序NKN+mK+1返回中斷處理28
一、中斷響應(yīng)條件
CPU響應(yīng)中斷的條件有:
①
有中斷源發(fā)出中斷請(qǐng)求。
②
中斷總允許位EA=1,即CPU開中斷。
③
申請(qǐng)中斷的中斷源的中斷允許位為1,即中斷沒(méi)有被屏蔽。
④
無(wú)同級(jí)或更高級(jí)中斷正在被服務(wù)。
⑤
當(dāng)前的指令周期已經(jīng)結(jié)束。
⑥
若現(xiàn)行指令為RETI或者是訪問(wèn)IE或IP指令時(shí),該指令以及緊接著的另一條指令已經(jīng)執(zhí)行完。
5.4.1中斷響應(yīng)
29
二、中斷響應(yīng)操作過(guò)程(假設(shè)已使某中斷請(qǐng)求標(biāo)志置1)
(1)先使相應(yīng)優(yōu)先級(jí)狀態(tài)觸發(fā)器置1;(2)執(zhí)行一個(gè)硬件子程序的調(diào)用(LCALL),1)硬件清零相應(yīng)中斷請(qǐng)求標(biāo)志(TI、RI除外)2)將當(dāng)前PC內(nèi)容壓入堆?!Wo(hù)斷點(diǎn);3)將中斷服務(wù)子程序入口地址送PC——轉(zhuǎn)移。
30各中斷源與對(duì)應(yīng)的矢量地址中斷源中斷矢量外部中斷0(INT0)0003H定時(shí)器T0中斷000BH外部中斷1(INT1)0013H定時(shí)器T1中斷001BH串行口中斷0023H31三、中斷響應(yīng)時(shí)間若M1周期的S5P2前某中斷生效,在S5P2期間置位相應(yīng)的中斷標(biāo)志位;M2恰逢指令的最后一個(gè)機(jī)器周期,且該指令不是RETI或訪問(wèn)IE、IP的指令,M2的S6查詢中斷標(biāo)志。于是,M3的S1開始中斷處理,M3和M4便可以執(zhí)行硬件LCALL指令,M5周期將進(jìn)入了中斷服務(wù)程序。80C51的中斷響應(yīng)時(shí)間(從標(biāo)志置1到進(jìn)入相應(yīng)的中斷服務(wù)),至少要3個(gè)完整的機(jī)器周期,只有一個(gè)中斷源時(shí)響應(yīng)時(shí)間3~8周期
3T:中斷請(qǐng)求標(biāo)志查詢:1T產(chǎn)生、執(zhí)行LCALL:2T8T:執(zhí)行RET/RETI(訪問(wèn)IP/IE):2T主程序中MUL/DIV指令:4T執(zhí)行LCALL指令:2T321.定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求的撤銷
定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求被響應(yīng)后,硬件會(huì)自動(dòng)把中斷請(qǐng)求標(biāo)志位(TF0或TF1)清0,所以定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求是自動(dòng)撤銷的。2.外部中斷請(qǐng)求的撤銷
(1)邊沿觸發(fā)方式外部中斷請(qǐng)求的撤銷包括中斷標(biāo)志位清0和外部中斷信號(hào)的撤銷。中斷標(biāo)志位(IE0或IE1)在中斷請(qǐng)求被響應(yīng)后,硬件會(huì)自動(dòng)清0;外部中斷請(qǐng)求信號(hào)由于邊沿信號(hào)過(guò)后也就消失。所以邊沿觸發(fā)方式外部中斷請(qǐng)求是自動(dòng)撤銷的。四、中斷請(qǐng)求的撤銷33包括中斷標(biāo)志位清0和外部中斷信號(hào)的撤銷。中斷標(biāo)志位(IE0或IE1)在中斷請(qǐng)求被響應(yīng)后,硬件會(huì)自動(dòng)清0,所以外部中斷請(qǐng)求標(biāo)志位是自動(dòng)撤銷的。但中斷請(qǐng)求信號(hào)可能繼續(xù)存在,在中斷服務(wù)之后,又會(huì)引起新的中斷。可以采用下圖解決。D觸發(fā)器的直接置位端SD:ORLP1,#01H;P1輸出高電平ANLP1,#0FEH;P1輸出低電平直接置位端(2)電平觸發(fā)方式外部中斷請(qǐng)求的撤銷34中斷標(biāo)志位(RI或TI)在中斷請(qǐng)求被響應(yīng)后,CPU無(wú)法知道是發(fā)送中斷還是接收中斷,還需要測(cè)試這兩個(gè)中斷標(biāo)志位的狀態(tài),以判定是發(fā)送還是接收中斷,所以串行口中斷請(qǐng)求只能使用軟件方式撤銷,即用指令清除串行口中斷標(biāo)志位。
CLRTICLTRI3.串行口中斷請(qǐng)求的撤銷35從中斷服務(wù)程序的第一條指令開始到返回指令為止,這個(gè)過(guò)程稱為中斷處理或中斷服務(wù)。中斷處理包括兩部分內(nèi)容:保護(hù)現(xiàn)場(chǎng)
現(xiàn)場(chǎng)通常有PSW、工作寄存器和SFR等。如果在中斷服務(wù)程序中要用這些寄存器,則在進(jìn)入中斷服務(wù)之前應(yīng)將它們的內(nèi)容保護(hù)起來(lái)(保護(hù)現(xiàn)場(chǎng)),在中斷結(jié)束、執(zhí)行RETI指令前恢復(fù)現(xiàn)場(chǎng)。中斷源服務(wù)中斷服務(wù)針對(duì)中斷源的具體要求進(jìn)行相應(yīng)的處理。
5.4.2中斷處理
36各中斷源的入口矢量地址之間只隔8個(gè)單元,一般的中斷服務(wù)程序是容納不下的,因而最常用的方法是在中斷入口地址單元處存放一條無(wú)條件轉(zhuǎn)移指令,轉(zhuǎn)至存儲(chǔ)器其他的任何空間。若在執(zhí)行當(dāng)前中斷程序時(shí)禁止更高優(yōu)先級(jí)中斷,應(yīng)用軟件關(guān)閉CPU中斷或屏蔽更高級(jí)中斷源的中斷,在中斷返回前再開放中斷。在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)時(shí),為了不使現(xiàn)場(chǎng)信息受到破壞或造成混亂,一般應(yīng)關(guān)閉CPU中斷,使CPU暫不響應(yīng)新的中斷請(qǐng)求。這樣,在編寫中斷服務(wù)程序時(shí),應(yīng)注意在保護(hù)現(xiàn)場(chǎng)之前要關(guān)閉中斷,在保護(hù)現(xiàn)場(chǎng)之后若允許高優(yōu)先級(jí)中斷嵌套,則應(yīng)開中斷。同樣,在恢復(fù)現(xiàn)場(chǎng)之前應(yīng)關(guān)閉中斷,恢復(fù)后再開中斷。編寫中斷程序時(shí)應(yīng)注意:375.4.3中斷返回(RETI)(1)使相應(yīng)優(yōu)先級(jí)狀態(tài)觸發(fā)器清0。(2)從堆棧中彈出棧頂?shù)膬蓚€(gè)字節(jié)內(nèi)容送PC——恢復(fù)斷點(diǎn)。(3)CPU接著中斷處繼續(xù)執(zhí)行原程序。
注意:不能用RET指令代替RETI指令。在中斷服務(wù)程序中PUSH指令與POP指令必須成對(duì)使用,否則不能正確返回?cái)帱c(diǎn)。38在實(shí)際應(yīng)用中,若外部中斷源有兩個(gè)以上時(shí),就需要擴(kuò)展外部中斷源。本章介紹兩種擴(kuò)展外部中斷源的方法。5.5.1利用定時(shí)器擴(kuò)展外部中斷源
89C51單片機(jī)有兩個(gè)定時(shí)器,都具有兩個(gè)內(nèi)部中斷標(biāo)志和外部計(jì)數(shù)輸入引腳。當(dāng)定時(shí)器設(shè)置為計(jì)數(shù)方式時(shí),計(jì)數(shù)初值設(shè)置為滿量程FFH。一旦外部信號(hào)從計(jì)數(shù)器引腳輸入一個(gè)負(fù)跳變信號(hào),計(jì)數(shù)器加1產(chǎn)生溢出中斷,從而可以轉(zhuǎn)去處理該外部中斷源的請(qǐng)求。因此,我們可以把外部中斷源作為邊沿觸發(fā)輸入信號(hào),接至定時(shí)器的T0(P3.4)或T1(P3.5)引腳上;該定時(shí)器的溢出中斷標(biāo)志及中斷服務(wù)程序作為擴(kuò)充外部中斷源的標(biāo)志和中斷服務(wù)程序。5.5外部中斷擴(kuò)展方法
39在實(shí)際應(yīng)用中,若外部中斷源有兩個(gè)以上時(shí),就需要擴(kuò)展外部中斷源。介紹兩種擴(kuò)展外部中斷源的方法。5.5.1利用定時(shí)器擴(kuò)展外部中斷源
解:將定時(shí)器T0設(shè)定為方式2(自動(dòng)恢復(fù)計(jì)數(shù)初值),TH0和TF0的初值均設(shè)置為FFH,允許T0中斷,CPU開放中斷MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 SETB ET0 SETB EAT0引腳每輸入一個(gè)負(fù)跳變,TF0都會(huì)置1,向CPU請(qǐng)求中斷,T0腳相當(dāng)于邊沿觸發(fā)的外部中斷源輸入線。5.5外部中斷擴(kuò)展方法
405.5.2中斷加查詢擴(kuò)展中斷源
應(yīng)把INTx設(shè)置為電平觸發(fā)方式;在中斷服務(wù)程序中進(jìn)行擴(kuò)展中斷源的查詢;查詢順序就是擴(kuò)展中斷源的優(yōu)先級(jí)順序。80C5141有關(guān)中斷服務(wù)程序的片斷如下:ORG0003HLJMPINTRP;中斷服務(wù)程序入口┇ORG0100HINTRP:CLREA PUSHPSW; PUSHASETBEAJBP1.0,DV1JBP1.1,DV2JBP1.2,DV3JBP1.3,DV4EXIT:POPAPOPPSWRETIDV1:…
裝置1的中斷服務(wù)程序AJMPEXTI
DV2:…裝置2的中斷服務(wù)程序AJMPEXTIDV3:…裝置3的中斷服務(wù)程序AJMPEXTIDV4:…裝置4的中斷服務(wù)程序AJMPEXTI
本程序是否有錯(cuò)?42
5.6.1主程序
1.主程序的起始地址
89C51系列單片機(jī)復(fù)位后,(PC)=0000H,而0003H~002BH分別為各中斷源的入口地址。所以,編程時(shí)應(yīng)在0000H處寫一跳轉(zhuǎn)指令(一般為長(zhǎng)條跳轉(zhuǎn)指令),使CPU在執(zhí)行程序時(shí),從0000H跳過(guò)各中斷源的入口地址。主程序則是以跳轉(zhuǎn)的目標(biāo)地址作為起始地址開始編寫,一般從0030H開始。0000HLJMP00300030H主程序5.6中斷程序舉例43
2.主程序初始化內(nèi)容
所謂初始化,是對(duì)將要用到的89C51系列單片機(jī)內(nèi)部部件或擴(kuò)展芯片進(jìn)行初始工作狀態(tài)設(shè)定。89C51系列單片機(jī)復(fù)位后,特殊功能寄存器IE,IP的內(nèi)容均為00H,所以應(yīng)對(duì)IE,IP進(jìn)行初始化編程,以開放CPU中斷,允許某些中斷源中斷和設(shè)置中斷優(yōu)先級(jí)等。441、中斷服務(wù)程序的起始地址
當(dāng)CPU接收到中斷請(qǐng)求信號(hào)并予以響應(yīng)后,CPU把當(dāng)前的PC內(nèi)容壓入棧中進(jìn)行保護(hù),然后轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序入口處執(zhí)行。89C51系列單片機(jī)各中斷入口地址相距很近(僅8個(gè)字節(jié)),如果中斷服務(wù)程序的指令代碼少于8個(gè)字節(jié),則可從規(guī)定的中斷服務(wù)程序入口地址開始,直接編寫中斷服務(wù)程序;若中斷服務(wù)程序的指令代碼大于8個(gè)字節(jié),則應(yīng)在相應(yīng)的入口處寫一條跳轉(zhuǎn)指令,并以跳轉(zhuǎn)指令的目標(biāo)地址作為中斷服務(wù)程序的起始地址進(jìn)行編程。5.6.2中斷服務(wù)程序
45
2.中斷服務(wù)程序編制中的注意事項(xiàng)
①視需要確定是否保護(hù)現(xiàn)場(chǎng)。②及時(shí)清除那些不能被硬件自動(dòng)清除的中斷請(qǐng)求標(biāo)志,以免產(chǎn)生錯(cuò)誤的中斷。③中斷服務(wù)程序中的壓棧(PUSH)與彈棧(POP)指令必須成對(duì)使用,以確保中斷服務(wù)程序的正確返回。④主程序和中斷服務(wù)程序之間的參數(shù)傳遞與主程序和子程序的參數(shù)傳遞方式相同。46例:設(shè)計(jì)中斷程序要求每次按動(dòng)按鍵,使外接發(fā)光二極管LED改變一次亮滅狀態(tài)。解:1、跳變觸發(fā):每次跳變引起一次中斷請(qǐng)求。 ORG 0000H AJMPMAIN ORG 0003H;中斷入口 AJMP PINT0 ORG 0100H ;主程序MAIN:MOVSP,#40;設(shè)棧底 SETB EA ;開總允許開關(guān) SETB EX0 ;開INT0中斷 SETB IT0 ;負(fù)跳變觸發(fā)中斷H: SJMP H;執(zhí)行其它任務(wù) ORG 0200H;中斷服務(wù)程序PINT0:CPLP1.0 ;改變LED RETI ;返回主程序單片機(jī)INT0P1.01+5V47(1)軟件等待按鍵釋放(撤消低電平);(2)硬件清除中斷信號(hào)(標(biāo)志位)。 ORG 0000H;復(fù)位入口
AJMPMAIN ORG 0003H ;中斷入口
AJMP PINT0 ORG 0100H ;主程序MAIN:MOVSP,#40H;設(shè)棧底 SETB EA ;開總允許開關(guān) SETB EX0 ;開INT0中斷
CLR IT0 ;低電平觸發(fā)中斷H: SJMP H ;執(zhí)行其它任務(wù) ORG 0200H;中斷服務(wù)程序PINT0:CPLP1.0 ;改變LEDWAIT:JNB P3.2,WA;等按鍵釋放 RETI ;返回主程序單片機(jī)INT0P1.01+5V2、電平觸發(fā):可避免一次按鍵引起多次中斷響應(yīng)。48ORG 0000H ;復(fù)位地址LJMP STAT ;轉(zhuǎn)初始化ORG 0003H ;中斷入口地址LJMP INT ;轉(zhuǎn)中斷服務(wù)程序ORG0100H ;初始化程序首地址STAT:MOVSP,#60HSETBIT0 ;置邊沿觸發(fā)方式MOVIP,#01H ;置高優(yōu)先級(jí)MOVIE,#81H ;開中MOV30H,#0 ;里程計(jì)數(shù)器清0MOV31H,#0 ;MOV32H,#0 ;SJMP$ ;轉(zhuǎn)主程序ORG0200H ;中斷服務(wù)子程序首地址INT:PUSHAcc ;保護(hù)現(xiàn)場(chǎng) PUSHPSW ; MOVA,30H ;讀低8位計(jì)數(shù)器 ADDA,#2 ;低8位計(jì)數(shù)器加2m MOV30H,A ;回存 CLRA ; ADDCA,31H ;中8位計(jì)數(shù)器加進(jìn)位 MOV31H,A ;回存 CLRA ; ADDCA,32H ;高8位計(jì)數(shù)器加進(jìn)位 MOV32H,A ;回存 PUSHPSW ;恢復(fù)現(xiàn)場(chǎng) PUSHAcc ; RETI ;中斷返回【例】出租車計(jì)價(jià)器計(jì)程方法是車輪每運(yùn)轉(zhuǎn)一圈產(chǎn)生一個(gè)負(fù)脈沖,從外中斷(P3.2)引腳輸入,行駛里程為輪胎周長(zhǎng)×運(yùn)轉(zhuǎn)圈數(shù),設(shè)輪胎周長(zhǎng)為2m,試實(shí)時(shí)計(jì)算出租車行駛里程(單位米),數(shù)據(jù)存32H、31H、30H。49
例5-3:如圖5-12所示,將P1口的P1.4~P1.7作為輸入位,P1.0~P1.3作為輸出位。要求利用89C51將開關(guān)所設(shè)的數(shù)據(jù)讀入單片機(jī)內(nèi),并依次通過(guò)P1.0~P1.3輸出,驅(qū)動(dòng)發(fā)光二極管,以檢查P1.4~P1.7輸入的電平情況(若輸入為高電平則相應(yīng)的LED亮)?,F(xiàn)要求采用中斷邊沿觸發(fā)方式,每中斷一次,完成一次讀/寫操作。
解:如圖所示,采用外部中斷0,中斷申請(qǐng)從INT0輸入,并采用了去抖動(dòng)電路。當(dāng)P1.0~P1.3的任何一位輸出0時(shí),相應(yīng)的發(fā)光二極管就會(huì)發(fā)光。當(dāng)開關(guān)S1來(lái)回?fù)軇?dòng)一次,將產(chǎn)生一個(gè)下降沿,發(fā)出中斷請(qǐng)求。中斷服務(wù)程序的矢量地址為0003H。50圖5-12外部中斷實(shí)驗(yàn)51源程序如下:
ORG0000HAJMPMAIN;上電,轉(zhuǎn)向主程序ORG0003H;外部中斷0入口地址AJMPINSER;轉(zhuǎn)向中斷服務(wù)程序ORG0030H;主程序MAIN:SETBEX0;允許外部中斷0中斷SETBIT0;選擇邊沿觸發(fā)方式SETBEA;CPU開中斷HERE:SJMPHERE
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加盟連鎖招商合同范本
- 國(guó)家旅游課題申報(bào)書
- 辦公購(gòu)置合同范本
- 單位套房出售合同范本
- 售賣義齒器械合同范本
- 建設(shè)知識(shí)產(chǎn)權(quán)保護(hù)高地的實(shí)施細(xì)則與規(guī)劃
- 員工欠款合同范本
- 黨務(wù)材料外包合同范本
- 品牌油漆采購(gòu)合同范本
- 合同范本書庫(kù)
- 教育機(jī)構(gòu)招生合作協(xié)議
- 我的寒假生活課件模板
- ISO37000-2021組織治理-指南(雷澤佳譯2022)
- c語(yǔ)言期末機(jī)考(大連理工大學(xué)題庫(kù))
- 洞頂回填技術(shù)交底
- 貝多芬與《月光奏鳴曲》
- 《汽車?yán)碚摗窂?fù)習(xí)提綱
- 利用勾股定理作圖計(jì)算(課堂PPT)
- 第18課 罐和壺(一)
- 初二下分式混合計(jì)算練習(xí)1(附答案)
- 交通建設(shè)工程工程量清單計(jì)價(jià)規(guī)范(第1部分公路工程)-解析
評(píng)論
0/150
提交評(píng)論