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

下載本文檔

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

文檔簡介

第12章定時/計數(shù)器MCS-51定時器/計數(shù)器的邏輯結(jié)構(gòu)框圖2個16位定時器/計數(shù)器

——(52系列有3個16位Timer)定時器:對片內(nèi)機器時鐘(周期方波)進行計數(shù)計數(shù)器:對Tx引腳輸入的負(fù)脈沖進行計數(shù)與Timer工作有關(guān)的特殊功能寄存器:

TCON和

TMODTimer的2個特殊功能寄存器(TCON,TMOD)TF1TR1TF0TR0IE1IT1IE0IT0定時器控制寄存器TCON(88H)P.330TFx:Timer0/1計數(shù)溢出標(biāo)志位。

=1計數(shù)溢出;=0計數(shù)未滿

TFx標(biāo)志位可用于申請中斷或供CPU查詢。在進入中斷服務(wù)程序時會自動清零;但在查詢方式時必須軟件清零。TRx:

Timer0/1運行控制位。

=1啟動計數(shù);=0停止計數(shù)定時器T0/T1中斷申請過程

在已經(jīng)開放T0/T1中斷允許且已被啟動的前提下:T0/T1加滿溢出時

TF0/TF1標(biāo)志位自動置“1”

檢測到TCON中TF0/TF1變“1”后,將產(chǎn)生指令:

LCALL000BH/LCALL001BH

執(zhí)行中斷服務(wù)程序

TF0/TF1標(biāo)志位會自動清“0”,以備下次中斷申請。

定時/計數(shù)器可按片內(nèi)機器周期定時,也可對由T0/T1引腳輸入一個負(fù)脈沖進行加法計數(shù)定時器方式寄存器TMOD(89H)P.329GATE

C/T

M1M0

GATE

C/T

M1M0T1T0M1、M0:工作方式定義位(定義4種方式):C/T:計數(shù)器/定時器選擇位

=1外部事件計數(shù)器。對Tx引腳的負(fù)脈沖計數(shù);

=0片內(nèi)時鐘定時器。對機器周期脈沖計數(shù)定時00:13位Timer——用它無益,不要記!

01:16位Timer——經(jīng)常用到

10:可自動重裝的8位Timer——經(jīng)常用到

11:T0分為2個8位Timer;T1此時不工作

——因為沒有帶來甚麼好處,幾乎無用GATE

C/TM1M0

GATE

C/TM1M0T1T0GATE門控位:Timer可由軟件與硬件兩者控制

GATE=0——普通用法

Timer的啟/停由軟件對TRx位寫“1”/“0”控制定時器方式寄存器TMOD(續(xù))(89H)

GATE=1——門控用法

Timer的啟/停由軟件對TRx位寫“1”/“0”

和在INTx引腳上出現(xiàn)的信號的高/低共同控制定時器結(jié)構(gòu)與工作方式工作方式1:——16位的定時/計數(shù)器振蕩器12TLxTHx

(8位)(8位)TFx申請中斷Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制=1開關(guān)接通或門與門GATE=1時,如何啟動定時計數(shù)器?

THx/TLx賦初值:THx賦高8位,TLx賦低8位工作方式1的編程要點:

TMOD選方式:寫“M1,M0”=01b選方式1

若不用門控位,直接用軟件寫TRx控制啟/停

若使用門控位,先置位TRx,然后由INTx端的高/低電平來控制其啟/停

若要允許中斷,還須先置位ETx、EA等中斷允許控制位,并編寫中斷服務(wù)程序

若不用中斷,可查詢“計數(shù)溢出標(biāo)志TFx”

的方式工作,但溢出標(biāo)志TFx須軟件清0定時器(方式1)應(yīng)用程序舉例:分析:已知fosc

=6MHz則:(振蕩周期)1Tc=1/6MHz

(機器周期)1Tm=12Tc=12/6MHz=2S

粗略地說:Tmin2S16位定時器最大數(shù)值為:216=65536=0FFFFH+1

故選擇方式1

工作可以得到:

Tmax=655362=131072S=131.072mS例:若晶振頻率為6MHz,計算單片機的最小與最大定時時間:分析:已知fosc

=6MHz則:(機器周期)1Tm=12Tc=12/6MHz=2S

需要計數(shù)次數(shù):100mS÷2S=5000016位定時器最大數(shù)值為:

216=65536(=0FFFFH+1)

故選擇方式1工作可以滿足要求。計算初值=M-計數(shù)值:65536-50000=15536=3CB0H例:要求對T0產(chǎn)生100mS定時進行初始化。

(晶振=6MHz)定時器(方式1)應(yīng)用程序舉例:GATEC/TM1M0GATEC/T

M1M0定時器方式寄存器TMOD由分析得知:T0選擇方式1,初值=3CB0H

XXXX00

01初始化:MOVTMOD,#01H

;選T0方式1MOVTH0,#3CH;賦初值高8位

MOVTL0,#0B0H;賦初值低8位

SETBTR0;啟動T0定時若需要定時器0產(chǎn)生中斷還應(yīng)當(dāng)寫如下語句:

SETBET0;開T0中斷允許

SETBEA;開總中斷允許以及相應(yīng)的中斷服務(wù)程序。工作方式2:——8位自動重裝的定時/計數(shù)器振蕩器12TLx(8位)TFx申請中斷Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制=1開關(guān)接通或門與門THx(8位)溢出位門開(三態(tài)門)?

THx/TLx賦相同初值

在TLx計數(shù)達(dá)到0FFH

再加“1”時,TL0

將溢出,進位位直接進入“TFx”去申請中斷,同時打開三態(tài)門,使THx中的值自動重裝(Copy)進TLx工作方式2的編程:?

TMOD寄存器選方式:寫“M1,M0”=10b

選中方式2?

其他用法與各種方式1完全相同分析:fosc

=6MHz1機器周期=2S1KHz方波周期=1mS

半個方波周期=500S500uS÷2uS=250

若選擇方式2工作,8位定時器最大數(shù)值為:

28=256=0FFH+1可以滿足要求。計算初值:256-250=6例:從P1.0腳輸出頻率=1KHz方波。設(shè):晶振=6MHz。利用T1定時中斷。Th:半周期T:周期定時器(方式2)應(yīng)用程序舉例:

ORG0000H

AJMP

MAIN

ORG001BH

;T1的中斷矢量

CPLP1.0

;中斷服務(wù):P1.0取非

RETI;中斷返回MAIN:

MOVTMOD,#20HMOVTH1,#6MOVTL1,#6SETBET1SETBEASETBTR1

HERE:AJMPHERE

;原地等待中斷

END初始化;選T1方式2;賦重裝值;賦初值;開T1中斷;開總中斷;啟動T1T0:組織成TL0和TH0兩個8位定時/計數(shù)器Timer工作方式3——幾乎無用T1:

不再是定時/計數(shù)器了

T1的TR1和TF1出借給TH0當(dāng)控制位使用,

剩下的TH1/TL1寄存器只能當(dāng)作普通寄存器用。定時計數(shù)器的初始化(一)初始化的步驟:1)確定定時器/計數(shù)器的工作方式、操作模式、啟動控制方式,并利用傳送指令將其寫入TMOD寄存器。2)設(shè)置定時器/計數(shù)器的初值。直接將初值寫入TH0、TL0或TH1、TL1中。3)根據(jù)要求考慮是否采用中斷方式,直接對IE位賦值。開放中斷時,對應(yīng)位置1;采用程序查詢方式時,IE中對應(yīng)位應(yīng)清0進行中斷屏蔽。4)啟動定時器/計數(shù)器工作。使用SETBTRi指令。

注意與GATAE的配合關(guān)系。2.計數(shù)初值的計算

當(dāng)T0或T1工作于定時器或計數(shù)器方式時,不同的工作方式、不同的操作模式其計數(shù)初值均不相同。若設(shè)最大計數(shù)值(溢出值)為M(模),各操作模式下的M值為:

模式0:M=213=8192

模式1:M=216=65536

模式2:M=28=256

模式3:M=28=256定時器T0分成2個獨立的8位計數(shù)器,所以TH0、TL0的M均為256。

MCS-51的兩個定時器均為加1計數(shù)器,當(dāng)加到溢出值時產(chǎn)生溢出,將TF位置l,可發(fā)出溢出中斷,因此,計數(shù)器初值X的計算式為:

X=M-計數(shù)值(通式)

T0或T1工作于定時器與計數(shù)器方式時,x的確定方法有別。1)計數(shù)器方式當(dāng)T0或T1工作于計數(shù)器方式時,計數(shù)脈沖由外部引入,它是對外部脈沖進行計數(shù)。因此計數(shù)值應(yīng)根據(jù)實際要求來確定。計數(shù)初值可采用通式計算,即:

X=M-計數(shù)值【舉例】:在方式1時,每接收100個外部事件,要求產(chǎn)生一個中斷,確定計數(shù)初值。

X=M-計數(shù)值=65536-100=65436=FF9CH1111111110011100THi=FFHTLi=9CH定時器初值計算公式:

當(dāng)T0或T1工作于定時器方式時,由于是對機器周期進行計數(shù),故計數(shù)值應(yīng)為定時時間對應(yīng)的機器周期個數(shù)。為此,應(yīng)首先將定時時間轉(zhuǎn)換為所需要記錄的機器周期個數(shù)(計數(shù)值)。其轉(zhuǎn)換公式為:

機器周期個數(shù)(計數(shù)值)=Tc/Tp式中Tc—定時時間;Tp—機器周期,Tp=12/fosc

;fosc為機器時鐘(震蕩器)的振蕩頻率。故計數(shù)初值的計算公式為:

X=M-計數(shù)值=M-Tc/Tp=M-(TC×fosc)/12?!九e例】:請計算定時50ms所需要的定時初值。fosc=12MHz1,確定模式:選擇模式1;2,計算定時初值。X=65536-50ms/1μs=65536-50000=15536=3CB0H

即THi=3CH;TLi=B0H定時器方式1應(yīng)用舉例(習(xí)題三.3)20ms10ms10ms例1:用T1產(chǎn)生一個50Hz的對稱方波,由P1.1輸出,采用程序查詢方式,fosc=12MHz?!窘狻浚菏紫却_定工作方式、工作模式和定時初值。

1,選定時方式(C/T=0);

2,模式1(M2M1=01);

3,方波周期T=1/50=0.02s=20ms,用T1定時10ms,

計數(shù)初值為:X=216-10×10-3×12×106/12=65536-10000=55536=D8F0H;即TH1=D8H,TL1=F0H。GATEC/TM1M0GATEC/TM1M0TMOD

0001

0000源程序如下:

ORG0000hLJMPT1BUS

ORG0030hT1BUS:MOV

TMOD,#10H

;T1模式1,定時

SETBTR1

;啟動T1LOOP:MOVTH1,#0D8H

;T1計數(shù)初值

MOVTL1,#0F0H

LOOP1:JNBTF1,LOOP1

;T1沒有溢出等待

CLRTF1;產(chǎn)生溢出清標(biāo)志位

CPLP1.1;P1.1取反輸出

SJMPLOOP;循環(huán)利用中斷方式編程

ORG0000hLJMPT1MIN

ORG001BhLJMPLOOP

ORG0030hT1MIN:

MOVTMOD,#10H

;T1模式1,定時

MOVTH1,#0D8H

;T1計數(shù)初值

MOVTL1,#0F0H

SETBEA;CPU、T1開中斷

SETBET1

SETBTR1

;啟動T1T1MIN2:NOPLJMPT1MIN2ORG0100h

LOOP:MOVTH1,#0D8H

;T1計數(shù)初值

MOVTL1,#0F0H

CPLP1.1;P1.1取反輸出

RETI

定時器門控位GATE的應(yīng)用(例12-2)在通常,在TMOD中GATE=0時,只要TR0=1便啟動定時器開始計數(shù)。如果GATE=1時,TR0=1電路是否計數(shù)取決于/INT0:

/INT0=1時開始計數(shù);/INT0=0,電路不計數(shù)。利用這一特點,可以實現(xiàn)測量外部脈沖的寬度。計數(shù)器震蕩器1/12TF0中斷計數(shù)控制T0引腳TR0GATEINT0C/T=0C/T=1MCS-51INT0

利用T0門控位測引腳上出現(xiàn)的正脈沖寬度,將所測得的高8位值存入片內(nèi)71H,低8位值存入片內(nèi)70H單元中。已知fosc=12MHz。

解題步驟:將外部脈沖接到P3.2(/INT0)上,使用T0且C/T=0;計數(shù)器TH0、TL0原始初值為00H,且設(shè)為模式1(16位),GATE設(shè)為1

;在/INT0=0時,啟動T0計數(shù)器(TR0=1);當(dāng)/INT0=1時,定時器T0開始計數(shù);當(dāng)/INT0=0時計數(shù)停止,此時TH0、TL0中的計數(shù)值就是與脈沖寬度相對應(yīng)得數(shù)據(jù)。MCS-51INT0

啟動T0T0開始計數(shù)計數(shù)停止(TR0=1)(/INT0=1)(/INT0=0)外部脈沖測試程序如下(仍用查詢方式)

ORG0000HLJMPT0MIN

ORG0030hT0MIN:

MOVTMOD,#09H

;T0定時,模式1,

;GATE=l

MOVTL0,#00H

;T0從0000H開始計數(shù)

MOVTH0,#00H

MOVR0,#70HLOOP:JBP3.2,LOOP;等待P3.2變低

CLREACLRET1

SETBTR0

;P3.2變低,準(zhǔn)備啟動T0LOOP1:JNBP3.2,LOOP1;等待P3.2變高,啟動計數(shù)

LOOP2:JBP3.2,LOOP2;等待P3.2再次變低

CLRTR0;停止計數(shù)

MOV@R0,TL0;存入計數(shù)值

INCR0MOV@R0,TH0::例12-3.試編寫由P1.0輸出一個周期為2分鐘的方波信號的程序。已知fosc=12MHz。

解:此例要求P1.0輸出的方波信號的周期較長,用一個定時器無法實現(xiàn)??刹捎枚〞r器加軟件計數(shù)的方法。方法:將T1設(shè)置為定時器方式,定時時間為10ms,工作于模式1;再利用T1的中斷服務(wù)程序作為軟件計數(shù)器實現(xiàn)一分鐘定時。T1計數(shù)初值:X=216-12×10×1000/12=55536=D8F0H。中斷服務(wù)程序所用到的地址單元安排如下:

40H單元作10ms的計數(shù)單元,計數(shù)值為1s/10ms=100次;

4lH單元作1s的計數(shù)單元,計數(shù)值為1min/1s=60次;位地址4FH作1分計時到的標(biāo)志位2m1m1mP1.0具體程序如下主程序:ORG0000HAJMP0030H

ORG001BHAJMP1100H;T1中斷ORG0030HMOVTMOD,#10H;T1定時,模式1MOVTH1,#0D8H;T1計數(shù)初值

MOVTL1,#0F0H

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論