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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

主講教師趙曉安第6章AT89C52單片機的定時器/計數(shù)器在單片機實時應用系統(tǒng)中,往往需要實時時鐘或對外部事件計數(shù)的功能。一般常用軟件、專門的硬件電路或可編程定時器/計數(shù)器實現(xiàn)。

采用軟件只能定時,且占用CPU的時間,降低了CPU的使用效率;

采用專門的硬件電路,參數(shù)調節(jié)不便;

采用可編程的定時器/計數(shù)器是最好的方法。

可以方便靈活地修改定時或計數(shù)的參數(shù)或方式

與CPU并行工作,大大提高了CPU的工作效率6.1定時器/計數(shù)器的結構6.2定時器/計數(shù)器T0和T1的控制6.3定時器/計數(shù)器的工作方式及應用6.4定時器/計數(shù)器T2第6章AT89C52單片機的定時器/計數(shù)器6.1定時器/計數(shù)器的結構T0(P3.4)T1(P3.5)TCONT0T2(P1.0)89C52CPUTH0TL0T1TH1TL1T2TH2TL2TMODT2CONT2MOD共同點:都是通過計數(shù)器計脈沖的個數(shù)來實現(xiàn)的定時方式與計數(shù)方式1、定時方式

T/C計數(shù)8051內部機器周期的個數(shù),由計數(shù)個數(shù)可以計算出定時時間。每個機器周期使T/C的計數(shù)器增加1,直至計滿回零后自動產(chǎn)生溢出中斷請求,表示定時時間到。

fosc=12MHz時,Tcy=1us2、計數(shù)方式

T/C計數(shù)來自引腳T0(P3.4)和T1(P3.5)的外部脈沖信號的個數(shù)。輸入脈沖由1變0的下降沿時,計數(shù)器的值增加1直到回零產(chǎn)生溢出中斷,表示計數(shù)已達預期個數(shù)。

最高計數(shù)頻率為振蕩頻率的1/24。即計數(shù)周期=2機器周期。不同點:6.2定時器/計數(shù)器的控制定時器/計數(shù)器的工作由TCON和TMOD控制。由軟件把控制字寫入TCON和TMOD,用來設置T/C0和T/C1的工作方式和控制功能。當8051系統(tǒng)復位時,TCON和TMOD所有位都被清0。一、工作模式寄存器TMOD(89H)TMOD用于控制T/C0和T/C1的工作模式,其各位的定義格式如下:1.M1和M0工作方式選擇位這兩位可形成四種編碼,對應四種工作方式:

M1M0方式功能描述000為13位定時器/計數(shù)器,TL存放低5位,TH存高8位011為16位定時器/計數(shù)器102常數(shù)自動裝入8位定時器/計數(shù)器113僅適于T/C0,兩個8位定時器/計數(shù)器2.C/T計數(shù)/定時選擇位

C/T=0,設為定時方式,對機器周期計數(shù);

C/T=1,設為計數(shù)方式,對來自T0或T1引腳的外來脈沖計數(shù)。

3.GATE門控位(控制啟動方式)

GATE=0時,T/C的啟動只要用軟件使TR0(或TR1)置1即可,而不管/INT0(或/INT1)的電平是高還是低。

GATE=1時,只有/INT0(或/INT1)引腳為高電平且由軟件使TR0(或TR1)置1時,才啟動T/C工作。也就是T/C的啟動受雙重控制。注意:TMOD不能位尋址,只能由字節(jié)設置T/C的工作方式,低半字節(jié)設定T/C0,高半字節(jié)設定T/C1。二、

控制寄存器TCON(88H)控制寄存器TCON除可字節(jié)尋址外,各位還可位尋址。各位定義及格式如下:1)TF1(TCON.7)T/C1的溢出標志位。當T/C1被允許計數(shù)后,T/C1從初值開始加1計數(shù),回零時由高位產(chǎn)生溢出,由硬件自動置TF1為“1”,并向CPU請求中斷,當CPU響應并進入中斷服務程序后,TF1又被硬件自動清0。TF1也可以由程序查詢和清0。2)TF0(TCON.5)T/C0溢出標志位。其功能同TF1。3)TR1(TCON.6)T/C1運行控制位。由軟件置位或復位。當GATE(TMOD.7)為0時,

TR1為1時,啟動T/C1計數(shù);

TR1為0時,停止T/C1計數(shù)。4)TR0(TCON.4)T/C0運行控制位。其功能同TR1,只是GATE為TMOD.3。

5)IE1、IT1、IE0、IT0(TCON.3~TCON.0)

外部中斷INT1、INT0的中斷標志位和申請信號的觸發(fā)方式控制位。

6.2.3定時器的四種工作方式TMOD中控制位C/T設置定時或計數(shù)功能;

M1M0位的設置選擇四種工作方式,即方式0、方式1、方式2和方式3方式0、1和2時,T/C0和T/C1的工作相同

方式3時,T/C0和T/C1的工作不同方式0方式1方式2方式3TH0TL0T/C1TH1TL1T/C0方式0

高8位和低5位的一個13位計數(shù)器的運行方式當TL1的低5位溢出時,向TH1進位,而TH1溢出(回零)時向TF1標志進位(硬件置位TF1),并申請中斷。還可以通過查詢TF1是否置位來判斷TH1是否回零溢出。圖6-6T/C1(或T/C0)方式0結構啟動控制

B=TR1A=TR1(/INT1+/GATE)利用這一特性可以測量在/INT1端出現(xiàn)的正脈沖的寬度

GATETR1INT1

啟動情況00X停止01X啟動10X停止11啟動11停止

其中:1表示高電平,0表示低電平,X表示任意狀態(tài)

方式1

方式1是一個16位定時器/計數(shù)器,見圖6-7。方式1的結構幾乎與方式0完全一樣,唯一的差別是:方式1中的TH1(TH0)和TL1(TL0)均是8位的,構成16位計數(shù)器。圖6-7T/C1(或T/C0)方式1結構

方式2

在方式2時,T/C被拆成一個8位的寄存器TH1(TH0)和一個8位計數(shù)器TL1(TL0),兩者構成可以自動重裝載的8位T/C,如圖6-8所示。圖6-8T/C1(或T/C0)方式2結構每當它計滿回零時

一方面向CPU發(fā)出溢出中斷請求,另一方面從TH1(或TH0)中重新獲得初值并啟動計數(shù);也就是CPU自動將TH1(或TH0)中存放的初值重新裝回到TL1(或TL0),并在此初值的基礎上對TL1(或TL0)開始新一輪計數(shù),周而復始,直到寫入停止計數(shù)或更改工作方式命令為止。方式3

方式3下T/C0和T/C1功能就不同了。此時,TH0和TL0按兩個獨立的8位計數(shù)器工作(如圖6-9所示)。T/C1只能按不中斷的方式工作,常常利用它的定時功能作串行口波特率發(fā)生器(如圖6-10所示)。T/C0方式3時,TL0占用了T/C0的C/T、GATE、TR0、TF0、T0(P3.4)和/INT0控制引腳,可設置為定時或計數(shù)方式。

TH0只有簡單的內部定時功能,它占用了T/C1的TR1控制位和TF1中斷標志位,其啟動/關閉僅受TR1控制。

圖6-9T/C0方式3結構在T/C0工作在方式3時,T/C1仍可設置為方式0~2。由于TR1和TF1已被T/C0(TH0)占用,計數(shù)開關已被接通,此時僅用T/C1的C/T來切換其定時或計數(shù)工作方式就可使T/C1工作。計數(shù)器(8位、13位或16位)回零溢出時,只能將輸出送入串行口或用于不需要中斷的場合。一般情況下,當T/C1用作串行口波特率發(fā)生器時,T/C0才設置為工作方式3。此時,常把T/C1設置為方式2用作波特率發(fā)生器。圖6-10T/C1在T/C0方式3時的工作方式

1.初始化的步驟

AT89C52內部的T/C是可編程的,其工作方式和模式通過程序進行設定和控制,稱為對T/C的初始化。初始化的步驟是:確定工作方式,即根據(jù)要求先給TMOD送一個方式控制字;計算計數(shù)初值/定時初值,并寫入TH0、TL0或TH1、TL1中;根據(jù)需要,置位EA使CPU開放中斷,同時置位ETx允許T/C中斷。IP設定中斷優(yōu)先級;給TCON送命令控制字,即置位TRx啟動T/C計數(shù)。

T/C的初始化2.計數(shù)器初值的計算

T/C在計數(shù)模式下,計數(shù)之前必須給它的計數(shù)器TH0、TL0或TH1、TL1選送計數(shù)初值。T/C的計數(shù)器是在計數(shù)初值的基礎上加1計數(shù)的,當計數(shù)器回“0”時自動產(chǎn)生溢出,置位TFx中斷標志,向CPU提出中斷請求。設需要計數(shù)器計數(shù)的個數(shù)為X,計數(shù)初值為C,由此可得出如下計算計數(shù)初值的通式:計數(shù)初值:C=M-X(6-1)式中M為計數(shù)器的模值,該值和計數(shù)器的工作方式有關。213方式0

M=216

方式1(6-2)28方式2、33.定時器初值計算

在定時模式下,計數(shù)器對單片機振蕩頻率fosc經(jīng)12分頻后的機器周期進行加1計數(shù),用X表示計數(shù)個數(shù),M表示模,C表示定時初值,Tcy表示機器周期,則1Tcy=12/fosc,因此,定時時間T的計算公式為:

T=X·Tcy=(M-C)Tcy

定時初值公式C=M-T/Tcy

定時器的溢出率=1/T=fosc/(12·X)=fosc/(12·(M-C))解:(1)確定T/C0的工作方式要在P1.0輸出周期為2ms的方波,只要使P1.0每隔1ms取反一次即可。

(2)送T/C0的方式控制字(TMOD)=00H,即T/C0定時,方式0,只由TR0啟動,因為T/C1不用,高4位取0。即:00000000M0M1C/TGATEM0M1C/TGATET/C1不用,高4位取0只由TR0啟動定時方式0[例1]利用T/C0方式0產(chǎn)生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc=12MHz。應用舉例(3)計算定時初值

Tcy=12/fosc=12/(12×106)S=1us

計數(shù)個數(shù):X=1ms/1us=1000

定時初值:C=(213-X)=8192-1000=7192D=1C18H=1110000011000B

高8位0E0H低5位18HTH0初值為0E0H,TL0初值為18H。若采用方式1,16位,則定時初值:C=65536-1000=64536=FC18HTH0初值為0FCH,TL0初值為18H

(4)

編程可以采用中斷或查詢兩種方式編寫程序。

1)中斷方式當T/C0定時溢出時,TF0被置1,申請中斷。編程使CPU以響應中斷方式輸出方波,效率比較高。

ORG0000HAJMPMAIN;轉到主程序MAIN ORG000BHAJMPTC0S;轉到T/C0的中斷服務程序TC0S主程序:

ORG1000HMAIN:MOVSP,#6FHMOVTMOD,#00H;置T/C0為方式0,定時

MOVTH0,#0E0H;送計數(shù)初值

MOVTL0,#18HSETBET0;T/C0允許中斷

SETBEA;CPU開中斷

SETBTR0;啟動T/C0定時

HERE:SJMPHERE;等待中斷中斷服務程序:

ORG1200HTC0S:MOVTH0,#0E0H;重新裝入計數(shù)初值

MOVTL0,#18HCPLP1.0;輸出方波

RETI;中斷返回

END

ORG0000HMOVTMOD,#00H MOVTH0,#0E0HMOVTL0,#18HSETBTR0LOOP:JBCTF0,DO1SJMPLOOPDO1:MOVTH0,#0E0HMOVTL0,#18HCPLP1.0SJMPLOOPEND

2)

查詢方式還可以采用查詢TF0的方式處理T/C0定時溢出,編程簡單,但效率較低。程序中查詢采用JBCTF0,DO1指令,目的是當判到TF0=1后,必須用軟件復位TF0,為下次計數(shù)器回零溢出做好準備,這條指令具有判TF0為1后清零的雙重功能。方式最小定時最大定時01×1/fosc×128192×1/fosc×1211×1/fosc×1265536×1/fosc×122、31×1/fosc×12256×1/fosc×12最大計數(shù)值擴大計數(shù)個數(shù)和定時時間

[例]利用MCS-51單片機的T/C,產(chǎn)生電子時鐘的1s基時,并且由P1.7輸出2s的方波。(fosc=12MHz)焦點:16位計數(shù)器最大定時65.536ms。要產(chǎn)生比這個時間長的定時,怎么辦?1.兩個定時器級聯(lián)-一個T/C定時,回0溢出時,使P1.0輸出一個負脈沖送到另一個T/C的外部脈沖輸入端用以計數(shù)。2.硬件定時加軟件計數(shù)相結合

首先選T0為模式2,外部事件計數(shù)方式。當P3.4引腳上的電平發(fā)生負跳變時,T0計數(shù)器加1,溢出標志TF0置1;然后改變T0為500us定時工作方式,并使P1.0輸出由1變?yōu)?。T0定時到產(chǎn)生溢出,使P1.0引腳恢復輸出高電平,T0又恢復外部事件方式。[例2]

當T0(P3.4)引腳上的電平發(fā)生負跳變時,從P1.0輸出一個500us的同步脈沖。請編程實現(xiàn)該功能。

⑴模式選擇T0工作在外部事件計數(shù)方式,當計數(shù)到28時,再加1計數(shù)器就會溢出。設計數(shù)初值為X,當再出現(xiàn)一次外部事件時,計數(shù)器溢出。則

X+1=28

X=28-1=11111111B=0FFH

T0工作在定時方式時,設晶振頻率為6MHz,機器周期為2us。因此,初值X為(28-X)=500us/2usX=28-250=6=06H

⑵計數(shù)初值

START:MOVTMOD,#06H;設置T0為方式2,外部計數(shù)

MOVTH0,#0FFH;計1個數(shù)

MOVTL0,#0FFHSETBTR0;啟動計數(shù)

LOOP1:JBCTF0,PTFO1;查詢溢出標志,TF0=1時轉移同時清除標志

SJMPLOOP1PTFO1:CLRTR0;停止計數(shù)

MOVTMOD,#02H;設置T0為方式2,定時方式

MOVTH0,#06H;定時500us

MOVTL0,#06H

CLRP1.0;P1.0清0

SETBTR0;啟動定時LOOP2:JBCTF0,PTFO2;查詢溢出標志,TF0=1時轉移同時清除標志

SJMPLOOP2PTFO2:SETBP1.0;P1.0置1(到了第一個500us)

CLRTR0;停止計數(shù)

SJMPSTART⑶程序清單

(1)送方式控制字(TMOD)=10010000B=90H;T/C1定時,方式1,GATE=1。(2)計算初值由于被測正脈沖寬度未知,假設寬度<=65.536ms,fosc=12MHz,則計數(shù)個數(shù):X=65536(最大)定時初值:C=65536-X=65536-65536=0(TH1)=00H(TL1)=00H

[例3]利用GATE門控位測量從INT1引腳輸入的正脈沖寬度。置1TR1 TH1TL1從0開始計數(shù)清0TR1,停止T/C1計數(shù)被測脈寬P3.3INT1圖6-12脈沖測試原理

ORG0000HMAIN:MOVSP,#6FMOVTMOD,#90HMOVTL1,#00HMOVTH1,#00HLOOP:JBP3.3,LOOPSETBTR1;由1變0時啟動TR1LOOP1:JNBP3.3,LOOP1;等待正脈沖到來并開始計數(shù)LOOP2:JBP3.3,LOOP2CLRTR1;由1變0時停止計數(shù)MOV30H,TL1MOV31H,TH1......ACALLCalc;計算子程序略

ACALLDIR;顯示子程序略

SJMP$END

程序清單:本例涉及到了定時器與中斷的聯(lián)合應用。時鐘就是以秒、分、時為單位進行計時。

(1)實現(xiàn)時鐘計時的基本方法①計算計數(shù)初值。時鐘計時的最小單位是秒,但使用單片機定時器/計數(shù)器進行定時,即使按方式1工作,其最大定時時間也只能達131ms.

鑒于此,可把定時器的定時時間定為100ms,這樣,計數(shù)溢出10次即得到時鐘計時的最小單位-----秒;而10次計數(shù)可用軟件方法實現(xiàn)。假定使用定時器T1,以工作模式1進行100ms的定時。如單片機晶振頻率為6MHZ,為得到100ms定時,設計數(shù)初值為X,則補充:設計定時時鐘程序②采用中斷方式進行溢出次數(shù)的累計,記滿10次即得到秒計時。③從秒到分和從分到時的計時是通過累加和數(shù)值比較實現(xiàn)的。④時鐘顯示及顯示緩存區(qū)部分留給讀者自己設計。

(2)程序流程及程序清單①主程序(MAIN)的主要功能是進行定時器T1的初始化編程并啟動T1,然后通過反復調用顯示子程序,等待100ms定時中斷的到來。其流程圖如圖6-13所示。②中斷服務程序(PITO)的主要功能是進行計時操作。程序開始先判斷計數(shù)溢出是否滿了10次,不滿10次表明還沒達到最小計時單位-----秒,中斷返回;滿10次表示已達到最小計時單位----秒,程序繼續(xù)往下運行,進行計時操作。要求滿1秒則“秒位”32H單元內容加1,滿60s則“分位”31H單元內容加1,滿60min則“時位”30H單元內容加1,滿24h則將30H,31H,32H的內容全部清0。

設T1為模式1設中斷次數(shù)為10清計時單元

調用顯示子程序啟動T1開中斷圖時鐘主程序流程源程序如下:

ORG0000HAJMPMAIN;上電,轉向主程序

ORG001BH;T1的中斷入口地址

AJMPSERVE;轉向中段服務程序MAIN:MOVTMOD,#10H;設T1工作于模式1

MOV20H,#0AH;裝入中斷次數(shù)

CLRAMOV30H,A;時單元清0

MOV31H,A;分單元清0

MOV32H,A;秒單元清0

SETBET1;允許T1中斷

SETBEA;允許CPU中斷

MOVTH1,#3CHMOVTL1,#0B0H;賦計數(shù)初值

SETBTR1;啟動定時器T1

SJMP$;等待中斷(可反復調用顯示子程序)SERVE:PUSHPSWPUSHACC;保護現(xiàn)場

MOVTH1,#3CHMOV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論