51單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
M1M0工作方式功能描述00工作方式013位計(jì)數(shù)器01工作方式116位計(jì)數(shù)器10工作方式2自動(dòng)再裝入8位計(jì)數(shù)器11工作方式3定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器;
定時(shí)器1:停止計(jì)數(shù)
定時(shí)器/計(jì)數(shù)器方式控制寄存器TMOD不能進(jìn)行位尋址,只能用字節(jié)傳送指令設(shè)置定時(shí)器工作方式,低半字節(jié)定義為定時(shí)器0,高半字節(jié)定義為定時(shí)器1。復(fù)位時(shí),TMOD所有位均為0。
例:設(shè)定定時(shí)器1為定時(shí)工作方式,要求軟件啟動(dòng)定時(shí)器1按方式2工作。定時(shí)器0為計(jì)數(shù)方式,要求由軟件啟動(dòng)定時(shí)器0,按方式1工作。
我們?cè)趺磥?lái)實(shí)現(xiàn)這個(gè)要求呢?
大家先看上面TMOD寄存器各位的分布圖
第一個(gè)問(wèn)題:控制定時(shí)器1工作在定時(shí)方式或計(jì)數(shù)方式是哪個(gè)位?通過(guò)前面的學(xué)習(xí),我們已知道,C/T位(D6)是定時(shí)或計(jì)數(shù)功能選擇位,當(dāng)C/T=0時(shí)定時(shí)/計(jì)數(shù)器就為定時(shí)工作方式。所以要使定時(shí)/計(jì)數(shù)器1工作在定時(shí)器方式就必需使D6為0。
第二個(gè)問(wèn)題:設(shè)定定時(shí)器1按方式2工作。上表中可以看出,要使定時(shí)/計(jì)數(shù)器1工作在方式2,M0(D4) M1(D5)的值必須是1 0。
第三個(gè)問(wèn)題:設(shè)定定時(shí)器0為計(jì)數(shù)方式。與第一個(gè)問(wèn)題一樣,定時(shí)/計(jì)數(shù)器0的工作方式選擇位也是C/T(D2),當(dāng)C/T=1時(shí),就工作在計(jì)數(shù)器方式。
第四個(gè)問(wèn)題:由軟件啟動(dòng)定時(shí)器0,前面已講過(guò),當(dāng)門控位GATE=0時(shí),定時(shí)/計(jì)數(shù)器的啟停就由軟件控制。
第五個(gè)問(wèn)題:設(shè)定定時(shí)/計(jì)數(shù)器工作在方式1,使定時(shí)/計(jì)數(shù)器0工作在方式1,M0(D0) M1(D1)的值必須是0 1。
從上面的分析我們可以知道,只要將TMOD的各位,按規(guī)定的要求設(shè)置好后,定時(shí)器/計(jì)靈敏器就會(huì)按我們預(yù)定的要求工作。我們分析的這個(gè)例子最后各位的情況如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 0 0 1 0 1
二進(jìn)制數(shù)00100101=十六進(jìn)制數(shù)25H。所以執(zhí)行MOV TMOD,#25H這條指令就可以實(shí)現(xiàn)上述要求。
TCON定時(shí)器/計(jì)數(shù)器控制寄存器TCON在特殊功能寄存器中,字節(jié)地址為88H,位地址(由低位到高位)為88H一8FH,由于有位地址,十分便于進(jìn)行位操作。
TCON的作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況。
TCON的格式如下圖所示。其中,TFl,TRl,TF0和TR0位用于定時(shí)器/計(jì)數(shù)器;IEl,ITl,IE0和IT0位用于中斷系統(tǒng)。
各位定義如下:
TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)字時(shí)器1計(jì)滿溢出時(shí),由硬件使TF1置“1”,并且申請(qǐng)中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清“0”,在查詢方式下用軟件清“0”。
TR1:定時(shí)器1運(yùn)行控制位。由軟件清“0”關(guān)閉定時(shí)器1。當(dāng)GATE=1,且INT1為高電平時(shí),TR1置“1”啟動(dòng)定時(shí)器1;當(dāng)GATE=0,TR1置“1”啟動(dòng)定時(shí)器1。
TF0:定時(shí)器0溢出標(biāo)志。其功能及操作情況同TF1。
TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。
IE1:外部中斷1請(qǐng)求標(biāo)志。
IT1:外部中斷1觸發(fā)方式選擇位。
IE0:外部中斷0請(qǐng)求標(biāo)志。
IT0:外部中斷0觸發(fā)方式選擇位。
TCON中低4位與中斷有關(guān),我們將在下節(jié)課講中斷時(shí)再給予講解。由于TCON是可以位尋址的,因而如果只清溢出或啟動(dòng)定時(shí)器工作,可以用位操作命令。例如:執(zhí)行“CLR TF0”后則清定時(shí)器0的溢出;執(zhí)行“SETB TR1”后可啟動(dòng)定時(shí)器1開(kāi)始工作(當(dāng)然前面還要設(shè)置方式定)。
定時(shí)器/計(jì)數(shù)器的初始化由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程確定的,所以一般在使用定時(shí)/計(jì)數(shù)器前都要對(duì)其進(jìn)行初始化,使其按設(shè)定的功能工作。初始貨的步驟一般如下:
1、確定工作方式(即對(duì)TMOD賦值);
2、預(yù)置定時(shí)或計(jì)數(shù)的初值(可直接將初值寫(xiě)入TH0、TL0或TH1、TL1);
3、根據(jù)需要開(kāi)放定時(shí)器/計(jì)數(shù)器的中斷(直接對(duì)IE位賦值);
4、啟動(dòng)定時(shí)器/計(jì)數(shù)器(若已規(guī)定用軟件啟動(dòng),則可把TR0或TR1置“1”;若已規(guī)定由外中斷引腳電平啟動(dòng),則需給外引腳步加啟動(dòng)電平。當(dāng)實(shí)現(xiàn)了啟動(dòng)要求后,定時(shí)器即按規(guī)定的工作方式和初值開(kāi)始計(jì)數(shù)或定時(shí))。
下面介紹一下確定時(shí)時(shí)/計(jì)數(shù)器初值的具體方法。
因?yàn)樵诓煌ぷ鞣绞较掠?jì)數(shù)器位數(shù)不同,因而最大計(jì)數(shù)值也不同。
現(xiàn)假設(shè)最大計(jì)數(shù)值為M,那么各方式下的
最大值M值如下:
方式0:M=213=8 192
方式1:M=216=65 536
方式2:M=28=256
方式3:定時(shí)器0分成兩個(gè)8位計(jì)數(shù)器,所以兩個(gè)M均為256。
因?yàn)槎〞r(shí)器/計(jì)數(shù)器是作“加1”計(jì)數(shù),并在計(jì)數(shù)滿溢出時(shí)產(chǎn)生中斷,因此初值X可以這樣計(jì)算:
X=M-計(jì)數(shù)值
下面舉例說(shuō)明初值的確定方法。
例1、選擇T1方式0用于定時(shí),在P1.1輸出周期為1ms方波,晶振fosc=6MHz。
解:根據(jù)題意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定時(shí)時(shí)間為500us,因定時(shí)時(shí)間不長(zhǎng),取方式0即可。則M1 M0=0;因是定時(shí)器方式,所以C/T=0;在此用軟件啟動(dòng)T1,所以GATE=0。T0不用,方式字可任意設(shè)置,只要不使其進(jìn)入方式3即可,一般取0,故TMOD=00H。系統(tǒng)復(fù)位后TMOD為0,可不對(duì)TMOD重新清0。
下面計(jì)算500us定時(shí)T1初始值:
機(jī)器周期T=12/fosc=12/(6×106)Hz=2μs
設(shè)初值為X,則:
(1013-X)×2×10-6s=500×10-6s
X=7942D=1111100000110B=1F06H
因?yàn)樵谧?3位計(jì)數(shù)器用時(shí),TL1的高3位未用,應(yīng)填寫(xiě)0,TH1占用高8位,所以X的實(shí)際填寫(xiě)應(yīng)為:
X=111100000000110B=F806H
結(jié)果:TH1=F8H,TL1=06H
源程序如下:
ORG 2000H
MOV TL1,#06H ;給TL1置初值
MOV TH1,#0F8H ;給TH1置初值
SETB TR1 ;啟動(dòng)T1
LP1:JBC TF1,LP2 ;查詢計(jì)數(shù)溢出否?
AJMP LP1
LP2:MOV TL1,#06H ;重新設(shè)置計(jì)數(shù)初值
MOV TH1,#0F8H
CPL P1.1 ;輸出取反
AJMP LP1 ;重復(fù)循環(huán)