單片機(jī)原理及應(yīng)用(C51版)教案第5章 單片機(jī)的定時(shí)器計(jì)數(shù)器-16比9_第1頁
單片機(jī)原理及應(yīng)用(C51版)教案第5章 單片機(jī)的定時(shí)器計(jì)數(shù)器-16比9_第2頁
單片機(jī)原理及應(yīng)用(C51版)教案第5章 單片機(jī)的定時(shí)器計(jì)數(shù)器-16比9_第3頁
單片機(jī)原理及應(yīng)用(C51版)教案第5章 單片機(jī)的定時(shí)器計(jì)數(shù)器-16比9_第4頁
單片機(jī)原理及應(yīng)用(C51版)教案第5章 單片機(jī)的定時(shí)器計(jì)數(shù)器-16比9_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章

單片機(jī)的定時(shí)器/計(jì)數(shù)器從應(yīng)用的角度重點(diǎn)講述MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)、工作原理和C語言編程方法。第5章

單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)和工作原理5.1定時(shí)器/計(jì)數(shù)器的工作方式5.2定時(shí)器/計(jì)數(shù)器的應(yīng)用5.31.定時(shí)器/計(jì)數(shù)器的工作原理基本型:T0,定時(shí)、計(jì)數(shù)。

T1,定時(shí)、計(jì)數(shù)、串口波特率發(fā)生器。

5.1定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)和工作原理定時(shí)器/計(jì)數(shù)器的核心部件是加1計(jì)數(shù)器。定時(shí)器模式時(shí),是對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)。計(jì)數(shù)器模式時(shí),是對(duì)外部事件計(jì)數(shù)。脈沖由T0(P3.4)或T1(P3.5)引腳輸入。

機(jī)器周期×計(jì)數(shù)值=定時(shí)時(shí)間計(jì)數(shù)模式定時(shí)模式這是什么?2.定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)T0由TH0和TL0組成,T1由TH1和TL1組成TMOD用于設(shè)置定時(shí)器/計(jì)數(shù)器的工作模式和工作方式TCON用于控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)、停止和中斷請(qǐng)求5.1定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)和工作原理MCS-51單片機(jī)中有兩個(gè)SFR與定時(shí)器/計(jì)數(shù)器的控制有關(guān):TMOD用于設(shè)置定時(shí)器/計(jì)數(shù)器的工作模式和工作方式TCON用于控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)、停止和中斷請(qǐng)求1.工作方式寄存器TMOD(89H)

D7D6D5D4D3D2D1D0TMOD(89H)GATEC/TM1M0GATEC/TM1M0←定時(shí)器/計(jì)數(shù)器T1→←定時(shí)器/計(jì)數(shù)器T0→5.1.3

定時(shí)器/計(jì)數(shù)器的控制TMOD中各位的含義如下:①M(fèi)1、M0—工作方式選擇位定時(shí)器/計(jì)數(shù)器有4種工作方式,由M1M0進(jìn)行設(shè)置,如下表所示。M1M0方式說明00方式013位定時(shí)器/計(jì)數(shù)器01方式116位定時(shí)器/計(jì)數(shù)器10方式2自動(dòng)重新裝載的8位定時(shí)器/計(jì)數(shù)器11方式3T0分成兩個(gè)8位計(jì)數(shù)器,T1停止計(jì)數(shù)

D7D6D5D4D3D2D1D0TMOD(89H)GATEC/TM1M0GATEC/TM1M0←定時(shí)器/計(jì)數(shù)器T1→←定時(shí)器/計(jì)數(shù)器T0→5.1.3

定時(shí)器/計(jì)數(shù)器的控制②C/T—定時(shí)/計(jì)數(shù)模式選擇位C/T=0,設(shè)置為定時(shí)模式,對(duì)內(nèi)部機(jī)器周期進(jìn)行計(jì)數(shù)。C/T=1,設(shè)置為計(jì)數(shù)模式,對(duì)來自T0、T1引腳的外部脈沖信號(hào)進(jìn)行計(jì)數(shù)。③GATE—門控位GATE=0時(shí),只要用軟件使TCON中的運(yùn)行控制位TRx為1,就可以啟動(dòng)Tx。GATE=1時(shí),要用軟件使運(yùn)行控制位TRx為1,同時(shí)中斷引腳要為高電平時(shí),才可以啟動(dòng)Tx。注意:TMOD不能進(jìn)行位尋址。

D7D6D5D4D3D2D1D0TMOD(89H)GATEC/TM1M0GATEC/TM1M0←定時(shí)器/計(jì)數(shù)器T1→←定時(shí)器/計(jì)數(shù)器T0→5.1.3

定時(shí)器/計(jì)數(shù)器的控制2.中斷請(qǐng)求標(biāo)志寄存器TCON(88H)TCON的高4位用于控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)、停止和中斷申請(qǐng)。格式如下所示:

D7D6D5D4D3D2D1D0(88H)8FH8EH8DH8CH8BH8AH89H88HTCONTF1TR1TF0TR0IE1IT1IE0IT0TFx:Tx溢出標(biāo)志位。響應(yīng)中斷后TFx由硬件自動(dòng)清0。TRx:Tx運(yùn)行控制位。置1時(shí)開始工作;清0時(shí)停止工作。TRx要由軟件置1或清0(即啟動(dòng)與停止要由軟件控制)。5.1.3

定時(shí)器/計(jì)數(shù)器的控制T0有方式0、1、2、3;T1有方式0、1、2。以T0為例說明。1.方式1:16位計(jì)數(shù)器工作方式工作模式門控位啟動(dòng)位啟動(dòng)位=1,就開始計(jì)數(shù)了嗎?10111No,取決于GATE位GATE=1時(shí),需要TR0和INT0引腳同時(shí)為1時(shí),才可以啟動(dòng)T0。計(jì)數(shù)初值X=模M(216)-計(jì)數(shù)值N定時(shí)模式:計(jì)數(shù)值N=定時(shí)時(shí)間t/機(jī)器周期Tcy假設(shè)定時(shí)時(shí)間為5ms,單片機(jī)主頻為6MHz,使用T0,求方式1的計(jì)數(shù)初值。101假如現(xiàn)在開始計(jì)數(shù),計(jì)多少個(gè)數(shù)后,能令TF0=1?5.2定時(shí)器/計(jì)數(shù)器的工作方式【例5-1】假設(shè)定時(shí)時(shí)間為5ms,單片機(jī)主頻為6MHz,使用T0,求方式1的計(jì)數(shù)初值。解:Tcy=12/(6MHz)=2μs X=M-t/Tcy=M-5ms/(2μs)=M-2500對(duì)于方式1,X=216-2500=63036=0F63CH,其中低8位3CH要送入TL0,高8位F6H要送入TH0。5.3定時(shí)器/計(jì)數(shù)器的應(yīng)用-計(jì)數(shù)初值的計(jì)算啟動(dòng)T0后,T0從初值開始加1計(jì)數(shù)當(dāng)最高位產(chǎn)生溢出時(shí),TF0由硬件置“1”,向CPU申請(qǐng)中斷。1CPU能否響應(yīng)中斷,取決于ET0和EA的設(shè)置1011F6H3CH00H00HCPU響應(yīng)T0中斷,TF0由硬件清“0”;若不采用中斷方式,則TF0必須由軟件清“0”。CPU響應(yīng)中斷后,到哪里執(zhí)行程序?5.2定時(shí)器/計(jì)數(shù)器的工作方式5.3定時(shí)器/計(jì)數(shù)器的應(yīng)用-定時(shí)器/計(jì)數(shù)器的初始化(1)對(duì)TMOD賦值,以設(shè)定T0和T1的工作模式和工作方式;(2)計(jì)算計(jì)數(shù)初值,并送入TH0、TL0;(3)給IE和IP賦值,以開放相應(yīng)中斷和設(shè)置中斷優(yōu)先級(jí);(4)設(shè)置TR0,以啟動(dòng)T0。假設(shè)T0為定時(shí)模式,按方式1工作,TH0、TL0的初值分別為F6H、3CH,且允許T0中斷,請(qǐng)對(duì)該定時(shí)器進(jìn)行初始化?!纠?-2】假設(shè)T0為定時(shí)模式,按方式2工作,TH0、TL0的初值均為0FH,且允許T0中斷,請(qǐng)對(duì)該定時(shí)器進(jìn)行初始化。TMOD=0x02; //T0為定時(shí)器方式2TL0=0x0f; //置計(jì)數(shù)初值TH0=0x0f;EA=1; //CPU開中斷ET0=1; //允許T0中斷TR0=1; //啟動(dòng)T0工作參考程序5.3定時(shí)器/計(jì)數(shù)器的應(yīng)用-定時(shí)器/計(jì)數(shù)器的初始化2.方式0:13位計(jì)數(shù)器方式0是為兼容MCS-48而設(shè)的,在實(shí)際應(yīng)用中幾乎不再使用。計(jì)數(shù)初值=模(213)-計(jì)數(shù)值5.2定時(shí)器/計(jì)數(shù)器的工作方式3.方式2:8位自動(dòng)重裝初值計(jì)數(shù)器方式2省去了重裝初值的時(shí)間,可以實(shí)現(xiàn)精確的定時(shí),常用于產(chǎn)生串行通信中的波特率。計(jì)數(shù)初值=模(28)-計(jì)數(shù)值5.2定時(shí)器/計(jì)數(shù)器的工作方式5.2定時(shí)器/計(jì)數(shù)器的工作方式4.方式3:僅T0有此方式,T1的方式3將停止計(jì)數(shù)TL0進(jìn)行8位定時(shí)/計(jì)數(shù)

TH0進(jìn)行8位定時(shí)(借用T1的TR1、TF1)

T0處于方式3時(shí),T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。5.3.1定時(shí)器/計(jì)數(shù)器初值計(jì)算和初始化1.計(jì)數(shù)初值的計(jì)算假設(shè)當(dāng)前工作方式下的最大計(jì)數(shù)值用M表示,則各種工作方式的最大計(jì)數(shù)值如下:方式0,M=213=8192;方式1,M=216=65536;方式2,M=28=256;方式3,M=28=256。5.3

定時(shí)器/計(jì)數(shù)器的應(yīng)用假設(shè)用X表示計(jì)數(shù)初值,N表示能產(chǎn)生溢出的計(jì)數(shù)值計(jì)數(shù)模式下,計(jì)數(shù)值與計(jì)數(shù)初值之間的關(guān)系如下:

X=M-N定時(shí)模式,計(jì)數(shù)值N乘以機(jī)器周期Tcy等于定時(shí)時(shí)間t,即:

t=N×Tcy=(M-X)×Tcy由此式可以得到計(jì)數(shù)初值X的表達(dá)式如下所示:

X=M-t/Tcy

其中Tcy=12/fosc。

5.3.1定時(shí)器/計(jì)數(shù)器初值計(jì)算和初始化2.定時(shí)器/計(jì)數(shù)器的初始化初始化的步驟如下:(1)對(duì)TMOD賦值,以設(shè)定T0和T1的工作模式和工作方式;(2)計(jì)算計(jì)數(shù)初值,并送入TH0、TL0、TH1、TH1;(3)給IE和IP賦值,以開放相應(yīng)中斷和設(shè)置中斷優(yōu)先級(jí);(4)設(shè)置TR0、TR1,以啟動(dòng)或禁止T0、T1的運(yùn)行。5.3.1定時(shí)器/計(jì)數(shù)器初值計(jì)算和初始化假設(shè)定時(shí)時(shí)間為1ms,單片機(jī)主頻為12MHz求使用T0方式1的計(jì)數(shù)初值,并請(qǐng)對(duì)該定時(shí)器進(jìn)行初始化(允許T0中斷)。5.3.1定時(shí)器/計(jì)數(shù)器初值計(jì)算和初始化【例5-3】在某工廠的一條自動(dòng)飲料生產(chǎn)線上,每生產(chǎn)12瓶飲料,就需要發(fā)出一個(gè)包裝控制信號(hào)自動(dòng)執(zhí)行裝箱操作。試編寫程序完成這一計(jì)數(shù)任務(wù),假設(shè)用T0完成計(jì)數(shù),用P1.0發(fā)出控制信號(hào),如下圖所示。5.3.2

計(jì)數(shù)應(yīng)用分析(1)選擇工作方式

因?yàn)橛?jì)數(shù)值為12,所以選用T0的工作方式2來完成此任務(wù)。

假設(shè)此時(shí)T1不工作,則方式控制字為TMOD=06H。(2)求計(jì)數(shù)初值XX=256-12=244=F4H

因此,TL0和TH0的初值都為F4H。參考程序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; }#include<reg51.h>#include<intrins.h>sbit P1_0=P1^0void 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; }}參考程序2(采用查詢方式)5.3.2

計(jì)數(shù)應(yīng)用【例5-4】利用定時(shí)器T1的方式2對(duì)外部信號(hào)計(jì)數(shù),要求每計(jì)滿100個(gè)數(shù)將P1.7取反。分析(1)確定方式字

假設(shè)此時(shí)T0不工作,則T1工作在方式2的控制字為TMOD=60H。(2)計(jì)算初值

X=28-100=156=9CH

因此,TL1和TH1的初值都為9CH。#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 { P1_7=!P1_7; }參考程序5.3.2

計(jì)數(shù)應(yīng)用【例5-5】假設(shè)系統(tǒng)時(shí)鐘頻率為6MHz,現(xiàn)欲利用定時(shí)器T0每隔1ms產(chǎn)生寬度為1個(gè)機(jī)器周期的正脈沖,并由P1.0送出,如圖所示,請(qǐng)編程實(shí)現(xiàn)該功能。5.3.3

定時(shí)應(yīng)用分析(1)選擇工作方式

因?yàn)門cy=12/fosc=2μs,由定時(shí)器各種工作方式的特性,可計(jì)算出:

方式0最長可定時(shí)16.384ms;方式1最長可定時(shí)131.072ms;方式2、3最長可定時(shí)512

s。

本題中定時(shí)時(shí)間t=1ms,選則T0的工作方式1來完成此任務(wù)。假設(shè)此時(shí)T1不工作,則方式控制字為TMOD=01H。(2)計(jì)算初值X X=216-1000μs/2μs=65536-500=65036=FE0CH

因此T0的初值為TH0=0FEH,TL0=0CH。5.3.3

定時(shí)應(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;}參考程序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

定時(shí)應(yīng)用【例5-6】設(shè)時(shí)鐘頻率為12MHz,編程實(shí)現(xiàn)用定時(shí)器T1產(chǎn)生50Hz的方波,并由P1.7輸出此方波。分析(1)選擇工作方式

因?yàn)門cy=12/fosc=1μs,所以方式0最長可定時(shí)8.912ms;方式1最長可定時(shí)65.536ms;方式2、3最長可定時(shí)256

s。

因?yàn)?0Hz方波的周期為20ms,所以本題的定時(shí)時(shí)間為10ms,所以選擇T1的工作方式1來完成此任務(wù)。假設(shè)此時(shí)T0不工作,則方式控制字為TMOD=10H。(2)計(jì)算初值XX=216-10000μs/1μs=65536-10000=55536=D8F0H

因此T1的初值為TH1=0D8H,TL1=0F0H。5.3.3

定時(shí)應(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

定時(shí)應(yīng)用【例5-7】89C51的P2口接了8個(gè)發(fā)光二極管,要求通過定時(shí)器1實(shí)現(xiàn)8個(gè)發(fā)光二極管每隔1s從右向左依次循環(huán)點(diǎn)亮。假設(shè)系統(tǒng)時(shí)鐘頻率為12MHz。電路如下圖所示。5.3.3

定時(shí)應(yīng)用分析①選擇工作方式本題定時(shí)時(shí)間較長,超出方式0~3的最長定時(shí)范圍,所以不能直接采用方式0~3實(shí)現(xiàn)該定時(shí)功能。我們可以將這1s定時(shí)時(shí)間分成若干份,每份定時(shí)時(shí)間在所選工作方式的定時(shí)范圍內(nèi),然后用軟件進(jìn)行計(jì)數(shù)來實(shí)現(xiàn)該功能。

本題選擇T1的工作方式1,每隔50ms中斷一次,中斷20次為1s。假設(shè)此時(shí)T0不工作,則方式控制字為TMOD=10H。

②計(jì)算計(jì)數(shù)初值

X=216-50000/1=15536=3CB0H

因此:TH1=3CH,TL1=B0H。③20次計(jì)數(shù)的實(shí)現(xiàn)

采用循環(huán)程序的方法實(shí)現(xiàn)中斷20次計(jì)數(shù)。5.3.3

定時(shí)應(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

定時(shí)應(yīng)用【例5-8】利用T0確定INT0引腳出現(xiàn)的正脈沖的寬度,并將測量結(jié)果(以機(jī)器周期的形式)存放在30H和31H兩個(gè)單元中。分析

要想測量INT0引腳出現(xiàn)的正脈沖的寬度,首先要設(shè)T0為方式1的定時(shí)模式,TR0置1,門控位GATE置1,初值取0。這樣當(dāng)INT0引腳變?yōu)楦唠娖綍r(shí)采用外觸發(fā)方式啟動(dòng)T0定時(shí),即對(duì)機(jī)器周期計(jì)數(shù);當(dāng)外部INT0引腳變?yōu)榈碗娖綍r(shí)停止T0定時(shí),這時(shí)TH0和TL0中的值就是INT0引腳為高電平期間的所經(jīng)過機(jī)器周期數(shù)。處理過程如下圖所示。5.3.4

門控位的應(yīng)用#include<reg51.h>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論