版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章80C51單片機(jī)的CTC與中斷系統(tǒng)§6.180C51單片機(jī)的CTC及其應(yīng)用§6.280C51單片機(jī)的中斷系統(tǒng)及其應(yīng)用§6.180C51單片機(jī)的CTC及其應(yīng)用一、80C51單片機(jī)的定時(shí)器/計(jì)數(shù)器二、定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例概述
在測(cè)、控領(lǐng)域往往需要定時(shí)檢測(cè)某個(gè)參數(shù),或按一定的時(shí)間間隔來(lái)進(jìn)行某種控制。還有一些控制是根據(jù)對(duì)某種事件的計(jì)數(shù)結(jié)果進(jìn)行的。因此幾乎所有單片機(jī)內(nèi)部都集成了定時(shí)/計(jì)數(shù)器,以簡(jiǎn)化微機(jī)測(cè)控系統(tǒng)的設(shè)計(jì)。一、80C51單片機(jī)的定時(shí)器/計(jì)數(shù)器80C51系列單片機(jī)典型產(chǎn)品中80C51等有兩個(gè)16位定時(shí)器/計(jì)數(shù)器T0,T1;80C52等有三個(gè)16位定時(shí)器/計(jì)數(shù)器T0、T1和T2。它們都可以用作定時(shí)器或外部事件計(jì)數(shù)器。概述一、80C51單片機(jī)的定時(shí)器/計(jì)數(shù)器(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式(三)定時(shí)器/計(jì)數(shù)器T2(四)看門(mén)狗(WTD)一、80C51單片機(jī)的定時(shí)器/計(jì)數(shù)器1、結(jié)構(gòu)框圖
80C51單片機(jī)內(nèi)部有2個(gè)可編程的16位定時(shí)器/計(jì)數(shù)器T0、T1,結(jié)構(gòu)框圖如下圖所示。它是由6個(gè)專(zhuān)用寄存器構(gòu)成的:TH0、TL0構(gòu)成16位計(jì)數(shù)器T0,TH1、TL1構(gòu)成16位計(jì)數(shù)器T1,TMOD、TCON為兩個(gè)定時(shí)器共用,用來(lái)選擇工作方式和控制啟停。(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理1、結(jié)構(gòu)框圖(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理
T0、T1是加1計(jì)數(shù)器,每當(dāng)輸入信號(hào)有一個(gè)負(fù)跳變時(shí),計(jì)數(shù)器加1,它們可用于計(jì)數(shù)也可用于定時(shí)。1、結(jié)構(gòu)框圖(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理
當(dāng)用作計(jì)數(shù)時(shí),它對(duì)外部輸入(自引腳T0、T1)的脈沖信號(hào)計(jì)數(shù)。每個(gè)機(jī)器周期的S5P2采樣引腳電平,若前一個(gè)機(jī)器周期采樣值為1,后一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。對(duì)輸入計(jì)數(shù)信號(hào)的要求:
由于識(shí)別一個(gè)從1到0的負(fù)跳變信號(hào)需要兩個(gè)機(jī)器周期(24個(gè)振蕩周期),所以最高的計(jì)數(shù)頻率為系統(tǒng)時(shí)鐘頻率的1/24;又因?yàn)橐粋€(gè)機(jī)器周期對(duì)信號(hào)采樣一次,因此輸入信號(hào)的電平至少應(yīng)持續(xù)一個(gè)機(jī)器周期。1、結(jié)構(gòu)框圖(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理
當(dāng)用作定時(shí)時(shí),它對(duì)內(nèi)部時(shí)鐘計(jì)數(shù),每個(gè)機(jī)器周期,計(jì)數(shù)器加1。1個(gè)機(jī)器周期為12個(gè)振蕩周期,因此定時(shí)時(shí)間由計(jì)數(shù)長(zhǎng)度和時(shí)鐘頻率共同決定。1、結(jié)構(gòu)框圖(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理2、定時(shí)器方式寄存器TMOD
TMOD用來(lái)選擇定時(shí)器的工作方式,各位定義如下圖所示:(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理2、定時(shí)器方式寄存器TMOD(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理功能選擇方式選擇門(mén)控方式選擇3、定時(shí)器控制寄存器TCON
TCON的高4位分別作為T(mén)0、T1的溢出標(biāo)志和運(yùn)行控制位,低4位用于外部中斷,如下圖所示:(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理3、定時(shí)器控制寄存器TCON(一)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)原理(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式簡(jiǎn)述80C51單片機(jī)定時(shí)器T0有四種工作方式:方式0、方式1、方式2和方式3。定時(shí)器T1有三種工作方式:方式0、方式1、方式2。1、工作方式0
當(dāng)M1M0兩位為00時(shí),定時(shí)器/計(jì)數(shù)器選為工作方式0。它是一個(gè)13位的計(jì)數(shù)器,由TLX的低5位和THX組成。結(jié)構(gòu)如下圖所示:(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式1、工作方式0(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式1、工作方式0
當(dāng)TLX的低5位計(jì)數(shù)溢出時(shí)即向THX進(jìn)位,而THX計(jì)數(shù)溢出時(shí)向中斷標(biāo)志位TFX進(jìn)位。在開(kāi)中斷的情況下,會(huì)向CPU發(fā)出中斷請(qǐng)求;CPU響應(yīng)中斷后,硬件自動(dòng)清除TFX標(biāo)志。TFX也可供CPU讀寫(xiě),CPU寫(xiě)入狀態(tài)與硬件置“1”或清“0”的效果相同。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式1、工作方式0由結(jié)構(gòu)圖可見(jiàn),當(dāng)C/T=1時(shí),多路開(kāi)關(guān)接通引腳TX,計(jì)數(shù)器對(duì)外部時(shí)鐘計(jì)數(shù);(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式當(dāng)C/T=0時(shí),多路開(kāi)關(guān)接振蕩器經(jīng)12分頻后的輸出,計(jì)數(shù)器對(duì)機(jī)器周期計(jì)數(shù),即工作于定時(shí)方式。1、工作方式0
當(dāng)門(mén)控位GATE=0時(shí),定時(shí)器的啟停僅由TRX控制,而當(dāng)GATE=1時(shí),定時(shí)器的啟停還受到INTX引腳電平的控制。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式1、工作方式0在方式0應(yīng)用時(shí)應(yīng)注意以下幾點(diǎn):①
因計(jì)數(shù)器是做加1計(jì)數(shù)的,所以時(shí)間常數(shù)初值應(yīng)用補(bǔ)碼裝入。②
方式0為13位計(jì)數(shù)器,應(yīng)正確安排13位二進(jìn)制碼。③
如果要重復(fù)定時(shí)或計(jì)數(shù),則須重新設(shè)置時(shí)間常數(shù)初值。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式
當(dāng)M1M0兩位為01時(shí),定時(shí)器/計(jì)數(shù)器選為工作方式1,它是一個(gè)16位的計(jì)數(shù)器,結(jié)構(gòu)如下圖所示。
方式1和方式0唯一不同的就是位數(shù),其它控制方式和用法均相同。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式2、工作方式1(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式2、工作方式1
當(dāng)M1M0兩位為10時(shí),定時(shí)器/計(jì)數(shù)器選為工作方式2,為8位時(shí)間常數(shù)可自動(dòng)再裝入的計(jì)數(shù)器,結(jié)構(gòu)如下圖所示。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式3、工作方式2(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式3、工作方式2
這時(shí)TLX為8位計(jì)數(shù)器,THX為時(shí)間常數(shù)初值寄存器。當(dāng)TLX計(jì)滿溢出時(shí),置位TFX,并將THX的內(nèi)容(即時(shí)間常數(shù)初值)重新裝入TLX中。方式2特別適合于需要重復(fù)定時(shí)/計(jì)數(shù)的場(chǎng)合。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式3、工作方式2
當(dāng)M1M0兩位為11時(shí),選擇工作方式3。方式3只適用于T0,如果企圖將T1置為方式3,則將使T1停止計(jì)數(shù),與清“0”TR1的效果相同。
T0工作于方式3時(shí),變成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0,結(jié)構(gòu)如下圖所示。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式4、工作方式3(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式4、工作方式3TL0占用了原T0的所有資源;TH0占用了原T1的部分資源TR1和TF1,且TH0只能作為定時(shí)器用。
這種情況下,T1仍可工作于方式0、1或2的定時(shí)或計(jì)數(shù),但TR1、TF1被TH0占用。該方式一般用在T1作為串口的波特率發(fā)生器,或不需要中斷的場(chǎng)合。(二)定時(shí)器/計(jì)數(shù)器T0、T1的工作方式4、工作方式3(三)定時(shí)器/計(jì)數(shù)器T2
T2內(nèi)部除了兩個(gè)8位計(jì)數(shù)器TH2、TL2和控制寄存器T2CON及方式控制寄存器T2MOD外,還設(shè)置了捕捉寄存器RCAP2L(低字節(jié))和RCAP2H(高字節(jié))。概述80C52中有一個(gè)功能較強(qiáng)的定時(shí)器/計(jì)數(shù)器T2,它是一個(gè)16位的、具有自動(dòng)重裝載和捕捉能力的定時(shí)器/計(jì)數(shù)器。
T2的計(jì)數(shù)脈沖源有兩個(gè):內(nèi)部機(jī)器周期和外部計(jì)數(shù)脈沖(從T2即P1.0端輸入)
此時(shí)P1.1作為外部控制信號(hào)輸入端T2EX。(三)定時(shí)器/計(jì)數(shù)器T2概述TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2捕捉/重裝載選擇1,選擇捕捉0.選擇重裝載計(jì)數(shù)定時(shí)方式選擇1,計(jì)數(shù)0,定時(shí)運(yùn)行控制位1,啟動(dòng)T20,關(guān)閉T2允許/禁止外部信號(hào)觸發(fā)捕捉或重裝載1,允許0,禁止1、T2中的特殊功能寄存器(1)T2控制寄存器T2CON(字節(jié)地址C8H):(三)定時(shí)器/計(jì)數(shù)器T21、T2中的特殊功能寄存器TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2串行口發(fā)送波特率發(fā)生器選擇1,選擇T20,選擇T1串行口接收波特率發(fā)生器選擇1,選擇T20,選擇T1T2外部標(biāo)志1,T2EX引腳(P1.1)上出現(xiàn),造成捕捉/重裝載,0,CPU響應(yīng)中斷,應(yīng)由軟件清除該標(biāo)志。(EXEN2=1)T2溢出標(biāo)志,T2溢出時(shí)置位(在波特率發(fā)生器方式下不置位)并申請(qǐng)中斷,只能靠軟件清除。該位置1,申請(qǐng)中斷。(1)T2控制寄存器T2CON(字節(jié)地址C8H):(三)定時(shí)器/計(jì)數(shù)器T2(2)T2方式控制寄存器T2MOD:T2OEDCEN1,向下計(jì)數(shù)向下計(jì)數(shù)允許位0,向上計(jì)數(shù)T2輸出允許位(僅對(duì)80C54/58)1,允許時(shí)鐘輸出至T2(P1.0)0,不允許輸出T2MOD的復(fù)位值為:××××××00B1、T2中的特殊功能寄存器(三)定時(shí)器/計(jì)數(shù)器T2(3)數(shù)據(jù)寄存器:TH2,TL2兩個(gè)8位寄存器構(gòu)成16位計(jì)數(shù)器,可供CPU以字節(jié)方式讀寫(xiě)。(4)捕捉寄存器:RCAP2H、RCAP2L用于捕捉計(jì)數(shù)器TH2、TL2的計(jì)數(shù)狀態(tài)或預(yù)置計(jì)數(shù)初值。1、T2中的特殊功能寄存器(三)定時(shí)器/計(jì)數(shù)器T22、T2的功能選擇:定時(shí)/計(jì)數(shù)(1)C/T2=0,選擇定時(shí)方式。每個(gè)機(jī)器周期,T2的內(nèi)容增1。(2)C/T2=1,選擇計(jì)數(shù)方式,當(dāng)T2(P1.0)引腳有一個(gè)負(fù)跳變,T2內(nèi)容增1。注意計(jì)數(shù)脈沖頻率不得超過(guò)振蕩器頻率的1/24。(三)定時(shí)器/計(jì)數(shù)器T23、T2的工作方式選擇包括捕捉、自動(dòng)重裝載和波特率發(fā)生器三種。由T2CON中的CP/RL2和RCLK+TCLK來(lái)選擇,見(jiàn)下表:(三)定時(shí)器/計(jì)數(shù)器T2T2的工作方式選擇表捕捉方式:即在一定條件下,自動(dòng)將計(jì)數(shù)器TH2和TL2中的數(shù)據(jù)讀入RCAP2H和RCAP2L。捕捉方式的原理圖如下:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2(P1.0)(P1.1)T2外部標(biāo)志(在T2CON中)允許/禁止外部觸發(fā)(在T2CON中)捕捉方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2當(dāng)CP/RL2=1,選擇捕捉方式。下述情況下將發(fā)生捕捉操作:當(dāng)EXEN2=1,且引腳T2EX(P1.1)出現(xiàn)負(fù)跳變時(shí),發(fā)生捕捉,同時(shí)標(biāo)志EXF2置1,申請(qǐng)中斷。捕捉方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2
如果T2的中斷開(kāi)放,CPU響應(yīng)后轉(zhuǎn)到002BH執(zhí)行中斷服務(wù)程序。
注意:在中斷返回之前,必須用軟件來(lái)清除TF2/EXF2。捕捉方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2自動(dòng)重裝載方式:即在一定條件下,自動(dòng)將RCAP2H和RCAP2L中的數(shù)據(jù)裝入計(jì)數(shù)器TH2和TL2中。一般RCAP2H和RCAP2L中預(yù)置了T2的計(jì)數(shù)初值。自動(dòng)重裝載方式的原理圖如下:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2自動(dòng)重裝載方式:3、T2的工作方式選擇(P1.0)(P1.1)T2的自動(dòng)重裝載方式(三)定時(shí)器/計(jì)數(shù)器T2當(dāng)CP/RL2=0時(shí),選擇自動(dòng)重裝載方式,以下兩種情況下發(fā)生自動(dòng)重裝載操作:①T2溢出時(shí),打開(kāi)重裝載三態(tài)緩沖器,發(fā)生重裝載操作,同時(shí)置位TF2,申請(qǐng)中斷。自動(dòng)重裝載方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2當(dāng)CP/RL2=0時(shí),選擇自動(dòng)重裝載方式,以下兩種情況下發(fā)生自動(dòng)重裝載操作:②當(dāng)EXEN2=1,且引腳T2EX(P1.1)有負(fù)跳變時(shí),發(fā)生重裝載操作,同時(shí)置位EXF2標(biāo)志,申請(qǐng)中斷。自動(dòng)重裝載方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2如果T2中斷允許,CPU響應(yīng)后轉(zhuǎn)到002BH執(zhí)行中斷服務(wù)程序。注意:在返回之前,應(yīng)該用軟件清除TF2/EXF2
標(biāo)志。自動(dòng)重裝載方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2波特率發(fā)生器方式:當(dāng)T2CON中RCLK+TCLK=1時(shí),T2作為串行口的波特率發(fā)生器,其結(jié)構(gòu)原理如下圖所示:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2波特率發(fā)生器方式:3、T2的工作方式選擇T2的波特率發(fā)生器方式結(jié)構(gòu)圖(三)定時(shí)器/計(jì)數(shù)器T2
當(dāng)T2用作波特率發(fā)生器時(shí),TH2的溢出不使TF2置位,不產(chǎn)生中斷,所以此時(shí)T2不必禁止中斷。計(jì)數(shù)時(shí)鐘可以是內(nèi)部,也可以是外部,由C/T狀態(tài)決定,波特率的值決定于RCAP2H和RCAP2L裝載的初值。波特率發(fā)生器方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2該方式下,在T2計(jì)數(shù)過(guò)程中,不能再讀寫(xiě)TH2和TL2;可以讀但不能改寫(xiě)RCAP2H和RCAP2L;如果要訪問(wèn)RCAP2H和RCAP2L,應(yīng)先關(guān)閉定時(shí)器。
上圖可見(jiàn),當(dāng)T2用作波特率發(fā)生器時(shí),若T2CON中EXEN2位置1,引腳T2EX(P1.1)可作為一個(gè)外部中斷源。波特率發(fā)生器方式:3、T2的工作方式選擇(三)定時(shí)器/計(jì)數(shù)器T2(四)看門(mén)狗(WTD)概述看門(mén)狗亦稱監(jiān)視定時(shí)器T3,它的作用是強(qiáng)迫單片機(jī)進(jìn)入復(fù)位狀態(tài),使之從硬件或軟件故障中解脫出來(lái)。即單片機(jī)的程序進(jìn)入了錯(cuò)誤狀態(tài)后,在一個(gè)指定的時(shí)間內(nèi),用戶程序沒(méi)有重裝定時(shí)器T3,將產(chǎn)生一個(gè)系統(tǒng)復(fù)位。
80C552中WTD是由一個(gè)11位的分頻器和8位定時(shí)器T3(加1計(jì)數(shù))組成。結(jié)構(gòu)其結(jié)構(gòu)如下圖所示:看門(mén)狗T3結(jié)構(gòu)圖(四)看門(mén)狗(WTD)結(jié)構(gòu)T3由外部引腳及PCON.4(WLE)和PCON.1(PD)控制。低電平,允許WTD工作,禁止掉電方式,也不能置位掉電位PCON.1。高電平,禁止WTD工作,允許掉電方式。引腳在軟件調(diào)試階段,通過(guò)將接高電平來(lái)禁止T3工作,待調(diào)試結(jié)束后,再將接低電平。(四)看門(mén)狗(WTD)WLE(PCON.4)——看門(mén)狗定時(shí)器允許重裝標(biāo)志1:允許定時(shí)器T3重裝。0:T3裝入后WLE自動(dòng)清除,若該位為0,說(shuō)明T3已被重裝。T3的重裝和溢出,產(chǎn)生復(fù)位的時(shí)間間隔,由裝入T3的值決定。結(jié)構(gòu)
對(duì)T3的裝入分兩步:先置位PCON.4(WLE),然后裝入T3。T3裝入后,PCON.4自動(dòng)復(fù)位。如果PCON.4=0,則T3不能被裝入。(四)看門(mén)狗(WTD)工作過(guò)程
定時(shí)器T3的工作原理:在T3溢出時(shí),復(fù)位8X552并產(chǎn)生復(fù)位脈沖輸出至復(fù)位引腳RST。為防止系統(tǒng)復(fù)位,必須在定時(shí)器T3溢出前,通過(guò)軟件對(duì)其進(jìn)行重裝。如果發(fā)生軟件或硬件故障,將使軟件對(duì)定時(shí)器T3的重裝失敗,從而T3溢出導(dǎo)致復(fù)位信號(hào)的產(chǎn)生。用這樣的方法可以在軟件失控時(shí),恢復(fù)程序的正常運(yùn)行。(四)看門(mén)狗(WTD)編程實(shí)例例如:watchdog使用的一段程序如下:T3EQU0FFH;定時(shí)器T3的地址PCONEQU87H;PCON的地址WATCH_INTVEQU156;看門(mén)狗的時(shí)間間隔LCALLWATCHDOG看門(mén)狗服務(wù)程序WATCHDOG:ORLPCON,#10H;允許定時(shí)器T3重裝MOVT3,#WATCH_INTV;裝載定時(shí)器T3RET(四)看門(mén)狗(WTD)二、定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例(一)定時(shí)器/計(jì)數(shù)器編程步驟(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例(1)確定工作方式,把方式字寫(xiě)入TMOD寄存器。(2)計(jì)算定時(shí)/計(jì)數(shù)初值,并將初值寫(xiě)入寄存器TH0、TL0或TH1、TL1。計(jì)數(shù)初值應(yīng)用補(bǔ)碼寫(xiě)入。作計(jì)數(shù)器:計(jì)數(shù)初值X=2n-C,作定時(shí)器:時(shí)間常數(shù)初值X=2n-T/TC,式中n為計(jì)數(shù)器位數(shù),C是實(shí)際計(jì)數(shù)值,TC是機(jī)器周期,T是設(shè)定的時(shí)間。(一)定時(shí)器/計(jì)數(shù)器編程步驟(3)將中斷控制字和中斷優(yōu)先級(jí)別分別寫(xiě)入中斷允許寄存器IE和中斷優(yōu)先級(jí)寄存器IP。(4)向TCON寫(xiě)入適當(dāng)命令字,控制定時(shí)器/計(jì)數(shù)器的運(yùn)行。(一)定時(shí)器/計(jì)數(shù)器編程步驟例1利用T0方式0產(chǎn)生1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻率fosc=12MHz
解:要在P1.0輸出周期為2ms的方波,只要使P1.0每隔1ms取反一次即可。T0的方式字為:TMOD=00H計(jì)算要定時(shí)1ms,T0的初值:機(jī)器周期Tc=(1/fosc)×12=[1/(12×106)]×12=1μs(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例
利用T0方式0產(chǎn)生1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻率fosc=12MHz
例1設(shè)T0的計(jì)數(shù)初值為X,則(213-X)×1×10-6=1×10-3
X=213-1×10-3/(1×10-6)
=8192-1000
=7192
=1110000011000B高8位
E0H
低5位
18H利用T0方式0產(chǎn)生1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻fosc=12MHz。那么:TH0初值為E0H,TL0初值為18H。采用查詢TF0的狀態(tài)來(lái)控制P1.0輸出。程序清單:MOVTMOD,#00H;置T0為方式0MOVTL0,#18H;送計(jì)數(shù)初值MOVTH0,#0E0HSETBTR0;啟動(dòng)T0例1(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用T0方式0產(chǎn)生1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻率fosc=12MHz。
LOOP:JBCTF0,NEX;查詢定時(shí)時(shí)間到否SJMPLOOPNEX:MOVTL0#18H;重賦計(jì)數(shù)初值MOVTH0#0E0HCPLP1.0;輸出取反SJMPLOOP;重復(fù)循環(huán)例1(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用T0方式0產(chǎn)生1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻率fosc=12MHz。
采用查詢方式的程序很簡(jiǎn)單,但CPU要不斷地查詢溢出標(biāo)志TF0的狀態(tài),這就占用了CPU工作時(shí)間,以致CPU的效率不高。采用定時(shí)溢出中斷方式,可以提高CPU的效率。例1(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)溢出中斷方式產(chǎn)生前例所要求的方波。
解:方式字和初值與上例一樣。程序清單:主程序:ORG0000HAJMPMAIORG000BH;T0中斷入口AJMPIST0;轉(zhuǎn)中斷服務(wù)程序例2(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)溢出中斷方式產(chǎn)生前例所要求的方波。MAI:MOVSP,#53H;設(shè)置堆棧MOVTMOD,#00H;置T0為方式0MOVTL0,#18H;送初值MOVTH0,#OE0HSETBEA;CPU開(kāi)中斷SETBET0;T0中斷允許SETBTR0;啟動(dòng)T0HERE:SJMPHERE;等待中斷例2(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)溢出中斷方式產(chǎn)生前例所要求的方波。中斷服務(wù)程序:IST0:MOVTL0,#18H;重裝初值MOVTH0,#0E0HCPLP1.0;輸出方波RETI;中斷返回例2(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)器控制輸出一方波信號(hào),要求方波的周期為1s。設(shè)單片機(jī)晶振頻率為12MHz。解:輸出周期為1s的方波要求定時(shí)值為500ms,在時(shí)鐘為12MHz的情況下,即使采用方式1(16位計(jì)數(shù)器),這個(gè)值也超過(guò)了方式1可能提供的最大定時(shí)值(65.536ms)。如果采用降低單片機(jī)時(shí)鐘頻率來(lái)延長(zhǎng)定時(shí)時(shí)間,在一定的范圍內(nèi)可以,但會(huì)降低CPU運(yùn)行速度,而且定時(shí)誤差也會(huì)加大。例3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)器控制輸出一方波信號(hào),要求方波的周期為1s。設(shè)單片機(jī)晶振頻率為12MHz。要獲得500ms的定時(shí),可選用定時(shí)器T0方式1,定時(shí)時(shí)間為50ms。另設(shè)一個(gè)軟件計(jì)數(shù)器,初始值為10。每隔50ms定時(shí)時(shí)間到,產(chǎn)生溢出中斷,在中斷服務(wù)程序中使軟件計(jì)數(shù)器減1,當(dāng)軟件計(jì)數(shù)器減到0時(shí),就獲得500ms定時(shí)。下面介紹一種利用定時(shí)器定時(shí)和軟件計(jì)數(shù)來(lái)延長(zhǎng)定時(shí)時(shí)間的復(fù)合方法。例3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)器控制輸出一方波信號(hào),要求方波的周期為1s。設(shè)單片機(jī)晶振頻率為12MHz。若時(shí)鐘頻率f=12MHz,50ms定時(shí)的計(jì)數(shù)初值為:X=216-50×10-3/(1×10-6)=65536-50000
=15536D=0011110010110000B3CH
B0H
例3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例即X=3CB0H,因此TH0初值為3CH,TL0初值為B0H。采用定時(shí)器控制輸出一方波信號(hào),要求方波的周期為1s。設(shè)單片機(jī)晶振頻率為12MHz。程序清單:ORG0000HAJMPMAI;轉(zhuǎn)主程序ORG000BHAJMPTIS;轉(zhuǎn)定時(shí)器T0中斷服務(wù)程序例3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)器控制輸出一方波信號(hào),要求方波的周期為1s。設(shè)單片機(jī)晶振頻率為12MHz。MAI:MOVSP,#53HMOVTMOD,#01H;定時(shí)器T0方式1MOVTL0,#0B0H;T0低8位初值MOVTH0,#3CH;T0高8位初值MOVIE,#82H;T0開(kāi)中斷SETBTR0;啟動(dòng)T0MOVR1,#10;軟件計(jì)數(shù)器初值DEFG:SJMPDEFG;等待中斷例3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例采用定時(shí)器控制輸出一方波信號(hào),要求方波的周期為1s。設(shè)單片機(jī)晶振頻率為12MHz。中斷服務(wù)程序:TIS:DJNZR1,NEXT;(R1)=0,則不對(duì)P1.0取反CPLP1.0;輸出方波MOVR1,#10;重裝軟件計(jì)數(shù)器初值NEXT:MOVTL0,#0B0H;重裝定時(shí)器初值MOVTH0,#3CHRETI;中斷返回例3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用定時(shí)器方式2對(duì)外部脈沖計(jì)數(shù),要求每計(jì)滿110次,將P1.0端取反。解:外部信號(hào)由T1引腳輸入,每發(fā)生一次負(fù)跳變計(jì)數(shù)器加1,每輸入110個(gè)脈沖,計(jì)數(shù)器發(fā)生溢出中斷,中斷服務(wù)程序?qū)1.0取反一次。T1為計(jì)數(shù)方式2的方式字為:TMOD=60H。設(shè)T0不用,TMOD的低4位可任意,但不能使T0進(jìn)入方式3,一般取0。例4(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用定時(shí)器方式2對(duì)外部脈沖計(jì)數(shù),要求每計(jì)滿110次,將P1.0端取反。計(jì)算T1的計(jì)數(shù)初值:X=28-110=146=92H則TL1的初值為92H,重裝初值寄存器TH1=92H。例4(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用定時(shí)器方式2對(duì)外部脈沖計(jì)數(shù),要求每計(jì)滿110次,將P1.0端取反。程序清單:MAI:MOVTMOD,#60H
;置T1方式2計(jì)數(shù)MOVTL1,#92H;賦初值MOVTH1,#92HMOVIE,#88H;定時(shí)器T1開(kāi)中斷SETBTR1;啟動(dòng)計(jì)數(shù)器HERE:SJMPHERE;等待中斷例4(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用定時(shí)器方式2對(duì)外部脈沖計(jì)數(shù),要求每計(jì)滿110次,將P1.0端取反。ORG001BH;中斷服務(wù)程序入口CPLP1.0;對(duì)P1.0取反RETI;中斷返回例4(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用T0門(mén)控位測(cè)試引腳上出現(xiàn)的正脈沖的寬度,并以機(jī)器周期數(shù)的形式顯示在顯示器上。解:根據(jù)要求,解題思路為:將T0設(shè)為定時(shí)器方式1,計(jì)數(shù)初值為0,GATE程控為1,置TR0為1。一旦P3.2引腳出現(xiàn)高電平即開(kāi)始計(jì)數(shù),直到出現(xiàn)低電平為止,然后讀取T0的計(jì)數(shù)值并顯示。測(cè)試過(guò)程如下圖所示:例5(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例對(duì)T0初始化,09H→TMOD,GATE=1T0從0開(kāi)始計(jì)數(shù),測(cè)量脈沖寬度0→TR0,停止計(jì)數(shù)讀T0值,送顯示利用T0門(mén)控位測(cè)試引腳上出現(xiàn)的正脈沖的寬度,并以機(jī)器周期數(shù)的形式顯示在顯示器上。程序清單:START:MOVTMOD,#09H;T0定時(shí)方式1,GATE置1MOVTL0,#00HMOVTH0,#00HSETBTR0;啟動(dòng)定時(shí)器計(jì)數(shù)WAIT1:JBP3.2,WAIT1;等待INT0變低例5(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用T0門(mén)控位測(cè)試引腳上出現(xiàn)的正脈沖的寬度,并以機(jī)器周期數(shù)的形式顯示在顯示器上CLRTR0;停止T0計(jì)數(shù)MOVR0,#DISBUF;顯示緩沖器首址送R0MOVA,TL0;機(jī)器周期存放格式為低位占低地址WAIT2:JNBP3.2,WAIT2;等待INT0升高WAIT3:JBP3.2,WAIT3;等待INTO變低例5(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用T0門(mén)控位測(cè)試引腳上出現(xiàn)的正脈沖的寬度,并以機(jī)器周期數(shù)的形式顯示在顯示器上。XCHDA,@R0;高位為占高地址。連續(xù)4個(gè)顯示緩沖單元INCR0SWAPAXCHDA,@R0INCR0MOVA,TH0XCHDA,@R0INCR0例5(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用T0門(mén)控位測(cè)試引腳上出現(xiàn)的正脈沖的寬度,并以機(jī)器周期數(shù)的形式顯示在顯示器上。SWAPAXCHDA,@R0DIS:LCALLDISUP;長(zhǎng)調(diào)用顯示子程序AJMPDIS...;重復(fù)顯示脈寬機(jī)器周期數(shù)...
由于定時(shí)器方式1的16位計(jì)數(shù)長(zhǎng)度有限,被測(cè)脈沖高電平寬度必須小于65536個(gè)機(jī)器周期。例5(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例利用定時(shí)器/計(jì)數(shù)器測(cè)定周期示意圖利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。例6(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例
解:設(shè)T0為定時(shí)、門(mén)控方式,當(dāng)INT0為高電平時(shí),啟動(dòng)定時(shí)器,之后應(yīng)改為非門(mén)控方式;T1為計(jì)數(shù)方式。信號(hào)波形及連接方式如上圖(b)所示。①定時(shí)器設(shè)置:當(dāng)脈沖速率低于每秒3個(gè)時(shí),每個(gè)脈沖周期為330ms左右,且設(shè)脈沖寬度小于100ms,故設(shè)置定時(shí)器的基本定時(shí)為100ms,可滿足測(cè)時(shí)的精度要求。例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例T0的TMOD的設(shè)置:采用門(mén)控方式啟動(dòng)定時(shí)器,按方式1定時(shí),故方式字為09H。GATEC/TM1M01001例6門(mén)控定時(shí)器方式1利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例時(shí)間常數(shù)計(jì)算:振蕩頻率6MHz,機(jī)器周期Tc為T(mén)c=12/6×106=2×10-6s,設(shè)置初值為x:基本定時(shí)時(shí)間為100ms,于是(216-x)*(2×10-6)=100×10-3x=216-50×103=15536=3CB0H預(yù)置:(TH0)=3CH,(TL0)=0B0H例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例②計(jì)數(shù)器設(shè)置:T1設(shè)為計(jì)數(shù)器,計(jì)數(shù)值為2。當(dāng)計(jì)數(shù)1時(shí),啟動(dòng)定時(shí)器;當(dāng)計(jì)數(shù)2時(shí),中斷計(jì)數(shù)器T1,并停止T0的定時(shí);T1的中斷優(yōu)先級(jí)高于定時(shí)器T0。T1的方式字為5H;計(jì)數(shù)初值為0FFFEH。預(yù)置:(TH1)=0FFH,(TL1)=0FEH。例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例
③編程:ORG000BH;定時(shí)器T0中斷入口AJMPTIME0ORG001BH;定時(shí)器T1中斷入口AJMPTIME1ORG××××HMOVR3,#0;清T0定時(shí)次數(shù)計(jì)數(shù)器SETBP3.2;置P3.2、P3.5為輸入狀態(tài)SETBP3.5
例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例
MOVTMOD,#59H
MOVTH0,#3CH;置定時(shí)器初值MOVTL0,#0B0HMOVTH1,#0FFH;置計(jì)數(shù)器初值MOVTL1,#0FEHSETBTR0;啟動(dòng)定時(shí)器、計(jì)數(shù)器SETBTR1
MOVIP,#08H;T1中斷優(yōu)先于T0例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。③編程:續(xù)1(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例SETBET0;
允許T0、T1中斷SETBET1CLR20H.0;清T0、T1中斷軟標(biāo)志CLR20H.1
SETBEA;CPU開(kāi)中斷JNB20H.0,$;T0若未中斷,則踏步等待JNB20H.1,$;T1若未中斷,則踏步等待RET例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。③編程:續(xù)2(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例TIME0:JB20H.0,LP;T0非初次中斷,轉(zhuǎn)MOVTMOD,#51H;取消門(mén)控方式SYTB20H.0
;置T0中斷軟標(biāo)志
LP:MOVTH0,#3CH;重置定時(shí)器初值MOVTL0,#0B0HINCR3;軟件計(jì)數(shù)器加1RETI例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。③編程:續(xù)3(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例TIME1:CLR20H.0;清除T0、T1中斷軟標(biāo)志CLR20H.1CLRET0;禁止T0、T1中斷CLRET1
CLREA;CPU關(guān)中斷CLRTR0;關(guān)定時(shí)器,計(jì)數(shù)器CLRTR1
RETI
注:結(jié)果(R3)×100ms即為所測(cè)波形的周期。嚴(yán)格地講還應(yīng)加上T0中的內(nèi)容,即[(T0)-3CB0H)]×2us例6利用定時(shí)器測(cè)定下圖所示波形的一個(gè)周期的長(zhǎng)度。③編程:續(xù)4(二)定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例§6.280C51單片機(jī)的中斷系統(tǒng)及其應(yīng)用一、80C51單片機(jī)的中斷系統(tǒng)二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例中斷:程序在執(zhí)行過(guò)程中,允許外部或內(nèi)部事件打斷它,使其轉(zhuǎn)向?yàn)樘幚硗獠炕騼?nèi)部事件的中斷服務(wù)程序中去;完成中斷服務(wù)程序后,CPU繼續(xù)執(zhí)行原來(lái)被打斷的程序。這樣的過(guò)程稱為中斷。如下圖所示:概述一、80C51單片機(jī)的中斷系統(tǒng)中斷源:能產(chǎn)生中斷的外部和內(nèi)部事件。概述一、80C51單片機(jī)的中斷系統(tǒng)
中斷優(yōu)先級(jí):當(dāng)幾個(gè)中斷源同時(shí)申請(qǐng)中斷,CPU必須區(qū)分哪個(gè)中斷源更重要,從而確定優(yōu)先處理哪個(gè)事件,這就是中斷優(yōu)先級(jí)問(wèn)題。當(dāng)CPU正在處理某中斷事件時(shí),又有另一事件申請(qǐng)中斷,CPU是否相應(yīng)?
約定:高優(yōu)先級(jí)的中斷源可以中斷CPU正在處理的低級(jí)的中斷服務(wù)程序,這就是中斷嵌套問(wèn)題。概述一、80C51單片機(jī)的中斷系統(tǒng)
80C51單片機(jī)有5個(gè)中斷源,2個(gè)中斷優(yōu)先級(jí),它的中斷處理程序可實(shí)現(xiàn)兩級(jí)嵌套,有較強(qiáng)的中斷處理能力。單片機(jī)對(duì)中斷系統(tǒng)的管理是通過(guò)相關(guān)的專(zhuān)用寄存器來(lái)實(shí)現(xiàn)的。概述一、80C51單片機(jī)的中斷系統(tǒng)(一)中斷源及相關(guān)的專(zhuān)用寄存器(二)單片機(jī)對(duì)中斷請(qǐng)求的控制(三)單片機(jī)對(duì)中斷的響應(yīng)一、80C51單片機(jī)的中斷系統(tǒng)1、80C51單片機(jī)的中斷源80C51(一)中斷源及相關(guān)的專(zhuān)用寄存器中斷源中斷服務(wù)程序入口中斷標(biāo)志優(yōu)先級(jí)順序0003HIE0高低定時(shí)器T0000BHTF00013HIE1定時(shí)器T1001BHTF1串行口中斷0023HTI或RI中斷源及相應(yīng)的中斷矢量和中斷標(biāo)志1、80C51單片機(jī)的中斷源(一)中斷源及相關(guān)的專(zhuān)用寄存器INT0INT12、定時(shí)器控制寄存器TCON定時(shí)器控制寄存器TCON的結(jié)構(gòu)如下圖所示TCONTF1TR1TF0TR0IE1IT1IE0IT0位地址8F8E8D8C8B8A8988復(fù)位/未溢出:0T1溢出中斷:1T1中斷標(biāo)志位停T1計(jì)數(shù):0啟T1計(jì)數(shù):1T1啟停位復(fù)位/未溢出:0T0溢出中斷:1停T0計(jì)數(shù):0啟T0計(jì)數(shù):1T0中斷標(biāo)志位T0啟停位0:INT1無(wú)中斷請(qǐng)求1:INT1有中斷請(qǐng)求0:INT1為電平觸發(fā)1:INT1為邊沿觸發(fā)0:INT0無(wú)中斷請(qǐng)求1:INT0有中斷請(qǐng)求0:INT0為電平觸發(fā)1:INT0為邊沿觸發(fā)(一)中斷源及相關(guān)的專(zhuān)用寄存器2、定時(shí)器控制寄存器TCON
當(dāng)定時(shí)器T0或T1定時(shí)到或計(jì)數(shù)滿時(shí)(即由全“1”變?yōu)槿?”),溢出標(biāo)志TF0或TF1被硬件置位,若中斷是開(kāi)放的,即可向CPU發(fā)出中斷請(qǐng)求。CPU響應(yīng)此中斷時(shí)由內(nèi)部硬件自動(dòng)將標(biāo)志TF0或TF1清“0”,控制轉(zhuǎn)到相應(yīng)中斷入口。注意:TF0或TF1可由軟件讀寫(xiě),軟件寫(xiě)入與硬件置位、復(fù)位效果相同。定時(shí)器T0、T1中斷(一)中斷源及相關(guān)的專(zhuān)用寄存器(一)中斷源及相關(guān)的專(zhuān)用寄存器2、定時(shí)器控制寄存器TCON外部中斷INT0、INT1外部中斷有兩種觸發(fā)方式:
在邊沿觸發(fā)方式下,有專(zhuān)門(mén)的中斷請(qǐng)求標(biāo)志IE0、IE1,當(dāng)CPU響應(yīng)時(shí),內(nèi)部硬件自動(dòng)將IE0或IE1清“0”,控制轉(zhuǎn)到相應(yīng)的中斷入口。沿(一)中斷源及相關(guān)的專(zhuān)用寄存器3、串行口控制寄存器SCONSCON的結(jié)構(gòu)如下圖所示,其中RI/TI是串行口接收/發(fā)送中斷標(biāo)志SCONSM0SM1SM2RENTB8RB8TIRI位地址9F9E9D9C9B9A9998
0:無(wú)接收中斷1:有接收中斷0:無(wú)發(fā)送中斷1:有發(fā)送中斷在串行口一節(jié)中介紹(一)中斷源及相關(guān)的專(zhuān)用寄存器3、串行口控制寄存器SCON
RI
接收中斷標(biāo)志。當(dāng)串行口接收完一幀數(shù)據(jù),該標(biāo)志置“1”,CPU響應(yīng)串行口中斷后內(nèi)部硬件不清除,必須通過(guò)軟件清“0”。
(一)中斷源及相關(guān)的專(zhuān)用寄存器3、串行口控制寄存器SCON
TI
發(fā)送中斷標(biāo)志。當(dāng)串行口發(fā)送完一幀數(shù)據(jù),該標(biāo)志置“1”,CPU響應(yīng)串行口中斷后內(nèi)部硬件不清除,必須通過(guò)軟件清“0”。
(一)中斷源及相關(guān)的專(zhuān)用寄存器3、串行口控制寄存器SCON注意:RI、TI的中斷入口都是0023H,故CPU響應(yīng)后轉(zhuǎn)入0023H開(kāi)始執(zhí)行服務(wù)程序,首先必須判斷是RI中斷還是TI中斷,然后進(jìn)行相應(yīng)服務(wù)。
在返回主程序之前需用軟件清除RI或TI,否則會(huì)出現(xiàn)一次請(qǐng)求多次響應(yīng)的錯(cuò)誤。(一)中斷源及相關(guān)的專(zhuān)用寄存器4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明
電平觸發(fā)方式
CPU在每個(gè)機(jī)器周期的S5P2采樣INT0和INT1的輸入電平,在電平觸發(fā)方式下,單片機(jī)中沒(méi)有專(zhuān)門(mén)的中斷請(qǐng)求標(biāo)志,外部中斷申請(qǐng)觸發(fā)器的狀態(tài)隨著CPU在每個(gè)機(jī)器周期采樣到的外部中斷輸入線的電平變化而變化,同時(shí)單片機(jī)響應(yīng)中斷后,也不能自動(dòng)清除請(qǐng)求信號(hào)。(一)中斷源及相關(guān)的專(zhuān)用寄存器4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明對(duì)觸發(fā)信號(hào)的要求:觸發(fā)信號(hào)低電平必須保持足夠長(zhǎng)的時(shí)間,直到CPU響應(yīng)為止;但持續(xù)時(shí)間亦不能太長(zhǎng),在中斷返回之前必須撤去。
電平觸發(fā)方式(一)中斷源及相關(guān)的專(zhuān)用寄存器4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明
電平觸發(fā)方式
解決這個(gè)問(wèn)題的方法有兩種:
一是用具有相應(yīng)功能的接口芯片,如8255在選通輸入方式時(shí),當(dāng)外部數(shù)據(jù)被選通到其數(shù)據(jù)輸入寄存器時(shí),INTR變高,向80C51單片機(jī)發(fā)中斷請(qǐng)求,當(dāng)單片機(jī)讀取8255輸入數(shù)據(jù)寄存器中的內(nèi)容后,INTR自動(dòng)變低,INTX變高,撤消中斷請(qǐng)求。80C51(一)中斷源及相關(guān)的專(zhuān)用寄存器4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明
另一種方法是在單片機(jī)之外增設(shè)一個(gè)請(qǐng)求標(biāo)志(使用觸發(fā)器),如下圖所示,再配合相應(yīng)程序即可。
電平觸發(fā)方式80C51(一)中斷源及相關(guān)的專(zhuān)用寄存器4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明
電平觸發(fā)方式外部設(shè)置標(biāo)志的程序如下:MAIN:SETBP3.0CLRIT0SETBEX0SETBEAHERE:AJMPHERE(一)中斷源及相關(guān)的專(zhuān)用寄存器
電平觸發(fā)方式4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明WBINT:CLRP3.0MOVA,#0FFHMOVP1,AMOVA,P1SWAPAMOVP1,ASETBP3.0
RETI(一)中斷源及相關(guān)的專(zhuān)用寄存器4、關(guān)于外部中斷觸發(fā)方式的說(shuō)明
邊沿觸發(fā)方式
CPU在每個(gè)機(jī)器周期的S5P2采樣INT0和INT1的輸入電平,如果前一個(gè)周期采樣到為高電平,接著的下一個(gè)周期采樣到為低電平,則置位中斷請(qǐng)求標(biāo)志IE0或IE1(在TCON中),表示外部中斷源正在向CPU申請(qǐng)中斷,直到該中斷被響應(yīng)后,標(biāo)志IE1或IE0才被硬件清“0”。1、中斷使能控制
通過(guò)中斷允許寄存器IE進(jìn)行兩級(jí)控制:總控位EA和各中斷源允許位。IE各位安排如下圖IEEAET2ESET1EX1ET0EX0位地址AFADACABAAA9A80:關(guān)INT0中斷1:開(kāi)INT0中斷0:關(guān)T0中斷1:開(kāi)T0中斷0:關(guān)INT1中斷1:開(kāi)INT1中斷0:關(guān)T1中斷1:開(kāi)T1中斷0:關(guān)串行口中斷1:開(kāi)串行口中斷0:關(guān)T2中斷1:開(kāi)T2中斷0:關(guān)CPU中斷1:開(kāi)CPU中斷(二)80C51單片機(jī)對(duì)中斷請(qǐng)求的控制(二)80C51單片機(jī)對(duì)中斷請(qǐng)求的控制2、中斷優(yōu)先級(jí)控制80C51單片機(jī)對(duì)中斷優(yōu)先級(jí)的控制也分為兩級(jí):第一級(jí)軟件控制,由中斷優(yōu)先級(jí)寄存器IP的某位狀態(tài)為1或0決定相應(yīng)中斷源為高優(yōu)先級(jí)或低優(yōu)先級(jí)。第二級(jí)硬件控制,即由硬件查詢電路決定。(二)80C51單片機(jī)對(duì)中斷請(qǐng)求的控制2、中斷優(yōu)先級(jí)控制IP各位的定義如下圖所示(二)80C51單片機(jī)對(duì)中斷請(qǐng)求的控制2、中斷優(yōu)先級(jí)控制
對(duì)于同一優(yōu)先級(jí)的各中斷源的優(yōu)先順序,由內(nèi)部硬件查詢電路規(guī)定為:INT0T0INT1T1串行口中斷RI/TIT2(二)80C51單片機(jī)對(duì)中斷請(qǐng)求的控制3、中斷系統(tǒng)結(jié)構(gòu)示意圖(三)80C51單片機(jī)對(duì)中斷的響應(yīng)1、中斷響應(yīng)的條件
單片機(jī)在每個(gè)機(jī)器周期對(duì)所有的中斷源進(jìn)行順序檢測(cè),當(dāng)發(fā)現(xiàn)有中斷源請(qǐng)求,便根據(jù)下列條件決定是否響應(yīng)。80C51單片機(jī)中斷響應(yīng)條件是:中斷源有請(qǐng)求,中斷允許寄存器IE相應(yīng)位置“1”,CPU開(kāi)中斷(EA=1)且:(三)80C51單片機(jī)對(duì)中斷的響應(yīng)(1)
CPU不在處理同級(jí)的或更高優(yōu)先級(jí)的中斷;(2)現(xiàn)行的機(jī)器周期是所執(zhí)行指令的最后一個(gè)機(jī)器周期;(3)
CPU正在執(zhí)行的指令不是RETI或任何訪問(wèn)IE/IP的指令。
同時(shí)滿足上述三個(gè)條件的情況下,80C51單片機(jī)才可響應(yīng)中斷源的請(qǐng)求。1、中斷響應(yīng)的條件(三)80C51單片機(jī)對(duì)中斷的響應(yīng)2、中斷響應(yīng)的過(guò)程
當(dāng)單片機(jī)判明有中斷請(qǐng)求,并滿足響應(yīng)條件時(shí),便在下一個(gè)機(jī)器周期的S1狀態(tài)開(kāi)始響應(yīng)最高優(yōu)先級(jí)的中斷源的請(qǐng)求。在響應(yīng)中斷的過(guò)程中,80C51單片機(jī)必須做以下三件事:(三)80C51單片機(jī)對(duì)中斷的響應(yīng)2、中斷響應(yīng)的過(guò)程
(1)將相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器置位(指明CPU開(kāi)始處理的中斷優(yōu)先級(jí)別)。(2)清中斷標(biāo)志(TI和RI除外)。(3)執(zhí)行一個(gè)硬件子程序:把中斷的斷點(diǎn)地址,也就是當(dāng)前程序計(jì)數(shù)器PC中的內(nèi)容壓入堆棧,將相應(yīng)的中斷服務(wù)程序的入口送給PC。(三)80C51單片機(jī)對(duì)中斷的響應(yīng)3、外部中斷的響應(yīng)時(shí)間80C51單片機(jī)在每個(gè)機(jī)器的S5P2期間對(duì)INT0和INT1進(jìn)行檢測(cè),如果發(fā)現(xiàn)有中斷請(qǐng)求,又能滿足響應(yīng)的條件,便在下一個(gè)機(jī)器周期的S1狀態(tài)開(kāi)始應(yīng)答:先執(zhí)行一個(gè)內(nèi)部硬件子程序--占用兩個(gè)機(jī)器周期,因此從外部發(fā)出中斷請(qǐng)求信號(hào)到執(zhí)行中斷服務(wù)程序的第一條指令至少需要三個(gè)完整的機(jī)器周期。(三)80C51單片機(jī)對(duì)中斷的響應(yīng)3、外部中斷的響應(yīng)時(shí)間討論:(1)如果現(xiàn)行的機(jī)器周期是本指令的最后一個(gè)周期,又無(wú)前述的其它響應(yīng)條件所阻止,CPU馬上響應(yīng),需要三個(gè)機(jī)器周期。(三)80C51單片機(jī)對(duì)中斷的響應(yīng)3、外部中斷的響應(yīng)時(shí)間
(2)如果現(xiàn)行的機(jī)器周期不是本指令的最后一個(gè)機(jī)器周期,則可能會(huì)增加1~3個(gè)周期,因?yàn)?0C51單片機(jī)指令最長(zhǎng)執(zhí)行時(shí)間為4個(gè)機(jī)器周期,這樣響應(yīng)時(shí)間為4~6個(gè)機(jī)器周期。討論:(三)80C51單片機(jī)對(duì)中斷的響應(yīng)3、外部中斷的響應(yīng)時(shí)間討論:(3)如果CPU正在執(zhí)行的是RETI或是訪問(wèn)IE、IP寄存器的指令,則單片機(jī)需要再執(zhí)行一條其它指令才會(huì)響應(yīng)中斷。當(dāng)然這條指令可以是1~4個(gè)機(jī)器周期,所以這種情況下,可能會(huì)增加5個(gè)機(jī)器周期。(三)80C51單片機(jī)對(duì)中斷的響應(yīng)3、外部中斷的響應(yīng)時(shí)間討論:
所以,一個(gè)單級(jí)外部中斷,單片機(jī)響應(yīng)時(shí)間為3~8個(gè)機(jī)器周期,如果fosc=6MHz,則響應(yīng)時(shí)間為6~16us。中斷系統(tǒng)的應(yīng)用主要是編程,下面先說(shuō)明設(shè)計(jì)中斷服務(wù)程序時(shí)應(yīng)注意的一些問(wèn)題。80C51單片機(jī)有5個(gè)中斷源,由4個(gè)特殊功能寄存器TCON、SCON、IE和IP進(jìn)行管理和控制。其中TCON和SCON用來(lái)鎖存5個(gè)中斷源的中斷請(qǐng)求信號(hào)。關(guān)于中斷程序的編制二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制
IE用來(lái)控制CPU和5個(gè)中斷源請(qǐng)求允許和禁止。IP用來(lái)對(duì)5個(gè)中斷源的優(yōu)先級(jí)別進(jìn)行管理。TCON的第0位(IT0)和第2位(IT1),用來(lái)控制外部中斷的觸發(fā)方式。80C52單片機(jī)增加了一個(gè)T2。由T2CON進(jìn)行控制,中斷請(qǐng)求標(biāo)志位是T2CON的第7位(TF2)和第6位(EXF2),使能控制是IE的第5位(ET2),優(yōu)先級(jí)控制是IP寄存器的第5位(PT2)。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制從軟件角度看,中斷控制實(shí)質(zhì)上就是對(duì)這幾個(gè)寄存器的管理和控制,主要項(xiàng)目有:①
CPU開(kāi)中斷與關(guān)中斷。②
某一中斷源中斷請(qǐng)求的允許與禁止。③各中斷源優(yōu)先級(jí)別的設(shè)定。④外部中斷請(qǐng)求的觸發(fā)方式的設(shè)定。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制(1)中斷控制程序
中斷程序一般包含中斷控制程序和中斷服務(wù)程序兩部分。
中斷控制程序即中斷初始化程序,一般不獨(dú)立編寫(xiě),而是包含在主程序中,根據(jù)需要通過(guò)幾條指令來(lái)實(shí)現(xiàn)。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制例如設(shè)置INT0和串口中斷為高優(yōu)先級(jí)INT1為低優(yōu)先級(jí)。屏蔽T0和T1中斷請(qǐng)求的程序。編程如下:MOVIP,#00010001BMOVIE,#10010101B(1)中斷控制程序二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制(2)中斷服務(wù)程序
中斷服務(wù)程序是為中斷源的特定事件服務(wù)的獨(dú)立程序段,以中斷返回指令RETI結(jié)束。在程序存儲(chǔ)器中有五個(gè)固定的單元作為中斷服務(wù)程序的入口,即是0003H、000BH、0013H、001BH及0023H單元。每?jī)蓚€(gè)入口地址之間間隔8個(gè)單元。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例如果中斷服務(wù)程序少于8個(gè)字節(jié),可以放在其中。否則,應(yīng)將中斷服務(wù)程序存放在程序存儲(chǔ)器的其它部位,而在相應(yīng)入口處安排一條無(wú)條件轉(zhuǎn)移指令。這樣,當(dāng)CPU響應(yīng)中斷后,就執(zhí)行該無(wú)條件轉(zhuǎn)移指令,轉(zhuǎn)向?qū)嶋H的中斷服務(wù)程序的入口。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制(2)中斷服務(wù)程序二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制(2)中斷服務(wù)程序中斷服務(wù)程序和子程序一樣,也有一個(gè)保護(hù)/恢復(fù)斷點(diǎn)和現(xiàn)場(chǎng)的問(wèn)題。斷點(diǎn)的保護(hù)是由硬件電路自動(dòng)實(shí)現(xiàn);而現(xiàn)場(chǎng)保護(hù)卻要由中斷服務(wù)程序來(lái)進(jìn)行。因此在編寫(xiě)中斷服務(wù)程序時(shí)必須考慮保護(hù)現(xiàn)場(chǎng)的問(wèn)題,方法與子程序相同。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例關(guān)于中斷程序的編制(2)中斷服務(wù)程序在允許中斷嵌套的情況下,為了不至于在保護(hù)現(xiàn)場(chǎng)或恢復(fù)現(xiàn)場(chǎng)時(shí),由于CPU響應(yīng)其它中斷請(qǐng)求而使現(xiàn)場(chǎng)被破壞。在編寫(xiě)程序時(shí),應(yīng)在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)之前,關(guān)閉CPU中斷;在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)之后,再根據(jù)需要使CPU開(kāi)中斷。下面通過(guò)具體例子來(lái)說(shuō)明中斷程序的設(shè)計(jì)方法。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例1利用80C51單片機(jī)的外部中斷實(shí)現(xiàn)系統(tǒng)的單步操作。解:一般單片機(jī)的開(kāi)發(fā)系統(tǒng)都有單步運(yùn)行用戶程序的功能。在調(diào)試程序時(shí),每按一次單步執(zhí)行鍵,CPU就執(zhí)行一條用戶程序的指令,之后進(jìn)入暫停等待狀態(tài),還顯示累加器中的內(nèi)容和下條指令的地址。這是利用單片機(jī)的外部中斷,配上簡(jiǎn)單硬件(如下圖),再經(jīng)適當(dāng)編程實(shí)現(xiàn)的。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例1下圖中,INT0設(shè)為電平觸發(fā)方式,INT0引腳平時(shí)為低電平,單片機(jī)處于中斷服務(wù)中。用戶一次按鍵出現(xiàn)一個(gè)正脈沖,CPU在中斷服務(wù)程序中檢測(cè)到一個(gè)正脈沖便返回主程序執(zhí)行一條用戶程序指令,又得響應(yīng)中斷,等待用戶按鍵,實(shí)現(xiàn)了單步操作。利用80C51單片機(jī)的外部中斷實(shí)現(xiàn)系統(tǒng)的單步操作。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例1利用80C51單片機(jī)的外部中斷實(shí)現(xiàn)系統(tǒng)的單步操作。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例1利用80C51單片機(jī)的外部中斷實(shí)現(xiàn)系統(tǒng)的單步操作。初始化程序?yàn)椋?/p>
CLR
IT0
;設(shè)INT0為電平觸發(fā)SETB
EA
;CPU開(kāi)中斷SETB
PX0
;置為高中斷優(yōu)先級(jí)SETB
EX0
;允許INT0中斷二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例1利用80C51單片機(jī)的外部中斷實(shí)現(xiàn)系統(tǒng)的單步操作。中斷服務(wù)程序
:┋;顯示必要的數(shù)據(jù)HIGH:JNBP3.2,HIGH;等待引腳為高電平LOW:JB
P3.2,LOW;再等待引腳為低電平RETI
;中斷返回例2利用80C51將開(kāi)關(guān)所設(shè)置的數(shù)據(jù)讀入后驅(qū)動(dòng)發(fā)光二極管。將下圖中P1口的P1.7~P1.4設(shè)置成輸入,P1.3~P1.0設(shè)置成輸出?,F(xiàn)要求利用80C51將開(kāi)關(guān)所設(shè)置的數(shù)據(jù)讀入后分別通過(guò)P1.3~P1.0輸出,驅(qū)動(dòng)發(fā)光二極管,以檢查P1.7~P1.4輸入電平的情況。要求采用外部中斷方式,每邊沿觸發(fā)一次,完成一次讀、寫(xiě)任務(wù)。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例2利用80C51將開(kāi)關(guān)所設(shè)置的數(shù)據(jù)讀入后驅(qū)動(dòng)發(fā)光二極管。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例例2利用80C51將開(kāi)關(guān)所設(shè)置的數(shù)據(jù)讀入后驅(qū)動(dòng)發(fā)光二極管。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例程序清單如下:
ORG0000HAJMPGAFN
;轉(zhuǎn)向主程序
ORG0003H
;外部中斷0入口地址
AJMPPAUSEO
;轉(zhuǎn)向中斷服務(wù)程序解:由圖可見(jiàn),中斷請(qǐng)求從INT0輸入,并采用了去抖動(dòng)電路。當(dāng)P1.3~P1.0的任何一位輸出為1時(shí),就會(huì)使相應(yīng)的發(fā)光二極管發(fā)光。例2利用80C51將開(kāi)關(guān)所設(shè)置的數(shù)據(jù)讀入后驅(qū)動(dòng)發(fā)光二極管。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例主程序:
ORG1100HGAFN:SETBEA
;允許中斷DEFG:AJMPDEFG
;等待中斷例2利用80C51將開(kāi)關(guān)所設(shè)置的數(shù)據(jù)讀入后驅(qū)動(dòng)發(fā)光二極管。二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例中斷服務(wù)程序:
ORG1200HPAUSEO:MOVA,#0FFH
;設(shè)P1為輸入狀態(tài)MOVP1,AMOVA,P1
;讀開(kāi)關(guān)數(shù)據(jù)SWAPA
;(A)的高4位與低4位內(nèi)容交換MOVP1,A
;驅(qū)動(dòng)LED發(fā)光RETI例3二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例80C51利用查詢法擴(kuò)展外部中斷源。如果80C51單片機(jī)應(yīng)用系統(tǒng)需要的外部中斷源較多時(shí),可以采用查詢法來(lái)擴(kuò)展外部中斷源。下圖為支持電路。例3二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例利用查詢法擴(kuò)展外部中斷源。解:XI1~XI4經(jīng)由4個(gè)OC門(mén)電路組成“線或”電路,“線或”后接到INT1端。這就是說(shuō),如果在4個(gè)外中斷源XI1~XI4中有1個(gè)或幾個(gè)出現(xiàn)高電平,則“線或”輸出為低電平,從而引起INT1中斷。由于XI1~XI4還分別與P1.0~P1.3相連,因此通過(guò)查詢P1.0~P1.3便可識(shí)別中斷源。例3二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例利用查詢法擴(kuò)展外部中斷源。EXINT:PUSHPSWPUSHACC下面給出INT1的中斷服務(wù)程序:JBP1.0,SAV1JBP1.1,SAV2JBP1.2,SAV3JBP1.3,SAV4DISUB:POPACCPOPPSWRETI例3二、80C51單片機(jī)的中斷系統(tǒng)應(yīng)用舉例利用查詢法擴(kuò)展外部中斷源。SAV1:…AJMPDISUBSAV2:…AJMPDISUBSAV3:…AJMPDISUBSAV4:…AJMPDISUB例4二、80C51單片
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)語(yǔ)文六年級(jí)上冊(cè)教案
- 企業(yè)財(cái)務(wù)審計(jì)管理中的風(fēng)險(xiǎn)控制
- 海洋資源驗(yàn)收管理辦法
- 企業(yè)團(tuán)隊(duì)建設(shè)行政人事部策略
- 民生改善提案管理辦法
- 互聯(lián)網(wǎng)金融服務(wù)招投標(biāo)合同模板
- 汽車(chē)物流倉(cāng)儲(chǔ)協(xié)議
- 建筑空調(diào)工程延期合同協(xié)議書(shū)
- 專(zhuān)利權(quán)交易合同
- 河道綜合治理工程合同
- PTN測(cè)試操作指引
- 220KV線路運(yùn)維實(shí)施方案
- 第十二講溝通
- 松木樁施工方案
- 劇院建筑設(shè)計(jì)規(guī)范標(biāo)準(zhǔn)
- 磁絮凝沉淀技術(shù)(課堂PPT)
- 收貨確認(rèn)回執(zhí)單.docx
- 鋼筋籠(螺旋箍筋)工程量自動(dòng)計(jì)算表
- 電氣設(shè)備防爆管理標(biāo)準(zhǔn)
- 2019學(xué)生讀書(shū)計(jì)劃表
- 上海市徐匯區(qū)初三英語(yǔ)二模精美含答案聽(tīng)力材料
評(píng)論
0/150
提交評(píng)論