版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章
單片機(jī)的定時器/計數(shù)器從應(yīng)用的角度重點(diǎn)講述MCS-51單片機(jī)的定時器/計數(shù)器的結(jié)構(gòu)、工作原理和C語言編程方法。第5章
單片機(jī)的定時器/計數(shù)器定時器/計數(shù)器的基本結(jié)構(gòu)和工作原理5.1定時器/計數(shù)器的工作方式5.2定時器/計數(shù)器的應(yīng)用5.35.1.1定時器/計數(shù)器的基本結(jié)構(gòu)
5.1
定時器/計數(shù)器的基本結(jié)構(gòu)和工作原理定時器/計數(shù)器的核心部件是加1計數(shù)器。定時器模式時,是對內(nèi)部機(jī)器周期計數(shù)。計數(shù)值乘以機(jī)器周期就是定時時間。計數(shù)器模式時,是對外部事件計數(shù)。脈沖由T0(P3.4)或T1(P3.5)引腳輸入。
5.1.2
定時器/計數(shù)器的工作原理MCS-51單片機(jī)中有兩個SFR與定時/計數(shù)有關(guān):TMOD用于設(shè)置定時器/計數(shù)器的工作模式和工作方式TCON用于控制定時器/計數(shù)器的啟動、停止和中斷請求1.工作方式寄存器TMOD(89H)
D7D6D5D4D3D2D1D0TMOD(89H)GATEC/TM1M0GATEC/TM1M0←定時器/計數(shù)器T1→←定時器/計數(shù)器T0→5.1.3
定時器/計數(shù)器的控制TMOD中各位的含義如下:①M(fèi)1、M0—工作方式選擇位定時器/計數(shù)器有4種工作方式,由M1M0進(jìn)行設(shè)置,如下表所示。M1M0方式說明00方式013位定時器/計數(shù)器01方式116位定時器/計數(shù)器10方式2自動重新裝載的8位定時器/計數(shù)器11方式3T0分成兩個8位計數(shù)器,T1停止計數(shù)5.1.3
定時器/計數(shù)器的控制②C/T—定時/計數(shù)模式選擇位C/T=0,設(shè)置為定時模式,對內(nèi)部機(jī)器周期進(jìn)行計數(shù)。C/T=1,設(shè)置為計數(shù)模式,對來自T0、T1引腳的外部脈沖信號進(jìn)行計數(shù)。③GATE—門控位GATE=0時,只要用軟件使TCON中的運(yùn)行控制位TRx為1,就可以啟動Tx。GATE=1時,要用軟件使運(yùn)行控制位TRx為1,同時或引腳要為高電平時,才可以啟動Tx。注意:TMOD不能進(jìn)行位尋址。5.1.3
定時器/計數(shù)器的控制2.中斷請求標(biāo)志寄存器TCON(88H)TCON的高4位用于控制定時器/計數(shù)器的啟動、停止和中斷申請。格式如下所示:
D7D6D5D4D3D2D1D0(88H)8FH8EH8DH8CH8BH8AH89H88HTCONTF1TR1TF0TR0IE1IT1IE0IT0TFx:Tx溢出標(biāo)志位。響應(yīng)中斷后TFx由硬件自動清0。TRx:Tx運(yùn)行控制位。置1時開始工作;清0時停止工作。TRx要由軟件置1或清0(即啟動與停止要由軟件控制)。5.1.3
定時器/計數(shù)器的控制T0有方式0、1、2、3;T1有方式0、1、2。以T0為例說明。5.2.1方式0(13位計數(shù)器)方式0是為兼容MCS-48而設(shè)的,在實(shí)際應(yīng)用中幾乎不再使用。5.2
定時器/計數(shù)器的工作方式5.2.2方式1(16位計數(shù)器)5.2
定時器/計數(shù)器的工作方式門控位作用當(dāng)GATE=0時僅由TR0控制與門的開啟。與門輸出1時,控制開關(guān)接通,計數(shù)開始;當(dāng)GATE=1時與門的開啟由INT0和TR0共同控制。這種方式可以用來測量INT0引腳上正脈沖的寬度。
5.2
定時器/計數(shù)器的工作方式5.2.3方式2(8位自動重裝初值計數(shù)器)方式2省去了重裝初值的時間,可以實(shí)現(xiàn)精確的定時,常用于產(chǎn)生串行通信中的波特率。5.2
定時器/計數(shù)器的工作方式5.2.4方式3(僅T0有此方式,T1的方式3將停止計數(shù))TL0進(jìn)行8位定時/計數(shù)
TH0進(jìn)行8位定時(借用T1的TR1、TF1)
T0處于方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。5.2
定時器/計數(shù)器的工作方式5.3.1定時器/計數(shù)器初值計算和初始化1.計數(shù)初值的計算假設(shè)當(dāng)前工作方式下的最大計數(shù)值用M表示,則各種工作方式的最大計數(shù)值如下:方式0,M=213=8192;方式1,M=216=65536;方式2,M=28=256;方式3,M=28=256。5.3
定時器/計數(shù)器的應(yīng)用假設(shè)用X表示計數(shù)初值,N表示能產(chǎn)生溢出的計數(shù)值計數(shù)模式下,計數(shù)值與計數(shù)初值之間的關(guān)系如下:
X=M-N定時模式,計數(shù)值N乘以機(jī)器周期Tcy等于定時時間t,即:
t=N×Tcy=(M-X)×Tcy由此式可以得到計數(shù)初值X的表達(dá)式如下所示:
X=M-t/Tcy
其中Tcy=12/fosc。
5.3.1定時器/計數(shù)器初值計算和初始化【例5-1】假設(shè)定時時間為5ms,單片機(jī)主頻為6MHz,使用T0,求方式1的計數(shù)初值。解:Tcy=12/(6MHz)=2μs X=M-t/Tcy=M-5ms/(2μs)=M-2500對于方式1,X=216-2500=63036=0F63CH,其中低8位3CH要送入TL0,高8位F6H要送入TH0。5.3.1定時器/計數(shù)器初值計算和初始化2.定時器/計數(shù)器的初始化初始化的步驟如下:(1)對TMOD賦值,以設(shè)定T0和T1的工作模式和工作方式;(2)計算計數(shù)初值,并送入TH0、TL0、TH1、TH1;(3)給IE和IP賦值,以開放相應(yīng)中斷和設(shè)置中斷優(yōu)先級;(4)設(shè)置TR0、TR1,以啟動或禁止T0、T1的運(yùn)行。5.3.1定時器/計數(shù)器初值計算和初始化【例5-2】假設(shè)T0為定時模式,按方式2工作,TH0、TL0的初值均為0FH,且允許T0中斷,請對該定時器進(jìn)行初始化。TMOD=0x02; //T0為定時器方式2TL0=0x0f; //置計數(shù)初值TH0=0x0f;EA=1; //CPU開中斷ET0=1; //允許T0中斷TR0=1; //啟動T0工作參考程序5.3.1
定時器/計數(shù)器初值計算和初始化【例5-3】在某工廠的一條自動飲料生產(chǎn)線上,每生產(chǎn)12瓶飲料,就需要發(fā)出一個包裝控制信號自動執(zhí)行裝箱操作。試編寫程序完成這一計數(shù)任務(wù),假設(shè)用T0完成計數(shù),用P1.0發(fā)出控制信號,如下圖所示。5.3.2
計數(shù)應(yīng)用分析(1)選擇工作方式
因?yàn)橛嫈?shù)值為12,所以選用T0的工作方式2來完成此任務(wù)。
假設(shè)此時T1不工作,則方式控制字為TMOD=06H。(2)求計數(shù)初值XX=256-12=244=F4H
因此,TL0和TH0的初值都為F4H。5.3.2
計數(shù)應(yīng)用參考程序1(采用中斷方式)#include<reg51.h>#include<intrins.h>sbit P1_0=P1^0void main(){ TMOD=0x06; TH0=0xf4; TL0=0xf4; EA=1; ET0=1; TR0=1; P1_0=0; while(1); }void counter0()interrupt1{ P1_0=1; _nop_(); _nop_(); P1_0=0; }5.3.2
計數(shù)應(yīng)用參考程序2(采用查詢方式)void main() { TMOD=0x06; TH0=0xf4; TL0=0xf4; TR0=1; P1_0=0; while(1) { while(!TF0); TF0=0; P1_0=1; _nop_(); _nop_(); P1_0=0; }}5.3.2
計數(shù)應(yīng)用【例5-4】利用定時器T1的方式2對外部信號計數(shù),要求每計滿100個數(shù)將P1.7取反。分析(1)確定方式字
假設(shè)此時T0不工作,則T1工作在方式2的控制字為TMOD=60H。(2)計算初值
X=28-100=156=9CH
因此,TL1和TH1的初值都為9CH。5.3.2
計數(shù)應(yīng)用參考程序#include<reg51.h>sbit P1_7=P1^7 ; void main() { TMOD=0x60; TH1=0x9c; TL1=0x9c; EA=1; ET1=1; TR1=1; while(1); }void counter1()interrupt3 //T1的中斷服務(wù)函數(shù){ P1_7=!P1_7; }5.3.2
計數(shù)應(yīng)用【例5-5】假設(shè)系統(tǒng)時鐘頻率為6MHz,現(xiàn)欲利用定時器T0每隔1ms產(chǎn)生寬度為1個機(jī)器周期的正脈沖,并由P1.0送出,如下圖所示,請編程實(shí)現(xiàn)該功能。5.3.3
定時應(yīng)用分析(1)選擇工作方式
因?yàn)門cy=12/fosc=2μs,由定時器各種工作方式的特性,可計算出:
方式0最長可定時16.384ms;方式1最長可定時131.072ms;方式2、3最長可定時512
s。
本題中定時時間t=1ms,選則T0的工作方式1來完成此任務(wù)。假設(shè)此時T1不工作,則方式控制字為TMOD=01H。(2)計算初值X X=216-1000μs/2μs=65536-500=65036=FE0CH
因此T0的初值為TH0=0FEH,TL0=0CH。5.3.3
定時應(yīng)用參考程序1(采用中斷工作方式)#include<reg51.h>sbit P1_0=P1^0; void main() { TMOD=0x01; TH0=0xfe; TL0=0x0c; EA=1; ET0=1; TR0=1; P1_0=0; while(1);}void timer0()interrupt1 { P1_0=1; P1_0=0; TH0=0xfe; TL0=0x0c;}5.3.3
定時應(yīng)用參考程序2(采用查詢工作方式)#include<reg51.h> sbit P1_0=P1^0 ; void main() { TMOD=0x01; TH0=0xfe; TL0=0x0c; TR0=1; P1_0=0; while(1) { while(!TF0); TF0=0; P1_0=1; P1_0=0; TH0=0xfe; TL0=0x0c; }}5.3.3
定時應(yīng)用【例5-6】設(shè)時鐘頻率為12MHz,編程實(shí)現(xiàn)用定時器T1產(chǎn)生50Hz的方波,并由P1.7輸出此方波。分析(1)選擇工作方式
因?yàn)門cy=12/fosc=1μs,所以方式0最長可定時8.912ms;方式1最長可定時65.536ms;方式2、3最長可定時256
s。
因?yàn)?0Hz方波的周期為20ms,所以本題的定時時間為10ms,所以選擇T1的工作方式1來完成此任務(wù)。假設(shè)此時T0不工作,則方式控制字為TMOD=10H。(2)計算初值XX=216-10000μs/1μs=65536-10000=55536=D8F0H
因此T1的初值為TH1=0D8H,TL1=0F0H。5.3.3
定時應(yīng)用參考程序
#include<reg51.h> sbit P1_7=P1^7; void main() { TMOD=0x10; TH1=0xd8; TL1=0xf0; EA=1; ET1=1; TR1=1; while(1); }void counter1()interrupt3 { P1_7=!P1_7; TH1=0xd8; TL1=0xf0;}5.3.3
定時應(yīng)用【例5-7】89C51的P2口接了8個發(fā)光二極管,要求通過定時器1實(shí)現(xiàn)8個發(fā)光二極管每隔1s從右向左依次循環(huán)點(diǎn)亮。假設(shè)系統(tǒng)時鐘頻率為12MHz。電路如下圖所示。5.3.3
定時應(yīng)用分析①選擇工作方式本題定時時間較長,超出方式0~3的最長定時范圍,所以不能直接采用方式0~3實(shí)現(xiàn)該定時功能。我們可以將這1s定時時間分成若干份,每份定時時間在所選工作方式的定時范圍內(nèi),然后用軟件進(jìn)行計數(shù)來實(shí)現(xiàn)該功能。
本題選擇T1的工作方式1,每隔50ms中斷一次,中斷20次為1s。假設(shè)此時T0不工作,則方式控制字為TMOD=10H。
②計算計數(shù)初值
X=216-50000/1=15536=3CB0H
因此:TH1=3CH,TL1=B0H。③20次計數(shù)的實(shí)現(xiàn)
采用循環(huán)程序的方法實(shí)現(xiàn)中斷20次計數(shù)。5.3.3
定時應(yīng)用參考程序#include<reg51.h>#include<intrins.h> #defineucharunsignedcharuchar num; void main() { TMOD=0x10; TH1=0x3c; TL1=0xb0; EA=1; ET1=1; TR1=1; num=0; P2=0xfe; while(1); }void timer1()interrupt3{ num++; if(num==20)
{ num=0; P2=_crol_(P2,1); } TH1=0x3c; TL1=0xb0;}5.3.3
定時應(yīng)用【例5-8】利用T0確定INT0引腳出現(xiàn)的正脈沖的寬度,并將測量結(jié)果(以機(jī)器周期的形式)存放在30H和31H兩個單元中。分析
要想測量INT0引腳出現(xiàn)的正脈沖的寬度,首先要設(shè)T0為方式1的定時模式,TR0置1,門控位GATE置1,初值取0。這樣當(dāng)INT0引腳變?yōu)楦唠娖綍r采用外觸發(fā)方式啟動T0定時,即對機(jī)器周期計數(shù);當(dāng)外部INT0引腳變?yōu)榈碗娖綍r停止T0定時,這時TH0和TL0中的值就是INT0引腳為高電平期間的所經(jīng)過機(jī)器周期數(shù)。處理過程如下圖所示。5.3.4
門控位的應(yīng)用參考程序
#include<reg51.h> #define
ucharunsignedchardata
ucharTL_at_0x30;data
ucharTH_at_0x31;sbit P3_2=P3^2; void main() { TMOD=0x09; TH
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45166-2024無損檢測紅外熱成像檢測總則
- 我和我的家鄉(xiāng)觀后感集錦15篇
- 乙肝病毒的傳播與預(yù)防
- 小學(xué)學(xué)校章程建設(shè)工作方案
- 國家電網(wǎng)安全生產(chǎn)培訓(xùn)
- 康復(fù)新液聯(lián)合點(diǎn)陣射頻治療敏感性皮膚的臨床研究
- HDAC6激活cGAS-STING通路介導(dǎo)同型半胱氨酸誘導(dǎo)的神經(jīng)慢性炎癥
- 二零二五年度陜西石油化工行業(yè)勞動合同范本3篇
- 二零二五年度個人營養(yǎng)健康管理合同范本
- 康復(fù)護(hù)理品銷售工作總結(jié)
- 中央2025年公安部部分直屬事業(yè)單位招聘84人筆試歷年參考題庫附帶答案詳解
- 三年級數(shù)學(xué)(上)計算題專項(xiàng)練習(xí)附答案
- 中醫(yī)診療方案腎病科
- 2025年安慶港華燃?xì)庀薰菊衅腹ぷ魅藛T14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級下冊數(shù)學(xué)第七章 相交線與平行線 單元測試卷(含答案)
- 玩具有害物質(zhì)風(fēng)險評估-洞察分析
- (高清版)DZT 0073-2016 電阻率剖面法技術(shù)規(guī)程
- 完整2024年開工第一課課件
- 高一學(xué)期述職報告
- 三廢環(huán)保管理培訓(xùn)
- 醫(yī)院護(hù)理培訓(xùn)課件:《早產(chǎn)兒姿勢管理與擺位》
評論
0/150
提交評論