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

下載本文檔

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

文檔簡(jiǎn)介

第6章單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理6.1定時(shí)器的控制6.2定時(shí)/計(jì)數(shù)器的工作方式6.3定時(shí)/計(jì)數(shù)器的編程和應(yīng)用6.4純軟件定時(shí)/計(jì)數(shù)方法:定時(shí)——空循環(huán)預(yù)定周次,等待預(yù)定時(shí)間計(jì)數(shù)——讀取I/O口電平,統(tǒng)計(jì)變化次數(shù)基本思路:由CPU統(tǒng)計(jì)狀態(tài)變化次數(shù),待預(yù)定結(jié)果出現(xiàn)后結(jié)束統(tǒng)計(jì)。delay(unsigned

inttime){unsignedintj=0;

for(;time>0;time--)

for(j=0;j<125;j++);}存在問題:占用過多CPU機(jī)時(shí)2023/2/136.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理

定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)基本型:T0,定時(shí)、計(jì)數(shù)。T1,定時(shí)、計(jì)數(shù)、串口波特率發(fā)生器。增強(qiáng)型:增加了T2。TH1、TL1TH0、TL0TCONTMOD定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)2個(gè)16位計(jì)數(shù)器T0(TH0、TL0)和T1(TH1、TL1)——加1計(jì)數(shù)器2個(gè)控制寄存器TCON和TMOD——管理計(jì)數(shù)器的運(yùn)行2個(gè)外部引腳T0(P3.4)和T1(P3.5)——接入外部脈沖2023/2/15定時(shí)/計(jì)數(shù)器的工作原理實(shí)質(zhì)是16位加1計(jì)數(shù)器定時(shí)器模式時(shí),是對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)。計(jì)數(shù)值乘以機(jī)器周期就是定時(shí)時(shí)間計(jì)數(shù)器模式時(shí),是對(duì)外部事件計(jì)數(shù)。脈沖由T0(P3.4)或T1(P3.5)引腳輸入。

注意:(若計(jì)數(shù)值為N,計(jì)數(shù)初值為X)溢出信號(hào)使TF0或TF1置1,并發(fā)出中斷請(qǐng)求,16位時(shí)有:

N=65536-X,或X=65536-N12MHz晶振時(shí),計(jì)數(shù)頻率低于0.5MHz

單片機(jī)軟硬件聯(lián)合定時(shí)/計(jì)數(shù)方法:等待CPU響應(yīng)系統(tǒng)時(shí)鐘脈沖加1計(jì)數(shù)器溢出標(biāo)志溢出定時(shí)器外來信號(hào)脈沖加1計(jì)數(shù)器溢出標(biāo)志溢出等待CPU響應(yīng)計(jì)數(shù)器外來信號(hào)脈沖加1計(jì)數(shù)器溢出標(biāo)志溢出等待CPU響應(yīng)系統(tǒng)時(shí)鐘脈沖K定時(shí)/計(jì)數(shù)器定時(shí)器的本質(zhì)是計(jì)數(shù)器(對(duì)時(shí)鐘脈沖計(jì)數(shù)),計(jì)數(shù)器則是對(duì)外來脈沖計(jì)數(shù).計(jì)數(shù)器的溢出空間可隨計(jì)數(shù)初值改變→定時(shí)時(shí)間tt=(計(jì)數(shù)器最大空間-計(jì)數(shù)初值)×機(jī)器周期

=(2n-a)×12/fosc(s)基本工作原理:t與n、a、fosc三個(gè)因素有關(guān)

TFx(X=0、1)Tx端(每個(gè)機(jī)器周期產(chǎn)生一個(gè)計(jì)數(shù)脈沖)邏輯開關(guān)功能:=0→定時(shí)器方式,=1計(jì)數(shù)器方式

TFx(X=0、1)Tx端計(jì)數(shù)值N=(計(jì)數(shù)器滿計(jì)數(shù)值-計(jì)數(shù)初值)=(2n–a)N與n、a兩個(gè)因素有關(guān)定時(shí)/計(jì)數(shù)器的控制關(guān)系(以T1為例)門控位GATE=0-允許TR1啟動(dòng)計(jì)數(shù)器GATE=1-允許INT1啟動(dòng)計(jì)數(shù)器啟動(dòng)控制位TR1=1-啟動(dòng)計(jì)數(shù)器TR1=0-停止計(jì)數(shù)器外部中斷1參與定時(shí)器的啟停管理中斷請(qǐng)求標(biāo)志位TF1=1-請(qǐng)求TR1=0-復(fù)位

T1模式選擇位=0-定時(shí)=1-計(jì)數(shù)6.2定時(shí)/計(jì)數(shù)器的控制2023/2/110工作方式寄存器TMOD

76543210TMODGATEC/TM1M0GATEC/TM1M0字節(jié)地址:89HGATE:門控位。GATE=0時(shí),只要TRx為1,就可啟動(dòng)計(jì)數(shù)器工作;GATA=1時(shí),定時(shí)器的啟動(dòng)還要加上INTx引腳為高電平這一條件。

C/T:模式選擇位。清0為定時(shí)模式,置1為計(jì)數(shù)方式。M1M0:工作方式設(shè)置位??稍O(shè)置四種工作方式(見下頁)。2023/2/111M1M0工作方式說明00方式013位定時(shí)/計(jì)數(shù)器01方式116位定時(shí)/計(jì)數(shù)器10方式28位自動(dòng)重裝定時(shí)/計(jì)數(shù)器11方式3T0分成兩個(gè)獨(dú)立的8位定時(shí)/計(jì)數(shù)器;T1此方式停止計(jì)數(shù)注意:TMOD不能進(jìn)行位尋址

GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0

T1方式選擇位00-方式001-方式110-方式2T1工作狀態(tài)

T1

T0

TF0

TR0

T0腳INT0T0方式選擇位00-方式001-方式110-方式211-方式3T0工作狀態(tài)GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0

注意:TMOD只能以字節(jié)方式進(jìn)行初始化例如,設(shè)置T0為定時(shí)器方式1,允許TR0啟動(dòng);T1為計(jì)數(shù)器方式0,允許INT1啟動(dòng)。則TMOD=11000001B=0xc1又如,系統(tǒng)上電默認(rèn)值為TMOD=0,則默認(rèn)狀態(tài)應(yīng)為:T0和TI均為定時(shí)器方式0,允許TR0、TR1啟動(dòng)。2023/2/114控制寄存器TCON

76543210TCONTF1TR1TF0TR0字節(jié)地址:88HTFx:Tx溢出標(biāo)志位。響應(yīng)中斷后TFx有硬件自動(dòng)清0。用軟件設(shè)置TFx可產(chǎn)生同硬件置1或清0同樣的效果。TRx:Tx運(yùn)行控制位。置1時(shí)開始工作;清0時(shí)停止工作。TRx要由軟件置1或清0(即啟動(dòng)與停止要由軟件控制)。TF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定時(shí)器控制位外部中斷控制位

T1

T0

TF0

TR0

T0腳INT0注意,系統(tǒng)上電默認(rèn)值為TCON=0,則默認(rèn)狀態(tài)應(yīng)為:TR0和TR1均為關(guān)閉狀態(tài)、電平中斷觸發(fā)方式、沒有外部中斷請(qǐng)求M1M0工作方式功能說明00110101012313位定時(shí)/計(jì)數(shù)器16位定時(shí)/計(jì)數(shù)器8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器3種定時(shí)/計(jì)數(shù)器關(guān)系T0工作方式注意:T0有4種工作方式,每種工作方式都有定時(shí)和計(jì)數(shù)2種方式。T1只有3種工作方式(T0的方式3中占用了T1的部分資源)。M1M0工作方式功能說明00101001213位定時(shí)/計(jì)數(shù)器16位定時(shí)/計(jì)數(shù)器8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器T1工作方式學(xué)習(xí)順序:方式1→方式2→方式06.3定時(shí)/計(jì)數(shù)器的工作方式2023/2/117方式1:16位方式

X=216-N=65536-N計(jì)數(shù)范圍:1~65536

計(jì)數(shù)初值要分成2個(gè)字節(jié)分別送入TH0、TL0方式1定時(shí)時(shí)間:t=(216-a)×12/fosc(s)——使用16位定時(shí)/計(jì)數(shù)器(THx+TLx)(M0M1為01組合時(shí))定時(shí)范圍為1~65,536μs(≈65ms)。最大定時(shí)時(shí)間(a=0,fosc=12MHz):t=216(s)=65536(s)定時(shí)方式最大計(jì)數(shù)值:N=65536(脈沖)計(jì)數(shù)值:N=(216–a)由于檢測(cè)一個(gè)負(fù)跳變需要2個(gè)機(jī)器周期,即24個(gè)振蕩周期,故最高計(jì)數(shù)頻率=。計(jì)數(shù)方式故,對(duì)于12MHz晶振,最大外部脈沖的頻率為0.5MHz。實(shí)例1

設(shè)單片機(jī)的fosc=12MHz,采用T0定時(shí)方式1在P1.0腳上輸出周期為2ms的方波。虛擬示波器分析:周期為2ms的方波由2個(gè)半周期為1ms的正負(fù)脈沖組成方波輸出原理:定時(shí)1ms后將端口輸出電平取反。2ms1msTH0

=

0xfc

TL0

=

0x181ms定時(shí)的計(jì)數(shù)初值應(yīng)為:a=216–t*fos/12=216–1000*12/12=64536=0xfc18注意:需要不斷重裝計(jì)數(shù)初值。(1)查詢方式#include<reg51.h>sbitP1_0

=

P1^0;main(){

TMOD

=

0x01;

//設(shè)置T0定時(shí)方式1(00000001B)TR0=1;//啟動(dòng)T0

for(;;){

TH0

=

0xfc;

//裝載計(jì)數(shù)初值

TL0

=

0x18;

do{

}while(!TF0);//等待TF0溢出P1_0

=!P1_0;

//定時(shí)時(shí)間到P1.0反相

TF0

=

0;

//TF0標(biāo)志清0

}}T0圖6.14實(shí)例1仿真波形圖(2)中斷方式#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{//T0中斷函數(shù)P1_0=!P1_0; //P1.0取反

TH0=0xfc; //裝載計(jì)數(shù)初值

TL0=0x18;}main(){

TMOD=0x01; //T0定時(shí)方式1

TH0=0xfc; //裝載計(jì)數(shù)初值

TL0=0x18;EA=1; //開總中斷

ET0=1; //開T0中斷

TR0=1; //啟動(dòng)T0 while(1);}注意:中斷響應(yīng)后系統(tǒng)可自動(dòng)將TFx標(biāo)志位清0小結(jié):使用定時(shí)/計(jì)數(shù)器的步驟強(qiáng)調(diào):TMOD的設(shè)置只能以字節(jié)形式給出T0

(1)設(shè)置TMOD——確定定時(shí)/計(jì)數(shù)器的工作狀態(tài)

(2)計(jì)算計(jì)數(shù)初值——產(chǎn)生期望的定時(shí)間隔計(jì)數(shù)初值a=216-t×fosc/12(t≤65536s)THx=a/256TLx=

a/

%256

裝載計(jì)數(shù)初值:3)確定采用何種方式處理溢出結(jié)果若是查詢方式——采用條件判斷語句若是中斷方式→中斷初始化設(shè)置和中斷服務(wù)程序:do{}while(!TFx);

//x=0或1……ETx=1;//開定時(shí)x中斷,x=0或1EA=1; //開總中斷tx_srv()interruptn

{//n=1或3……}4)啟動(dòng)定時(shí)器:

TR0=1

或TR1=1

5)進(jìn)行定時(shí)或計(jì)數(shù)結(jié)束后的其它工作6)為下次定時(shí)/計(jì)數(shù)做準(zhǔn)備(清TFx標(biāo)志+重裝載計(jì)數(shù)初值)若是中斷方式,則無需軟件清TFx標(biāo)志位;若是查詢方式,需要軟件清除TFx標(biāo)志位。2023/2/129方式2:8位自動(dòng)重裝方式

X=28-N=256-N計(jì)數(shù)范圍:1~256

特別適合于脈沖信號(hào)發(fā)生器采用8位計(jì)數(shù)器,延時(shí)時(shí)間t=(28-a)×12/fosc(微秒)→12MHz時(shí)的最大定時(shí)量為256s;可自動(dòng)重裝載計(jì)數(shù)初值(TLx溢出后,THx數(shù)值可自動(dòng)裝入TLx);因沒有裝載計(jì)數(shù)初值造成的定時(shí)延誤,方式2定時(shí)精度相對(duì)較高。方式2(1)查詢方式#include<reg51.h>sbitP1_0

=

P1^0;main(){TMOD

=

0x02;

TH0=

TL0=0x06;

TR0=1;

for(;;){

do{}while(!TF0);

P1_0

=!P1_0;

TF0

=

0; }}(2)中斷方式#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{P1_0=!P1_0; }main(){TMOD=0x02;

TH0=TL0=0x06;EA=ET0=1; TR0=1;

while(1);}實(shí)例2采用T0定時(shí)方式2在P1.0口輸出周期為0.5ms的方波(設(shè)fosc=12MHz)。分析:計(jì)數(shù)初值TL0=((256-250)*12/12)%256=0x06,TMOD=0x02周期為0.5ms方波實(shí)例3

將第4章實(shí)例5“計(jì)數(shù)顯示器”中的軟件查詢法進(jìn)行按鍵檢測(cè)改用T0計(jì)數(shù)器方式2,并以中斷方式編程?!窘狻吭瓐D中按鍵是由I/O口P3.7引腳接入的,本實(shí)例需要將其改由T0(P3.4)引腳接入。分析:將T0設(shè)置為計(jì)數(shù)器方式2,設(shè)法使其在1個(gè)外部脈沖到來時(shí)就能溢出(即計(jì)數(shù)溢出周次為1)產(chǎn)生中斷請(qǐng)求。計(jì)數(shù)初值為:a=28–1=255=0xff初始化TMOD=00000110B=0x06實(shí)例3參考程序運(yùn)行效果2023/2/137方式0:13位方式

工作方式0使用13位的定時(shí)/計(jì)數(shù)器(THi7-0+TLi4-0)定時(shí)時(shí)間t=(213-a)×12/fosc(μs)計(jì)數(shù)初值a=213-t×fosc/1212MHz時(shí)的最大定時(shí)量t=213μs=8.192ms解:計(jì)數(shù)初值a=213-5000×12/12=3192=110001111000BTH0TL0011000110

0

011000

6 3 1 8H實(shí)例4

計(jì)算T0方式0定時(shí)5ms的計(jì)數(shù)初值a(設(shè)fosc=12MHz)由于方式0的TL0高3位未用(一般填0),因此

a=0110001100011000=6318H即,TH0=0x63;TL0=0x18;除計(jì)數(shù)器位數(shù)不同外,方式0與方式1的邏輯結(jié)構(gòu)并無差異。方式0采用13位計(jì)數(shù)器是為了與早期產(chǎn)品MCS-48單片機(jī)兼容。方式0的初值計(jì)算比較麻煩,一般采用方式1替代。方式0方式1應(yīng)用:定時(shí)器——用于定時(shí)控制,或作為分頻器發(fā)生各種不同頻率的方波;計(jì)數(shù)器——用于外部脈沖統(tǒng)計(jì)或外部中斷源擴(kuò)充;復(fù)雜應(yīng)用—需要將定時(shí)與計(jì)數(shù)結(jié)合起來。6.4定時(shí)/計(jì)數(shù)器的應(yīng)用實(shí)例5由P3.4口輸入一個(gè)外部低頻窄脈沖信號(hào)。當(dāng)該信號(hào)出現(xiàn)負(fù)跳變時(shí),由P3.0口輸出寬度為500μs的同步脈沖,如此往復(fù)。要求據(jù)此設(shè)計(jì)一個(gè)波形展寬程序(fosc=6MHz)。1)將T0設(shè)置為1次計(jì)數(shù)方式2,初值設(shè)為0xff。這樣P3.4一旦發(fā)生負(fù)跳變T0就會(huì)產(chǎn)生溢出;2)查詢TF0標(biāo)志位。當(dāng)TF0=1時(shí)將T0設(shè)置為500s定時(shí)方式2,初值a為0x06(=256-500×6/12),同時(shí)使P3.0輸出低電平;3)查詢TF0標(biāo)志位。待T0再次溢出后使P3.0輸出高電平,然后將T0設(shè)置為1次計(jì)數(shù)方式2,如此往復(fù)進(jìn)行。分析:可以采取如下做法:T0實(shí)例5參考程序?qū)嵗?仿真運(yùn)行效果P3.0P3.4實(shí)例6

采用10MHz晶振,在P1.0腳上輸出周期為2.5s,高電平占空比為20%的脈沖信號(hào)。分析:10兆晶振,方式1最大定時(shí)為54.613ms;可以采用定時(shí)中斷與軟件計(jì)數(shù)聯(lián)合法:利用定時(shí)中斷進(jìn)行中斷次數(shù)統(tǒng)計(jì);若取10ms產(chǎn)生定時(shí),則2.5s=250次中斷之和;則500ms(20%占空比)相當(dāng)于50次中斷之和。a=216-10000×12/10=0xd1202.5s0.5s實(shí)例6參考程序?qū)嵗?仿真運(yùn)行效果實(shí)例7采用定時(shí)中斷控制流水燈,實(shí)現(xiàn)每秒1位,自上而下循環(huán)功能(fosc=12MHz)。分析:可以利用20次50ms的定時(shí)中斷方案,計(jì)數(shù)初值為:

a=65536-50000×12/12=0x3cb0中斷函數(shù)的任務(wù)過多,不利于實(shí)時(shí)控制。如何減少中斷函數(shù)任務(wù)?新方案:中斷函數(shù)中僅做中斷次數(shù)統(tǒng)計(jì)和計(jì)數(shù)初值重入,控制操作改在主函數(shù)中進(jìn)行。實(shí)例6的問題:實(shí)例7參考程序?qū)嵗?運(yùn)行效果實(shí)例8測(cè)量從P3.2(INT0)輸入的正脈沖的寬度,測(cè)量結(jié)果以BCD碼形式存放在片內(nèi)RAM40H開始的單元處(設(shè)40H地址存放個(gè)位,系統(tǒng)時(shí)鐘為12MHz,被測(cè)脈沖信號(hào)周期不超過100ms)

。0分析:GATE=TR0=1時(shí)允許INT0的脈沖控制定時(shí)器的啟停,則根據(jù)T0先啟動(dòng)、再關(guān)閉后的計(jì)數(shù)值可算出被測(cè)脈沖寬度。INT0端信號(hào)T0中的脈沖數(shù)實(shí)例8參考程序INT0端信號(hào)T0中的脈沖數(shù)0實(shí)例8電路脈沖設(shè)置(100ms)在Proteus軟件中實(shí)現(xiàn)C51源碼級(jí)調(diào)試的方法:形成OMF(absoluteobjectmoduleformatfiles,絕對(duì)目標(biāo)文件)格式文件。omf文件設(shè)置omf文件加載啟動(dòng)調(diào)試omf文件窗口片內(nèi)RAM窗口實(shí)例8的運(yùn)行結(jié)果結(jié)果:計(jì)數(shù)值為50000脈沖→脈寬值為50ms。運(yùn)行到光標(biāo)實(shí)例8小結(jié)1、測(cè)量未知脈沖寬度的方法——利用INTx引腳接入待測(cè)脈沖

溫馨提示

  • 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)論