單片微機的定時器計數器原理及應用課件_第1頁
單片微機的定時器計數器原理及應用課件_第2頁
單片微機的定時器計數器原理及應用課件_第3頁
單片微機的定時器計數器原理及應用課件_第4頁
單片微機的定時器計數器原理及應用課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

51單片機IO端口操作的一個有趣現象:我想實現P1.1端口跟隨P1.4端口同步輸出,都是驅動LED,P1.4端口使用定時器定時翻轉,主循環(huán)程序隨時判斷P1.4狀態(tài),同步驅動P1.1。程序如下:看來沒問題,可是下載到單片機中,只見OUT閃爍,LED根本不動,奇怪??FLAGBIT00HCPLFLAGMOVC,FLAGMOVOUT,CMOVC,FLAG第六章

單片微機的定時器/計數器

原理及應用▲定時或計數方法:

1.硬件法: 定時功能完全由硬件電路完成,不占用CPU時間。2.軟件法:軟件定時是執(zhí)行一段循環(huán)程序來進行時間延時。3.可編程定時器/計數器:通過軟件編程來實現定時時間的改變,通過中斷或查詢方法來完成定時功能或計數功能。6-1概述6-1概述▲定時器資源:80C51包含有兩個16位的定時器/計數器:T0和T1;80C52包含有三個16位的定時器/計數器:T0、T1、T2在80C51系列的部分產品(如Philips公司的80C552)中,還包含有作看門狗的8位定時器T3。 ◆定時器/計數器的核心是一個加1計數器.其基本功能是計數加1。

◆計數∶是對單片微機的T0、T1(或T2)引腳上輸入的一個1到0的跳變進行計數增l。 ◆定時∶是對單片微機內部的機器周期進行計數,從而得到定時。 ◆波特率發(fā)生器∶80C51的定時器/計數器還可用作串行接口的波特率發(fā)生器。T0、T1的內部結構簡圖:6.2定時器/計數器T0、T1圖6–1定時器/計數器T0、T1的內部結構框圖⒉

定時器/計數器T0、T1的控制寄存器——TCON

位地址8FH8EH8DH8CH8BH8AH89H88H位名稱TF1TR1TF0TR0IE1IT1IE0IT0功能T1

中斷標志啟動T1T0中斷標志啟動T2中斷標志觸發(fā)方式中斷標志觸發(fā)方式⒊T0、T1的數據寄存器——TH1、TL1,TH0、TL0⒋定時器/計數器中斷⑴中斷允許寄存器IE

⑵中斷矢量⑶中斷優(yōu)先級寄存器IPT0:有4種工作方式可選(方式0,1,2,3)T1:有3種工作方式可選(方式0,1,2)⒈方式0--13位定時器/計數器(M1=0、M0=0)

最大計數值213=8192,當fosc=12MHZ時,Tmax=8192μS6.2.2定時器/計數器T0、T1的工作方式B=TRx·(GATE+INTx)⒊方式2----8位定時器/計數器自動重裝載(M1=1、M0=0)

優(yōu)點:定時初值可自動恢復,TH中存放初值;缺點:計數范圍小,最大計數值為28=256適用于需要重復定時,而定時范圍不大的應用場合,比如:作為串行口波特率發(fā)生器使用⒋方式3----僅T0有此方式,T1無方式3中斷矢量000BH中斷矢量001BH⑴T0方式3下的T0在方式3情況下,T0被拆成二個獨立的8位計數器TH0、TL0。▲TL0:8位定時/計數器,使用T0原有的控制寄存器資源:TF0,TR0,GATE,C/T,INT0,中斷矢量等;▲TH0:8位定時器,占用T1的中斷溢出標志TF1,運行控制開關TR1,中斷矢量001BH,只能對片內機器周期脈沖計數定時器/計數器T0方式3時,T1的邏輯結構圖80C52中的T2:16位▲功能:自動重裝載和捕獲能力▲相關寄存器:8位計數器TL2、TH2,控制寄存器T2CON, 模式寄存器T2MOD, 捕獲寄存器RCAP2L(低字節(jié))和RCAP2H(高字節(jié))。▲計數脈沖源:兩個----內部機器周期及 T2(P1.0)端輸入的外部計數脈沖。▲工作方式:3種--自動重裝載、捕獲和波特率發(fā)生器方式●引腳T2是外部計數脈沖輸入端●引腳T2EX是外部控制信號輸入端。6.3定時器/計數器T2

⒈控制寄存器T2CON位地址

CFHCEHCDHCCHCBHCAHC9HC8H位功能

TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL26.3.1T2中的特殊功能寄存器▲TF2——T2溢出標志,T2溢出時置位并申請中斷,軟件清除。在波特率發(fā)生器方式下,即RCLK=1或TCLK=1時,定時器溢出不對TF2置位?!鳨XF2——T2外部標志,EXF2要靠軟件來清除當EXEN2=1,且T2EX引腳上出現負跳變而造成捕獲或重裝載時EXF2置位,申請中斷。若已允許T2中斷,CPU將響應中斷,轉向中斷服務程序。▲TR2:T2運行控制位。軟件設置或清除▲C/T2:T2的定時器方式或計數器方式選擇位。C/T2=0時,定時器工作方式。計數脈沖的頻率為1/12fosc

C/T2=1時,計數器工作方式,下降沿觸發(fā)。計數脈沖自T2引腳輸入,每當外部脈沖負跳變時,計數器值增1。

▲CP/RL2:捕獲/重裝載標志。

CP/RL2=l選擇捕獲功能,這時若EXEN2=1,且T2EX端的信號負跳變時,發(fā)生捕獲操作。CP/RL2=0,選擇重裝載功能,這時若T2溢出或在EXEN2=1條件下T2EX端信號負跳變,都會造成自動重裝載操作。當RCLK=l或TCLK=l時,CP/RL2控制位不起作用,T2被強制工作于重裝載方式。重裝載發(fā)生于T2溢出時,常用來作波特率發(fā)生器。⒉方式控制寄存器——T2MODD7D6D5D4D3D2D1D0------T2OEDCEN

T2OE:T2輸出允許位。 當T2OE=1時,允許時鐘輸出至T2引腳。 僅對80C54/80C58有定義。DCEN:向下計數允許位 DCEN=1,T2向下(減)計數 DCEN=0,T2向上(加)計數⒊數據寄存器:TH2、TL2

T2有一個16位的數據寄存器,是由高8位寄存器TH2和低8位寄存器TL2所組成。它們都只能字節(jié)尋址,相應的字節(jié)地址為CDH和CCH。復位后,這兩個寄存器全部清零。⒋捕獲寄存器:RCAP2H、RCAP2L

T2中的捕獲寄存器是一個16位的數據寄存器,由高8位寄存器RCAP2H和低8位寄存器RCAP2L所組成,相應的字節(jié)地址為CBH和CAH。 捕獲寄存器RCAP2H和RCAP2L,用于捕獲計數器TL2、TH2的計數狀態(tài),或用來預置計數初值的。TH2、TL2和RCAP2H、RCAP2L之間接有雙向緩沖器(三態(tài)門)。 復位后,兩個寄存器全部清零。

▲定時器初值的計算 定時時間=脈沖數×脈沖周期(機器周期)

定時時間t=(2L-初值TC)×

6.5定時器/計數器的應用編程

6.5.1定時器的應用L與工作方式有關,13、16、8▲定時器溢出率為定時時間的倒數fosc=12MHZ時,1機周=1S;fosc=6MHZ時,1機周=2S解:⑴工作方式0:213–500S/2S=8192-250=7942=1F06H=1111100000110BTL0=00110B=06H TH0=B=F8H【例】已知晶振6MHz,要求定時0.5ms,試分別求出T0工作于方式0、方式1、方式2時的定時初值。解:分析采用方式0定時時間t=1ms=1000μS定時常數:TC=213-1000/2=8192-500=7692=01100B用定時器T0:TMOD=00H,TH0=F0H,TL0=0CH【例】要求在P1.0引腳上產生周期為2ms的方波輸出 fosc=6MHz▲查詢方式

ORG0000H AJMPST ORG0030HST: MOVSP,#60H MOVTMOD,#00H ;方式0L1: MOVTH0,#0F0H ;初值 MOVTL0,#0CH CPLP1.0 SETBTR0L2: JBCTF0,L1 SJMPL2 END▲中斷方式: ORG 0000H AJMP MAIN ORG 000BH ;T0中斷矢量 AJMPINQP ORG 0030HMAIN: MOVTMOD,#00H;設T0為定時器方式0 MOV TH0,#0F0H;寫定時常數(定時1ms)

MOV TL0,#0CH SETBTR0 ;啟動T0

SETB ET0 ;允許T0中斷

SETB EA ;開放CPU中斷

AJMP$ ;定時中斷等待

ORG 2000H ;T0中斷服務程序

INQP: MOVTH0,#0F0H ;重寫定時常數

MOV TL0,#0CH

CPL P1.0 ;P1.0變反輸出

RETI采用方式1定時時間t=1ms=1000μS定時常數:TC=216-1000/2=65535-500=65035=B=FE0BH用定時器T0:TMOD=01H,TH0=FEH,TL0=0BH編程與前相同如果要求產生周期為2S的方波,怎樣編程?【例】欲用80C51產生兩個方波,一個方波周期為200μs,另一個方波周期為400μs,該80C51同時使用串行口,用定時器/計數器作為波特率發(fā)生器,波特率為2400,

fOCS=9.216MHz

。分析:這時T0采用方式3工作,其中,TL0產生100μs定時,由P1.0輸出方波1TH0產生200μs定時,由Pl.1輸出方波2;T1設置為方式2,作波特率發(fā)生器用。計算:?TL0初值:?TH0初值:?TH1、TL1初值為:F6H編程: ORG 0000H AJMP MAIN ORG 000BH ;TL0的中斷入口 AJMPITL0 ORG 00lBH ;TH0的中斷入口 AJMPITH0 ORG0100HMAIN: MOVSP,#60H ;設棧指針 MOV TMOD,#23H ;設T0為方式3,TI為2 MOV TL0,#0B3H;設TL0初值(100μs定時) MOV TH0,#66H;設TH0初值(200μs定時) MOV TL1,#0F6H;設TL1初值(波特率為2400) MOV TH1,#0F6H;設TH1初值 SETB TR0;啟動TL0 SETB TR1;啟動TH0 SETB ET0;允許TL0中斷 SETB ET1;允許TH0中斷 SETB EA;CPU中斷開放 AJMP $ ORG 0200HITL0:MOVTL0,#0B3H ;重裝定時常數 CPL P1.0 ;輸出方波1(200μs) RETIITH0:MOVTH0,#66H ;重裝定時常數 CPL P1.1 ;輸出方波2(400μs) RETI不用方式3,能否只用T0產生兩個時間?【例】假如一個用戶系統已使用了兩個外部中斷源,即INT0和INT1,用戶系統要求從P1.0引腳上輸出一個5kHz的方波,并要求采用定時器/計數器作為串行口的波特率發(fā)生器,另外還需要再增加一個外部中斷源。 6.5.2計數器的應用▲分析:除兩個外中斷(INT0、INT1)外,還需要兩個定時器(5KHZ和波特率發(fā)生器)和一個計數器(擴展外中斷)把T0設置為方式3:TL0設置為計數器,TH0只能做8位定時器(產生5KHz方波),T1就作為波特率發(fā)生器,設為方式2。頻率5kHz即周期為200μs,則定時時間100μs,若采用12MHz的晶體振蕩器,則機器周期為1μs。

計算時間常數:TC=28-100/1=156▲編程: ORG 0000H SJMP MAIN ORG 000BH AJMP TL0INT ;TL0中斷入口

ORG 001BH AJMP TH0INT ;TH0中斷入口

ORG0030HMAIN:MOVTMOD,#27H;T0為方式3,TL0為計數方式,TH0為 ;定時;T1作波特率發(fā)生器,方式2 MOV TH0,#156 ;TH0定時常數 MOV TL0,#0FFH ;TL0計數常數 MOV TL1,#BAUD;BAUD根據波特率算出 MOV TH1,#BAUD MOV TCON,#55H;TR0和TR1為1,啟動TL0和TH0 MOVIE,#8AH SJMP $

ORG 0100HTL0INT: MOV TL0,#0FFH ;重置計數長度 (中斷處理) RETITH0INT: MOV TH0,#156 ;重置定時常數 CPL P1.0 ;P1.0引腳輸出方波 RETITF1TR1TF0TR0IE1IT1IE0IT0GATEC/TM1M0GATEC/TM1M0

門控位GATE可用作對INTx引腳上的高電平持續(xù)時間進行計量。通過反相器,則可測得相應INTx引腳上低電平的持續(xù)時間。兩個時間的和即為INTx引腳上輸入波形的周期,其倒數即為INTx引腳上輸入波形的頻率。還可算出占空比等參數。6.5.3門控位GATE的應用

【例】利用定時器/計數器測定圖示波形的一個周期長度?!治觯喝鬐ATE=1,則T1為定時器時,當TR1=1且INT1為高電平時,才啟動定時器。INT1(P3.3)TR1置1T1開始計時TR1清零查詢法 ORG 0000HSTART: MOV TMOD,#90H MOV TL1,#00H ;置為最大定時值 MOV TH1,#00H LP1: JB P3.3,LP1 ;P3.3為高電平,等待SETBTR1 ;當P3.3為低時,置TR1為1LP2: JNB P3.3,LP2 ;當P3.3為低電平時,再等待LP3: JB P3.3,LP3 ;當P3.3為高電平時,T1開 ;始定時計數

CLR TR1 ;當P3.3為低電平時,高電 ;平脈寬定時計數結束

SJMP $當fosc=12MHz時,最大被測脈寬為65536μs。此編程實際只測量了高電平的寬度,若被測波形除了接至P3.3,另外同時通過一個反相器接至P3.2(INT0),則通過編程同時可以測得波形的高電平寬度和低電平寬度。中斷法:【分析】對于脈沖寬度大于65.536ms的脈沖,可以采用對定時溢出次數進行計數的方法。這樣,脈寬為(定時溢出時間×溢出次數)+定時時間。測定脈沖周期可用圖示方法。T1腳上對下降沿計數二次,即為外部脈沖的一個周期時間。現設T1為計數器。計數值為2。設6MHz晶振,T0為方式1,定時溢出時間為100ms當計數值為1時,啟動定時器;當計數值為2時,中斷計數器T1,并停止定時器T0的定時。T1中斷優(yōu)先級設為高于定時器T0。計數初值為FFFEH:(TH1)=FFH,(TL1)=FEH。編程:ORG 0000H SJMP MAIN ORG 000BH ;定時器T0中斷入口 AJMP TIME0

ORG 00IBH ;定時器T1中斷入口 AJMPTIME1

ORG 0030HMAIN:MOVR0,#0 ;清除T0定時中斷次數計數器 MOV TMOD,#59H;T0為定時器,方式1,GATE=1 ;T1為計數器、方式1 MOV TH0,#3CH ;T0定時器初值 MOV TL0,#0B0H MOV TH1,#0FFH ;T1計數器初值 MOV TL1,#0FEH SETBTR0 ;啟動T0定時器 SETB TR1 ;啟動T1計數器 MOV IP,#08H;T1中斷優(yōu)先級高于T0 SETB ET1 ;允許T1中斷 SETB ET0 ;允許T0中斷 SETB EA ;CPU開中斷 SETB 20H ;設20H為T1計數中斷標志LOOP: SETBF0 ;設F0為T0定時中斷標志

JB F0,$ ;T0定時未溢出,等待 JB 20H,LOOP ;判T1若未溢出則循環(huán) SJMP $

ORG 0100H TIME0: MOV TL0,#0B0H;重置T0定時器初值 MOV TH0,#3CH

INC R0 ;T0定時溢出計數器加1 CPLF0 ;T0定時中斷標志變反 RETI ORG 0200HTIME1: CLRF0 ;清除T0定時中斷標志 CLR20H ;清除T1計數中斷標志 CLRET0 ;禁止T0、T1中斷 CLRET1 CLREA ;關中斷 RETI 80C51可以隨時讀寫計數寄存器TLx和THx(x為0或1),用于實時顯示計數值等。

辦法是:先讀THx,后讀TLx,再重讀THx,若兩次讀得的THx值是一樣的,則可以確定讀入的數據是正確的;若兩次讀得的THx值不一

溫馨提示

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

評論

0/150

提交評論