單片機(jī)定時(shí)器作用原理及學(xué)習(xí)應(yīng)用詳解_第1頁(yè)
單片機(jī)定時(shí)器作用原理及學(xué)習(xí)應(yīng)用詳解_第2頁(yè)
單片機(jī)定時(shí)器作用原理及學(xué)習(xí)應(yīng)用詳解_第3頁(yè)
單片機(jī)定時(shí)器作用原理及學(xué)習(xí)應(yīng)用詳解_第4頁(yè)
單片機(jī)定時(shí)器作用原理及學(xué)習(xí)應(yīng)用詳解_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)定時(shí)器作用原理及學(xué)習(xí)應(yīng)用詳解定時(shí)器是單片機(jī)的重點(diǎn)中的重點(diǎn),但不是難點(diǎn),大家肯定要完全理解并且嫻熟把握定時(shí)器的應(yīng)用。

定時(shí)器的初步熟悉

時(shí)鐘周期:時(shí)鐘周期T是時(shí)序中最小的時(shí)間單位詳細(xì)計(jì)算的方法就是1/時(shí)鐘源,假如大家用的晶振是11.0592M,那么對(duì)于這個(gè)單片機(jī)系統(tǒng)來(lái)說(shuō),時(shí)鐘周期=1/11059200秒。

機(jī)器周期:我們的單片機(jī)完成一個(gè)操作的最短時(shí)間。機(jī)器周期主要針對(duì)匯編語(yǔ)言而言,在匯編語(yǔ)言下程序的每一條語(yǔ)句執(zhí)行所使用的時(shí)間都是機(jī)器周期的整數(shù)倍,而且語(yǔ)句占用的時(shí)間是可以計(jì)算出來(lái)的,而C語(yǔ)言一條語(yǔ)句的時(shí)間是不行計(jì)算的。51單片機(jī)系列,在其標(biāo)準(zhǔn)架構(gòu)下一個(gè)機(jī)器周期是12個(gè)時(shí)鐘周期,也就是12/11059200秒?,F(xiàn)在有不少增加型的51單片機(jī),其速度都比較塊,有的1個(gè)機(jī)器周期等于4個(gè)時(shí)鐘周期,有的1個(gè)機(jī)器周期就等于1個(gè)時(shí)鐘周期,也就是說(shuō)大體上其速度可以達(dá)到標(biāo)準(zhǔn)51架構(gòu)的3倍或12倍。由于我們是講標(biāo)準(zhǔn)的51單片機(jī),所以我們后邊的課程假如遇到這個(gè)概念,全部是指12個(gè)時(shí)鐘周期。

這兩個(gè)概念了解即可,下邊就來(lái)我們的重頭戲,定時(shí)器和計(jì)數(shù)器。定時(shí)器和計(jì)數(shù)器是單片機(jī)內(nèi)部的同一個(gè)模塊,通過(guò)配置SFR(特別功能寄存器)可以實(shí)現(xiàn)兩種不同的功能,我們大多數(shù)狀況下是使用定時(shí)器功能,因此我們的課程也是主要來(lái)講定時(shí)器功能,計(jì)數(shù)器功能大家自己了解下即可。

顧名思義,定時(shí)器就是用來(lái)進(jìn)行定時(shí)的。定時(shí)器內(nèi)部有一個(gè)寄存器,我們讓它開(kāi)頭計(jì)數(shù)后,這個(gè)寄存器的值每經(jīng)過(guò)一個(gè)機(jī)器周期就會(huì)加1一次,因此,我們可以把機(jī)器周期理解為定時(shí)器的計(jì)數(shù)周期。我們的秒表,每經(jīng)過(guò)一秒,數(shù)字加1,而這個(gè)定時(shí)器就是每過(guò)一個(gè)機(jī)器周期的時(shí)間,也就是12/11059200秒,數(shù)字加1。還有一個(gè)特殊留意的地方,就是秒表是加到60后,秒就自動(dòng)變成0了,這種狀況在單片機(jī)和計(jì)算機(jī)里我們稱之為溢出。那定時(shí)器加到多少才會(huì)溢出呢?定時(shí)器有幾種模式,假如是16位的定時(shí)器,也就是2個(gè)字節(jié),最大值就是65535,那么加到65535后,再加1就算溢出,假如有其他位數(shù)的話,道理是一樣的,對(duì)于51單片機(jī)來(lái)說(shuō),溢出后,這個(gè)值會(huì)直接變成0。從某一個(gè)初值,經(jīng)過(guò)計(jì)算確定的時(shí)間后溢出,這個(gè)過(guò)程就是其定時(shí)的含義。

定時(shí)器的寄存器描述

標(biāo)準(zhǔn)的51里邊只有定時(shí)器0和定時(shí)器1這兩個(gè)定時(shí)器,現(xiàn)在許多單片機(jī)也有多個(gè)定時(shí)器的,在這里我們先講定時(shí)器0和1。那么我前邊提到過(guò),對(duì)于單片機(jī)的每一個(gè)功能模塊,都是由他的SFR,也就是特別功能寄存器來(lái)掌握。而和定時(shí)器有關(guān)的特別功能寄存器,有以下幾個(gè),大家不需要去記憶這些寄存器的名字和作用,你只要也許知道就行,用的時(shí)候,隨時(shí)可以查手冊(cè),找到每個(gè)寄存器的名字和每個(gè)寄存器所起到的作用。

表2定時(shí)值存儲(chǔ)寄存器

表3TCON--定時(shí)器/計(jì)數(shù)器掌握寄存器的位安排(地址:88H)

可位尋址;復(fù)位值:0x00;復(fù)位源:任何復(fù)位

表4TCON--定時(shí)器/計(jì)數(shù)器掌握寄存器的位描述

大家留意在表4中的描述中,只要寫(xiě)到硬件置1或者清0的,就是指一旦符合條件,單片機(jī)自動(dòng)完成的動(dòng)作,只要寫(xiě)軟件置1或者清0的,是指我們用程序去完成這個(gè)動(dòng)作,后邊課程中不再做說(shuō)明。

表2中的寄存器,是存儲(chǔ)計(jì)數(shù)器的計(jì)數(shù)值的,兩個(gè)字節(jié)的用于定時(shí)器1,兩個(gè)字節(jié)用于定時(shí)器0。

表3中有TF1、TR1、TF0、TR0這4位需要我們理解清晰。兩位定時(shí)器1的,兩位定時(shí)器0的,我們只解釋定時(shí)器1的,定時(shí)器0的同理。先看TR1,當(dāng)我們程序中寫(xiě)TR1=1以后,定時(shí)器值就會(huì)每經(jīng)過(guò)一個(gè)機(jī)器周期加1,當(dāng)我們程序中寫(xiě)TR1=0以后,定時(shí)器值就會(huì)保持不變化。TF1,這個(gè)是一個(gè)標(biāo)志位,他的作用是告知我們定時(shí)器溢出了。比如我們的定時(shí)器設(shè)置成16位的定時(shí)器,那么每經(jīng)過(guò)一個(gè)機(jī)器周期,TL1加1一次,當(dāng)TL1加到255后,再加1,TL1變成0,TH1會(huì)加1一次,如此始終加到TH1和TL1都是255(即TH1和TL1組成的16位整型數(shù)為65535)以后,再加1一次,那么就會(huì)溢出,TH1和TL1同時(shí)都變?yōu)?,只要一溢出,TF1立刻自動(dòng)變成1,告知我們定時(shí)器溢出了,僅僅是供應(yīng)給我們一個(gè)信號(hào),讓我們知道定時(shí)器溢出了,它不會(huì)對(duì)定時(shí)器是否連續(xù)運(yùn)行產(chǎn)生任何影響。

表5TMOD--定時(shí)器方式掌握寄存器的位安排(地址89H)

不行位尋址;復(fù)位值:0x00;復(fù)位源:任何復(fù)位

細(xì)心的同學(xué)會(huì)發(fā)覺(jué),TCON那個(gè)地方標(biāo)注的是“可位尋址”,TMOD這里標(biāo)注的是“不行位尋址”。這個(gè)地方的意思就是比如TCON有一位TR1,我們可以在程序中直接進(jìn)行TR1=1;這樣操作。但是(T1)M1=1;這樣的操作就是錯(cuò)誤的。我們要操作就必需一次操作一個(gè)字節(jié),就是必需一次性對(duì)TMOD全部位操作,不能對(duì)其中某一位單獨(dú)進(jìn)行操作。

表6TMOD--定時(shí)器/計(jì)數(shù)器方式掌握寄存器的位描述

表7TMOD--定時(shí)器方式掌握寄存器M1/M0工作模式

以上這4種模式的配置,其中模式0是為了兼容老的8048單片機(jī)而設(shè)的,現(xiàn)在的51幾乎不會(huì)用到這種模式,而模式3依據(jù)我的應(yīng)用閱歷,他的功能模式2完全可以取代,所以基本上也是不用,那么我們重點(diǎn)就學(xué)習(xí)模式1和模式2。

模式1就是THn和TLn組成了一個(gè)16位的定時(shí)器,取值范圍是0到65535,溢出后,只要不對(duì)THn和TLn重新賦值,則從0開(kāi)頭計(jì)數(shù)。模式2的功能是自動(dòng)裝載,就是TLn溢出后,TFn就直接置1了,并且THn的值直接賦給TLn,然后TLn從新賦值的這個(gè)數(shù)字開(kāi)頭計(jì)數(shù)。這個(gè)功能可以用來(lái)產(chǎn)生串口的通信波特率,我們講串口的時(shí)候要用到,本章節(jié)我們重點(diǎn)來(lái)學(xué)習(xí)模式1。為了加深大家理解這個(gè)定時(shí)器原理,我們來(lái)看一下他的模式1的電路示意圖1。

圖1定時(shí)器/計(jì)數(shù)器模式1示意圖

我?guī)е蠹襾?lái)分析一下這個(gè)示意圖,后邊假如手冊(cè)中遇到,大家也就會(huì)自己討論了。OSC框表示時(shí)鐘頻率,由于我們1個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期,所以那個(gè)d就等于12。下邊GATA右邊的那個(gè)門(mén)是一個(gè)非門(mén)電路,再右側(cè)是一個(gè)或門(mén),再往右是一個(gè)與門(mén)電路。

圖上可以看出來(lái),下邊部分電路是掌握了上邊部分,那我們先來(lái)看下邊是如何掌握的,我們以定時(shí)器0為例。

1、TR0和下邊或門(mén)電路的結(jié)果要進(jìn)行與門(mén)運(yùn)算,TR0假如是0的話,與運(yùn)算完了確定是0,所以確定假如要讓定時(shí)器工作,TR0=1。

2、與門(mén)結(jié)果要想是1,那或門(mén)出來(lái)的信號(hào)必需也得是1才行。在GATE位為1的狀況下,經(jīng)過(guò)一個(gè)非門(mén)變成0,或門(mén)電路結(jié)果要想是1的話,那INT0即P3.2引腳必需是1的狀況下,這個(gè)時(shí)候定時(shí)器才會(huì)工作,而INT0引腳是0的狀況下,定時(shí)器不工作,這就是GATE位的作用。

3、當(dāng)GATE位為0的時(shí)候,經(jīng)過(guò)一個(gè)非門(mén)變成1,不管INT0引腳是什么電平,經(jīng)過(guò)或門(mén)電路后則確定是1,定時(shí)器就會(huì)工作。

4、要想讓定時(shí)器工作,就是加1,從圖上看有兩種方式,第一種方式是那個(gè)開(kāi)關(guān)打到上邊的箭頭,就是C/T=0的時(shí)候,一個(gè)機(jī)器周期TL就會(huì)加1一次,當(dāng)開(kāi)關(guān)打到下邊的箭頭,即C/T=1的時(shí)候,T0引腳即P3.4引腳來(lái)一個(gè)脈沖,TL就加1一次,這也就是計(jì)數(shù)器功能。

INT0引腳是P3.2,INT1引腳是P3.3,T0引腳是P3.4,T1引腳是P3.5。

定時(shí)器程序應(yīng)用

了解了定時(shí)器相關(guān)的寄存器,那么我們下面就來(lái)做一個(gè)定時(shí)器的程序,鞏固一下我們學(xué)到的內(nèi)容。我們這節(jié)課的程序先使用定時(shí)器0,在使用定時(shí)器的時(shí)候,需要以下幾個(gè)步驟:

第一步:設(shè)置特別功能寄存器TMOD,配置好工作模式;

其次步:設(shè)置計(jì)數(shù)寄存器TH0和TL0的初值;

第三步:設(shè)置TCON,通過(guò)打開(kāi)TR0位來(lái)讓定時(shí)器開(kāi)頭計(jì)數(shù)。

第四步:推斷TCON寄存器的TF0位,監(jiān)測(cè)定時(shí)器溢出狀況。

寫(xiě)程序之前,我們要先來(lái)學(xué)會(huì)計(jì)算如何用定時(shí)器定時(shí)時(shí)間。我們以晶振是11.0592M為例講解,時(shí)鐘周期就是1/11059200,機(jī)器周期就是12/11059200,我們假如要定時(shí)20ms,就是0.02秒,要經(jīng)過(guò)x個(gè)機(jī)器周期得到0.02秒,我們來(lái)算一下x*12/11059200=0.02,得到x=18432。那么我們現(xiàn)在16位的定時(shí)器溢出值是65536,我們可以這樣,先給TH0和TL0一個(gè)初值,讓他們經(jīng)過(guò)18432個(gè)機(jī)器周期后剛好溢出,溢出后我們可以通過(guò)檢測(cè)TF0位得知,就剛好是0.02秒。這個(gè)初值y=65536-18432=47104,轉(zhuǎn)成16進(jìn)制就是0xB800,那么就是TH0=0xB8,TL0=0x00。

那0.02秒我們已經(jīng)定時(shí)出來(lái)了,細(xì)心的同學(xué)會(huì)發(fā)覺(jué),我們假如初值直接給一個(gè)0x0000,始終到65536溢出,定時(shí)器定時(shí)值最大也就是71ms左右,那么我們想定時(shí)更長(zhǎng)時(shí)間怎么辦呢?用你學(xué)校學(xué)過(guò)的規(guī)律,倍數(shù)關(guān)系就可以解決此問(wèn)題。

那好了,我們下面就用程序來(lái)實(shí)現(xiàn)以下這個(gè)功能。

#include//包含寄存器的庫(kù)文件

sbitLED=P0^0;

sbitADDR0=P1^0;

sbitADDR1=P1^1;

sbitADDR2=P1^2;

sbitADDR3=P1^3;

sbitENLED=P1^4;

voidmain()

{

unsignedcharcounter=0;

ENLED=0;ADDR0=0;ADDR1=1;

ADDR2=1;ADDR3=1;LED=1;//74HC138和LED燈初始化部分

TMOD=0x01;//設(shè)置定時(shí)器0為模式1

TH0=0xB8;

TL0=0x00;//定時(shí)值初值

TR0=1;//打開(kāi)定時(shí)器0

while(1)

{

if(1==TF0)//推斷定時(shí)器0是否溢出

{

TF0=0;

TH0=0xB8;//一旦溢出后,重新賦值

TL0=0x00;

counter++;

if(50==counter)//推斷定時(shí)器0溢出是否達(dá)到50次

{

counter=0;//counter清0,重新計(jì)數(shù)

LED=!LED;//LED取反操作,0--1,1--0

}

}

}

}

程序都有解釋,不難理解,這里要解釋一個(gè)地方,就是兩次if推斷,細(xì)心的同學(xué)會(huì)發(fā)覺(jué),if(1==TF0)這句,我把1寫(xiě)前邊,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論