AT89S51定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
AT89S51單片機(jī)的定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)如下圖所示,定時(shí)器/計(jì)數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成,定時(shí)器/計(jì)數(shù)器Tl由特殊功能寄存器TH1、TL1構(gòu)成。
兩個(gè)定時(shí)器/計(jì)數(shù)器都具有定時(shí)器和計(jì)數(shù)器兩種工作模式,4種工作方式(方式0、方式1、方式2和方式3)。定時(shí)器/計(jì)數(shù)器屬于增1計(jì)數(shù)器。
特殊功能寄存器TMOD用于選擇定時(shí)器/計(jì)數(shù)器T0、T1的工作模式和工作方式。特殊功能寄存器TCON用于控制T0、T1的啟動(dòng)和停止計(jì)數(shù),同時(shí)包含了T0、T1的狀態(tài)。T0、T1不論是工作在定時(shí)器模式還是計(jì)數(shù)器模式,實(shí)質(zhì)都是對(duì)脈沖信號(hào)進(jìn)行計(jì)數(shù),只不過是計(jì)數(shù)信號(hào)的來源不同。計(jì)數(shù)器模式是對(duì)加在T0(P3.4)和Tl( P3.5)兩個(gè)引腳上的外部脈沖進(jìn)行計(jì)數(shù)(如上圖所示),而定時(shí)器工作模式是對(duì)單片機(jī)的時(shí)鐘振蕩器信號(hào)經(jīng)片內(nèi)12分頻后的內(nèi)部脈沖信號(hào)計(jì)數(shù)。由于時(shí)鐘頻率是定值,所以可根據(jù)對(duì)內(nèi)部脈沖信號(hào)的計(jì)數(shù)值計(jì)算出定時(shí)時(shí)間。
計(jì)數(shù)器的起始計(jì)數(shù)都是從計(jì)數(shù)器的初值開始。單片機(jī)復(fù)位時(shí)計(jì)數(shù)器的初值為O,也可用指令給計(jì)數(shù)器裝入一個(gè)新的初值。
工作方式控制寄存器TMOD
AT89S51單片機(jī)的定時(shí)器/計(jì)數(shù)器工作方式寄存器TMOD用于選擇定時(shí)器/計(jì)數(shù)器的工作模式和工作方式,字節(jié)地址為89H,不能位尋址,其格式如下圖所示。
8位分為兩組,高4位控制Tl,低4位控制T0。
下面對(duì)TMOD的各位給出說明。
(1) GATE:門控位。
GATE=0時(shí),僅由運(yùn)行控制位TRx(x=0,1)來控制定時(shí)器/計(jì)數(shù)器運(yùn)行。
GATE=1時(shí),用外中斷引腳(INT0(的反)INTI(的反))上的電平與運(yùn)行控制位TRx共同來控制定時(shí)器/計(jì)數(shù)器運(yùn)行。
(2) M1、M0:工作方式選擇位。
Ml、MO共有4種編碼,對(duì)應(yīng)于4種工作方式的選擇,見下表。
表 M1、M0工作方式選擇
(3) C/T(的反):計(jì)數(shù)器模式和定時(shí)器模式選擇位。
C/T(的反)=0,為定時(shí)器工作模式,對(duì)單片機(jī)的晶體振蕩器12分頻后的脈沖進(jìn)行計(jì)數(shù)。
C/T(的反)=1,為計(jì)數(shù)器工作模式,計(jì)數(shù)器對(duì)外部輸入引腳TO(P3.4)或T1(P3.5)的外部脈沖(負(fù)跳變)計(jì)數(shù)。
定時(shí)器/計(jì)數(shù)器控制寄存器TCON
TCON的字節(jié)地址為88H,可位尋址,位地址為88H~8FH。TCON的格式如下圖所示。
這里介紹與定時(shí)器/計(jì)數(shù)器相關(guān)的高4位功能。
(1) TF1、TF0:計(jì)數(shù)溢出標(biāo)志位。
當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置1。使用查詢方式時(shí),此位作為狀態(tài)位供CPU查詢,但應(yīng)注意查詢有效后,應(yīng)使用軟件及時(shí)將該位清0。使用中斷方式時(shí),此位作為中斷請(qǐng)求標(biāo)志位,進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清0。
(2) TR1、TR0:計(jì)數(shù)運(yùn)行控制位。
TR1位(或TR0位)=1,啟動(dòng)定時(shí)器/計(jì)數(shù)器工作的必要條件。
TR1位(或TR0位)=0,停止定時(shí)器/計(jì)數(shù)器工作。
該位可由軟件置1或清0。