定時計數(shù)器及其應(yīng)用_第1頁
定時計數(shù)器及其應(yīng)用_第2頁
定時計數(shù)器及其應(yīng)用_第3頁
定時計數(shù)器及其應(yīng)用_第4頁
定時計數(shù)器及其應(yīng)用_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

定時計數(shù)器及其應(yīng)用第一頁,共六十八頁,編輯于2023年,星期日

定時/計數(shù)器是單片機系統(tǒng)一個重要的部件,其工作方式靈活、編程簡單、使用方便,可用來實現(xiàn)定時控制、延時、頻率測量、脈寬測量、信號發(fā)生、信號檢測等。此外,定時/計數(shù)器還可作為串行通信中波特率發(fā)生器。80C51定時/計數(shù)器第二頁,共六十八頁,編輯于2023年,星期日在工業(yè)檢測、控制中,很多場合都要用到計數(shù)或者定時功能。例如對外部脈沖進行計數(shù)、產(chǎn)生精確的定時時間、作串行口的波特率發(fā)聲器等。MCS-51單片機內(nèi)部有兩個可編程的定時器/計數(shù)器,以滿足這方面的需要。它們具有兩種工作模數(shù)(計數(shù)器模式、定時器模式)和四種工作方式(方式0、方式1、方式2、方式3),其控制字均在相應(yīng)的特殊功能寄存器(SFR)中,通過對它的SFR的編程,可以方便的選擇工作模數(shù)和工作方式。第三頁,共六十八頁,編輯于2023年,星期日定時器/計數(shù)器:Timer/Counter

本質(zhì)上都是加法計數(shù)器,當(dāng)對固定周期的脈沖信號計數(shù)時是定時器,對脈沖長度不確定的信號計數(shù)時是計數(shù)器。每接收到一個計數(shù)脈沖,加法計數(shù)器的值就加一,當(dāng)計滿時發(fā)生溢出,并從0開始繼續(xù)計數(shù)。加法計數(shù)器的計滿溢出信號就是定時/計數(shù)器的輸出,該信號使TCON的某位(TF0或TF1位)置一,作為定時器/計數(shù)器的溢出中斷標(biāo)志。第四頁,共六十八頁,編輯于2023年,星期日1.定時/計數(shù)器的結(jié)構(gòu)6.1定時器的結(jié)構(gòu)及工作原理內(nèi)部總線工作方式工作方式TH

1TL

1TH

0TL

0TCONTMODT

1(P3.5)T

0(P3.4)微處理器定時器:對片內(nèi)機器時鐘(周期方波)進行計數(shù)計數(shù)器:對Tx引腳輸入的負脈沖進行計數(shù)第五頁,共六十八頁,編輯于2023年,星期日80C51單片機內(nèi)部有兩個定時/計數(shù)器T0和T1,其核心是計數(shù)器,基本功能是加1。對外部事件脈沖(下降沿)計數(shù),是計數(shù)器;對片內(nèi)機周脈沖計數(shù),是定時器。計數(shù)器由二個8位計數(shù)器組成。定時時間和計數(shù)值可以編程設(shè)定,其方法是在計數(shù)器內(nèi)設(shè)置一個初值,然后加1計滿后溢出。調(diào)整計數(shù)器初值,可調(diào)整從初值到計滿溢出的數(shù)值,即調(diào)整了定時時間和計數(shù)值。定時/計數(shù)器作為計數(shù)器時,外部事件脈沖必須從規(guī)定的引腳輸入。且外部脈沖的最高頻率不能超過時鐘頻率的1/24。2.定時/計數(shù)器概述第六頁,共六十八頁,編輯于2023年,星期日定時器計數(shù)器的功能:定時和計數(shù)。1.計數(shù)功能

計數(shù):對外部事件進行計數(shù)。

外部事件的發(fā)生以輸入脈沖表示,因此計數(shù)功能的實質(zhì)就是對外來脈沖進行計數(shù)。

計數(shù)輸入端:T0(P3.4)和T1(P3.5)。

外部輸入的脈沖在負跳變時有效,進行計數(shù)器加1(加法計數(shù))。第七頁,共六十八頁,編輯于2023年,星期日第八頁,共六十八頁,編輯于2023年,星期日2.定時功能實現(xiàn)方法:通過計數(shù)器的計數(shù)實現(xiàn)。與計數(shù)功能的不同之處:計數(shù)脈沖來自單片機的內(nèi)部,即每個機器周期產(chǎn)生一個計數(shù)脈沖,也就是每個機器周期計數(shù)器加1。一個機器周期=12個振蕩周期,故,計數(shù)頻率為振蕩頻率的1/12。若:單片機晶振=6MHz,則計數(shù)頻率為0.5MHz,

2微秒計數(shù)器加1.第九頁,共六十八頁,編輯于2023年,星期日

定時器工作方式的特點:當(dāng)定時器設(shè)置了某種工作方式之后,定時器就會按設(shè)定的工作方式獨立運行,不再占用CPU的操作時間,除非定時器計滿溢出,才可能中斷CPU當(dāng)前操作。

因此,定時器/計數(shù)器是一種可編程部件。編程:在定時器/計數(shù)器開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時器/計數(shù)器,決定T0、T1的工作方式。第十頁,共六十八頁,編輯于2023年,星期日將控制字寫入定時器/計數(shù)器的過程叫定時器/計數(shù)器的初始化。

初始化內(nèi)容:

規(guī)定T0、T1的工作方式;

將工作方式控制字寫入方式寄存器

規(guī)定T0、T1的工作狀態(tài);將工作狀態(tài)控制字寫入控制寄存器

賦定時/計數(shù)初值。第十一頁,共六十八頁,編輯于2023年,星期日高4位控制T1低4位控制T0門控位計數(shù)/定時方式選擇工作方式選擇門控位計數(shù)/定時方式選擇工作方式選擇GC/TM1M0GC/TM1M0TMOD用于設(shè)定定時/計數(shù)器的工作方式低4位用于控制T0,高4位用于控制T1。1.工作方式控制寄存器TMOD⑴M1M0——工作方式選擇位M1M0工作方式功能00方式013位計數(shù)器,TH高8位和TL低5位01方式116位計數(shù)器10方式2兩個8位計數(shù)器,初值自動裝入11方式3兩個8位計數(shù)器,僅適用T06.2定時器的控制第十二頁,共六十八頁,編輯于2023年,星期日⑵C/T——計數(shù)/定時方式選擇位

C/T=1,計數(shù)工作方式,對外部事件脈沖計數(shù),用作計數(shù)器。

C/T=0,定時工作方式,對片內(nèi)機周脈沖計數(shù),用作定時器。⑶GATE——門控位

GATE=0,運行只受TCON中運行控制位TR0/TR1的控制。

GATE=1,運行同時受TR0/TR1和外中斷輸入信號的雙重控制。只有當(dāng)INT0/INT1=1且TR0/TR1=1,T0/T1才能運行。

TMOD字節(jié)地址89H,不能位操作,設(shè)置TMOD須用字節(jié)操作指令。第十三頁,共六十八頁,編輯于2023年,星期日設(shè)定時器1為定時工作方式,要求由軟件啟動定時器1,按方式2工作。定時器0為計數(shù)方式,要求由軟件啟動定時器0,按方式1工作。

MOVTMOD,#25H。

位序號

D7D6D5D4

D3D2D1D0位符號GATE

0C/T0M10M00GATE0C/T1M10M01第十四頁,共六十八頁,編輯于2023年,星期日TCON低4位與外中斷、有關(guān),已在中斷中敘述。高4位與定時/計數(shù)器T0、T1有關(guān)。⑴TF1:定時/計數(shù)器T1溢出標(biāo)志。⑵TF0:定時/計數(shù)器T0溢出標(biāo)志。⑶TR1:定時/計數(shù)器T1運行控制位。TR1=1,T1運行;TR1=0,T1停。⑷TR0:定時/計數(shù)器T0運行控制位。TR0=1,T0運行;TR0=0,T0停。TCON的字節(jié)地址為88H,每一位有位地址,均可位操作。2.控制寄存器TCONTCONT1中斷標(biāo)志T1運行標(biāo)志T0中斷標(biāo)志T0運行標(biāo)志INT1中斷標(biāo)志INT1觸發(fā)方式INT0中斷標(biāo)志INT0觸發(fā)方式位名稱TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H第十五頁,共六十八頁,編輯于2023年,星期日6.3定時器/計數(shù)器的四種工作方式四種工作方式:即方式0、方式1、方式2和方式3。其中:方式0、1和2下,T0和T1的工作方式相同,方式3下,兩個定時器的工作方式不同。6.3.1方式013位計數(shù)結(jié)構(gòu)的工作方式。圖6-2是定時器/計數(shù)器0在工作方式0下的邏輯結(jié)構(gòu)。

T1的結(jié)構(gòu)和操作與T0完全相同。第十六頁,共六十八頁,編輯于2023年,星期日計數(shù)脈沖輸入定時器/計數(shù)器共有四種工作方式1.方式0—13位方式TF0T0TR0GATEINT01≥1&C/T=1振蕩器1/12C/T=0TL0TH08位低5位13位計數(shù)器定時器計數(shù)器第十七頁,共六十八頁,編輯于2023年,星期日定時時間的計算公式為:

T=(MT0初值)×振蕩周期×

12(或TC=MT/T0)其中:T——定時器的定時時間,即設(shè)計任務(wù)要求的定時時間;

M——計數(shù)器的模值;

T0——定時器需要預(yù)置的初值。若設(shè)初值T0=0,則定時器定時時間為最大。若設(shè)單片機系統(tǒng)主頻為12MHz,則各種工作方式定時器的最大定時時間為:工作方式0:Tmax=213×1s=8.192ms工作方式1:Tmax=216×1s=65.536ms工作方式2和3:Tmax=28×1s=0.256ms第十八頁,共六十八頁,編輯于2023年,星期日當(dāng)GATE=0時,

若TR0=1,接通計數(shù)控制K,啟動T0在原計數(shù)值上加1計數(shù),直至溢出。若TR0=0,則關(guān)斷控制開關(guān),停止計數(shù)。當(dāng)GATE=1,且TR0=1時,

或門、與門全部打開,外信號電平通過引腳直接開啟或關(guān)斷定時器計數(shù)。輸入1電平時,允許計數(shù),否則停止計數(shù)。第十九頁,共六十八頁,編輯于2023年,星期日由于定時器/計數(shù)器以加1方式計數(shù),當(dāng)定時器/計數(shù)器用于計數(shù)工作方式時,假定要求的計數(shù)長度為N,則應(yīng)裝入定時器/計數(shù)器的初值

X=213-N。在方式0下,計數(shù)的長度范圍為1~8192。

第二十頁,共六十八頁,編輯于2023年,星期日當(dāng)工作于定時狀態(tài)時,由于定時器/計數(shù)器是計數(shù)內(nèi)部的機器周期,每個機器周期包括12個振蕩周期,若晶振頻率為6MHz,則:機器周期Tp=12/晶振頻率=12/(6×106)=2us若需要的定時時間:Tc,則需要的機器周期數(shù)N=Tc/Tp。則應(yīng)裝入定時器/計數(shù)器的初值X=213-N。若晶振頻率為6MHz,則當(dāng)X=8191時,具有最小的定時時間為2us;當(dāng)X=0時,具有最大的定時時間為16384us。第二十一頁,共六十八頁,編輯于2023年,星期日其中:N與工作方式有關(guān):方式0時,N=13;

方式1時,N=16;

方式2、3時,N=8。 機周時間與主振頻率有關(guān):機周時間=12/fosc

fosc=12MHZ時,1機周=1S;

fosc=6MHZ

時,1機周=2S。80C51定時/計數(shù)初值計算公式:第二十二頁,共六十八頁,編輯于2023年,星期日解:⑴工作方式0:

213–500S/2S=8192-250=7942=1F06H 1F06H化成二進制: 1F06H=0001111100000110B =00011111000

00110B其中:低5位00110前添加3位000送入TL0 TL0=00000110B=06H;

高8位11111000B送入TH0TH0=11111000B=F8H?!纠恳阎д?MHz,要求定時0.5ms,試分別求出T0工作于方式0、方式1、方式2、方式3時的定時初值。第二十三頁,共六十八頁,編輯于2023年,星期日⑵工作方式1:

T0初值=216-500s/2s=65536–250=65286=FF06HTH0=FFH;TL0=06H。⑶工作方式2:

T0初值=28-500s/2s=256-250=6TH0=06H;TL0=06H。⑷工作方式3:

T0方式3時,被拆成兩個8位定時器,定時初值可分別計算,計算方法同方式2。兩個定時初值一個裝入TL0,另一個裝入TH0。因此:

TH0=06H;TL0=06H。從上例中看到,方式0時計算定時初值比較麻煩,根據(jù)公式計算出數(shù)值后,還要變換一下,容易出錯,不如直接用方式1,且方式0計數(shù)范圍比方式1小,方式0完全可以用方式1代替,方式0與方式1相比,無任何優(yōu)點。第二十四頁,共六十八頁,編輯于2023年,星期日6.3.2方式1計數(shù)器由TH8位和TL8位構(gòu)成。當(dāng)定時器/計數(shù)器用于計數(shù)工作方式時,假定要求的計數(shù)長度為N,則應(yīng)裝入定時器/計數(shù)器的初值X=216-N。在方式0下,計數(shù)的長度范圍為1~65536。當(dāng)工作于定時狀態(tài)時,若需要的定時時間為Tc,則需要的機器周期數(shù)N=Tc/Tp(Tp=機器周期),則應(yīng)裝入定時器/計數(shù)器的初值X=216-N。若晶振頻率為6MHz,則當(dāng)X=65535時,具有最小的定時時間為2us;當(dāng)N=65536時,具有最大的定時時間為131072us≈131ms。第二十五頁,共六十八頁,編輯于2023年,星期日圖6-3T0(或T1)方式1結(jié)構(gòu)――16位計數(shù)器第二十六頁,共六十八頁,編輯于2023年,星期日例:設(shè)單片機晶振頻率fosc=6MHz,使用定時器1以方式1產(chǎn)生周期為500us的等寬正方波脈沖,并由P1.7輸出。以中斷方式完成。 (1)計算計數(shù)初值 設(shè)待求的計數(shù)初值為X,則: (216-X)×2us=250us

得:X=65411=FFA1H,則:TH1=FFH,TL1=A1H。(2)TMOD寄存器初始化

第二十七頁,共六十八頁,編輯于2023年,星期日位序號

D7D6D5D4

D3D2D1D0位符號GATEC/TM1M0GATEC/TM1M000100000M1M0=10,C/T=0,GATE=0

所以:TMOD=10H第二十八頁,共六十八頁,編輯于2023年,星期日(3)程序清單:

ORG 0000H AJMP MAIN

ORG 001BH

AJMP TIMER1 ORG 1000HMAIN:MOV TMOD,#10H ;設(shè)置T1工作方式1 MOV TH1, #0FFH ;設(shè)置計數(shù)初值

MOV TL1, #A1H ;

SETB EA ;開中斷第二十九頁,共六十八頁,編輯于2023年,星期日

SETB ET1 ;定時器1允許中斷LOOP: SETB TR1 ;定時開始HERE:SJMP$ ;等待中斷

TIMER1:MOV TH1,#0FFH

;T1中斷服務(wù)程序 ;重新設(shè)置計數(shù)初值

MOV TL1, #A1H

;

CPL P1.7 RETI END ;程序結(jié)束第三十頁,共六十八頁,編輯于2023年,星期日6.3.3.方式2方式2具有自動重新加載功能,即自動加載計數(shù)初值。在該工作方式下,把16位計數(shù)器分為兩部分,即以TL作計數(shù)器,以TH作預(yù)置寄存器,初始化時把計數(shù)初值分別裝入TL和TH中。當(dāng)計數(shù)溢出時,由預(yù)置寄存器TH以硬件方法自動給計數(shù)器TL重新加載,繼續(xù)計數(shù),循環(huán)重復(fù)。第三十一頁,共六十八頁,編輯于2023年,星期日當(dāng)定時器/計數(shù)器用于計數(shù)工作方式時,假定要求的計數(shù)長度為N,則應(yīng)裝入定時器/計數(shù)器的初值X=28-N。在方式0下,計數(shù)的長度范圍為1~256。當(dāng)工作于定時狀態(tài)時,若需要的定時時間為Tc,則需要的機器周期數(shù)N=Tc/Tp,(Tp為機器周期),則應(yīng)裝入定時器/計數(shù)器的初值X=28-N。若晶振頻率為6MHz,則當(dāng)X=255時,具有最小的定時時間為2us;當(dāng)X=0時,具有最大的定時時間為512us。

第三十二頁,共六十八頁,編輯于2023年,星期日圖6-4T0(或T1)方式2結(jié)構(gòu)――8位計數(shù)器第三十三頁,共六十八頁,編輯于2023年,星期日例:有一自動罐裝藥粒系統(tǒng),每瓶罐裝藥粒100片,每滿一瓶,累加器A加1操作,若滿200瓶,向P1.0輸出0,然后停止計數(shù)。要求用定時器1以工作方式2計數(shù)。(1)計算計數(shù)初值設(shè)待求的計數(shù)初值為X,則: (28-X)=100得: X=156=38H,

則: TH1=38H,TL1=38H。(2)TMOD寄存器初始化第三十四頁,共六十八頁,編輯于2023年,星期日

M1M0=10,=1,GATE=0

因此:TMOD=60H(3)程序清單:

ORG 1000H MOV TMOD,#60H ;設(shè)置T1工作方式

MOV TH1, #38H ;設(shè)置計數(shù)初值

MOV TL1, #38H 位序號

D7D6D5D4

D3D2D1D0位符號GATEC/TM1M0GATEC/TM1M001100000第三十五頁,共六十八頁,編輯于2023年,星期日

MOVA,#00H MOV IE, #00H ;禁止中斷

SETB TR1 ;啟動計數(shù)CHECK:JBC TF1,LOOP ;查詢計數(shù)溢出

AJMP CHECKLOOP:INC A

CJNE A,#200,CHECK CLR P1.0 ;清零P1.0 CLR TR1 ;停止計數(shù)器1的運行

END ;程序結(jié)束第三十六頁,共六十八頁,編輯于2023年,星期日

6.3.4.方式3

前三種工作方式下,T0和T1的設(shè)置和使用是完全相同的。但是在工作方式3下,二者的設(shè)置和使用卻是不同的,因此要分開介紹。 (1)在工作方式3下,T0被拆成兩個獨立的8位計數(shù)器TL0和TH0。其中TL0既可以作計數(shù)使用,又可以作定時使用。

T0的各控制位、引腳和中斷源,即、GATE、TR0、TF0

和T0(P3.4)引腳、(P3.2)引腳全歸它使用。功能和操作與方式1完全相同,而且邏輯電路結(jié)構(gòu)也很相似,如圖6-5所示。

第三十七頁,共六十八頁,編輯于2023年,星期日

圖6-5T0工作方式3邏輯結(jié)構(gòu)第三十八頁,共六十八頁,編輯于2023年,星期日而此時TH0只可用作簡單的定時器使用。而且由于T0的控制位已被TL0獨占,因此只好借用定時器/計數(shù)器1的控制位TR1和TF1,即以計數(shù)溢出去置位TF1,而定時的啟動和停止則受TR1的狀態(tài)控制。由于TL0既能作定時器使用也能作計數(shù)器使用,而TH0只能作定時器使用,卻不能作計數(shù)器使用。因此,在工作方式3下,定時器/計數(shù)器0可以構(gòu)成兩個定時器或一個定時器和一個計數(shù)器。

第三十九頁,共六十八頁,編輯于2023年,星期日(2)工作方式3下的定時器/計數(shù)器1

如果T0已工作在工作方式3,則T1只能工作在方式0、1或方式2下,因為它的運行控制位TR1及計數(shù)溢出標(biāo)志位TF1已被T0借用,如圖6-6所示。第四十頁,共六十八頁,編輯于2023年,星期日此時,T1通常是作為串行口的波特率發(fā)生器使用,以確定串行通信的速率。因為已經(jīng)沒有計數(shù)溢出標(biāo)志位TF1可供使用,因此只能把計數(shù)溢出直接送給串行口。若將T1強行設(shè)置為模式3,就會使T1立即停止工作。第四十一頁,共六十八頁,編輯于2023年,星期日例設(shè)定時器/計數(shù)器T0工作于方式3,TL0和TH0作為兩個獨立的8位定時/計數(shù)器分別產(chǎn)生250us和500us的定時中斷,使P1.1和P1.2產(chǎn)生500us和1000us的方波。設(shè)晶振頻率為6MHz。(1)計算計數(shù)初值

TL0的計數(shù)初值=256-250us/2us=131=83HTH0的計數(shù)初值=256-500us/2us=06H因此,TL0=83H,TH0=06H。

(2)TMOD寄存器初始化第四十二頁,共六十八頁,編輯于2023年,星期日

M1M0=11,=0,GATE=0,同時設(shè)T1工作于方式0因此:TMOD=03H位序號

D7D6D5D4

D3D2D1D0位符號GATEC/TM1M0GATEC/TM1M000000011第四十三頁,共六十八頁,編輯于2023年,星期日(3)程序清單:

ORG 0000H AJMPMAIN

ORG 000BH

;T0 AJMP TIMER0

ORG 001BH

;T1 AJMP TIMER1

ORG 1000HMAIN: MOV TMOD,#03H MOV TL0, #83H MOV TH0, #06H 第四十四頁,共六十八頁,編輯于2023年,星期日

SETB TR0 ;啟動定時器運行

SETB TR1 SETB ET0 ;允許定時/計數(shù)器中斷

SETB ET1 SETB EA ;總中斷允許

SJMP $ ;等待中斷

TIMER0: MOV TL0,#83H CPL P1.1 RETI TIMER1: MOV TH0, #06H CPL P1.2 RETI END 第四十五頁,共六十八頁,編輯于2023年,星期日

定時/計數(shù)器應(yīng)用步驟⑴合理選擇定時/計數(shù)器工作方式⑵計算定時/計數(shù)器定時初值(按上述公式計算)⑶編制應(yīng)用程序

①定時/計數(shù)器的初始化

包括定義TMOD、寫入定時初值、設(shè)置中斷系統(tǒng)、啟動定時/計數(shù)器運行等。②正確編制定時/計數(shù)器中斷服務(wù)程序

注意是否需要重裝定時初值,若需要連續(xù)反復(fù)使用原定時時間,且未工作在方式2,則應(yīng)在中斷服務(wù)程序中重裝定時初值。第四十六頁,共六十八頁,編輯于2023年,星期日【例】試用T1方式2編制程序,在P1.0引腳輸出周期為400S的脈沖方波,已知fosc=12MHZ。解:①計算定時初值

T1初值=28-200s/1s=256–200=56=38HTH1=38H;TL1=38H②設(shè)置TMOD:

0

0

10

0000B=20HT0控制位,與T1無關(guān)

T1方式2T1定時器

T1啟動與無關(guān)第四十七頁,共六十八頁,編輯于2023年,星期日③編制程序如下:

ORG 0000H

;復(fù)位地址

LJMP MAIN ;轉(zhuǎn)主程序

ORG 001BH

;T1中斷入口地址

LJMP IT1 ;轉(zhuǎn)T1中斷服務(wù)程序

ORG 0100H

;主程序首地址MAIN:

MOV TMOD,#20H ;置T1定時器方式2 MOV TL1,#38H ;置定時初值

MOV TH1,#38H ;置定時初值備份

MOV IP,#00001000B;置T1高優(yōu)先級

MOV IE,#0FFH ;全部開中

SETB TR1 ;T1運行

SJMP $ ;等待T1中斷

ORG0200H

;T1中斷服務(wù)程序首地址IT1:

CPLP1.0;輸出波形取反首地址

RETI;中斷返回第四十八頁,共六十八頁,編輯于2023年,星期日【課堂練習(xí)題】

參照以上例題工作方式2,按下列要求分別修改程序: ①脈沖方波從P3.0輸出; ②fosc=6MHz; ③脈沖方波脈寬為100s; ④用定時/計數(shù)器T0;第四十九頁,共六十八頁,編輯于2023年,星期日【例】已知晶振12MHZ,參閱圖5-15,要求利用定時器T0使圖中發(fā)光二極管D進行秒閃爍。

解:發(fā)光二極管進行秒閃爍。即一秒鐘一亮一暗,亮500ms,暗500ms。晶振12MHz,每機周1s,T0方式1最大定時只能65ms余。

取T0定時50ms,計數(shù)10次,即可實現(xiàn)500ms定時。

第五十頁,共六十八頁,編輯于2023年,星期日①計算定時初值

T0初值=216-50000s/1s=65536–50000=15536=3CB0HTH0=3CH;TL0=B0H。②設(shè)置TMOD:

0000

0

0

01B=01HT0方式1

T0

與無關(guān)

T1控制位第五十一頁,共六十八頁,編輯于2023年,星期日③編制程序如下:

ORG 0000H

;復(fù)位地址

LJMP MAIN ;轉(zhuǎn)主程序

ORG 000BH

;T0中斷入口地址

LJMP IT0 ;轉(zhuǎn)T0中斷服務(wù)程序

ORG 0100H

;主程序首地址MAIN:MOV TMOD,#01H ;置T0定時器方式1 MOV TH0,#3CH ;置T0初值50ms MOV TL0,#0B0H ; MOV IE,#10000010B;T0開中

MOV R7,#0AH ;置50ms計數(shù)器初值

SETB TR0 ;T0運行

SJMP $ ;等待中斷

ORG0200HITO:MOVTH0,#3CH;重置T0初值50msMOVTLO,#0BOH

DJNZR7,GORET

;判500ms到否?CPLP1.7;500ms到,輸出取反

MOVR7,#0AH;恢復(fù)50ms計數(shù)器初值GORET:RETI

第五十二頁,共六十八頁,編輯于2023年,星期日【例】已知fosc=6MHz,檢測T0引腳上的脈沖數(shù),并將1s內(nèi)的脈沖數(shù)顯示在顯示屏上,每隔1s刷新一次顯示值(設(shè)一秒內(nèi)脈沖數(shù)≤65535個)。

根據(jù)題目要求,T0用作計數(shù)器方式1,T1用作定時器方式1,定時100ms。

第五十三頁,共六十八頁,編輯于2023年,星期日3)編制程序如下:

ORG0000HLJMPMAIN;轉(zhuǎn)主程序

0RG000BHLJMPIT0;轉(zhuǎn)T0中斷服務(wù)程序

ORG001BHLJMPITl;轉(zhuǎn)T1中斷服務(wù)程序

ORG0100HMAIN:MOVSP,#60H;置堆棧

MOVTMOD,#15H;置T0計數(shù)器方式1,T1定時器方式1MOVTH0,#00H;置T0初值

MOVTL0,#00H;

MOVTH1,#3CH;置T1初值

MOVTL1,#0BOH;

SETBPT1;置T1為高優(yōu)先級

MOVIE,#10001101B;TO、串口不開中,其余開中

SETBTR0;TO啟動

SETBTRl;T1啟動

MOVR7,#OAH;置lOOms計數(shù)器初值LDIR:LCALLDIR;調(diào)用顯示子程序,并等待中斷

SJMPLDIR;循環(huán)顯示T0中斷服務(wù)程序沒有編寫.第五十四頁,共六十八頁,編輯于2023年,星期日

ORG0200H;T1中斷服務(wù)程序首地址ITl:MOVTHl,#3CH;重置T1初值

MOVTL1,#0BOH;

DJNZR7,GORET;判1s到否?1s未到轉(zhuǎn)返回

CLRTR0;1s到,T0停

MOV30H,TL0;記錄ls內(nèi)T0引腳脈沖個數(shù)

MOV31H,THO;

MOVTLO,#00H;脈沖計數(shù)器T0清0MOVTH0,#00H;

SETBTR0;TO重新運行

MOVR7,#0AH;恢復(fù)lOOms計數(shù)器初值

PUSHAcc;保護現(xiàn)場

PUSHPSW;

PUSHDPH;

PUSHDPL;

LCALLWORK;調(diào)用數(shù)據(jù)處理子程序

POPDPL;恢復(fù)現(xiàn)場

POPDPH;

POPPSW;

POPAcc;GORET:RETI;T1中斷返回

第五十五頁,共六十八頁,編輯于2023年,星期日【例】已知fosc=6MHz,試編寫24小時模擬電子鐘程序,秒分時數(shù)分別存在R1、R2、R3中,可直接調(diào)用顯示程序DIR。解:

ORG0000H;復(fù)位地址

LJMPIT0;轉(zhuǎn)主程序

ORG000BH;T0中斷入口地址

LJMPIT0;T0中斷,轉(zhuǎn)T0中斷服務(wù)子程序IT0ORG1000H;主程序首地址START:MOVR1,#0;秒計數(shù)器清0MOVR2,#0;分計數(shù)器清0MOVR3,#0;時計數(shù)器清0MOVR4,#0;500S計數(shù)器清0MOVR5,#0;100ms計數(shù)器清0MOVTMOD,#02H;置T0定時器方式2MOVTL0,#06H;置T0定時初值500SMOVTH0,#06H;用于自動恢復(fù)定時初值

SETBTR0;啟動T0WAIT:LCALLDIR;顯示時鐘時分秒并等待中斷

SJMPWAIT;循環(huán)顯示

ORG0200H;T0中斷服務(wù)程序首地址IT0:

MOVTH0,#3CH;重置T0初值50mSMOVTL0,#0B0H;DJNZR7,GORET;判500mS到否?

CPLP1.7;500mS到,輸出取反

MOVR7,#0AH;恢復(fù)50mS計數(shù)器初值GORET:RETI;第五十六頁,共六十八頁,編輯于2023年,星期日

ORG 2000H ;T0中斷服務(wù)子程序首地址IT0:

INC R4 ;500S計數(shù)器計數(shù)

CJNE R4,#200,IT01;判100ms滿否?IT01:

JC IT06 ;未滿100ms,轉(zhuǎn)返回

MOVR4,#0 ;滿100ms,500S計數(shù)器清0 INCR5 ;100ms計數(shù)器計數(shù)

CJNER5,#10,IT02 ;判1s滿否?IT02:

JC IT06 ;未滿1s,轉(zhuǎn)返回

MOV R5,#0 ;滿1s,100ms計數(shù)器清0 INC R1 ;秒計數(shù)器加1 CJNER1,#60,IT03 ;判60秒滿否?IT03:

JC IT06 ;未滿60秒,轉(zhuǎn)返回

MOV R1,#0 ;滿60秒,秒計數(shù)器清0INC R2 ;分計數(shù)器加1CJNE R2,#60,IT04 ;判60分滿否?IT04:

JC IT06 ;未滿60分,轉(zhuǎn)返回

MOV R2,#0 ;滿60分,分計數(shù)器清0INC R3 ;時計數(shù)器加1CJNE R3,#24,IT05 ;判24小時滿否?IT05:

JC IT06 ;未滿24小時,轉(zhuǎn)返回

MOV R3,#0 ;滿24小時,時計數(shù)器清0IT06:

RETI ;返回第五十七頁,共六十八頁,編輯于2023年,星期日解:利用定時/計數(shù)器T0擴展成外中斷時須有兩個條件:

一是外部觸發(fā)脈沖從P3.4輸入(下降沿有效);

二是將定時/計數(shù)器設(shè)置成計數(shù)臨界狀態(tài),即定時初值為FFH,再來一個脈沖即能溢出觸發(fā)中斷。【例】因外中斷INT0、INT1已被占用,試利用定時/計數(shù)器T0擴展成外中斷。第五十八頁,共六十八頁,編輯于2023年,星期日編程如下:

ORG0000H

;復(fù)位地址

LJMPSTART;復(fù)位,轉(zhuǎn)初始化程序START

ORG000BH

;T0中斷入口地址

LJMPIT0;轉(zhuǎn)T0中斷服務(wù)子程序IT0

ORG1000H

;初始化程序首地址START:

MOVSP,#60H;置堆棧

MOVTMOD,#06H;置T0計數(shù)器方式2(見P132)MOVTH0,#0FFH;置T0初值

MOVTL0,#0FFH;SETBPT0;置T0為高優(yōu)先級(見P121)MOVIE,#0FFH;全部開中

SETBTR0;T0啟動

SJMPMAIN;轉(zhuǎn)主程序,并等待T0中斷

ORG2000H

;T0中斷服務(wù)子程序首地址IT0:

…;T0中斷服務(wù)子程序

RETI;第五十九頁,共六十八頁,編輯于2023年,星期日6-4、設(shè)系統(tǒng)時鐘為6MHz,利用T0和P1.0產(chǎn)生連續(xù)矩形脈沖,高電平為50us,低電平為300us。根據(jù)題意,編寫程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN: MOV TMOD,#00H ;定時器/計數(shù)器T0為定時方式0 MOV TL0,#4AH ;定時300μs初值賦值

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論