章定時(shí)計(jì)數(shù)器_第1頁(yè)
章定時(shí)計(jì)數(shù)器_第2頁(yè)
章定時(shí)計(jì)數(shù)器_第3頁(yè)
章定時(shí)計(jì)數(shù)器_第4頁(yè)
章定時(shí)計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第七章單片機(jī)的定時(shí)計(jì)數(shù)器===

本章的主要內(nèi)容★定時(shí)計(jì)數(shù)器結(jié)構(gòu)和工作原理;★定時(shí)計(jì)數(shù)器的控制寄存器;★定時(shí)計(jì)數(shù)器的應(yīng)用編程.

測(cè)量控制系統(tǒng)中,常常要求有一些實(shí)時(shí)時(shí)鐘,以實(shí)現(xiàn)定時(shí)控制、定時(shí)測(cè)量或延時(shí)動(dòng)作,也往往要求有計(jì)數(shù)功能,對(duì)外部事件計(jì)數(shù),如測(cè)電機(jī)轉(zhuǎn)速、測(cè)頻率、測(cè)工件個(gè)數(shù)等。單片機(jī)內(nèi)部定時(shí)計(jì)數(shù)器是用得非常多的一個(gè)功能部件。通常實(shí)現(xiàn)定時(shí)/計(jì)數(shù)有3種主要方法:軟件定時(shí):

即讓機(jī)器執(zhí)行一個(gè)程序段,只是為了磨時(shí)間。這種方法定時(shí)占用CPU執(zhí)行時(shí)間,降低了CPU利用率。數(shù)字電路硬件定時(shí):采用小規(guī)模集成電路器件如555,外接定時(shí)部件構(gòu)成。這樣的定時(shí)電路簡(jiǎn)單,但要改變定時(shí)范圍,必須改變電阻和電容,這種定時(shí)電路在硬件連接好以后,修改不方便??删幊潭〞r(shí)/計(jì)數(shù)器:

為方便51微機(jī)系統(tǒng)的設(shè)計(jì)和應(yīng)用而研制的,它是硬件定時(shí),通過(guò)初始化編程,能夠滿足各種不同的定時(shí)和計(jì)數(shù)要求,因而在嵌入式系統(tǒng)的設(shè)計(jì)和應(yīng)用中得到廣泛的應(yīng)用。

兩個(gè)定時(shí)器都有(軟件選擇)定時(shí)/事件計(jì)數(shù)的功能;

單片機(jī)片內(nèi)有定時(shí)器0(T0)和定時(shí)器1(T1)

二個(gè)十六位硬件(可編程)定時(shí)/計(jì)數(shù)器;T0由2個(gè)8位SFR:TH0和TL0構(gòu)成;T1由2個(gè)8位SFR:TH1和TL1構(gòu)成;★定時(shí)/計(jì)數(shù)器實(shí)際上是16位加1計(jì)數(shù)器;

T0,T1軟件可編程

:

工作方式0(13位方式);

工作方式1(16位方式);

工作方式2(8位自動(dòng)再裝入方式);

工作方式3(T0為2個(gè)8位方式)。7·18XX51定時(shí)/計(jì)數(shù)器結(jié)構(gòu)和工作原理1、定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)器

定時(shí)/計(jì)數(shù)器實(shí)際上是16位加1計(jì)數(shù)器;T0計(jì)數(shù)器由2個(gè)8位-----TH0和TL0構(gòu)成;T1計(jì)數(shù)器由2個(gè)8----TH1和TL1構(gòu)成。7·2定時(shí)計(jì)數(shù)器的控制寄存器★★

計(jì)數(shù)器是定時(shí)器的核心,假定8位計(jì)數(shù)器,要求計(jì)10個(gè)外部事件,產(chǎn)生溢出(TF0=1),計(jì)數(shù)器預(yù)置的計(jì)數(shù)初值是多少?C(計(jì)數(shù)初值)=M-X=256-10=246定時(shí)器的計(jì)數(shù)初值C的計(jì)算和裝入問(wèn)題TF1TR1TF0TR0IE1IT1IE0IT02.定時(shí)器控制寄存器TCON(88H)

(MSB)(LSB)中斷源要有請(qǐng)求;觸發(fā)方式選擇鎖存中斷請(qǐng)求標(biāo)志TR1(TR0):T1運(yùn)行控制位。TR1=1,啟動(dòng)T1工作。

TR1=0,停止T1工作。3.工作模式寄存器TMOD(89H)

TMOD各位的定義如下:TMODD7D6D5D4D3D2D1D0

(89H)GATEC/TM1M0GATEC/TM1M0定時(shí)器T0

定時(shí)器T1★

C/T:定時(shí)器/計(jì)數(shù)器選擇位

C/T=1,為計(jì)數(shù)器方式;

C/T=0,為定時(shí)器方式。&>1C/TC/TGATE:門控信號(hào)

GATE=0,TRx=1時(shí),即可啟動(dòng)Tx

工作;(x=1或0)

GATE=1,TRx=1INTx=1才可啟動(dòng)Tx

工作。

M1M0工作方式選擇

M1M0

方式說(shuō)明00013位定時(shí)器(TH的8位和TL的低5位)01116位定時(shí)器/計(jì)數(shù)器102自動(dòng)重裝入初值的8位計(jì)數(shù)器113

T0分成兩個(gè)獨(dú)立的8位計(jì)數(shù)器,T1在方式3時(shí)停止工作

設(shè)置為定時(shí)工作方式時(shí),定時(shí)器計(jì)數(shù)的脈沖是由51機(jī)片內(nèi)振蕩器經(jīng)12分頻后產(chǎn)生的。

★每經(jīng)過(guò)一個(gè)機(jī)器周期T0或T1的數(shù)值加1直至計(jì)數(shù)滿產(chǎn)生溢出。如:當(dāng)51采用12MHz晶體時(shí),每個(gè)機(jī)器周期為1μs,采用6MHz晶體時(shí),每個(gè)機(jī)器周期為2μs1.定時(shí)工作方式

★雖然對(duì)輸入信號(hào)的占空比無(wú)特殊要求,要求電平保持時(shí)間至少是一個(gè)完整的機(jī)器周期,由于檢測(cè)一個(gè)1至0的跳變需要二個(gè)機(jī)器周期,故最高計(jì)數(shù)頻率為振蕩頻率的二十四分之一。設(shè)單片機(jī)晶振頻率為12MHZ;故:外部脈沖信號(hào)最高計(jì)數(shù)頻率為<500KHZ

2.計(jì)數(shù)工作方式

★設(shè)置為計(jì)數(shù)工作方式時(shí),定時(shí)/計(jì)數(shù)器對(duì)引腳

P3.4(T0)和P3.5(T1)輸入的外部脈沖信號(hào)計(jì)數(shù)?!锂?dāng)輸入脈沖信號(hào)產(chǎn)生由1至0的下降沿時(shí),定時(shí)器的值加1。當(dāng)晶振頻率為6MHZ,最高計(jì)數(shù)頻率為

?

無(wú)論是定時(shí)/計(jì)數(shù),當(dāng)軟件設(shè)定了定時(shí)/計(jì)數(shù)器的工作方式,啟動(dòng)以后,定時(shí)/計(jì)數(shù)器就按規(guī)定的方式工作,不占用CPU的操作時(shí)間,此時(shí)CPU可執(zhí)行其他程序,到了計(jì)滿規(guī)定的時(shí)間或規(guī)定的個(gè)數(shù)(定時(shí)/計(jì)數(shù)器溢出),定時(shí)/計(jì)數(shù)器會(huì)給出溢出標(biāo)志,你可以通過(guò)查詢或中斷方式了解是否溢出。7.3定時(shí)器的四種工作方式

下面用THx、TLx(x=1或0)表示TH1TL1TH0TL0。

1.方式

0★T0或T1工作于13位定時(shí)、計(jì)數(shù)方式。用于計(jì)數(shù)方式時(shí)最大計(jì)數(shù)值為

213=

8192個(gè)脈沖1.工作方式0(13位方式):M1M0=00方式0(13位計(jì)數(shù)器)

C=M-X=

-10=模-X定時(shí)器的計(jì)數(shù)初值C的計(jì)算和裝入問(wèn)題要求計(jì)10個(gè)外部事件;計(jì)數(shù)初值C=M-X用于定時(shí)工作時(shí),定時(shí)時(shí)間為t(已知):t=(一T初值

)×MC要求計(jì)X個(gè)外部事件;

C=8192-100=8092=1F9CH1F9CH=0001

1111

10011100B

把13位中的高八位11111100B裝入TH0,而把13位中的低五位xxx11100B裝入TLTH0=0xFC;TL0=0x1C;例要求計(jì)100個(gè)脈沖,產(chǎn)生溢出(TF0=1),計(jì)數(shù)器預(yù)置的計(jì)數(shù)初值是多少?方式0(13位方式):2、方式1M1M0=01方式1(16位計(jì)數(shù)器)

2.方式1

★該模式是一個(gè)16位定時(shí)/計(jì)數(shù)方式;計(jì)數(shù)方式時(shí)最大計(jì)數(shù):216=65536(個(gè)外部脈沖)

用于定時(shí)工作方式時(shí),定時(shí)時(shí)間為:

t=(216一T初值)×MC

★16寄存器(THx和TLx)中THx提供高8位、TLx提供低8位計(jì)數(shù)初值C=65536-100

=FF9CH

用指令裝入計(jì)數(shù)初值:

TH0=0x0FFHTL0=0x9CH例:要求計(jì)100個(gè)脈沖,產(chǎn)生溢出(TF0=1),計(jì)數(shù)器預(yù)置的計(jì)數(shù)初值是多少?方式1:3、方式2方式2(初始常數(shù)自動(dòng)重裝載)

M1M0=10方式2(8位自動(dòng)再裝入方式)

C=256-100(10進(jìn)制)=9CH(16進(jìn)制)

初值既要裝入TH0,也要裝入TL0:TH0=0x9CHTL0=0x9CH例要求計(jì)100個(gè)脈沖,產(chǎn)生溢出(TF0=1),計(jì)數(shù)器預(yù)置的計(jì)數(shù)初值是多少?方式2(8位方式):

3.方式2M1M0=10方式2是8位的可自動(dòng)重裝載的定時(shí)計(jì)數(shù)方式。★16位的計(jì)數(shù)器被拆成兩個(gè)8位,其中TL0用作8位計(jì)數(shù)器,TH0用以保持計(jì)數(shù)初值。當(dāng)TL0計(jì)數(shù)溢出,置TF0,TH0中的初值自動(dòng)裝入TL0,繼續(xù)計(jì)數(shù),循環(huán)重復(fù)計(jì)數(shù)。★用于計(jì)數(shù)工作方式時(shí),最大計(jì)數(shù)值為:

28=256(個(gè)外部脈沖)。

用于定時(shí)工作方式時(shí),其定時(shí)時(shí)間為;

t=(28—TH0初值)×?xí)r鐘周期×12★這種工作方式可省去用戶重裝常數(shù)的程序,并可產(chǎn)生精確的定時(shí)時(shí)間,特別適用作串行口波待率發(fā)生器。

4、方式3方式3(兩個(gè)8位獨(dú)立計(jì)數(shù)器)

4.方式3

當(dāng)TMOD中M1M0=11時(shí),定時(shí)器工作在方式3?!锶魧0設(shè)置為模式3,TL0和TH0被分成為兩個(gè)互相獨(dú)立的8位計(jì)數(shù)器TH0和

TL0

?!?/p>

TL0可工作為定時(shí)方式或計(jì)數(shù)方式。占用原T0的各控制位、引腳和中斷源。即C/T、GATE、TR0、TF0和T0(P3.4)引腳、INT0(P3.2)引腳。

TH0只可用作定時(shí)功能,占用定時(shí)器T1的控制位TR1和T1的中斷標(biāo)志位TF1,其啟動(dòng)和關(guān)閉僅受TRl的控制?!锒〞r(shí)器T1無(wú)模式3,可工作于方式0、1、2,但不能使用中斷方式?!?/p>

只有將T1用做串行口的波特率發(fā)生器時(shí),T0才工作在方式3,以便增加一個(gè)定時(shí)器。定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)及工作原理7.4定時(shí)計(jì)數(shù)器的應(yīng)用程序設(shè)計(jì)

7.4.1定時(shí)器的計(jì)數(shù)初值C的計(jì)算和裝入如前所述,89c51定時(shí)器/計(jì)數(shù)器不同工作方式的模值不同,由于采用加1計(jì)數(shù),因此計(jì)數(shù)初值應(yīng)為負(fù)值,計(jì)算機(jī)中用有符號(hào)數(shù)采用補(bǔ)碼表示。計(jì)數(shù)初值(C)的求法如下?!?/p>

計(jì)數(shù)方式:

計(jì)數(shù)初值C=模-X(其中X為要計(jì)的脈沖個(gè)數(shù))★定時(shí)方式:

計(jì)時(shí)時(shí)間=(模-初值)*MC

其中t為欲定時(shí)時(shí)間,MC為89c51的機(jī)器周MC=12/fosc

當(dāng)采用12MHZ晶振時(shí),MC=1μs;

當(dāng)采用6MHZ晶振時(shí),MC=2μs。7.4.2定時(shí)計(jì)數(shù)器的初始化編程

定時(shí)計(jì)數(shù)器的初始化編程步驟:1)根據(jù)定時(shí)時(shí)間要求或計(jì)數(shù)要求計(jì)算計(jì)數(shù)器初值;2)工作方式控制字送TMOD寄存器;3)送計(jì)數(shù)初值的高八位和低八位到THX和TLX寄存器中;4)啟動(dòng)定時(shí)(或計(jì)數(shù)),即將TRX置位。如果工作于中斷方式,需要置位EA(中斷總開(kāi)關(guān))及ETX(允許定時(shí)/計(jì)數(shù)器中斷)。并編中斷服務(wù)程序。例7-1如圖7-2所示;P1中接有八個(gè)發(fā)光二極管,編程使八個(gè)管輪流點(diǎn)亮,每個(gè)管亮100ms,設(shè)晶振為6MHz。7.4.3應(yīng)用編程舉例同向分析:

利用T1完成100ms的定時(shí),當(dāng)P1口線輸出“0”時(shí),發(fā)光二極管亮,每隔100ms”1”左移一次,采用定時(shí)方式1,先計(jì)算計(jì)數(shù)初值:

MC==2μs(6MHz)100ms/2μs=50000=C350H計(jì)數(shù)初值=65536-50000H=15536=3CB0H

For(;;){TH1=0x3c;TL1=0xb0;/*裝載計(jì)數(shù)初值*/do{}while(!TF1);/*查詢等待TF1置位*/P1<<=1;P1=P1∣0x01

/*定時(shí)時(shí)間到,下一只LED亮*/

TF1=0;

/*軟件清TF1*/}}①查詢方式:#include<reg51.h>voidmain(void){P1=0xfe;/*第一只LED亮*/TMOD=0x10;/*定時(shí)器1方式1*/TR1=1;/*啟動(dòng)T*/voidmain(void){TMOD=0x10;/*T1工作在定時(shí)方式1*/P1=0xfe;/*第一只LED亮*/TH1=0x3c;TL1=0xb0;/*預(yù)置計(jì)數(shù)初值*/EA=1;ET1=1;/*CPU開(kāi)中斷,允許T1中*/TR1=1;/*啟動(dòng)T1開(kāi)始定時(shí)*/do{}while(1);}/*等待中斷*/②中斷方式:#include<reg51.h>

Timer1()interrupt3using1/*T1中斷服務(wù)程序*/{P1<<=1;P1=P1∣0x01;/*下一只LED亮*/TH1=0x3c;TL1=0xb0;/*計(jì)數(shù)初值重載*/}例7-2在P1.7端接一個(gè)發(fā)光二極管LED,要求利用定時(shí)控制使LED亮一秒滅一秒周而復(fù)始,設(shè)fosc=6MHZ。解:16位定時(shí)最大為*2us=131.072ms,顯然不能滿足要求,可用以下兩種方法解決。方法1:采用T0產(chǎn)生周期為200ms脈沖,即P1.0每100ms取反一次作為T1的計(jì)數(shù)脈沖,T1對(duì)下降沿計(jì)數(shù),因此T1計(jì)5個(gè)脈沖正好一秒。T0采用方式1,定時(shí)100ms;X=-得X=3CB0H.T1采用方式2,計(jì)數(shù)初值X=-5=FBH均采用查詢方式,流程圖和程序如下:

下面用C語(yǔ)言完成本例的方式1,并介紹用C語(yǔ)言程序計(jì)算計(jì)數(shù)初值的方法。

T0定時(shí)100ms初值=100×1000/2=50000,即初值為

-50000。T1計(jì)數(shù)5個(gè)脈沖工作于方式2,計(jì)數(shù)初值為-5,T0和T1均采用中斷方式。程序如下:#include<reg51.h>

sbitP1_0=P1^0;

sbitP1_7=P1^7;timer0()interrupt1using1/*T0中斷服務(wù)程序*/{P1_0=!P1_0;/*100ms到P1.0反向*/TH0=-50000/256;/*重載計(jì)數(shù)初值高8位*/TL0=-50000%256;/*重載計(jì)數(shù)初值低8位*/

}timer1()interrupt3using2/*T1中斷服務(wù)*/{P1_7=!P1_7;}

/*1s到,燈變狀態(tài)*/main(){P1_7=0;/*置燈初始滅*/P1_0=1;

/*保證第一次反向便開(kāi)始計(jì)數(shù)

TMOD=0x61;/*T0方式1定時(shí),T1方式2計(jì)數(shù)*/

TH0=-50000/256;/*預(yù)置T0計(jì)數(shù)初值*/

TL0=-50000%256;TH1=-5;TL1=-5;/*預(yù)置T1計(jì)數(shù)初值*/

IP=0x08;/*置優(yōu)先級(jí)寄存器*/EA=1;ET0=1;ET1=1/*開(kāi)中斷*/TR0=1;TR1=1;/*啟動(dòng)定時(shí)計(jì)數(shù)器*/for(;;){}/*等待中斷*/}

7.4.4門控位的應(yīng)用

門控位GATE為1時(shí),TRx=1,INTx=1才能啟動(dòng)定時(shí)器。利用這個(gè)特性可以測(cè)量外部輸入脈沖的寬度。例7-4

利用T0門控位測(cè)試INT0引腳上出現(xiàn)的正脈沖寬度,已知晶振頻率為12MHz,將所測(cè)得值最高位存入片內(nèi)71H單元,低位存入70H單元。解:設(shè)外部脈沖由(P3.2)輸入,T0工作于定時(shí)方式1(16位計(jì)數(shù)),GATE設(shè)為1。測(cè)試時(shí),應(yīng)在INT0處于低電平時(shí),設(shè)置TR0為1;當(dāng)INT0變?yōu)楦唠娖綍r(shí),就啟動(dòng)計(jì)數(shù);再次變低時(shí),停止計(jì)數(shù)。此計(jì)數(shù)值與機(jī)器周期的乘積即為被測(cè)正脈沖的寬度。因fosc=12MHZ,機(jī)器周期為1us,測(cè)試過(guò)程如下。源程序如下:

MOVTMOD,#09H;設(shè)T0為方式1MOVTL0,#00H;設(shè)計(jì)初值取最大值

MOVTH0,#00HMOVR0,#70HJBP3.2,$;等P3.2(INT0)變低

SETBTR0;啟動(dòng)T0準(zhǔn)備工作

JNBP3.2,$;等待P3.2(INT0)變高

JBP3.2,$;等待P3.2(INT0)變低

CLRTR0;停止計(jì)數(shù)T0從0開(kāi)始計(jì)數(shù)INT0

09H(TMOD)1TR0

0TR0T0停止計(jì)數(shù)

MOV@R0,TL0;存放結(jié)果

INCR0MOV@R0,TH0SJMP$

讀者不難編出C語(yǔ)言程序。這種方案被測(cè)脈沖的寬度最大為65535個(gè)機(jī)器周期。由于靠軟件啟動(dòng)和停止計(jì)數(shù),有一定的測(cè)量誤差。其可能的最大誤差與指令的執(zhí)行時(shí)間有關(guān)。此例中,在讀取定時(shí)器的計(jì)數(shù)之前,已把它停住。但在某些情況下,不希望在讀計(jì)數(shù)值時(shí)打斷定時(shí)的過(guò)程,由于我們不可能在同一時(shí)刻讀取THX和TLX

的內(nèi)容。讀取一個(gè)時(shí)恰好另一個(gè)產(chǎn)生溢出,在這種情況下,讀取的計(jì)數(shù)值有可能是錯(cuò)的??梢越鉀Q錯(cuò)讀的方法是:

先讀THX后讀TLX,若兩次讀得的THx

沒(méi)有發(fā)生變化,則可確定讀到的內(nèi)容是正確的。若前后兩次讀到的THx有變化,則再重復(fù)上述過(guò)程,重復(fù)讀到的內(nèi)容就應(yīng)該是正確的了。下面是按此思路編寫(xiě)的程序段,讀到的TH0和TL0放在R1和R0內(nèi):RP:MOVA,TH0;

MOVR0,TL0;

CJNEA,TH0,RP;

MOVR1,A…………7·6小結(jié)定時(shí)計(jì)數(shù)器應(yīng)用非常廣泛,如定時(shí)采樣、時(shí)間測(cè)量、產(chǎn)生音響、作脈沖源、制作日歷時(shí)鐘、測(cè)量波形的頻率和占空比、檢測(cè)電機(jī)轉(zhuǎn)速、測(cè)量汽車速度等。因此應(yīng)很好掌握。

51系列單片機(jī)既有兩個(gè)16位的定時(shí)計(jì)數(shù)器,有四種不同的工作方式,歸納于下表:28=256=100H28=

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論