第5章-中斷系統(tǒng)_第1頁
第5章-中斷系統(tǒng)_第2頁
第5章-中斷系統(tǒng)_第3頁
第5章-中斷系統(tǒng)_第4頁
第5章-中斷系統(tǒng)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章中斷系統(tǒng)

5.1中斷控制方式

5.2MCS-51單片機(jī)的中斷系統(tǒng)

5.3中斷的C51編程

5.4外部中斷的擴(kuò)展■什么是中斷

生活舉例:你正在家中看書——突然電話鈴響了——你在書上做個(gè)記號——去接電話并和來電話的人交談——門鈴?fù)蝗豁懥恕阕尨螂娫挼娜讼鹊鹊取闳ラ_門并和來人交談——談話結(jié)束后關(guān)好門——回到電話機(jī)旁繼續(xù)通話——通話結(jié)束后放下電話——回到房間從做記號處繼續(xù)看書。這是一個(gè)典型的中斷現(xiàn)象,即正常的工作過程被某個(gè)突發(fā)事件(內(nèi)部的或外部的)打斷。發(fā)生中斷后執(zhí)行的另一工作仍然可能被新的時(shí)間打斷(中斷嵌套)。

分析:某一特定時(shí)刻有多項(xiàng)任務(wù)需要一個(gè)人(CPU)做,但又不能同時(shí)做多項(xiàng)任務(wù),只能采取中斷方式“穿插完成”。第5章中斷系統(tǒng)■中斷的基本概念所謂中斷是指CPU對系統(tǒng)中或系統(tǒng)外發(fā)生的某個(gè)事件的一種響應(yīng)過程,即CPU暫時(shí)停止現(xiàn)行程序的執(zhí)行,而自動轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的服務(wù)子程序。當(dāng)處理結(jié)束后,再返回到被暫停程序的斷點(diǎn)處,繼續(xù)執(zhí)行原來的程序。實(shí)現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)統(tǒng)稱為中斷系統(tǒng)。中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。實(shí)時(shí)控制、故障自動處理時(shí)往往用到中斷系統(tǒng),計(jì)算機(jī)與外部設(shè)備間傳送數(shù)據(jù)及實(shí)現(xiàn)人機(jī)聯(lián)系也常常采用中斷方式。5.1中斷控制方式■中斷的基本概念在中斷系統(tǒng)中,通常將CPU正常運(yùn)行的程序稱為主程序,把引起中斷的設(shè)備或事件稱為中斷源。由中斷源向CPU所發(fā)出的請求中斷的信號稱為中斷請求信號,CPU接受中斷申請終止現(xiàn)行程序而轉(zhuǎn)去執(zhí)行中斷服務(wù)程序稱為中斷響應(yīng),服務(wù)于中斷事件的程序稱為中斷服務(wù)程序,也稱為中斷處理程序?,F(xiàn)行程序被中斷的地方稱為斷點(diǎn),執(zhí)行完中斷服務(wù)程序后返回至源程序斷點(diǎn)處稱為中斷返回,系統(tǒng)處理中斷的整個(gè)過程稱為中斷。5.1中斷控制方式■引進(jìn)中斷的優(yōu)點(diǎn)

◆分時(shí)操作:

計(jì)算機(jī)與外部設(shè)備交換信息時(shí),存在著高速CPU和低速外設(shè)之間處理速度的矛盾。若采用軟件查詢方式,則不但占用了CPU操作時(shí)間,而且響應(yīng)速度慢。中斷功能正好解決了這個(gè)矛盾。每當(dāng)外設(shè)做完一件事后,就發(fā)出中斷申請,請求CPU中斷其正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。中斷處理完成后,CPU恢復(fù)執(zhí)行主程序,外設(shè)仍然繼續(xù)工作。這樣,CPU就可以同時(shí)命令多個(gè)外設(shè)(如鍵盤、打印機(jī)等)同時(shí)工作,從而提高CPU的工作效率。5.1中斷控制方式■引進(jìn)中斷的優(yōu)點(diǎn)

◆實(shí)時(shí)處理:

在實(shí)時(shí)控制中,現(xiàn)場的各個(gè)參數(shù)隨時(shí)間和現(xiàn)場情況不斷變化。有了中斷功能,外界的這些變化量可根據(jù)要求隨時(shí)向CPU發(fā)中斷請求,要求CPU及時(shí)處理,這種效果是查詢方式無法做到的。

◆故障處理:

計(jì)算機(jī)在運(yùn)行過程中,難免會出現(xiàn)一些無法預(yù)料的故障,如存儲出錯(cuò)、運(yùn)算溢出和電源突跳等,有了中斷功能,當(dāng)出現(xiàn)上述故障情況時(shí),CPU就可以及時(shí)轉(zhuǎn)去執(zhí)行故障處理程序,自行處理故障而無需停機(jī)。5.1中斷控制方式■51單片機(jī)中斷源

◆外部設(shè)備中斷源計(jì)算機(jī)的輸入/輸出設(shè)備,如鍵盤、磁盤驅(qū)動器、打印機(jī)等,可通過接口電路向CPU申請中斷。

◆故障源故障源是產(chǎn)生故障信息的來源。它作為中斷源,可以使CPU以中斷方式對已經(jīng)發(fā)生的故障做及時(shí)處理。

計(jì)算機(jī)的故障源有內(nèi)部和外部之分。內(nèi)部故障源一般是指執(zhí)行指令時(shí)產(chǎn)生的錯(cuò)誤情況,如除法中除以零,這種故障也稱為內(nèi)部軟件中斷;外部中斷源主要有電源掉電等情況,當(dāng)電源掉電而將至一定數(shù)值時(shí),即發(fā)出中斷請求,由計(jì)算機(jī)中斷系統(tǒng)自動響應(yīng),并進(jìn)行相應(yīng)處理。5.1中斷控制方式■51單片機(jī)中斷源

◆控制對象中斷源計(jì)算機(jī)做實(shí)時(shí)控制時(shí),被控對象常常用作中斷源。例如:電壓、電流、溫度等超過其上限或下限時(shí),以及繼電器、開關(guān)閉合與斷開時(shí),都可以作為中斷源向CPU申請中斷。

◆定時(shí)/計(jì)數(shù)脈沖中斷源定時(shí)器/計(jì)數(shù)器脈沖中斷也有內(nèi)部和外部之分。內(nèi)部定時(shí)中斷是由定時(shí)器/計(jì)數(shù)器溢出而自動產(chǎn)生的;外部計(jì)數(shù)中斷則是由外部脈沖通過CPU的中斷請求輸入端引起的。5.1中斷控制方式■中斷系統(tǒng)需解決的基本問題

◆中斷源:

中斷請求信號的來源。包括中斷請求信號的產(chǎn)生及該信號怎樣被CPU有效地識別。而且要求中斷請求信號產(chǎn)生一次,只能被CPU接收和處理一次,即不能一次中斷申請被CPU多次響應(yīng)。這就涉及到中斷請求信號的及時(shí)撤除問題?!糁袛囗憫?yīng)與返回:CPU采集到中斷請求信號后,怎樣轉(zhuǎn)向特定的中斷服務(wù)子程序及執(zhí)行完中斷服務(wù)子程序怎樣返回被中斷的程序繼續(xù)正確地執(zhí)行。中斷響應(yīng)與返回的過程中涉及到CPU響應(yīng)中斷的條件、現(xiàn)場保護(hù)等問題。5.1中斷控制方式■中斷系統(tǒng)需解決的基本問題

◆優(yōu)先級控制(優(yōu)先級排隊(duì)):一個(gè)計(jì)算機(jī)應(yīng)用系統(tǒng),特別是計(jì)算機(jī)實(shí)時(shí)測控應(yīng)用系統(tǒng),往往有多個(gè)中斷源,各中斷源所要求的處理具有不同的輕重、緩急程度。與人處理問題的思路一樣,希望重要緊急的事件先處理,而且如果當(dāng)前處于正在處理某個(gè)事件的過程中,有更重要、更緊急的事件到來,就應(yīng)當(dāng)暫停當(dāng)前事件的處理,轉(zhuǎn)去處理新事件。這就是中斷系統(tǒng)優(yōu)先級控制所要解決的問題。中斷優(yōu)先級的控制形成了中斷嵌套。

5.1中斷控制方式■中斷系統(tǒng)需解決的基本問題

◆中斷嵌套:當(dāng)CPU響應(yīng)某個(gè)中斷請求而正在進(jìn)行中斷處理時(shí),若有更高優(yōu)先級別的中斷源發(fā)出中斷申請,則CPU將自動中斷正在執(zhí)行的中斷服務(wù)程序,并保存該中斷程序斷點(diǎn)(類似于子程序嵌套),轉(zhuǎn)而去執(zhí)行高級別中斷的中斷服務(wù)程序;當(dāng)高級別中斷處理完畢后,再繼續(xù)執(zhí)行被中斷的中斷處理程序。這個(gè)過程被稱為中斷嵌套。

只有高級別的中斷能中斷當(dāng)前的中斷服務(wù)程序,同級別或者低級別的中斷不能中斷當(dāng)前的中斷服務(wù)程序。5.1中斷控制方式■51單片機(jī)中斷源

◆外部中斷外部中斷是指從單片機(jī)外部引腳INT0、INT1輸入中斷請求信號的中斷,即外部中斷源有兩個(gè)。輸入/輸出的中斷請求、實(shí)時(shí)事件的中斷請求、掉電和設(shè)備故障的中斷請求都可以作為外部中斷源,從引腳INT0、INT1輸入。外部中斷請求有兩種觸發(fā)方式:電平觸發(fā)及跳變(邊沿)觸發(fā)。這兩種觸發(fā)方式可以通過對特殊功能寄存器TCON編程來選擇。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆外部中斷

特殊功能寄存器TCON的格式定義如下:

IT0(IT1):外部中斷0(或1)觸發(fā)方式控制位。IT0(或IT1)被設(shè)置為“0”,則選擇外部中斷為電平觸發(fā)方式;IT0(或IT1)被設(shè)置為“1”,則選擇外部中斷為跳變觸發(fā)方式。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆TCON的格式

IE0(IE1):外部中斷0(或外部中斷1)的中斷請求標(biāo)志位。當(dāng)IT0(或IT1)=0,即電平觸發(fā)方式時(shí),CPU在每個(gè)機(jī)器周期的S5P2

采樣INTx(x=0,1)。若INTx引腳為低電平,將直接觸發(fā)外部中斷。跳變觸發(fā)方式時(shí),若第一個(gè)機(jī)器周期采樣到INTx引腳為高電平,第二個(gè)機(jī)器周期采樣到INTx引腳為低電平時(shí),由硬件置位IE0(或IE1),并以此來向CPU請求中斷。當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí)由硬件將IE0(或IE1)清零。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆外部中斷

對于跳變觸發(fā)的外部中斷,CPU在每個(gè)機(jī)器周期都采樣INTx。為了保證檢測到負(fù)跳變,輸入到INTx引腳上的高電平與低電平至少應(yīng)保持1個(gè)機(jī)器周期。對于電平觸發(fā)的外部中斷,由于CPU對INTx引腳沒有控制作用,也沒有相應(yīng)的中斷請求標(biāo)志位,因此需要外接電路來撤除中斷請求信號。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆外部中斷示例

外部中斷請求信號通過D觸發(fā)器加到單片機(jī)引腳上。當(dāng)外部中斷請求信號使D觸發(fā)器的CLK端發(fā)生正跳變時(shí),由于D端接地,Q端輸出0,向單片機(jī)發(fā)出中斷請求。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆外部中斷示例

CPU響應(yīng)中斷后,利用一根口線,如P1.0作應(yīng)答線,在中斷服務(wù)程序中可用如下兩條指令

ANLP1,#0FEHORLP1,#01H來撤除中斷請求。第一條指令使P1.0為0,而P1口其它各位的狀態(tài)不變。由于P1.0與直接置1端S相連,故D觸發(fā)器Q=1,撤除了中斷請求信號。第二條指令將P1.0變成1,從而使S=1,使以后產(chǎn)生的新的外部中斷請求信號又能向單片機(jī)申請中斷。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆內(nèi)部中斷內(nèi)部中斷是單片機(jī)芯片內(nèi)部產(chǎn)生的中斷。MCS-51單片機(jī)(51子系列)的內(nèi)部中斷有定時(shí)器/計(jì)數(shù)器T0、T1的溢出中斷,串行口的發(fā)送/接收中斷。當(dāng)定時(shí)器/計(jì)數(shù)器T0、T1的定時(shí)(或計(jì)數(shù))溢出時(shí)由硬件自動置位TCON的TF0或TF1位,同時(shí)向CPU申請中斷。CPU響應(yīng)中斷而轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動將TF0或TF1清零,即CPU響應(yīng)T0和T1中斷后能自動撤除中斷請求信號。5.2MCS-51單片機(jī)的中斷系統(tǒng)■51單片機(jī)中斷源

◆內(nèi)部中斷當(dāng)串行口發(fā)送完或接收完一幀信息,由接口硬件自動置位SCON的TI或RI,以此向CPU申請中斷。CPU響應(yīng)中斷后,接口硬件不能自動將TI或RI清零,即CPU響應(yīng)中斷后不能自動撤除中斷請求信號,需用戶采用軟件的方法將TI或RI清零,來撤除中斷請求信號。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷允許控制(IE)

MCS-51單片機(jī)中沒有專設(shè)的開中斷和關(guān)中斷指令,對各中斷源的中斷開放或關(guān)閉是由內(nèi)部的中斷允許寄存器IE的各位來控制的。IE各位的定義如下:

EA:中斷允許總控位。EA=0,屏蔽所有的中斷請求;EA=1,開放中斷。EA的作用是使中斷允許形成兩級控制。即各中斷源首先受EA位的控制;其次還要受各中斷源自己的中斷允許總控位控制。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷允許控制(IE)

ET2:定時(shí)器/計(jì)數(shù)器T2的溢出中斷允許位,只用于52子系列,51子系列無此位。ET2=0,禁止T2中斷;ET2=1,允許T2中斷。

ES:串行口中斷允許位。ES=0,禁止串行口中斷;ES=1允許串行口中斷。

ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。T1=0,禁止T1中斷;ET1=1,允許T1中斷。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷允許控制(IE)

EX1:外部中斷1的中斷允許位。EX1=0,禁止外部中斷1中斷;EX1=1,允許外部中斷1中斷。

ET0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位。ET0=0,禁止T0中斷;ET0=1,允許T0中斷。

EX0:外部中斷0的中斷允許位。EX0=0,禁止外部中斷0中斷;EX0=1允許外部中斷0中斷。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷優(yōu)先級控制

51單片機(jī)的中斷源有兩個(gè)中斷優(yōu)先級,可實(shí)現(xiàn)二級中斷嵌套。中斷系統(tǒng)遵循如下三條規(guī)則:(1)正在進(jìn)行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷,一直到該中斷服務(wù)程序結(jié)束,返回了主程序且執(zhí)行了主程序中的一條指令后,CPU才響應(yīng)新的中斷請求。(2)正在進(jìn)行的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實(shí)現(xiàn)兩級中斷嵌套。(3)CPU同時(shí)接收到幾個(gè)中斷請求時(shí),首先響應(yīng)優(yōu)先級最高的中斷請求。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷優(yōu)先級控制中斷優(yōu)先級控制規(guī)則中前兩條是靠中斷系統(tǒng)中的兩個(gè)優(yōu)先級狀態(tài)觸發(fā)器來保證的。這兩個(gè)觸發(fā)器分別用來指示CPU是否正在執(zhí)行高優(yōu)先級及低優(yōu)先級的中斷服務(wù)程序。當(dāng)某個(gè)中斷得到響應(yīng)時(shí),由硬件根據(jù)其優(yōu)先級將相應(yīng)的一個(gè)優(yōu)先級狀態(tài)觸發(fā)器置1。若高優(yōu)先級的狀態(tài)觸發(fā)器為1,則屏蔽所有后來的中斷請求;若低優(yōu)先級的狀態(tài)觸發(fā)器為1,則屏蔽后來的同一優(yōu)先級的中斷請求。當(dāng)中斷相應(yīng)結(jié)束后,對應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器被硬件自動清零。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷優(yōu)先級寄存器—IP

PT2:定時(shí)器/計(jì)數(shù)器T2的中斷優(yōu)先級控制位,只用于52子系列。

PS:串行口的中斷優(yōu)先級控制位。

PT1:定時(shí)器/計(jì)數(shù)器T1的中斷優(yōu)先級控制位。

PX1:外部中斷1的中斷優(yōu)先級控制位。

PT0:定時(shí)器/計(jì)數(shù)器T0的中斷優(yōu)先級控制位。

PX0:外部中斷0的中斷優(yōu)先級控制位。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷控制

◆中斷優(yōu)先級控制由于51單片機(jī)有多個(gè)中斷源,但優(yōu)先級只有兩個(gè),所以會有多個(gè)中斷源處于同一優(yōu)先級中。在同一級中的中斷源默認(rèn)的優(yōu)先級由系統(tǒng)按下列順序確定。5.2MCS-51單片機(jī)的中斷系統(tǒng)中斷源同級的中斷優(yōu)先級外部中斷0定時(shí)器/計(jì)數(shù)器0中斷外部中斷1定時(shí)器/計(jì)數(shù)器1中斷串行口中斷定時(shí)器/計(jì)數(shù)器2中斷最高

最低■中斷控制系統(tǒng)邏輯結(jié)構(gòu)示意圖

5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷響應(yīng)的條件

單片機(jī)響應(yīng)中斷的條件為中斷源有請求(中斷允許寄存器IE相應(yīng)位置1),且CPU開中斷(即EA=1)。這樣,在每個(gè)機(jī)器周期的S5P2

期間,對所有中斷源按用戶設(shè)置的優(yōu)先級和內(nèi)部規(guī)定的優(yōu)先級進(jìn)行順序檢測,并可在S6

期間找到所有有效的中斷請求。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷響應(yīng)的條件

如有中斷請求,且滿足下列條件,則在下一個(gè)機(jī)器周期的S1期間響應(yīng)中斷,否則將丟棄中斷采樣的結(jié)果。

◆無同級或高級中斷正在處理。

◆現(xiàn)行指令執(zhí)行到最后1個(gè)機(jī)器周期且已結(jié)束?!羧衄F(xiàn)行指令為RETI或訪問IE、IP的指令時(shí),執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷響應(yīng)過程

CPU響應(yīng)中斷后硬件將自動執(zhí)行如下操作:(1)根據(jù)中斷請求源的優(yōu)先級高低,對相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1。(2)保護(hù)斷點(diǎn),即把程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧保存。(3)清內(nèi)部硬件可清除的中斷請求標(biāo)志位(IE0、IE1、TF0、TF1)。(4)把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷入口地址各中斷源對應(yīng)的中斷服務(wù)程序入口地址如下表所示:

CPU響應(yīng)中斷后,將從上述入口地址開始執(zhí)行相應(yīng)的中斷服務(wù)程序。中斷服務(wù)程序的最后一條指令必須是中斷返回指令RETI。5.2MCS-51單片機(jī)的中斷系統(tǒng)中斷源中斷入口地址外部中斷0定時(shí)器/計(jì)數(shù)器0外部中斷1定時(shí)器/計(jì)數(shù)器1串行口中斷定時(shí)器/計(jì)數(shù)器2(52子系列)0003H000BH0013H001BH0023H002BH■中斷響應(yīng)過程

中斷服務(wù)程序的最后一條指令必須是中斷返回指令RETI。CPU執(zhí)行該指令時(shí),先將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器清0,然后從堆棧中彈出斷點(diǎn)地址到PC,從而返回至斷點(diǎn)處繼續(xù)原程序的執(zhí)行過程。

51單片機(jī)中斷響應(yīng)后,僅保護(hù)斷點(diǎn)信息而不保護(hù)現(xiàn)場信息,如ACC、工作寄存器Rn、PSW等存儲器的值,且不能自動清除串行口中斷標(biāo)志TI和RI,也無法清除由電平觸發(fā)的外部中斷請求信號。所以用戶在編制中斷服務(wù)程序時(shí)需要格外注意。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷響應(yīng)時(shí)間

所謂中斷響應(yīng)時(shí)間是指從CPU檢測到中斷請求信號到轉(zhuǎn)入中斷服務(wù)程序入口所需要的機(jī)器周期數(shù)。

MCS-51單片機(jī)響應(yīng)中斷的最短時(shí)間為3個(gè)機(jī)器周期。若CPU檢測到中斷請求信號時(shí)間正好是一條指令的最后一個(gè)機(jī)器周期,則不需等待就可以立即響應(yīng)。響應(yīng)中斷的過程就是由內(nèi)部硬件執(zhí)行一條長調(diào)用指令,需要2個(gè)機(jī)器周期,加上檢測需要1個(gè)機(jī)器周期,一共需要3個(gè)機(jī)器周期即可執(zhí)行中斷服務(wù)程序。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷響應(yīng)時(shí)間

中斷響應(yīng)的最長時(shí)間由下列情況所決定:若中斷檢測時(shí)正在執(zhí)行RETI或訪問IE或IP指令的第一個(gè)機(jī)器周期,這樣包括檢測在內(nèi)需要2個(gè)機(jī)器周期(以上三條指令均需兩個(gè)機(jī)器周期);若緊接著要執(zhí)行的指令恰好是執(zhí)行時(shí)間最長的乘/除法指令,其執(zhí)行時(shí)間均為4個(gè)機(jī)器周期;再用2個(gè)機(jī)器周期執(zhí)行一條長調(diào)用指令才轉(zhuǎn)入中斷服務(wù)程序。所以共需8個(gè)機(jī)器周期。其它情況下的中斷響應(yīng)時(shí)間一般為3~8個(gè)機(jī)器周期。5.2MCS-51單片機(jī)的中斷系統(tǒng)■中斷函數(shù)定義C51的中斷服務(wù)程序是一種特殊的程序,其定義如下:

void函數(shù)名(void)interruptnusingm{函數(shù)體語句;}這里的interrupt和using是為編寫C51中斷服務(wù)程序而引入的關(guān)鍵字,interrupt表示該函數(shù)是一個(gè)中斷服務(wù)程序,其后的n是指該中斷服務(wù)程序?qū)?yīng)于哪一個(gè)中斷源;using用于指定該中斷服務(wù)程序要使用的工作寄存器組編號,

m的取值范圍為0~3。

若不使用關(guān)鍵字using,則編譯系統(tǒng)會自動給該服務(wù)函數(shù)分配寄存器組,并將當(dāng)前工作寄存器組的8個(gè)寄存器壓入堆棧。

用戶程序中不允許任何程序調(diào)用中斷服務(wù)程序。5.3中斷系統(tǒng)的C51編程■中斷函數(shù)定義C51的中斷源及其中斷編號如下:5.3中斷系統(tǒng)的C51編程中斷源中斷編號外部中斷0定時(shí)器/計(jì)數(shù)器0中斷外部中斷1定時(shí)器/計(jì)數(shù)器1中斷串行口中斷定時(shí)器/計(jì)數(shù)器2中斷012345■中斷函數(shù)定義

編寫中斷函數(shù)時(shí),應(yīng)注意以下幾點(diǎn):(1)中斷函數(shù)不帶任何參數(shù),否則會導(dǎo)致編譯出錯(cuò)。(2)中斷函數(shù)不能有返回值,所以函數(shù)類型應(yīng)為void。(3)中斷函數(shù)必須由中斷源觸發(fā)而自動調(diào)用,不得直接調(diào)用,因此也不用提前聲明。(4)中斷函數(shù)要精簡,避免因執(zhí)行時(shí)間過長影響其它中斷的響應(yīng)。5.3中斷系統(tǒng)的C51編程■中斷舉例

例1:用按鈕控制指示燈的“亮滅”狀態(tài)。在單片機(jī)INT0引腳接一個(gè)按鈕,P1.0引腳上接一個(gè)發(fā)光二極管。每按一次按鈕,則發(fā)光二極管的亮滅狀態(tài)轉(zhuǎn)換一次。每次按下按鈕時(shí),會在單片機(jī)的INT0引腳上產(chǎn)生一個(gè)負(fù)脈沖,如果將單片機(jī)外部中斷0的觸發(fā)方式設(shè)為邊沿跳變觸發(fā),則單片機(jī)檢測到這個(gè)負(fù)脈沖之后就會調(diào)用外部中斷0服務(wù)程序。

5.3中斷系統(tǒng)的C51編程■中斷舉例

例1:用按鈕控制指示燈的“亮滅”狀態(tài)。#include<reg51.h>//寄存器聲明頭文件sbitp1_0=P1^0;//發(fā)光二極管控制引腳位定義voidINT0_srv(void)interrupt0using1//外部中斷0處理程序{p1_0=!p1_0; //二極管狀態(tài)翻轉(zhuǎn)}voidmain(){p1_0=0;IT0=1;//外部中斷0為邊沿觸發(fā)方式

EA=1;//中斷允許

EX0=1;//外部中斷0允許while(1);}5.3中斷系統(tǒng)的C51編程■中斷舉例

例1:用按鈕控制指示燈的“亮滅”狀態(tài)。仿真運(yùn)行結(jié)果顯示,每當(dāng)用戶按下按鈕時(shí),二極管出現(xiàn)一次亮滅狀態(tài)的切換。

如果將上述程序中的“IT0=1”語句修改為“IT0=0”,則當(dāng)按下按鈕時(shí),二極管會出現(xiàn)連續(xù)亮滅的狀態(tài)切換現(xiàn)象。請讀者獨(dú)立思考其原因。5.3中斷系統(tǒng)的C51編程■中斷舉例

例2:如下圖所示,P0口連接了8個(gè)發(fā)光二極管,INT1引腳上接了一個(gè)按鍵S1,要求每次按鍵動作時(shí)均能改變8個(gè)發(fā)光二級管的亮滅狀態(tài)。

5.3中斷系統(tǒng)的C51編程■中斷舉例

例2:C51程序如下。#include<reg51.h>#defineLEDP0 sbitKEY=P3^3;bitflag=0;voiddelay(unsignedcharn)//延時(shí)子函數(shù);{unsignedchara;for(a=0;a<n;a++);}

main(void)//主程序{IT1=1;//設(shè)置邊沿觸發(fā)方式EA=1;EX1=1;LED=0xff;//發(fā)光二極管初值(全滅)5.3中斷系統(tǒng)的C51編程■中斷舉例

例2:C51程序如下。while(1)//主程序內(nèi)部循環(huán)體{if(flag==1)//有外部中斷的按鍵{delay(100);//延遲一段時(shí)間,判斷是否為抖動if(KEY==0)//還有按鍵,說明不是抖動{while(!KEY); //等待按鍵松開LED=~LED;//改變發(fā)光二級管的亮滅(全亮)}flag=0;//上次外部中斷已經(jīng)處理完畢,清除該變量EX1=1;//再次開放外部中斷}}}5.3中斷系統(tǒng)的C51編程■中斷舉例

例2:C51程序如下。voidint1(void)interrupt2 //外部中斷1服務(wù)程序{flag=1;//有按鍵按下則設(shè)置中斷標(biāo)志變量flag為1EX1=0;//屏蔽外部中斷1,暫時(shí)不允許再次產(chǎn)生外部中斷1}5.3中斷系統(tǒng)的C51編程■利用查詢法擴(kuò)展外部中斷源在外部中斷源比較多時(shí),可以在51單片機(jī)的一個(gè)外部中斷請求端INT0(或INT1),利用“線與”的方式連接多個(gè)外部中斷,無論哪個(gè)中斷源發(fā)出中斷請求(低電平有效),都會觸發(fā)INT0(或INT1)中斷,這些中斷源同時(shí)分別接到單片機(jī)輸入端口的各個(gè)引腳,然后在INT0(或INT1)的中斷服務(wù)程序中采用查詢法順序檢索引起中斷的中斷源。當(dāng)對應(yīng)的中斷源被服務(wù)后(中斷服務(wù)程序被執(zhí)行),該中斷源應(yīng)撤銷其中斷請求(將電平恢復(fù)為高電平)。

注意:軟件的查詢順序決定了擴(kuò)展的多個(gè)中斷的優(yōu)先級順序。5.4外部中斷的擴(kuò)充■利用查詢法擴(kuò)展外部中斷源例:使用按鈕來模擬外部中斷源。共擴(kuò)展了4個(gè)外部中斷,當(dāng)某個(gè)外部中斷源有中斷請求時(shí),在中斷服務(wù)程序中,會將與其對應(yīng)的發(fā)光二極管點(diǎn)亮。5.4外部中斷的擴(kuò)充■利用查詢法擴(kuò)展外部中斷源例:使用按鈕來模擬外部中斷源。C51程序如下:#include<reg51.h>//頭文件sbitint0=P2^0; //擴(kuò)展中斷1位定義sbitint1=P2^1;//擴(kuò)展中斷2位定義sbitint2=P2^2;//擴(kuò)展中斷3位定義sbitint3=P2^3;//擴(kuò)展中斷4位定義sbitled0=P1^0;//發(fā)光二極管1位定義sbitled1=P1^1;//發(fā)光二極管2位定義sbitled2=P1^2;//發(fā)光二極管3位定義sbitled3=P1^3;//發(fā)光二極管4位定義5.4外部中斷的擴(kuò)充■利用查詢法擴(kuò)展外部中斷源例:使用按鈕來模擬外部中斷源。C51程序如下:voidINT0_srv(void)interrupt0using1//中斷服務(wù)程序{P1=0xff; //熄滅所有發(fā)光二極管;if(int0==0)led0=0;//擴(kuò)展中斷1處理

if(int1==0)led1=0;//擴(kuò)展中斷2處理

if(int2==0)led2=0;//擴(kuò)展中斷3處理

if(int3==0)led3=0;//擴(kuò)展中斷4處理 }voidmain()//主程序{IT0=1;//外部中斷0為邊沿觸發(fā)EA=1;//開總中斷

EX0=1;//外部中斷0允許 while(1);}5.4外部中斷的擴(kuò)充■利用定時(shí)器擴(kuò)展外部中斷源方法:首先把定時(shí)器/計(jì)數(shù)器設(shè)置成計(jì)數(shù)方式,并預(yù)置滿值(再來一個(gè)脈沖則計(jì)數(shù)器溢出),然后把外部中斷源輸入到P3.4口或P3.5口(計(jì)數(shù)器外部脈沖輸入端T0或T1),這樣就可以利用定時(shí)器/計(jì)數(shù)器(內(nèi)部中斷源)作為單片機(jī)的外部中斷了。

注意:這種方法的中斷服務(wù)的入口地址為000BH或001BH。為了使每出現(xiàn)一個(gè)從高到低的脈沖都產(chǎn)生一個(gè)中斷,可以把定時(shí)器/計(jì)數(shù)器設(shè)置為8位自動重裝方式(方式2),且其初值和重裝值均設(shè)為0FFH

。5.4外部中斷的擴(kuò)充■利用定時(shí)器擴(kuò)展外部中斷源C51程序如下:#include<reg51.h>voidtimer0_int(void)interrupt1//T/C0中斷處理程序{.......}voidtimer1_int(void)interrupt3//T/C1中斷處理程序{.......}5.4外部中斷的擴(kuò)充■利用定時(shí)器擴(kuò)展外部中斷源C51程序如下:voidmain()//主程序{........TMOD=0x66; //兩個(gè)定時(shí)/計(jì)數(shù)器都設(shè)置為8位自動重裝模式

TL0=0xFF;//設(shè)定重載初值

TH0=0xFF;

TL1=0xFF;

TH1=0xFF;

TCON=0x50;//開始計(jì)數(shù)

IE=0x9F;//中斷使能

........}5.4外部中斷的擴(kuò)充■單片機(jī)的P0口接了8個(gè)發(fā)光二極管,要求使用定時(shí)器T0中斷實(shí)現(xiàn)流水燈控制,流水燈頻率為每0.5秒鐘更替一次(假設(shè)單片機(jī)外接11.0592MHz的晶振)。5.5定時(shí)器中斷編程實(shí)例■單片機(jī)的P0口接了8個(gè)發(fā)光二極管,要求使用定時(shí)器T0中斷實(shí)現(xiàn)流水燈控制,流水燈頻率為每0.5秒鐘更替一次(假設(shè)單片機(jī)外接11.0592MHz的晶振)。分析:使用定時(shí)器T0中斷初始化包括以下幾個(gè)方面:(1)確定計(jì)數(shù)初值以及定時(shí)器工作方式

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論