單片機(jī)的定時(shí)器計(jì)數(shù)器_第1頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第2頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第3頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第4頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章MCS-51單片機(jī)

的定時(shí)器/計(jì)數(shù)器2/4/202316.1計(jì)數(shù)/定時(shí)器的結(jié)構(gòu)CPU計(jì)數(shù)器/定時(shí)器T1計(jì)數(shù)器/定時(shí)器T0TL0TH07070168CH8AH8位的加1計(jì)數(shù)器TL1TH170708DH8B16TMOD(89H)方式寄存器機(jī)器周期定時(shí)模式P3.5P3.4計(jì)數(shù)模式只能字節(jié)尋址TCON(88H)控制寄存器TMOD(89H)GATEC/TM0M0GATEC/TM1M0D7D6D5D4D3D2D1D0TMOD:計(jì)數(shù)器/定時(shí)器方式寄存器定時(shí)/計(jì)數(shù)器0定時(shí)/計(jì)數(shù)器11:計(jì)數(shù)模式分別對(duì)P3.5P3.4的脈沖計(jì)數(shù)脈沖頻率<晶振頻率0:定時(shí)模式對(duì)機(jī)器周期脈沖計(jì)數(shù)TCON88hTF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0計(jì)數(shù)器/定時(shí)器控制寄存器TR1=1計(jì)數(shù)/定時(shí)器1開始計(jì)數(shù)TR1=0計(jì)數(shù)/定時(shí)器1停止計(jì)數(shù)TR0=1計(jì)數(shù)/定時(shí)器0開始計(jì)數(shù)TR0=0計(jì)數(shù)/定時(shí)器0停止計(jì)數(shù)計(jì)數(shù)/定時(shí)器0的工作原理16位計(jì)數(shù)器TL0TH0TR0工作模式選擇定時(shí)計(jì)數(shù)TF0啟動(dòng)與停止控制振蕩器12P3.4晶振頻率fosc=12MHz123456789101112計(jì)數(shù)頻率fc=1MHz1s機(jī)器周期機(jī)器周期&GATE1T0啟動(dòng)方式兩種:軟件(GATE0=0):

TR0=1硬件(GATE0=1,TR0=1):門控位0定時(shí)計(jì)數(shù)00000123456555300000123455556300000TMOD(89H)GATEC/TM0M0GATEC/TM1M0D7D6D5D4D3D2D1D0TMOD:計(jì)數(shù)器/定時(shí)器方式寄存器定時(shí)/計(jì)數(shù)器0定時(shí)/計(jì)數(shù)器1M1M0工作方式功能說明00方式013位定時(shí)器/計(jì)數(shù)器01方式116位定時(shí)器/計(jì)數(shù)器10方式28位自動(dòng)重裝定時(shí)器/計(jì)數(shù)器11方式3

T0分成兩個(gè)獨(dú)立的8位定時(shí)器/計(jì)數(shù)器;T1在該方式下停止計(jì)數(shù),在其他方式下可工作,但不能產(chǎn)生溢出中斷請(qǐng)求標(biāo)志6.3.1方式0圖6-4定時(shí)器/計(jì)數(shù)器工作于方式0時(shí)的邏輯結(jié)構(gòu)圖選擇開關(guān)接通的計(jì)數(shù)脈沖是機(jī)器周期脈沖,T0對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)。定時(shí)時(shí)間由如下公式確定。定時(shí)時(shí)間

=

計(jì)數(shù)值

×

機(jī)器周期

=

(213?計(jì)數(shù)初值)

×

機(jī)器周期其中,機(jī)器周期

=

時(shí)鐘周期

×

12213是T0在方式0時(shí)的最大計(jì)數(shù)值。1.當(dāng)=

0時(shí),為定時(shí)模式在定時(shí)應(yīng)用中,只要根據(jù)需要定時(shí)的時(shí)間值計(jì)算出計(jì)數(shù)初值,送入TH0、TL0中,便可以實(shí)現(xiàn)精確定時(shí),計(jì)數(shù)初值按如下公式計(jì)算。計(jì)數(shù)初值

=

213

?

定時(shí)時(shí)間/機(jī)器周期如果晶振頻率為12MHz,則時(shí)鐘周期為(1/12)s,機(jī)器周期為1s,當(dāng)初值為0時(shí),方式0的最長(zhǎng)定時(shí)時(shí)間為8.192ms。解:根據(jù)公式,計(jì)算如下。計(jì)數(shù)初值

=

213

?

定時(shí)時(shí)間/機(jī)器周期

=

213

?

2ms/1s

=

6192

=

1100000110000B

即TH0應(yīng)裝入計(jì)數(shù)初值的高8位為C1H,TL0應(yīng)裝入計(jì)數(shù)初值的低5位為10H。【例6-1】若單片機(jī)使用的晶振頻率為12MHz。請(qǐng)計(jì)算采用T0方式0定時(shí)2ms所需的定時(shí)器初值。MOVTH0,#0C1HMOVTL0,#10H6.3.2方式1圖6-5定時(shí)器/計(jì)數(shù)器工作于方式1時(shí)的邏輯結(jié)構(gòu)圖方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位,TH0作為高8位,組成了16位加1計(jì)數(shù)器。計(jì)數(shù)模值為216。計(jì)數(shù)初值的計(jì)算公式如下。計(jì)數(shù)初值

=

216

?

定時(shí)時(shí)間/機(jī)器周期如果晶振頻率為12MHz,則時(shí)鐘周期為1/12s,機(jī)器周期為1s,方式1的最長(zhǎng)定時(shí)時(shí)間為65.536ms。解:根據(jù)公式,計(jì)算如下。計(jì)數(shù)初值

=

216

?

定時(shí)時(shí)間/機(jī)器周期

=65536

?

2ms/1s

=

63536

=

F830H

即TH0應(yīng)裝入計(jì)數(shù)初值的高8位為F8H,TL0應(yīng)裝入計(jì)數(shù)初值的低8位為30H?!纠?-2】若單片機(jī)使用的晶振頻率為12MHz。請(qǐng)計(jì)算采用T0方式1定時(shí)2ms所需的定時(shí)器初值。MOVTH0,#0F8HMOVTL0,#30H上述兩種方式,應(yīng)先裝入計(jì)數(shù)初始值,并設(shè)定工作方式,然后啟動(dòng)計(jì)數(shù)/定時(shí)器,當(dāng)計(jì)數(shù)器計(jì)滿溢出時(shí),回到全0,自動(dòng)向CPU發(fā)出溢出中斷請(qǐng)求,計(jì)數(shù)器從0開始計(jì)數(shù)。注意:若需要定時(shí)器/計(jì)數(shù)器工作,從需要的初始值進(jìn)行計(jì)數(shù),必須重裝初值。

ORG0000HLJMPMAINORG000BHCPLP1.0MOVTH0,#7fHMOVTL0,#7fH ;重裝計(jì)數(shù)初值

RETIMAIN:MOVTMOD,#01H ;置T0為定時(shí)方式1MOVTH0,#7fHMOVTL0,#7fH;送入計(jì)數(shù)初值

SETBEA ;開放總中斷

SETBET0 ;允許T1中斷

SETBTR0 ;啟動(dòng)T1工作

SJMP$END6.3.3方式2圖6-6定時(shí)器/計(jì)數(shù)器工作于方式2時(shí)的邏輯結(jié)構(gòu)圖1初值寄存器定時(shí)器初始化時(shí),必須將計(jì)數(shù)初值同時(shí)送入TL0和TH0 計(jì)數(shù)初值

=

28

?

定時(shí)時(shí)間/機(jī)器周期當(dāng)TL0計(jì)滿溢出時(shí),由硬件電路使TF0置1,向CPU發(fā)出中斷請(qǐng)求,并將TH0中的計(jì)數(shù)初值自動(dòng)送入TL0,TL0從初值重新進(jìn)行加1計(jì)數(shù)。不需軟件重裝初值,適用于較精確的脈沖信號(hào)發(fā)生器。如果晶振頻率為12MHz,則時(shí)鐘周期為(1/12)s,機(jī)器周期為1s,方式2的最長(zhǎng)定時(shí)時(shí)間為0.256ms。6.3.4方式3定時(shí)器T1不能工作在方式3,一旦設(shè)定T1為方式3,則T1自動(dòng)停止工作。

圖6-7定時(shí)器/計(jì)數(shù)器工作方式3邏輯結(jié)構(gòu)圖1方式3:T0分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。TL0使用T0的所有控制位:

GATE、TR0、TF0和。當(dāng)TL0計(jì)數(shù)溢出時(shí),由硬件電路使TF0置1,向CPU發(fā)出中斷請(qǐng)求。

TH0固定為定時(shí)方式使用T1的控制位:TR1、TF16.4定時(shí)器/計(jì)數(shù)器應(yīng)用舉例【例6-3】

利用T0擴(kuò)展一個(gè)外部中斷源的初始化程序。解:將T0設(shè)置為計(jì)數(shù)器方式從P3.4引腳輸入下降沿信號(hào),向CPU發(fā)出中斷請(qǐng)求按方式0工作軟件啟動(dòng)計(jì)數(shù)初值6.4.1定時(shí)器/計(jì)數(shù)器用于外部中斷擴(kuò)展

ORG0000H

LJMPMAIN

ORG000BH

LJMPT0INTT0INT:

CPLP1.0

MOV TL0,#1FH ;送入計(jì)數(shù)初值

MOV TH0,#0FFH

RETIMAIN:MOV

TMOD,#04H ;置T0為計(jì)數(shù)方式0

MOV

TL0,#1FH ;送入計(jì)數(shù)初值

MOV

TH0,#0FFH

SETB

EA ;開放總中斷

SETB

ET0 ;允許T1中斷

SETB

TR0 ;啟動(dòng)T1工作

SJMP$

END初始化程序解:將T0設(shè)置為計(jì)數(shù)器方式從P3.4引腳輸入下降沿信號(hào),向CPU發(fā)出中斷請(qǐng)求按方式1工作軟件啟動(dòng)計(jì)數(shù)初值【例6-3】

利用T0擴(kuò)展一個(gè)外部中斷源的初始化程序。

ORG0000H

LJMPMAIN

ORG000BH

LJMPT0INTT0INT:

CPLP1.0

MOV TL0,#0FFH ;送入計(jì)數(shù)初值

MOV TH0,#0FFH

RETIMAIN:MOV

TMOD,#05H ;置T0為計(jì)數(shù)方式0

MOV

TL0,#0FFH ;送入計(jì)數(shù)初值

MOV

TH0,#0FFH

SETB

EA ;開放總中斷

SETB

ET0 ;允許T1中斷

SETB

TR0 ;啟動(dòng)T1工作

SJMP$

END解:將T0設(shè)置為計(jì)數(shù)器方式從P3.4引腳輸入下降沿信號(hào),向CPU發(fā)出中斷請(qǐng)求按方式2工作軟件啟動(dòng)計(jì)數(shù)初值【例6-3】

利用T0擴(kuò)展一個(gè)外部中斷源的初始化程序。

ORG0000H

LJMPMAIN

ORG000BH

CPLP1.0

RETIMAIN:MOV

TMOD,#06H ;置T0為計(jì)數(shù)方式0

MOV

TL0,#0FFH ;送入計(jì)數(shù)初值

MOV

TH0,#0FFH

SETB

EA ;開放總中斷

SETB

ET0 ;允許T1中斷

SETB

TR0 ;啟動(dòng)T1工作

SJMP$

END解:將T0設(shè)置為計(jì)數(shù)器方式從P3.4引腳輸入下降沿信號(hào),向CPU發(fā)出中斷請(qǐng)求按方式3工作軟件啟動(dòng)計(jì)數(shù)初值【例6-3】

利用T0擴(kuò)展一個(gè)外部中斷源的初始化程序。

ORG0000H

LJMPMAIN

ORG000BH

CPLP1.0

MOV

TL0,#

0FFH ;重裝計(jì)數(shù)初值

RETIMAIN:MOV

TMOD,#07H ;置T0為計(jì)數(shù)方式0

MOV

TL0,#0FFH ;送入計(jì)數(shù)初值

SETB

EA ;開放總中斷

SETB

ET0 ;允許T1中斷

SETB

TR0 ;啟動(dòng)T1工作

SJMP$

END結(jié)論:P3.4引腳每輸入一個(gè)下降沿信號(hào),都將TF0置1,向CPU發(fā)出一次中斷請(qǐng)求。相當(dāng)于擴(kuò)展了一個(gè)邊沿觸發(fā)的外部中斷源,中斷入口地址為000BH。6.4.2定時(shí)器/計(jì)數(shù)器在秒表項(xiàng)目中的應(yīng)用1.時(shí)基的設(shè)計(jì)2.實(shí)時(shí)時(shí)鐘的實(shí)現(xiàn)3.定時(shí)器初值的計(jì)算4.定時(shí)器的初始化5.時(shí)鐘程序分析1.時(shí)基的設(shè)計(jì)利用單片機(jī)的內(nèi)部定時(shí)器T0產(chǎn)生中斷來實(shí)現(xiàn)計(jì)時(shí)。設(shè)定定時(shí)器T0工作在定時(shí)工作方式1,定時(shí)時(shí)間為50ms(0.05s),T0啟動(dòng)后,定時(shí)時(shí)間到,便會(huì)產(chǎn)生溢出中斷請(qǐng)求,在其中斷服務(wù)程序中,通過指令重裝定時(shí)初值,于是,T0便會(huì)每隔50ms產(chǎn)生一次中斷,周而復(fù)始,獲得一個(gè)0.05s的時(shí)基信號(hào)。由于應(yīng)用項(xiàng)目選用的單片機(jī)外接晶振頻率為12MHz,所以時(shí)鐘周期為1/12s,一個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期,機(jī)器周期為1s。2.秒表項(xiàng)目的實(shí)現(xiàn)計(jì)數(shù)器0定時(shí)50ms溢出機(jī)器周期脈沖計(jì)數(shù)器1計(jì)數(shù)10次溢出中斷中斷1SP1.0S設(shè)置定時(shí)器T0工作于定時(shí)方式1(16位定時(shí)器/計(jì)數(shù)器),定時(shí)時(shí)間為50ms(0.05s)。因此,T0的定時(shí)器初值即計(jì)數(shù)初值為:計(jì)數(shù)初值

=

216

?

定時(shí)時(shí)間/機(jī)器周期

=

216

?

50ms/1s

=

15536

=

3CB0H3.定時(shí)器初值的計(jì)算定時(shí)器0初值的計(jì)算定時(shí)器1初值的計(jì)算設(shè)置定時(shí)器T0工作于計(jì)數(shù)方式1,計(jì)數(shù)初值

=

216

?

10

=65526

=

FFF6H或MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256MOVTH0,#3CHMOVTL0,#0B0H或MOVTH1,#(65536-10)/256MOVTL1,#(65536-10)MOD256MOVTH1,#0FFHMOVTL1,#0F6H(1)根據(jù)設(shè)定的定時(shí)器工作方式,給定時(shí)器/計(jì)數(shù)器方式寄存器TMOD送入一個(gè)相應(yīng)的方式控制字,以設(shè)定定時(shí)器/計(jì)數(shù)器的工作方式。(2)將計(jì)算好的定時(shí)器初值(計(jì)數(shù)初值)送入定時(shí)器,以確定需要的定時(shí)時(shí)間或計(jì)數(shù)初值。4.定時(shí)器的初始化對(duì)定時(shí)器T0、定時(shí)器T1進(jìn)行初始化的程序如下。MOVTMOD,#59H ;定時(shí)器0定時(shí)方式1,定時(shí)器1計(jì)數(shù)方式MOVTH0,#3CH ;置T0初值MOVTL0,#0B0HMOVTH1,#0FFH ;置T1初值MOVTL1,#0F6HMOVIE,#8AH ;允許中斷SETBIT1SETBTR0 ;啟動(dòng)定時(shí)器T0SETBTR1 ;啟動(dòng)定時(shí)器T0

定時(shí)器啟動(dòng)后,在初值基礎(chǔ)上不斷進(jìn)行加1計(jì)數(shù),直到計(jì)滿溢出時(shí),向CPU發(fā)出溢出中斷請(qǐng)求。這里定時(shí)時(shí)間為50ms,在P1.0引腳輸出周期為100ms的方波,10個(gè)脈沖(1秒)后,計(jì)滿溢出。

ORG0000HLJMPMAIN ;轉(zhuǎn)主程序

ORG000BHLJMPBREAK0;轉(zhuǎn)定時(shí)器T0中斷

ORG001BHLJMPCLOCK;轉(zhuǎn)定時(shí)器T1中斷

MAIN:MOVTMOD,#59H;定時(shí)器0定時(shí)方式1,定時(shí)器1計(jì)數(shù)方式

MOVTH0,#3CH ;置T0初值

MOVTL0,#0B0HMOVTH1,#0FFH ;置T1初值

MOVTL1,#0F6HMOVIE,#8AH ;允許中斷

SETBTR0 ;啟動(dòng)定時(shí)器T0SETBTR1 ;啟動(dòng)定時(shí)器T15.秒表程序分析

SECONDEQU30HORG0000HLJMPMAIN ;轉(zhuǎn)主程序

ORG000BHLJMPBREAK0;轉(zhuǎn)定時(shí)器T0中斷

ORG001BHLJMPCLOCK;轉(zhuǎn)定時(shí)器T1中斷 BREAK0:CPLP1.0MOVTH0,#3CH ;置T0初值

MOVTL0,#0B0HRETICLOCK:CLREAPUSHACCPUSHPSWSETBEAINCSECONDMOVTH1,#0FFH ;置T1初值

MOVTL1,#0F6HCLREAPOPPSWPOPACCSETBEARETIMAIN:MOVSECOND,#00HMOVTMOD,#59H;定時(shí)器0定時(shí)方式1,硬件啟動(dòng),定時(shí)器1計(jì)數(shù)方式

MOVTH0,#3CH ;置T0初值

MOVTL0,#0B0HMOVTH1,#0FFH ;置T1初值

MOVTL1,#0F6HMOVIE,#8AH ;允許中斷

SETBTR0 ;啟動(dòng)定時(shí)器T0SETBTR1 ;啟動(dòng)定時(shí)器T1CLRP1.0LOOP:MOVA,SECONDACALLBINBCDMOVR0,AANLA,#0FHMOVDPTR,#TAB;使用DPTR指向表首地址

MOVCA,@A+DPTR;查表

MOVP2,AMOVP0,#0FEHACALLDELAYMOVP0,#0FFH

MOVA,R0SWAPAANLA,#0FHMOVDPTR,#TAB;使用DPTR指向表首地址

MOVCA,@A+DPTR;查表

MOVP2,AMOVP0,#0FDHACALLDELAYMOVP0,#0FFH

溫馨提示

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

評(píng)論

0/150

提交評(píng)論