單片機(jī)STC89C52學(xué)習(xí)——17 定時(shí)器和計(jì)數(shù)器
匯總:00 單片機(jī)STC89C52學(xué)習(xí)
參考教程:普中科技
1 定時(shí)器的原理
1.1 時(shí)序
單片機(jī)工作的基本時(shí)序: | |
---|---|
振蕩周期 | 亦為時(shí)鐘周期,單片機(jī)提供時(shí)鐘脈沖信號的振蕩源的周期更振,該開發(fā)板為12MHz |
狀態(tài)周期 | 1個(gè)狀態(tài)周期 = 1個(gè)時(shí)鐘周期 * 2皆刺,是振蕩源周期經(jīng)過二分頻得到的 |
機(jī)器周期 | 1個(gè)機(jī)器周期 = 6個(gè)狀態(tài)周期S1~S6 = 12個(gè)時(shí)鐘周期虫埂。在一個(gè)機(jī)器周期內(nèi),CPU可以完成一個(gè)獨(dú)立操作 |
指令周期 | 指CPU完成一條操作所需要的全部時(shí)間,1個(gè)指令周期 = 1個(gè)或幾個(gè)機(jī)器周期 |
外接晶振為12MHz時(shí)喳资,51單片機(jī)相關(guān)周期的具體值為:
- 振蕩周期 = 1/12 μs
- 狀態(tài)周期 = 1/6 μs
- 機(jī)器周期 = 1μs
- 指令周期 = 1~4μs
1.2 定時(shí)/計(jì)數(shù)器的基本情況
- 51單片機(jī)有兩組定時(shí)器/計(jì)數(shù)器,因?yàn)?strong>既可以定時(shí)又可以計(jì)數(shù)腾供,故稱之為定時(shí)器/計(jì)數(shù)器仆邓,一般直接稱為定時(shí)器。
- 定時(shí)器/計(jì)數(shù)器與單片機(jī)的CPU相互獨(dú)立伴鳖。定時(shí)器/計(jì)數(shù)器工作的過程是自動完成的节值,不需要CPU的參與。
- 51單片機(jī)中的定時(shí)器/計(jì)數(shù)器根據(jù)機(jī)器內(nèi)部的時(shí)鐘或者外部的脈沖信號對寄存器中的數(shù)據(jù)加1榜聂。
- 作用:增加單片機(jī)的效率搞疗,一些簡單的重復(fù)加1的工作可以交給定時(shí)器/計(jì)數(shù)器處理,CPU轉(zhuǎn)而處理一些復(fù)雜的事情须肆;實(shí)現(xiàn)精確定時(shí)
1.3 定時(shí)/計(jì)數(shù)器的工作原理
? ? ? ?定時(shí)/計(jì)數(shù)器實(shí)質(zhì)上是一個(gè)加1計(jì)數(shù)器匿乃。它隨著計(jì)數(shù)器的輸入脈沖進(jìn)行自加1,也就是每來一個(gè)脈沖豌汇,計(jì)數(shù)器就自動加1扳埂,當(dāng)加到計(jì)數(shù)器為全1時(shí),再輸入一個(gè)脈沖就使計(jì)數(shù)器回零瘤礁,且計(jì)數(shù)器的溢出使相應(yīng)的中斷標(biāo)志位置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ù)值。
1.4 51單片機(jī)定時(shí)器結(jié)構(gòu)
? ? ? ?定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位陨享,2Byte)葱淳,由高8位和低8位兩個(gè)寄存器THx和TLx組成。TMOD是定時(shí)/計(jì)數(shù)器的工作方式寄存器抛姑,確定工作方式和功能赞厕;TCON是控制寄存器,控制T0定硝、T1的啟動和停止及設(shè)置溢出標(biāo)志皿桑。1.5 定時(shí)器的控制
? ? ? ?51單片機(jī)定時(shí)/計(jì)數(shù)器的工作由兩個(gè)特殊功能寄存器控制。工作方式寄存器TMOD用于設(shè)置其工作方式;控制寄存器TCON用于控制其啟動和中斷申請诲侮。
-
工作方式寄存器TMOD
工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器的工作方式镀虐,低四位用于T0,高四位用于T1
-
GATE:門控位
用于控制定時(shí)器的啟動是否受外部中斷源信號的影響沟绪。GATE=0時(shí)刮便,只要用軟件使TCON中的TR0或TR1為1,就可以啟動定時(shí)/計(jì)數(shù)器工作绽慈;GATE=1時(shí)诺核,要用軟件使TR0或TR1為1,同時(shí)外部中斷引腳INT0/1也為高電平時(shí)久信,才能啟動定時(shí)/計(jì)數(shù)器工作窖杀,即此時(shí)定時(shí)器的啟動條件增加了INT0/1引腳為高電平這一條件。故通常使GATE = 0裙士。 -
C/T:定時(shí)/計(jì)數(shù)模式選擇位
C/T = 0為定時(shí)模式入客;C/T = 1為計(jì)數(shù)模式 -
M1M0:工作方式設(shè)置位
定時(shí)/計(jì)數(shù)器有4種工作方式:
(通常使用方式1;方式2為計(jì)算頻率或串口通信使用腿椎;通常不使用方式0和3)
-
控制寄存器TCON
TCON的高4位用于控制定時(shí)/計(jì)數(shù)器的啟動和中斷申請:
-
TF1 (TCON.7) :T1溢出中斷請求標(biāo)志位
T1計(jì)數(shù)溢出時(shí)由硬件自動置TF1為1桌硫;CPU響應(yīng)中斷后TF1由硬件自動清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ù)器的啟動與停止雳窟。 -
TF0 (TCON.5) :T0溢出中斷請求標(biāo)志位
同上 -
TR0 (TCON.4) :T0運(yùn)行控制位
同上
1.6 定時(shí)器工作方式詳解(T0為例)
計(jì)數(shù)個(gè)數(shù)X與計(jì)數(shù)初值N的關(guān)系:X = 2^位數(shù) - N
-
方式0:13位計(jì)數(shù)
由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時(shí)向TH0進(jìn)位匣屡,TH0溢出時(shí)封救,置位TCON中的TF0標(biāo)志,向CPU發(fā)出中斷請求捣作。
(門控位GATE具有特殊的作用誉结。當(dāng)GATE=0時(shí),經(jīng)反相后使或門輸出為1虾宇,此時(shí)僅由TR0控制與門的開啟搓彻,與門輸出1時(shí)如绸,控制開關(guān)接通嘱朽,計(jì)數(shù)開始旭贬;當(dāng)GATE=1時(shí),由外中斷引腳信號控制或門的輸出搪泳,此時(shí)控制與門的開啟由外中斷引腳信號和TR0共同控制稀轨,當(dāng)TR0=1時(shí),外中斷引腳信號引腳的高電平啟動計(jì)數(shù)岸军,外中斷引腳信號引腳的低電平停止計(jì)數(shù)奋刽,這種方式常用來測量外中斷引腳上正脈沖的寬度。) -
方式1:16位計(jì)數(shù)
由TL0作為低8位艰赞,TH0作為高8位佣谐,組成了16位加1計(jì)數(shù)器 。 -
方式2:8位計(jì)數(shù)
自動重裝初值的8位計(jì)數(shù)方式
(TL0滿后方妖,不向TH0進(jìn)位狭魂,而是自動裝載初值繼續(xù)累加,特別適合于用作較精確的脈沖信號發(fā)生器) -
方式3:獨(dú)立8位計(jì)數(shù)
只適用于定時(shí)/計(jì)數(shù)器T0党觅,定時(shí)器T1處于方式3時(shí)相當(dāng)于TR1=0雌澄,停止計(jì)數(shù)
1.7 使用定時(shí)器時(shí)需要做的工作
- 初始化
- (TMOD)確定T0 / T1的工作方式,并對TMOD賦值
- (賦初值)計(jì)算初值杯瞻,并將其寫入TH0镐牺、TL0 / TH1、TL1
- (IE)使用中斷方式時(shí)魁莉,開放總中斷允許睬涧,開放定時(shí)器中斷允許
- (TCON)置位TR0 / TR1以啟動
- 計(jì)數(shù)器初值的計(jì)算
- 機(jī)器周期也就是CPU完成一個(gè)基本操作所需要的時(shí)間。
- 機(jī)器周期 = 1/單片機(jī)的時(shí)鐘頻率旗唁。
- 51單片機(jī)內(nèi)部時(shí)鐘頻率是外部時(shí)鐘的12分頻宙地。也就是說當(dāng)外部晶振的頻率輸入到單片機(jī)里面的時(shí)候要進(jìn)行12分頻。比如用12MHZ的晶振逆皮,那么單片機(jī)內(nèi)部的時(shí)鐘頻率就是12/12MHZ宅粥,當(dāng)使用12MHZ的外部晶振時(shí),機(jī)器周期 = 1/1M=1us电谣。
- 若定時(shí)1ms秽梅,因1ms/1us=1000,即計(jì)數(shù)1000個(gè)剿牺,初值 = 65535-1000+1(因?yàn)閷?shí)際上計(jì)數(shù)器計(jì)數(shù)到66636才溢出)= 64536 = FC18H
接下篇:18 定時(shí)器中斷