第六課-定時(shí)器_第1頁
第六課-定時(shí)器_第2頁
第六課-定時(shí)器_第3頁
第六課-定時(shí)器_第4頁
第六課-定時(shí)器_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章定時(shí)器/計(jì)數(shù)器6.189C52的定時(shí)/計(jì)數(shù)器

實(shí)現(xiàn)定時(shí)功能,比較方便的辦法是利用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器。也可以采用下面三種方法:軟件定時(shí):軟件定時(shí)不占用硬件資源,但占用了CPU時(shí)間,降低了CPU的利用率。采用時(shí)基電路定時(shí):例如采用555電路,外接必要的元器件(電阻和電容),即可構(gòu)成硬件定時(shí)電路。但在硬件連接好以后,定時(shí)值與定時(shí)范圍不能由軟件進(jìn)行控制和修改,即不可編程。采用可編程芯片定時(shí):這種定時(shí)芯片的定時(shí)值及定時(shí)范圍很容易用軟件來確定和修改,此種芯片定時(shí)功能強(qiáng),使用靈活。在單片機(jī)的定時(shí)/計(jì)數(shù)器不夠用時(shí),可以考慮進(jìn)行擴(kuò)展。定時(shí)器/計(jì)數(shù)器模塊的基本用途常用于測量時(shí)間、速度、頻率、脈寬,提供定時(shí)脈沖信號,還能為編程人員提供準(zhǔn)確定時(shí)AT89C52中有3個(gè)定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器0定時(shí)器/計(jì)數(shù)器1定時(shí)器/計(jì)數(shù)器26.1定時(shí)器/計(jì)數(shù)器的基本用途6.2定時(shí)器/計(jì)數(shù)器0和1的結(jié)構(gòu)和工作原理

定時(shí)器/計(jì)數(shù)器0和1工作原理相關(guān)的特殊功能寄存器四種工作模式相關(guān)仿真實(shí)例6.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理

一、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位和低8位兩個(gè)寄存器組成。TMOD是定時(shí)/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)志。

二、定時(shí)/計(jì)數(shù)器的工作原理

加1計(jì)數(shù)器輸入的計(jì)數(shù)脈沖有兩個(gè)來源,一個(gè)是由系統(tǒng)的時(shí)鐘振蕩器輸出脈沖經(jīng)12分頻后送來;一個(gè)是T0或T1引腳輸入的外部脈沖源。每來一個(gè)脈沖計(jì)數(shù)器加1,當(dāng)加到計(jì)數(shù)器為全1時(shí),再輸入一個(gè)脈沖就使計(jì)數(shù)器回零,且計(jì)數(shù)器的溢出使TCON中TF0或TF1置1,向CPU發(fā)出中斷請求(定時(shí)/計(jì)數(shù)器中斷允許時(shí))。如果定時(shí)/計(jì)數(shù)器工作于定時(shí)模式,則表示定時(shí)時(shí)間已到;如果工作于計(jì)數(shù)模式,則表示計(jì)數(shù)值已滿。

可見,由溢出時(shí)計(jì)數(shù)器的值減去計(jì)數(shù)初值才是加1計(jì)數(shù)器的計(jì)數(shù)值。

設(shè)置為定時(shí)器模式時(shí),加1計(jì)數(shù)器是對內(nèi)部機(jī)器周期計(jì)數(shù)(1個(gè)機(jī)器周期等于12個(gè)振蕩周期,即計(jì)數(shù)頻率為晶振頻率的1/12)。計(jì)數(shù)值N乘以機(jī)器周期Tcy就是定時(shí)時(shí)間t

。設(shè)置為計(jì)數(shù)器模式時(shí),外部事件計(jì)數(shù)脈沖由T0或T1引腳輸入到計(jì)數(shù)器。在每個(gè)機(jī)器周期的S5P2期間采樣T0、T1引腳電平。當(dāng)某周期采樣到一高電平輸入,而下一周期又采樣到一低電平時(shí),則計(jì)數(shù)器加1,更新的計(jì)數(shù)值在下一個(gè)機(jī)器周期的S3P1期間裝入計(jì)數(shù)器。由于檢測一個(gè)從1到0的下降沿需要2個(gè)機(jī)器周期,因此要求被采樣的電平至少要維持一個(gè)機(jī)器周期。當(dāng)晶振頻率為12MHz時(shí),最高計(jì)數(shù)頻率不超過1/2MHz,即計(jì)數(shù)脈沖的周期要大于2s。

三、定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)1、工作寄存器:T0、T1為16位

T0分為:TH0(高8位),TL0(低8位)T1分為:TH1(高8位),TL1(低8位)例:向T0送0FEDHMOVTH0,#0FHMOVTL0,#0EDH

2、定時(shí)/計(jì)數(shù)器的控制

89C52單片機(jī)定時(shí)/計(jì)數(shù)器的工作由兩個(gè)特殊功能寄存器控制。TMOD用于設(shè)置其工作方式;TCON用于控制其啟動(dòng)和中斷申請。1)工作方式寄存器TMOD(*)

工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器的工作方式,低四位用于T0,高四位用于T1。其格式如下:GATE:門控位。GATE=0時(shí),只要用軟件使TCON中的TR0或TR1為1,就可以啟動(dòng)定時(shí)/計(jì)數(shù)器工作;GATA=1時(shí),要用軟件使TR0或TR1為1,同時(shí)外部中斷引腳也為高電平時(shí),才能啟動(dòng)定時(shí)/計(jì)數(shù)器工作。即GATE表示/INT0,/INT1是否參與對T1,T0進(jìn)行控制。

:定時(shí)/計(jì)數(shù)模式選擇位。=0為定時(shí)模式;=1為計(jì)數(shù)模式。M1M0:工作方式設(shè)置位。定時(shí)/計(jì)數(shù)器有四種工作方式,由M1M0進(jìn)行設(shè)置。TMOD不能進(jìn)行位尋址。系統(tǒng)復(fù)位后為0例:設(shè)置T1為軟件啟動(dòng),為定時(shí)器工作方式,選擇操作模式2,T0為計(jì)數(shù)方式,軟件啟動(dòng),選擇操作模式1TMOD各位為:00100101即25HMOVTMOD,#25H或MOV89H,#25H

3、控制寄存器TCON

TCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請。它可進(jìn)行位尋址,復(fù)位后為0。TF1(TCON.7):T1溢出中斷請求標(biāo)志位。T1計(jì)數(shù)溢出時(shí)由硬件自動(dòng)置TF1為1。CPU響應(yīng)中斷后TF1由硬件自動(dòng)清0。T1工作時(shí),CPU可隨時(shí)查詢TF1的狀態(tài)。所以,TF1可用作查詢測試的標(biāo)志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。TR1(TCON.6):T1運(yùn)行控制位。TR1置1時(shí),T1開始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。TF0(TCON.5):T0溢出中斷請求標(biāo)志位,其功能與TF1類同。TR0(TCON.4):T0運(yùn)行控制位,其功能與TR1類同。

6.3定時(shí)/計(jì)數(shù)器的工作方式

一、方式0

方式0為13位計(jì)數(shù),由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時(shí)向TH0進(jìn)位,TH0溢出時(shí),置位TCON中的TF0標(biāo)志,向CPU發(fā)出中斷請求。

二、方式1方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計(jì)數(shù)器。

三、方式2方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式。

工作方式2特別適合于用作較精確的脈沖信號發(fā)生器。

四、方式3方式3只適用于定時(shí)/計(jì)數(shù)器T0,定時(shí)器T1處于方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。

工作方式3將T0分成為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0

。

6.4T0,T1編程時(shí)應(yīng)注意的問題一、初始化1、將工作方式控制字寫入TMOD(確定工作方式,操作方式,啟動(dòng)控制方式)例:T1為16位,/INT1不參與控制,T1為定時(shí)器。控制字:00010000MOVTMOD,#10H2、將定時(shí)或計(jì)數(shù)初值寫入THi,TLi中(16位計(jì)數(shù)初值須分兩次寫入對應(yīng)的計(jì)數(shù)器)例:MOVTH1,#55HMOVTL1,#00H3、置ET1/ET0允許T1/T0申請中斷

例:SETBET0;允許T0中斷4、置EA,CPU對所有中斷開放SETBEA5、啟動(dòng)T1或T0(*)

SETBTR1SETBTR0二、初值計(jì)算T0,T1選擇不同的工作方式,不同的操作方式,其初值均不相同。設(shè)最大計(jì)數(shù)值為M,則各方式下的M值為:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:M=256(T0分為TH0和TL0,其M均為256)設(shè)計(jì)數(shù)初值為X,則X=M-計(jì)數(shù)值1、計(jì)數(shù)工作方式

脈沖由外部引入,對外部脈沖計(jì)數(shù),計(jì)數(shù)值根據(jù)要求確定。計(jì)數(shù)初值X=M-計(jì)數(shù)值例:某工序要求對外部脈沖信號計(jì)100次X=M-100

若為方式2,則X=256-100=1562、定時(shí)工作方式(*)

計(jì)數(shù)脈沖由內(nèi)部供給(相當(dāng)于對機(jī)器周期計(jì)數(shù)),計(jì)數(shù)脈沖頻率fcont=晶振頻率fosc/12所以:計(jì)數(shù)周期T=12/fosc,即每個(gè)脈沖的時(shí)間為12/fosc若要求的定時(shí)時(shí)間為t,則此時(shí)計(jì)數(shù)初值X=M-t/T=M-t/(12/fosc)=M-t*fosc/12例:設(shè)T0為計(jì)數(shù)器,以方式2工作,外界發(fā)生一次事件,溢出中斷;T1作為定時(shí)器,以操作方式1工作,定時(shí)時(shí)間為1ms(即延時(shí)1ms后就申請中斷),晶振頻率為6MHZ,計(jì)算T0,T1的計(jì)數(shù)初值。解:T0:計(jì)數(shù)器,方式2,X0=256-1=255=FFHT1:定時(shí)器,方式1,1msX1=65536-1ms*6*106/12 =65536-1*103/2=65536-500=65036=FE0CH三、初始化舉例(*)設(shè)T1為定時(shí)工作方式,定時(shí)50ms,選擇方式1,允許中斷,軟啟動(dòng); T0為計(jì)數(shù)工作方式,對外部脈沖計(jì)數(shù)10次,硬啟動(dòng),禁止中斷,選擇工作方式2; fosc=6MHZ解:T0:X0=256-10=246=F6H T1:X1=65536-50ms*6M/12 =65536-25000 =40536=9E58HTMOD=00011110=1EH初始化程序如下: MOVTMOD,#1EH MOVTH0,#0F6H MOVTL0,#0F6H MOVTH1,#9EH MOVTL1,#58H MOVIE,#88H SETBTR0; 要等到/INT0=1時(shí)方可真正啟動(dòng) SETBTR16.5定時(shí)器的操作方式及應(yīng)用1、方式0及應(yīng)用(僅用了TH和TL的低5位)(*)例:選用T0,操作方式0,用于定時(shí),由P1.0輸出周期為1ms的方波,設(shè)fosc=6MHZ解:定時(shí)時(shí)間為500μs

初始值X0=8192-t*fosc/12=8192-250 =7942=1F06H

但由于是13為定時(shí)器,TL0的高3位未用,則填入0,所以X0的實(shí)際值為F806H

ORG8000H MOVTMOD,#00H MOVTL0,#06H MOVTH0,#0F8H SETBTR0;啟動(dòng)T0,該程序未涉及中斷,所以可以不用設(shè)置IELP1:JBCTF0,LP2;TF0只有在申請中斷被響應(yīng)后才會自動(dòng)清0,這里不涉及中斷,所以人工清0 AJMPLP1LP2:MOVTL0,#06H MOVTH0,#0F8H CPLP1.0 SJMPLP12、方式1及應(yīng)用(16位)設(shè)單片機(jī)的fosc=12MHZ,要求在P1.0腳上輸出周期為2ms的方波解:定時(shí)間隔為1ms,每次時(shí)間到時(shí),P1.0取反。 機(jī)器周期為1μs,所以需計(jì)1000次

初值X=65536-1000

采用定時(shí)器0的方式1編程,采用中斷方式。 #include<reg51.h> sbitp1_0=p1^0; voidtimer0(void)interrupt1using1 {p1_0=!p1_0; TH0=(65536-1000)/256; TL0=(65536-1000)%256; } voidmain(void) {TMOD=0x01;

p1_0=0;TH0=(65536-1000)/256;TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; do{}while(1);}

3、方式2及應(yīng)用(如:用于外部中斷擴(kuò)展)

擴(kuò)展方法是,將定時(shí)/計(jì)數(shù)器設(shè)置為計(jì)數(shù)器方式,計(jì)數(shù)初值設(shè)定為滿程,將待擴(kuò)展的外部中斷源接到定時(shí)/計(jì)數(shù)器的外部計(jì)數(shù)引腳。從該引腳輸入一個(gè)下降沿信號,計(jì)數(shù)器加1后便產(chǎn)生定時(shí)/計(jì)數(shù)器溢出中斷。即實(shí)現(xiàn)邊沿觸發(fā)的外部中斷請求。例如,利用T0擴(kuò)展一個(gè)外部中斷源。將T0設(shè)置為計(jì)數(shù)器方式,按方式2工作,TH0、TL0的初值均為0FFH,T0允許中斷,CPU開放中斷。其初始化程序如下:

MOVTMOD,#06H;置T0為計(jì)數(shù)器方式2MOVTL0,#0FFH;置計(jì)數(shù)初值

MOVTH0,#0FFHSETBTR0;啟動(dòng)T0工作

SETBET0;允許T0中斷

SETBEA;CPU開中斷4、方式3及應(yīng)用(僅T0有此方式,T1沒有)1)結(jié)構(gòu)(*)T0:TH0(8位)只用作簡單的內(nèi)部定時(shí)器功能,使用原T1的TR1和TF1,占用了T1的中斷源。TH0的啟動(dòng)

溫馨提示

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

評論

0/150

提交評論