單片機定時器計數(shù)器_第1頁
單片機定時器計數(shù)器_第2頁
單片機定時器計數(shù)器_第3頁
單片機定時器計數(shù)器_第4頁
單片機定時器計數(shù)器_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

§5-1定時/計數(shù)器

§5-2定時/計數(shù)器的應(yīng)用

定時計數(shù)器SingleChipMicrocomputer本章內(nèi)容

MCS-51的定時器/計數(shù)器

兩個可編程的定時器/計數(shù)器T1、T0。2種工作模式:(1)計數(shù)器工作模式(2)定時器工作模式4種工作方式(方式0-方式3)。定時器/計數(shù)器的結(jié)構(gòu)TMOD:選擇定時器/計數(shù)器T0、T1的工作模式和工作方式。TCON:控制T0、T1的啟動和停止計數(shù),同時包含了

T0、T1的狀態(tài)。

單片機復(fù)位時,兩個寄存器的所有位都被清0。工作方式控制寄存器TMOD

8位分為兩組,高4位控制T1,低4位控制T0。(1)GATE——門控位

0:以TRX(X=0,1)來啟動定時器/計數(shù)器運行。

1:用外中斷引腳(INT0*或INT1*)上的高電平和TRX來啟動定時器/計數(shù)器運行。(2)M1、M0——工作方式選擇位

M1M0工作方式

00 方式0,13位定時器/計數(shù)器。01 方式1,16位定時器/計數(shù)器。10 方式2,8位常數(shù)自動重新裝載11 方式3,僅適用于T0,T0分成兩個8 位計數(shù)器,T1停止計數(shù)。

(3)C/T*——計數(shù)器模式和定時器模式選擇位 0:定時器模式。1:計數(shù)器模式。C//T=0——定時;C//T=1——對外計數(shù)。定時:fosc/12=1/(12/fosc)=1/T波形等間隔,次數(shù)已定,時間確定即對機器周期進(jìn)行計數(shù)。左圖定時時間為N*TN個方波T/2計數(shù):脈沖不等間隔。

每個下降沿計數(shù)一次

確認(rèn)一次負(fù)跳變需兩個機器周期,

所以,計數(shù)頻率最高為fosc/24。

定時器/計數(shù)器控制寄存器TCON

低4位與外部中斷有關(guān),已介紹。高4位的功能如下:

(1)TF1、TF0——計數(shù)溢出標(biāo)志位(2)TR1、TR0——計數(shù)運行控制位 1:啟動定時器/計數(shù)器工作

0:停止定時器/計數(shù)器工作

定時器/計數(shù)器的4種工作方式

方式0

M1、M0為00,定時器/計數(shù)器的框圖:

為13位的計數(shù)器,C/T*位決定工作模式:

0:開關(guān)打在上面,為定時器工作模式; 1:開關(guān)打在下面,為計數(shù)器工作模式,計數(shù)脈沖為P3.4、P3.5引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時,計數(shù)器加1。GATE位:決定定時器/計數(shù)器的運行取決于TRx一個條件還是TRx和INTx*引腳兩個條件。(1)0:A點(見圖6-2)是否計數(shù),僅取決于TRx的狀態(tài)。(2)1:B點電位由INTX*的輸入電平和TRX的狀態(tài)這兩個條件來確定。是否計數(shù)是由TRx和INTx*二個條件來控制的。

方式1

M1、M0=01,16位的計數(shù)器。

TLX作為常數(shù)緩沖器,當(dāng)TLX計數(shù)溢出時,在置“1”溢出標(biāo)志TFX的同時,還自動的將THX中的初值送至TLX,使TLX從初值開始重新計數(shù)。定時器/計數(shù)器的方式2工作過程如圖6-5(X=0,1)。方式2

計數(shù)滿后自動裝入計數(shù)初值。

M1、M0=10,等效框圖如下:方式3

增加一個附加的8位定時器/計數(shù)器,從而具有3個定時器/計數(shù)器。只適用于定時器/計數(shù)器T0。T1不能工作在方式3,T1方式3時相當(dāng)于TR1=0,停止計數(shù)(此時T1可用來作串行口波特率產(chǎn)生器)。1.工作方式3下的T0T0分為兩個獨立的8位計數(shù)器:TL0和TH0。TL0使用T0的狀態(tài)控制位C/T*、GATE、TR0、,而TH0被固定為一個8位定時器(不能作外部計數(shù)模式),并使用定時器T1的狀態(tài)控制位TR1和TF1,同時占用定時器T1的中斷請求源TF1。

各引腳與T0的邏輯關(guān)系如圖所示:2.T0工作在方式3下T1的各種工作方式

當(dāng)T1用作串行口的波特率發(fā)生器時,T0才工作在方式3。T0處于方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。(1)T1工作在方式0

(2)T1工作在方式1

(3)T1工作在方式2

定時器/計數(shù)器對輸入信號的要求

外部計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24,例如選用12MHz頻率的晶體,則可輸入500KHz的外部脈沖。輸入信號的高、低電平至少要保持一個機器周期。如圖6-10所示,圖中Tcy為機器周期。編程前確定參數(shù):(1)定時/計數(shù)器——T0、T1選擇其一,(2)工作方式——C//T及GATE,(3)計數(shù)初值——加1計數(shù)、16位。

計數(shù):X=M-N;M=213=8192(模式0)M=216=65536(模式1)M=28=256(模式2、模式3)定時:X=M–N=M–t/T(t為所要求的定時時間,T為機器周期)

(4)工作模式——

M1、M0

N0010

1046MX定時/計數(shù)器的應(yīng)用定時器/計數(shù)器的編程和應(yīng)用

4種工作方式中,方式0與方式1基本相同,由于方式0是為兼容MCS-48而設(shè),初值計算復(fù)雜,在實際應(yīng)用中,一般不用方式0,而采用方式1。方式1應(yīng)用

例5-1

假設(shè)系統(tǒng)時鐘頻率采用6MHz,要在P1.0上輸出一個周期為2ms的方波,如圖所示。

方波的周期用T0來確定,讓T0每隔1ms計數(shù)溢出1次(每1ms產(chǎn)生一次中斷),CPU響應(yīng)中斷后,在中斷服務(wù)程序中對P1.0取反。

(1)計算初值X

設(shè)初值為X,則有: (216-X)×2×10-6=1×10-3216-X=500X=65036X化為16進(jìn)制,即X=FE0CH=1111111000001100B。所以,T0的初值為:

TH0=0FEHTL0=0CH(2)初始化程序設(shè)計

對寄存器IP、IE、TCON、TMOD的相應(yīng)位進(jìn)行正確設(shè)置,將計數(shù)初值送入定時器中。(3)程序設(shè)計

中斷服務(wù)程序除產(chǎn)生方波外,還要注意將計數(shù)初值重新裝入定時器中,為下一次中斷作準(zhǔn)備。參考程序:

ORG0000HRESET:AJMPMAIN;轉(zhuǎn)主程序

ORG000BH;T0的中斷入口 AJMPIT0P ;轉(zhuǎn)T0中斷處理程序IT0P

ORG0100HMAIN:MOVSP,#60H;設(shè)堆棧指針

MOVTMOD,#01H ;設(shè)置T0為方式1

ACALLPT0M0 ;調(diào)用子程序PT0M0HERE:AJMPHERE ;自身跳轉(zhuǎn)PT0M0:MOVTL0,#0CH ;T0初始化程序,T0賦初值

MOVTH0,#0FEHSETBTR0 ;啟動T0SETBET0 ;允許T0中斷

SETBEA;CPU開中斷

RETITOP:MOVTL0,#0CH;T0中斷服務(wù)子程序,T0重置初值

MOVTH0,#0FEHCPLP1.0;P1.0的狀態(tài)取反

RETI查詢方式的參考程序:

MOVTMOD,#01H;設(shè)置T0為方式1

MOVTH0,#0FEH ;T0置初值 MOVTL0,#0CH SETBTR0;接通T0WAIT:JBCTF0,NXSJMPWAITNX:CPLP1.0MOVTH0,#0FEH ;T0置初值 MOVTL0,#0CHSJMPWAIT例5-2

假設(shè)系統(tǒng)時鐘為6MHz,編寫定時器T0產(chǎn)生1秒定時的程序。(1)T0工作方式的確定定時時間較長,采用哪一種工作方式?由各種工作方式的特性,可計算出:

方式0最長可定時16.384ms;

方式1最長可定時131.072ms;方式2最長可定時512

s。選方式1,每隔100ms中斷一次,中斷10次為1s。(2)計算計數(shù)初值因為:(216-X)×2×10-6=10-1所以:X=15536=3CB0H因此:TH0=3CH,TL0=B0H(3)10次計數(shù)的實現(xiàn)采用循環(huán)程序法。(4)程序設(shè)計參考程序:

ORG0000HRESET:LJMPMAIN ;上電,轉(zhuǎn)主程序入口MAIN

ORG000BH;T0的中斷入口

LJMPIT0P ;轉(zhuǎn)T0中斷處理程序IT0P

ORG1000HMAIN:MOVSP,#60H ;設(shè)堆棧指針

MOVB,#0AH;設(shè)循環(huán)次數(shù)10次

MOVTMOD,#01H;設(shè)T0工作在方式1

MOVTL0,#0B0H;給T0設(shè)初值

MOVTH0,#3CH SETBTR0 ;啟動T0SETBET0 ;允許T0中斷SETBEA;CPU開放中斷HERE:SJMPHERE;等待中斷

ITOP:MOVTL0,#0B0H;T0中斷子程序,重裝初值

MOVTH0,#3CH; DJNZB,LOOPCLRTR0;1s定時時間到,停止T0工作LOOP:RETI方式2的應(yīng)用省去程序中重裝初值的指令,并可產(chǎn)生相當(dāng)精確的定時時間。例5-3

當(dāng)T0(P3.4)引腳上發(fā)生負(fù)跳變時,從P1.0引腳上輸出一個周期為1ms的方波,如圖所示。(系統(tǒng)時鐘為6MHz)(1)工作方式選擇T0為方式1計數(shù),初值0FFFFH,即外部計數(shù)輸入端T0(P3.4)發(fā)生一次負(fù)跳變時,T0加1且溢出,溢出標(biāo)志TF0置“1”,發(fā)中斷請求。在進(jìn)入T0中斷程序后,把F0標(biāo)志置“1”,說明T0腳已接收了負(fù)跳變信號。T1定義為方式2定時。在T0腳發(fā)生一次負(fù)跳變后,啟動T1每500

s產(chǎn)生一次中斷,在中斷服務(wù)程序中對P1.0求反,使P1.0產(chǎn)生周期1ms的方波。(2)計算T1初值設(shè)T1的初值為X:則(28-X)×2×10-6=5×10-4X=28-250=6=06H(3)程序設(shè)計

ORG0000HRESET:LJMPMAIN;復(fù)位入口轉(zhuǎn)主程序

ORG000BH

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

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

ORG0100HMAIN:MOVSP,#60HACALLPT0M2 ;調(diào)用對T0,T1初始化子程序LOOP:MOVC,F0;T0產(chǎn)生過中斷了嗎,產(chǎn)生過中斷,則F0=1JNCLOOP ;T0沒有產(chǎn)生過中斷,則跳到

LOOP,等待T0中斷

SETBTR1;啟動T1SETBET1;允許T1中斷HERE:AJMPHERE

PT0M2:MOVTMOD,#26H;初始化,T1為方式2定時,T0為方式1計數(shù)

MOVTL0,#0FFH;T0置初值

MOVTH0,#0FFHSETBTR0 ;啟動T0SETBET0 ;允許T0中斷

MOVTL1,#06H;T1置初值

MOVTH1,#06HCLRF0 ;把T0已發(fā)生中斷標(biāo)志F0清0

SETBEA

RETIT0P:CLRTR0;T0中斷服務(wù)程序,停止T0計數(shù)

SETBF0;建立產(chǎn)生中斷標(biāo)志

RETIIT1P:CPLP1.0 ;T1中斷服務(wù),P1.0位取反 RETI在T1定時中斷服務(wù)程序IT1P中,省去了T1中斷服務(wù)程序中重新裝入初值06H的指令。TF1TR1TF0TR0IE1IT1IE0IT0

M0

M1C/GATE

M0

M1C/GATETMODTCON例6-4、設(shè)fosc=6MHz,利用單片機內(nèi)定時/計數(shù)器及P1.0口線輸出1000個脈沖,脈沖周期為2ms,試編程。

8031P1.0T12ms

T=12×1/fosc=2us選取T0定時;T1計數(shù)。

設(shè)T0采用中斷方式產(chǎn)生周期為2ms方波,T1對該方波計數(shù),當(dāng)輸出至第1000個脈沖時,使TF1置1。在主程序中用查詢方法,檢測到TF1變1時,關(guān)掉T0,停止輸出方波。

T0、T1參數(shù)的確定:T0模式0、定時:脈寬為脈沖周期的一半所以,X=213-1ms/2us=0001111000001100BTH0=0F0H;TL0=0CHT1模式1、計數(shù):N=1000

則X=65536-1000=64536=0FC18H

(若選模式0也可以,此時X=7192=1C18H)

程序:

ORG0000HLJMPMAINORG000BHLJMPTOSORG1000H

MAIN:MOVTMOD,#50H;T0定時,模式0;T1計數(shù),模式1MOVTL0,#0CHMOVTH0,#0F0HMOVTL1,#18HMOVTH1,#0FCH

SETBTR1SETBTR0SETBET0SETBEAWAIT:

JNBTF1,WAIT;查詢1000個脈沖計夠沒有到?

CLREACLRET0ANLTCON,#0FH;停T0、T1SJMP$

TOS:MOVTL0,#0CHMOVTH0,#0F0HCPLP1.0RETIEND例6-5、脈沖參數(shù)測量——GATE功能的使用。脈沖高電平(計數(shù))長度值存于21H、20H中,脈沖低電平長度存于23H、22H中。電路連接如下圖所示。解:復(fù)習(xí)GATE的用法:

GATE=0時,TRi=1,即可啟動Ti定時/計數(shù)

GATE=1時,TRi=1,且=1,才啟動定時/計數(shù)。8031P3.2P3.31被測信號21a3T0計數(shù)T1計數(shù)

ORG0000HLJMPMAINORG2000HMAIN:MOVTMOD,#99H;T0、T1均工作

溫馨提示

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

評論

0/150

提交評論