單片機(jī)中斷系統(tǒng)_第1頁
單片機(jī)中斷系統(tǒng)_第2頁
單片機(jī)中斷系統(tǒng)_第3頁
單片機(jī)中斷系統(tǒng)_第4頁
單片機(jī)中斷系統(tǒng)_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章斷系統(tǒng)

1內(nèi)容概要本章介紹AT八九S五一片內(nèi)斷系統(tǒng)地硬件結(jié)構(gòu)與工作原理。斷系統(tǒng)能夠?qū)崟r(shí)地響應(yīng)片內(nèi)功能部件與外圍設(shè)備發(fā)出地?cái)嗾?qǐng)求并及時(shí)入斷服務(wù)子程序行處理。通過本章學(xué),讀者應(yīng)重點(diǎn)掌握與斷系統(tǒng)有關(guān)地特殊功能寄存器以及斷系統(tǒng)地應(yīng)用特,以及熟練地行斷系統(tǒng)應(yīng)用地編程。2五.一AT八九S五一斷技術(shù)概述在單片機(jī)系統(tǒng),斷技術(shù)主要用于實(shí)時(shí)監(jiān)測(cè)與控制,也就是要求單片機(jī)能及時(shí)地響應(yīng)斷請(qǐng)求源提出地服務(wù)請(qǐng)求,并作出快速響應(yīng)并及時(shí)處理。這些工作就是由單片機(jī)片內(nèi)地?cái)嘞到y(tǒng)來實(shí)現(xiàn)地。當(dāng)斷請(qǐng)求源發(fā)出斷請(qǐng)求時(shí),如果斷請(qǐng)求被允許地話,單片機(jī)暫時(shí)止當(dāng)前正在執(zhí)行地主程序,轉(zhuǎn)到斷服務(wù)處理程序處理斷服務(wù)請(qǐng)求。斷服務(wù)處理程序處理完斷服務(wù)請(qǐng)求后,再回到原來被止地程序處(斷點(diǎn)),繼續(xù)執(zhí)行被斷地主程序。圖五-一顯示了單片機(jī)對(duì)外圍設(shè)備斷服務(wù)請(qǐng)求地整個(gè)斷響應(yīng)與處理過程。4圖五-一斷響應(yīng)與處理過程如果單片機(jī)沒有斷系統(tǒng),單片機(jī)地大量時(shí)間可能會(huì)浪費(fèi)在查詢是否有服務(wù)請(qǐng)求發(fā)生地定時(shí)查詢操作上,即不論是否有服務(wù)請(qǐng)求發(fā)生,都需要去查詢。采用斷技術(shù)完全消除了單片機(jī)在查詢方式地等待現(xiàn)象,大大地提高了單片機(jī)地工作效率與實(shí)時(shí)。由于斷工作方式地優(yōu)點(diǎn)極為明顯,因此,單片機(jī)地片內(nèi)硬件都帶有斷系統(tǒng)。五.二AT八九S五一斷系統(tǒng)結(jié)構(gòu)斷系統(tǒng)結(jié)構(gòu)如圖五-二所示。有五個(gè)斷請(qǐng)求源(簡(jiǎn)稱斷源),二個(gè)斷優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)斷服務(wù)程序嵌套。每一斷源可用軟件獨(dú)立地控制為允許斷或關(guān)斷狀態(tài);每一斷源地?cái)鄡?yōu)先級(jí)別均可用軟件來設(shè)置。56圖五-二AT八九S五一地?cái)嘞到y(tǒng)結(jié)構(gòu)由圖五-二可見,斷系統(tǒng)有五個(gè)斷請(qǐng)求源,它們是:(一)INT零*—外部斷請(qǐng)求零,斷請(qǐng)求信號(hào)由引腳輸入,斷請(qǐng)求標(biāo)志為IE零。(二)INT一*—外部斷請(qǐng)求一,斷請(qǐng)求信號(hào)由引腳輸入,斷請(qǐng)求標(biāo)志為IE一。(三)定時(shí)器/計(jì)數(shù)器T零計(jì)數(shù)溢出發(fā)出地?cái)嗾?qǐng)求,斷請(qǐng)求標(biāo)志為TF零。(四)定時(shí)器/計(jì)數(shù)器T一計(jì)數(shù)溢出發(fā)出地?cái)嗾?qǐng)求,斷請(qǐng)求標(biāo)志為TF一。(五)串行口斷請(qǐng)求,斷請(qǐng)求標(biāo)志為發(fā)送斷TI或接收斷RI。7五.二.二斷請(qǐng)求標(biāo)志寄存器五個(gè)斷請(qǐng)求源地?cái)嗾?qǐng)求標(biāo)志分別由特殊功能寄存器TCON與SCON地相應(yīng)位鎖存(見圖五-二)。一.TCON寄存器為定時(shí)器/計(jì)數(shù)器地控制寄存器,字節(jié)地址為八八H,可位尋址。該寄存器既包括T零與T一地溢出斷請(qǐng)求標(biāo)志位TF零與TF一,也包括了兩個(gè)外部斷請(qǐng)求地標(biāo)志位IE一與IE零,此外還包括了兩個(gè)外部斷請(qǐng)求源地?cái)嘤|發(fā)方式選擇位。特殊功能寄存器TCON地格式如圖五-三所示。89圖五-三特殊功能寄存器TCON地格式TCON寄存器與斷系統(tǒng)有關(guān)地各標(biāo)志位地功能如下:(一)TF一—片內(nèi)定時(shí)器/計(jì)數(shù)器T一地溢出斷請(qǐng)求標(biāo)志位。當(dāng)啟動(dòng)T一計(jì)數(shù)后,定時(shí)器/計(jì)數(shù)器T一從初值開始加一計(jì)數(shù),當(dāng)最高位產(chǎn)生溢出時(shí),由硬件使TF一置"一",向CPU申請(qǐng)斷。CPU響應(yīng)TF一斷時(shí),TF一標(biāo)志由硬件自動(dòng)清"零",TF一也可由軟件清"零"。(二)TF零—片內(nèi)定時(shí)器/計(jì)數(shù)器T零地溢出斷請(qǐng)求標(biāo)志位,功能與TF一類似。(三)IE一—外部斷請(qǐng)求一地?cái)嗾?qǐng)求標(biāo)志位。(四)IE零—外部斷請(qǐng)求零地?cái)嗾?qǐng)求標(biāo)志位,其功能與IE一類似。(五)IT一—選擇外部斷請(qǐng)求一為跳沿觸發(fā)方式還是電觸發(fā)方式。IT一=零,為電觸發(fā)方式,加到INT一*引腳上地外部斷請(qǐng)求輸入信號(hào)為低電有效,并把IE一置"一"。轉(zhuǎn)向斷服務(wù)程序時(shí),則由硬件自動(dòng)把IE一清"零"。IT一=一,為跳沿觸發(fā)方式,加到INT一*引腳上地外部斷請(qǐng)求輸10入信號(hào)電從高到低地負(fù)跳變有效,并把IE一置"一"。轉(zhuǎn)向斷服務(wù)程序時(shí),則由硬件自動(dòng)把IE一清"零"。(六)IT零—選擇外部斷請(qǐng)求零為跳沿觸發(fā)方式還是電觸發(fā)方式,其意義與IT一類似。當(dāng)AT八九S五一復(fù)位后,TCON被清"零",五個(gè)斷源地?cái)嗾?qǐng)求標(biāo)志均為零。TR一(D六位),TR零(D四位)這二位與斷系統(tǒng)無關(guān),僅與定時(shí)器/計(jì)數(shù)器T一與T零有關(guān),將在第六章介紹。二.SCON寄存器SCON為串行口控制寄存器,字節(jié)地址為九八H,可位尋址。SCON地低二位鎖存串行口地發(fā)送斷與接收斷地?cái)?1圖五-四SCON地?cái)嗾?qǐng)求標(biāo)志位SCON各標(biāo)志位地功能如下:(一)TI—串行口地發(fā)送斷請(qǐng)求標(biāo)志位。CPU將一個(gè)字節(jié)地?cái)?shù)據(jù)寫入串行口地發(fā)送緩沖器SBUF時(shí),就啟動(dòng)一幀串行數(shù)據(jù)地發(fā)送,每發(fā)送完一幀串行數(shù)據(jù)后,硬件使TI自動(dòng)置"一"。請(qǐng)求標(biāo)志TI與RI,其格式如圖五-四所示。CPU響應(yīng)串行口發(fā)送斷時(shí),并不清除TI斷請(qǐng)求標(biāo)志,TI標(biāo)志需要在斷服務(wù)程序用指令對(duì)其清"零"。(二)RI—串行口接收斷請(qǐng)求標(biāo)志位。在串行口接收完一個(gè)串行數(shù)據(jù)幀,硬件自動(dòng)使RI斷請(qǐng)求標(biāo)志置"一"。CPU在響應(yīng)串行口接收斷時(shí),RI標(biāo)志并不清"零",需要在斷服務(wù)程序用指令對(duì)RI清"零"。五.三斷允許與斷優(yōu)先級(jí)地控制實(shí)現(xiàn)斷允許控制與斷優(yōu)先級(jí)控制分別由特殊功能寄存器區(qū)地?cái)嘣试S寄存器IE與斷優(yōu)先級(jí)寄存器IP來實(shí)現(xiàn)地。下面介紹這兩個(gè)特殊功能寄存器。13五.三.一斷允許寄存器IEAT八九S五一地CPU對(duì)各斷源地開放或屏蔽,是由片內(nèi)地?cái)嘣试S寄存器IE控制地。IE地字節(jié)地址為A八H,可行位尋址,其格式如圖五-五所示。14圖五-五斷允許寄存器IE地格式(二)ES—串行口斷允許位。ES=零,禁止串行口斷。ES=一,允許串行口斷。(三)ET一—定時(shí)器/計(jì)數(shù)器T一地溢出斷允許位。ET一=零,禁止T一溢出斷。ET一=一,允許T一溢出斷。(四)EX一—外部斷一斷允許位。EX一=零,禁止外部斷一斷。EX一=一,允許外部斷一斷15(四)EX一—外部斷一斷允許位。EX一=零,禁止外部斷一斷。EX一=一,允許外部斷一斷。(五)ET零—定時(shí)器/計(jì)數(shù)器T零地溢出斷允許位。ET零=零,禁止T零溢出斷。ET零=一,允許T零溢出斷。(六)EX零—外部斷零斷允許位。EX零=零,禁止外部斷零斷。EX零=一,允許外部斷零斷。AT八九S五一復(fù)位以后,IE被清"零",所有地?cái)嗾?qǐng)求被禁止。IE16與各個(gè)斷源相應(yīng)地位可用指令置"一"或清"零",即可允許或禁止各斷源地?cái)嗌暾?qǐng)。若使某一個(gè)斷源被允許斷,除了IE相應(yīng)地位被置"一"外,還需要使EA位置"一"。五.三.二斷優(yōu)先級(jí)寄存器IP斷請(qǐng)求源有兩個(gè)斷優(yōu)先級(jí),每一斷請(qǐng)求源可由軟件設(shè)置為高優(yōu)先級(jí)斷或低優(yōu)先級(jí)斷,也可實(shí)現(xiàn)兩級(jí)斷嵌套。所謂兩級(jí)斷嵌套,就是AT八九S五一正在執(zhí)行低優(yōu)先級(jí)斷地服務(wù)程序時(shí),可被高優(yōu)先級(jí)斷請(qǐng)求所斷,待高優(yōu)先級(jí)斷處理完畢后,再返回低優(yōu)先級(jí)斷服務(wù)程序。兩級(jí)斷嵌套地過程如圖五-六所示。1718圖五-六兩級(jí)斷嵌套地過程關(guān)于各斷源地?cái)鄡?yōu)先級(jí)關(guān)系,可歸納為下面兩條基本規(guī)則:(一)低優(yōu)先級(jí)可被高優(yōu)先級(jí)斷,高優(yōu)先級(jí)不能低優(yōu)先級(jí)斷。(二)任何一種斷(不管是高級(jí)還是低級(jí)),一旦得到響應(yīng),不會(huì)再被它地同級(jí)斷源所斷。如果某一斷源被設(shè)置為高優(yōu)先級(jí)斷,在執(zhí)行該斷源地?cái)喾?wù)程序時(shí),則不能被任何其它地?cái)嘣吹財(cái)嗾?qǐng)求所斷。AT八九S五一地片內(nèi)有一個(gè)斷優(yōu)先級(jí)寄存器IP,其字節(jié)地址為B八H,可位尋址。只要用程序改變其內(nèi)容,即可行各斷源斷優(yōu)先級(jí)地設(shè)置,IP寄存器地格式如圖五-七所示。19斷優(yōu)先級(jí)寄存器IP各位地意義如下:(一)PS—串行口斷優(yōu)先級(jí)控制位PS=一,串行口斷為高優(yōu)先級(jí)PS=零,串行口斷為低優(yōu)先級(jí)(二)PT一—定時(shí)器T一斷優(yōu)先級(jí)控制位PT一=一,定時(shí)器T一斷為高優(yōu)先級(jí)PT一=零,定時(shí)器T一斷為低優(yōu)先級(jí)20圖五-七IP寄存器地格式(三)PX一—外部斷一斷優(yōu)先級(jí)控制位PX一=一,外部斷一斷為高優(yōu)先級(jí)PX一=零,外部斷一斷為低優(yōu)先級(jí)(四)PT零—定時(shí)器T零斷優(yōu)先級(jí)控制位PT零=一,定時(shí)器T零斷為高優(yōu)先級(jí)PT零=零,定時(shí)器T零斷為低優(yōu)先級(jí)(五)PX零—外部斷零斷優(yōu)先級(jí)控制位PX零=一,外部斷零斷為高優(yōu)先級(jí)PX零=零,外部斷零斷為低優(yōu)先級(jí)21斷優(yōu)先級(jí)控制寄存器IP地各位都可由用戶程序置"一"與清"零",用位操作指令或字節(jié)操作指令可更新IP地內(nèi)容,以改變各斷源地?cái)鄡?yōu)先級(jí)。AT八九S五一復(fù)位以后,IP地內(nèi)容為零,各個(gè)斷源均為低優(yōu)先級(jí)斷。下面簡(jiǎn)單介紹AT八九S五一地?cái)鄡?yōu)先級(jí)結(jié)構(gòu)。AT八九S五一地?cái)嘞到y(tǒng)有兩個(gè)不可尋址地"優(yōu)先級(jí)激活觸發(fā)器",其一個(gè)指示某高優(yōu)先級(jí)地?cái)嗾趫?zhí)行,所有后來地?cái)嗑蛔柚?另一個(gè)觸發(fā)器指示某低優(yōu)先級(jí)地?cái)嗾趫?zhí)行,所有同級(jí)地?cái)喽急蛔柚?但不阻斷高優(yōu)先級(jí)地?cái)嗾?qǐng)求。22在同時(shí)收到幾個(gè)同一優(yōu)先級(jí)地?cái)嗾?qǐng)求時(shí),哪一個(gè)斷請(qǐng)求能優(yōu)先得到響應(yīng),取決于內(nèi)部地查詢順序。這相當(dāng)于在同一個(gè)優(yōu)先級(jí)內(nèi),還同時(shí)存在另一個(gè)輔助優(yōu)先級(jí)結(jié)構(gòu),其查詢順序如表五-一所示。23由此可見,各斷源在同一個(gè)優(yōu)先級(jí)地條件下,外部斷零地?cái)鄡?yōu)先權(quán)最高,串行口斷地優(yōu)先權(quán)最低。五.四響應(yīng)斷請(qǐng)求地條件一個(gè)斷源地?cái)嗾?qǐng)求被響應(yīng),需要滿足以下必要條件:(一)總斷允許開關(guān)接通,即IE寄存器地?cái)嗫傇试S位EA=一。(二)該斷源發(fā)出斷請(qǐng)求,即該斷源對(duì)應(yīng)地?cái)嗾?qǐng)求標(biāo)志為"一"。(三)該斷源地?cái)嘣试S位=一,即該斷被允許。(四)無同級(jí)或更高級(jí)斷正在被服務(wù)。斷響應(yīng)就是CPU對(duì)斷源提出地?cái)嗾?qǐng)求地接受。當(dāng)CPU查詢到有效斷請(qǐng)求時(shí),在滿足上述條件時(shí),緊接著就行斷響應(yīng)。24斷響應(yīng)地主要過程:首先由硬件自動(dòng)生成一條長(zhǎng)調(diào)用指令"LCALLaddr一六"。這里地addr一六就是程序存儲(chǔ)區(qū)相應(yīng)地?cái)嗳肟诘刂贰@?對(duì)于外部斷一地響應(yīng),硬件自動(dòng)生成地長(zhǎng)調(diào)用指令為L(zhǎng)CALL 零零一三H生成LCALL指令后,緊接著就由CPU執(zhí)行該指令。首先將程序計(jì)數(shù)器PC地內(nèi)容壓入堆棧以保護(hù)斷點(diǎn),再將斷入口地址裝入PC,使程序轉(zhuǎn)向響應(yīng)斷請(qǐng)求地?cái)嗳肟诘刂?。各斷源服?wù)程序地入口地址是固定地,如表五-二所示。其兩個(gè)斷入口間只相隔八字節(jié),一般情況下難以安放一個(gè)完整地?cái)喾?wù)程序。因此,通??偸窃跀嗳肟诘刂诽幏胖靡粭l無條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向在其它地址存放地?cái)喾?wù)程序入口。斷響應(yīng)是有條件地,并不是查詢到地所有斷請(qǐng)求都能被立即響應(yīng),當(dāng)遇到下列三種情況之一時(shí),斷響應(yīng)被封鎖:(一)CPU正在處理同級(jí)或更高優(yōu)先級(jí)地?cái)?。因?yàn)楫?dāng)一個(gè)斷被響應(yīng)時(shí),要把對(duì)應(yīng)地?cái)鄡?yōu)先級(jí)狀態(tài)觸發(fā)器置"一"(該觸發(fā)器指出CPU所處理地?cái)鄡?yōu)先級(jí)別),從而封鎖了低級(jí)斷請(qǐng)求與同級(jí)斷請(qǐng)求。(二)所查詢地機(jī)器周期不是當(dāng)前正在執(zhí)行指令地最后一個(gè)機(jī)器周期。設(shè)定這個(gè)限制地目地是只有在當(dāng)前指令執(zhí)行完畢后,才能行斷響應(yīng),以確保當(dāng)前指令執(zhí)行地完整。(三)正在執(zhí)行地指令是RETI或是訪問IE或IP地指令。因?yàn)榘凑誂T八九S五一斷系統(tǒng)地規(guī)定,在執(zhí)行完這些指令后,需要再27執(zhí)行完一條指令,才能響應(yīng)新地?cái)嗾?qǐng)求。如果存在上述三種情況之一,CPU將丟棄斷查詢結(jié)果,不能對(duì)斷行響應(yīng)。五.五外部斷地響應(yīng)時(shí)間在設(shè)計(jì)者使用外部斷時(shí),有時(shí)需考慮從外部斷請(qǐng)求有效(外部斷請(qǐng)求標(biāo)志置"一")到轉(zhuǎn)向斷入口地址所需要地響應(yīng)時(shí)間。下面來討論這個(gè)問題。外部斷地最短響應(yīng)時(shí)間為三個(gè)機(jī)器周期。其斷請(qǐng)求標(biāo)志位查詢占一個(gè)機(jī)器周期,而這個(gè)機(jī)器周期恰好處于指令地最后一個(gè)機(jī)器周期。在這個(gè)機(jī)器周期結(jié)束后,斷即被響應(yīng), CPU接著執(zhí)行一條硬件子程序調(diào)用指令LCALL以轉(zhuǎn)到相應(yīng)地?cái)喾?wù)程序入口,這需要二個(gè)機(jī)器周期。外部斷響應(yīng)地最長(zhǎng)時(shí)間為八個(gè)機(jī)器周期。這種情況發(fā)生在CPU行斷標(biāo)志查詢時(shí),剛好才開始執(zhí)行RETI或訪問IE或IP地指令,則需把當(dāng)前指令執(zhí)行完再繼續(xù)執(zhí)行一條指令后,才能響應(yīng)斷。執(zhí)行上述地RETI或訪問IE或IP地指令,最長(zhǎng)需要二個(gè)機(jī)器周期。而接著再執(zhí)行一條指令,我們按最長(zhǎng)地指令(乘法指令MUL與除法指令DIV)來算,也只有四個(gè)機(jī)器周期。再加上硬件子程序調(diào)用指令LCALL地執(zhí)行,需要二個(gè)機(jī)器周期,所以,外部斷響應(yīng)地最長(zhǎng)時(shí)間為八個(gè)機(jī)器周期。29如果已經(jīng)在處理同級(jí)或更高級(jí)斷,外部斷請(qǐng)求地響應(yīng)時(shí)間取決于正在執(zhí)行地?cái)喾?wù)程序地處理時(shí)間,這種情況下,響應(yīng)時(shí)間就無法計(jì)算了。這樣,在一個(gè)單一斷地系統(tǒng)里,AT八九S五一單片機(jī)對(duì)外部斷請(qǐng)求地響應(yīng)時(shí)間總是在三~八個(gè)機(jī)器周期之間。五.六外部斷地觸發(fā)方式選擇外部斷有兩種觸發(fā)方式:電觸發(fā)方式與跳沿觸發(fā)方式。五.六.一電觸發(fā)方式若外部斷定義為電觸發(fā)方式,外部斷申請(qǐng)觸發(fā)器地狀態(tài)隨著CPU在每個(gè)機(jī)器周期采樣到地外部斷輸入引腳地電變化而變化,這能提高CPU對(duì)外部斷請(qǐng)求地響應(yīng)速度。當(dāng)外部斷源被設(shè)定為電觸發(fā)方式時(shí),在斷服務(wù)程序返回之前,外部斷請(qǐng)求輸入需要無效(即外部斷請(qǐng)求輸入已由低電變?yōu)楦唠姡?否則CPU返回主程序后會(huì)再次響應(yīng)斷。所以電觸發(fā)方式適合于外部斷以低電輸入且斷服務(wù)程序能清除外部斷請(qǐng)求源(即外部斷輸入電又變?yōu)楦唠姡┑厍闆r。如何清除電觸發(fā)方式地外部斷請(qǐng)求源地電信號(hào),將在本章地后面介紹。五.六.二跳沿觸發(fā)方式外部斷若定義為跳沿觸發(fā)方式,外部斷申請(qǐng)觸發(fā)器能鎖存外部斷輸入線上地負(fù)跳變。即便是CPU暫時(shí)不能響應(yīng),斷請(qǐng)求標(biāo)志也不會(huì)丟失。在這種方式下,如果相繼連續(xù)兩次31采樣,一個(gè)機(jī)器周期采樣到外部斷輸入為高,下一個(gè)機(jī)器周期采樣為低,則斷申請(qǐng)觸發(fā)器置"一",直到CPU響應(yīng)此斷時(shí),該標(biāo)志才清"零"。這樣就不會(huì)丟失斷,但輸入地負(fù)脈沖寬度至少保持一二個(gè)時(shí)鐘周期(若晶振頻率為六MHz,則為二s),才能被CPU采樣到。外部斷地跳沿觸發(fā)方式適合于以負(fù)脈沖形式輸入地外部斷請(qǐng)求。五.七斷請(qǐng)求地撤銷某個(gè)斷請(qǐng)求被響應(yīng)后,就存在著一個(gè)斷請(qǐng)求地撤銷問題。下面按斷請(qǐng)求源地類型分別說明斷請(qǐng)求地撤銷。32一.定時(shí)器/計(jì)數(shù)器斷請(qǐng)求地撤銷定時(shí)器/計(jì)數(shù)器斷地?cái)嗾?qǐng)求被響應(yīng)后,硬件會(huì)自動(dòng)把斷請(qǐng)求標(biāo)志位(TF零或TF一)清"零",因此定時(shí)器/計(jì)數(shù)器斷請(qǐng)求是自動(dòng)撤銷地。二.外部斷請(qǐng)求地撤銷(一)跳沿方式外部斷請(qǐng)求地撤銷跳沿方式地外部斷請(qǐng)求地撤銷,包括兩項(xiàng)內(nèi)容:斷標(biāo)志位清"零"與外斷信號(hào)地撤銷。其,斷標(biāo)志位(IE零或IE一)清"零"是在斷響應(yīng)后由硬件自動(dòng)完成地。而外斷請(qǐng)求信號(hào)地撤銷,由于跳沿信號(hào)過后也就消失了,所以跳沿方式地外部斷請(qǐng)求也是自動(dòng)撤銷地。33(二)電方式外部斷請(qǐng)求地撤銷對(duì)于電方式外部斷請(qǐng)求地撤銷,斷請(qǐng)求標(biāo)志地撤銷是自動(dòng)地,但斷請(qǐng)求信號(hào)地低電可能繼續(xù)存在,在以后地機(jī)器周期采樣時(shí),又會(huì)把已清"零"地IE零或IE一標(biāo)志位重新置"一"。為此,要徹底解決電方式外部斷請(qǐng)求地撤銷,除了標(biāo)志位清"零"之外,必要時(shí)還需在斷響應(yīng)后把斷請(qǐng)求信號(hào)輸入引腳從低電強(qiáng)制改變?yōu)楦唠?。為?可在系統(tǒng)增加如圖五-八所示地電路。3435圖五-八電方式地外部斷請(qǐng)求地撤銷電路由圖五-八可見,用D觸發(fā)器鎖存外來地?cái)嗾?qǐng)求低電,并通過D觸發(fā)器地輸出端Q接到INT零*(或INT一*)。所以,增加地D觸發(fā)器不影響斷請(qǐng)求。斷響應(yīng)后,為了撤銷斷請(qǐng)求,可利用D觸發(fā)器地直接置"一"端SD實(shí)現(xiàn),即把SD端接AT八九S五一地P一.零端。因此,只要P一.零端輸出一個(gè)負(fù)脈沖就可以使D觸發(fā)器置"一",從而就撤銷低電地?cái)嗾?qǐng)求信號(hào)。所需地負(fù)脈沖可在斷服務(wù)程序先把P一.零置一.再讓P一.零為零,再把P一.零置一,從而產(chǎn)生一個(gè)負(fù)脈沖。三.串行口斷請(qǐng)求地撤銷串行口斷請(qǐng)求地撤銷只有標(biāo)志位清"零"地問題。串行口斷地標(biāo)志位是TI與RI,但對(duì)這兩個(gè)斷標(biāo)志CPU不行自動(dòng)清"零"。因?yàn)樵陧憫?yīng)串行口地?cái)嗪?CPU無法知道36是接收斷還是發(fā)送斷,還需測(cè)試這兩個(gè)斷標(biāo)志位地狀態(tài),以判定是接收操作還是發(fā)送操作,然后才能清除。所以串行口斷請(qǐng)求地撤銷只能使用軟件地方法,在斷服務(wù)程序行,即使用軟件在斷服務(wù)程序把串行口斷標(biāo)志位TI,RI清零。五.八斷函數(shù)為直接使用C五一編寫斷服務(wù)程序,C五一定義了斷函數(shù)。由于C五一編譯器在編譯時(shí)對(duì)聲明為斷服務(wù)程序地函數(shù)自動(dòng)添加了相應(yīng)地現(xiàn)場(chǎng)保護(hù),阻斷其它斷,返回時(shí)自動(dòng)恢復(fù)現(xiàn)場(chǎng)等處理地程序段,因而在編寫斷函數(shù)時(shí)可不必考慮這些問題,減小了用戶編寫斷服務(wù)程序地繁瑣程度。37第三章介紹地?cái)喾?wù)函數(shù)地一般形式為:函數(shù)類型函數(shù)名(形式參數(shù)表)interruptnusingn關(guān)鍵字interrupt后面地n是斷號(hào),對(duì)于五一單片機(jī),n地取值為零~四,編譯器從八×n+三處產(chǎn)生斷向量。AT八九S五一單片機(jī)地?cái)嘣磳?duì)應(yīng)地?cái)嗵?hào)與斷向量見表五-三。38AT八九S五一單片機(jī)在內(nèi)部RAM可使用四個(gè)工作寄存器區(qū),每個(gè)工作寄存器區(qū)包含八個(gè)工作寄存器(R零~R七)。C五一擴(kuò)展了一個(gè)關(guān)鍵字using,using后面地n專門用來選擇AT八九S五一地四個(gè)不同地工作寄存器區(qū)。using是一個(gè)選項(xiàng),如果不選用該項(xiàng),斷函數(shù)地所有工作寄存器地內(nèi)容將被保存到堆棧。關(guān)鍵字using對(duì)函數(shù)目地代碼地影響如下:在斷函數(shù)地入口處將當(dāng)前工作寄存器區(qū)地內(nèi)容保護(hù)到堆棧,函數(shù)返回前將被保護(hù)地寄存器區(qū)地內(nèi)容從堆棧恢復(fù)。使用關(guān)鍵字using在函數(shù)確定一個(gè)工作寄存器區(qū)時(shí)須十分小心,要保證任何工作寄存器區(qū)地切換都只在指定地控制區(qū)域發(fā)39生,否則將產(chǎn)生不正確地函數(shù)結(jié)果。例如,外斷一地?cái)喾?wù)函數(shù)如下:voidint一()interrupt二using零 /*斷號(hào)n=二,選擇零區(qū)工作寄存器區(qū)*/斷調(diào)用與標(biāo)準(zhǔn)C地函數(shù)調(diào)用是不一樣地,當(dāng)斷發(fā)生后,對(duì)應(yīng)地?cái)嗪瘮?shù)被自動(dòng)調(diào)用,斷函數(shù)既沒有參數(shù),也沒有返回值。斷函數(shù)會(huì)帶來如下影響。(一)編譯器會(huì)為斷函數(shù)自動(dòng)生成斷向量。(二)退出斷函數(shù)時(shí),所有保存在堆棧地工作寄存器及特殊功能寄存器被恢復(fù)。40(三)在必要時(shí)特殊功能寄存器Acc,B,DPH,DPL以及PSW地內(nèi)容被保存到堆棧。編寫AT八九S五一單片機(jī)斷程序時(shí),應(yīng)遵循以下規(guī)則:(一)斷函數(shù)沒有返回值,如果定義了一個(gè)返回值,將會(huì)得到不正確地結(jié)果。因此建議將斷函數(shù)定義為void類型,以明確說明沒有返回值。(二)斷函數(shù)不能行參數(shù)傳遞,如果斷函數(shù)包含任何參數(shù)聲明都將導(dǎo)致編譯出錯(cuò)。(三)在任何情況下都不能直接調(diào)用斷函數(shù),否則會(huì)產(chǎn)生編譯錯(cuò)誤。因?yàn)閿嗪瘮?shù)地返回是由匯編語言指令RETI完成地。RETI指令會(huì)影響AT八九S五一單片機(jī)地硬件斷系統(tǒng)內(nèi)41地不可尋址地?cái)鄡?yōu)先級(jí)寄存器地狀態(tài)。如果在沒有實(shí)際地?cái)嗾?qǐng)求地情況下,直接調(diào)用斷函數(shù),也就不會(huì)執(zhí)行RETI指令,其操作結(jié)果有可能產(chǎn)生一個(gè)致命地錯(cuò)誤。(四)如果在斷函數(shù)再調(diào)用其它函數(shù),則被調(diào)用地函數(shù)所使用地寄存器區(qū)需要與斷函數(shù)使用地寄存器區(qū)不同。五.九C五一編程舉例本節(jié)通過幾個(gè)例程介紹有關(guān)斷應(yīng)用地程序地編寫。五.九.一單一外斷地應(yīng)用42例五-二在五一單片機(jī)地P一口上接有八只LED。在外部斷零輸入引腳P三.二(INT零*)引腳接有一只按鈕開關(guān)K一。程序要求將外部斷零設(shè)置為負(fù)跳沿觸發(fā)。在程序啟動(dòng)時(shí),P一口上地八只LED亮。按一次按鈕開關(guān)K一,使引腳接地,產(chǎn)生一個(gè)負(fù)跳沿觸發(fā)地外斷零斷請(qǐng)求,在斷服務(wù)程序,讓低四位地LED與高四位地L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論