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

下載本文檔

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

文檔簡介

會計學(xué)1ATS單片機的定時器和計數(shù)器實現(xiàn)定時一般有三種方法:

1、利用軟件實現(xiàn)(延時程序);

優(yōu)點:簡單,控制方便;缺點:CPU效率低。

2、硬件實現(xiàn),專門設(shè)計一個單穩(wěn)態(tài)定時器:

優(yōu)點:CPU效率高;缺點:修改參數(shù)麻煩。

3、利用計數(shù)器實現(xiàn)單片機一般利用第三種方法實現(xiàn)計數(shù)器溢出輸入脈沖1us8位256us預(yù)置數(shù)第1頁/共31頁AT89S51內(nèi)部設(shè)有兩個16位的定時器/計數(shù)器,可用軟件控制。定時器:對機器周期計數(shù),每過一個機器周期,計數(shù)器內(nèi)容加1;計數(shù)器:對外來脈沖進行計數(shù),T0、T1引腳上從高電平到低電平跳變時,計數(shù)器內(nèi)容加1。外來脈沖T0機器周期片內(nèi)計數(shù)器單片機第2頁/共31頁6.1定時器/計數(shù)器的結(jié)構(gòu)定時器/計數(shù)器結(jié)構(gòu)如圖6-1所示,定時器/計數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成,定時器/計數(shù)器T1由特殊功能寄存器TH1、TL1構(gòu)成。

圖6-1AT89S51單片機的定時器/計數(shù)器結(jié)構(gòu)框圖第3頁/共31頁具有定時器和計數(shù)器2種工作模式,4種工作方式(方式0、方式1、方式2和方式3)。屬于增計數(shù)器。TMOD用于選擇定時器/計數(shù)器T0、T1的工作模式和工作方式。TCON用于控制T0、T1的啟動和停止計數(shù),同時包含了T0、T1的狀態(tài)。T0、T1不論是工作在定時器模式還是計數(shù)器模式,都是對脈沖信號進行計數(shù),只是計數(shù)信號的來源不同。計數(shù)器模式是對加在T0(P3.4)和T1(P3.5)兩個引腳上的外部脈沖進行計數(shù)(見圖6-1)。定時器工作模式是對單片機的時鐘振蕩器信號經(jīng)片內(nèi)第4頁/共31頁12分頻后的內(nèi)部脈沖信號計數(shù)。由于時鐘頻率是定值,所以可根據(jù)計數(shù)值可計算出定時時間。計數(shù)器的起始計數(shù)都是從計數(shù)器初值開始的。單片機復(fù)位時計數(shù)器的初值為0,也可用指令給計數(shù)器裝入一個新的初值。AT89S51的定時器/計數(shù)器屬于增1計數(shù)器。第5頁/共31頁二、定時器/計數(shù)器的工作原理

16位的定時器/計數(shù)器實質(zhì)上是一個加1計數(shù)器,可實現(xiàn)定時和計數(shù)兩種功能,其功能由軟件控制和切換。定時器屬硬件定時和計數(shù),是單片機中效率高而且工作靈活的部件。在定時器/計數(shù)器開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時器/計數(shù)器。將控制字寫入定時器/計數(shù)器的過程叫定時器/計數(shù)器的初始化。在初始化程序中,要將工作方式控制字寫入定時器方式寄存器(TMOD),工作狀態(tài)控制字(或相關(guān)位)寫入定時器控制寄存器(TCON),賦定時/計數(shù)初值給TH0(TH1)和TL0(TL1)。第6頁/共31頁

1、定時器/計數(shù)器的定時功能:計數(shù)器的加1信號由振蕩器的12分頻信號產(chǎn)生,即每過一個機器周期,計數(shù)器加1,直至計滿溢出。定時器的定時時間與系統(tǒng)的時鐘頻率有關(guān)。因一個機器周期等于12個時鐘周期,所以計數(shù)頻率應(yīng)為系統(tǒng)時鐘頻率的十二分之一。如果晶振頻率為12MHz,則機器周期為1s。通過改變定時器的定時初值,并適當(dāng)選擇定時器的長度(8位、13位或16位),可以調(diào)整定時時間。2、定時器/計數(shù)器的計數(shù)功能:通過外部計數(shù)輸入引腳T0(P3.4)和T1(P3.5)對外部信號計數(shù),外部脈沖的下降沿將觸發(fā)計數(shù)。計數(shù)器在每個機器周期的S5P2期間采樣引腳輸入電平,若一個機器周期S5P2期間采樣值為1,下一個機器周期S5P2期間采樣值為0,則計數(shù)器加1,再下一個機器周期S3P1期間,新的計數(shù)值裝入計數(shù)器。第7頁/共31頁因檢測一個由1至0的跳變需要兩個機器周期,故外部信號的最高計數(shù)頻率為時鐘頻率的二十四分之一。如果晶振頻率為12MHz,則最高計數(shù)頻率為0.5MHz。雖然對外部輸入信號的占空比無特殊要求,但為了確保給定電平在變化前至少被采樣一次,外部計數(shù)脈沖的高電平與低電平保持時間均需在一個機器周期以上。

如圖6-10所示,圖中Tcy為機器周期。第8頁/共31頁各位的功能說明:TF1(TCON.7,8FH位)----T1溢出標(biāo)志位。TF0(TCON.5,8DH位)----T0溢出標(biāo)志位。TR1(TCON.6,8EH位)----T1運行控制位。

0:關(guān)閉T1;1:啟動T1運行。TR0(TCON.4,8CH位)----T0運行控制位。

0:關(guān)閉T0;1:啟動T0運行。1.定時器控制寄存器定時器控制寄存器TCON的作用是控制定時器的啟動與停止,并保存T0、T1的溢出和中斷標(biāo)志。TCON的格式:可按位尋址6.1.1工作方式寄存器和控制寄存器

AT89S51單片機的定時器為可編程定時器,在定時器工作之前必須先進行初始化,即將控制命令寫入定時器控制寄存器。第9頁/共31頁

定時器方式寄存器TMOD的作用是設(shè)置T0、T1的工作方式。

TMOD的格式:2.定時器工作方式寄存器TMOD各位的功能說明:(1)GATE:門控位。GATE=0:軟件啟動定時器,即用指令使TCON中的TR1(TR0)置1即可啟動定時器1(定時器0)。GATE=1:軟件和硬件共同啟動定時器,即用指令使TCON中的TR1(TR0)置1時,只有外部中斷INT0(INT1)引腳輸入高電平時才能啟動定時器1(定時器0)。(2)C/T:功能選擇位。C/T=0時,以定時器方式工作。C/T=1時,以計數(shù)器方式工作。第10頁/共31頁M1M0工作方式功能描述00方式013位計數(shù)器01方式116位計數(shù)器10方式2自動重裝初值8位計數(shù)器11方式3定時器0:分為兩個獨立的8位計數(shù)器定時器1:無中斷的計數(shù)器定時器工作方式選擇位定義(3)M1、M0:方式選擇位。定時/計數(shù)器有四種工作方式,由M1M0進行設(shè)置。第11頁/共31頁二、定時器工作方式:由方式選擇位M1、M0設(shè)定。1、方式0(M1M0=00):13位定時/計數(shù)器。THx8位和TLx低5位組成加1計數(shù)器。計數(shù)外部脈沖個數(shù):1~8192(213)定時時間(若T=1s):1s~8.19msfoscT=12/fosc第12頁/共31頁16位定時/計數(shù)器。THx8位和TLx8位組成16位加1計數(shù)器。計數(shù)外部脈沖個數(shù):1~65536(216)定時時間(若T=1s):1s~(65536×T=65.54ms)2、方式1(M1M0=01):T=12/fosc第13頁/共31頁3、方式2(M1M0=10):

自動恢復(fù)初值8位定時/計數(shù)器。TLx為8位加1計數(shù)器,

THx為8位初值暫存器。用于需要重復(fù)定時和計數(shù)的場合。最大計數(shù)值:256(28)最大定時時間(若T=1s):256sT=12/fosc計數(shù)滿后自動裝入計數(shù)初值。省去用戶軟件中重裝初值的程序,精確的定時。第14頁/共31頁4、方式3(M1M0=11):T0分成2個8位定時器:TL0定時/計數(shù)器和TH0定時器;TL0占用T0控制位:C/T,TR0,GATE;TH0占用T1控制位:TR1、TF1;T1不能使用方式3工作,常作串口的波特率發(fā)生器使用。fosc振蕩器第15頁/共31頁T1工作在方式1T1工作在方式2T1工作在方式0T0處于方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。第16頁/共31頁4種工作方式中,方式0與方式1基本相同,由于方式0是為兼容MCS-48而設(shè),初值計算復(fù)雜,在實際應(yīng)用中,一般不用方式0,而采用方式1。方式2省去程序中重裝初值的指令,并可產(chǎn)生相當(dāng)精確的定時時間。

當(dāng)T1作串行口波特率發(fā)生器時,T0才設(shè)置為方式3。

第17頁/共31頁6.4定時器/計數(shù)器的編程和應(yīng)用

AT89S51的定時/計數(shù)器是可編程的,因此,在進行定時或計數(shù)之前也要用對其進行初始化。初始化一般應(yīng)包括以下幾個步驟:1、對TMOD寄存器賦值,以確定定時器的工作方式。2.置定時/計數(shù)器初值,直接將初值寫入寄存器的TH0,TL0或TH1,TL1。3.根據(jù)需要,對寄存器IE置初值,開放定時器中斷。4.對TCON寄存器中的TR1或TR0置位,啟動定時/計數(shù)器。啟動以后,計數(shù)器即按規(guī)定的工作方式和初值進行計數(shù)或開始定時。第18頁/共31頁定時/計數(shù)器初值的計算

2.計數(shù)器初值的計算在計數(shù)器模式下,此時計數(shù)器就計數(shù)引腳上到來的脈沖個數(shù),每檢測到一個脈沖下降沿,就加1一次。其計數(shù)脈沖個數(shù)S為:

S=M-X式中,M為計數(shù)器模值,該值和計數(shù)器工作方式有關(guān),在方式0時M為213;在方式1時M為216;在方式2和方式3時M為28。X是計數(shù)器的計數(shù)初值。1.定時器初值的計算在定時器模式下,計數(shù)器由單片機主脈沖經(jīng)12分頻后計數(shù),即就是對機器周期進行計數(shù)。則定時器定時時間t的公式:t=(M-X)×T定時初值:X=M-t/T式中,M為模值,和定時器的工作方式有關(guān),在方式0時M為213;在方式1時M為216;在方式2和方式3時M為28。T是機器周期;X是定時器的定時初值。

第19頁/共31頁例2:例:T0運行于定時器狀態(tài),時鐘振蕩周期為12MHZ,要求定時100s。求不同工作方式時的定時初值X并計算在不同工作方式下最大的定時時間tmax。解:fosc=12MHzT=1s由公式X=M-t/T

得:方式0(13位方式):X=213-100s/1s=1F9C當(dāng)T0的初值=0時為最大定時時間:tmax=(213-0)*1s=8.192ms方式1(16位方式):X=216-100s/1s=FF9CH

tmax=(216-0)*1s=65.536ms

方式2、3(8位方式):X=28-100s/1s=9CHtmax=(213-0)*1s=256s注意:工作方式0的初值裝入方法:1F9CH=0001111110011100B

可見,TH0=FCH,TL0=1CHTL0的低5位TH0的8位MOV TH0,#0FCHMOV TL0,#1CHT=12/fosc第20頁/共31頁定時器初始化編程:

使用定時器工作之前,先寫入控制寄存器,確定好定時器工作方式。初始化編程格式:MOVTMOD,#方式字;選擇方式MOVTHx,#XH

;裝入Tx時間常數(shù)MOVTLx,#XL(SETBEA ) ;開Tx中斷(SETBETx )SETBTRx

;啟動Tx定時器需考慮:1.按實際需要選擇定時/計數(shù)功能;

2.按時間或計數(shù)長度選擇工作方式;

3.計算時間常數(shù):計算時間常數(shù)X(計算初值):計數(shù)功能:X=2n-計數(shù)值

(n:8/13/16)定時功能:X=2n-t/T

(t:定時時間;

T:機器周期)第21頁/共31頁方法1:用延時程序?qū)崿F(xiàn)1mS的延時。

UP:SETBP1.0LCALLD2MSCLRP1.0LCALLD2MSSJMPUP方法2:用T0定時1mS,查詢TF0①確定工作方式方式0②計算初值E018H③編程

MOVTMOD,#00HSETBTR0LOOP:MOVTH0,#0E0HMOVTL0,#18HJNBTF0,$CPLP1.0

CLRTF0SJMPLOOP例1使P1.0輸出一個周期為2mS的方波。方法3:用T0定時1mS,中斷。

ORG0000HLJMPMAINORG000BHLJMPAT0MAIN:MOVTMOD,#00HMOVTH0,#0E0HMOVTL0,#18HSETBEASETBET0SETBTR0SJMP$AT0:MOVTMOD,#00HMOVTH0,#0E0HCPLP1.0RETIfosc=12MHz第22頁/共31頁(1)T0工作方式的確定定時時間較長,采用哪一種工作方式?由各種工作方式的特性,可計算出:

方式0最長可定時16.384ms;方式1最長可定時131.072ms;方式2最長可定時512s。欲定時1秒,這個值已經(jīng)超過了定時器的最大定時時間。為此,我們只有采用定時器定時和軟件計數(shù)相結(jié)合的方法才能解決問題。選方式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è)計參考程序:

例2

假設(shè)系統(tǒng)時鐘為6MHz,編寫定時器T0產(chǎn)生1秒定時的程序。第23頁/共31頁

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第24頁/共31頁6.4.4門控制位GATE的應(yīng)用—測量脈沖寬度GATE1可使定時器/計數(shù)器T1的啟動計數(shù)受INT1*的控制,可測量引腳INT1*(P3.3)上正脈沖的寬度(機器周期數(shù))。第25頁/共31頁參考程序:

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

ORG0100HMAIN:MOVSP,#60HMOVTMOD,#90H;T1為方式1定時控制字

MOVTL1,#00HMOVTH1,#00HLOOP0:JBP3.3,LOOP0;INT1*高,則循環(huán)

SETBTR1 ;如INT1*為低,啟動T1LOOP1:JNBP3.3,LOOP1;INT1*低,則循環(huán)LOOP2:JBP3.3,LOOP2;INT1*高,則循環(huán)CLRTR1 ;停止T1計數(shù)

MOVA,TL1 ;T1計數(shù)值送A

將A中的T1計數(shù)值送顯示緩沖區(qū)

溫馨提示

  • 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

提交評論