本文主要學(xué)習(xí)定時器/計數(shù)器的基本結(jié)構(gòu)。對結(jié)構(gòu)的學(xué)習(xí)首先要明確定時器/計數(shù)器的功能,可參考第一節(jié)的內(nèi)容來理解。目前常用的單片機(jī)中往往都配備了定時器/計數(shù)器。在at89s52芯片內(nèi)包含有三個16位的定時器/計數(shù)器:t0、t1和t2,其核心是加1計數(shù)器。我們主要要求掌握t0和t1的結(jié)構(gòu)和功能。學(xué)習(xí)中要注意從電路結(jié)構(gòu)上來理解功能的實現(xiàn)。定時器/計數(shù)器方式寄存器tmod和定時器/計數(shù)器控制寄存器tcon是用以設(shè)定定時器/計數(shù)器的工作方式、定時或計數(shù)功能,控制啟動或停止以及產(chǎn)生溢出中斷的重要模塊,應(yīng)該對這兩個寄存器中的逐位的定義和功能進(jìn)行學(xué)習(xí)和掌握。
一、定時器/計數(shù)器的功能
at89s52單片機(jī)定時器/計數(shù)器的基本部件是兩個8位的計數(shù)器(t1計數(shù)器分為高8位th1和低8位tl1,t0計數(shù)器的高8位是th0,低8位是tl0)。如圖1所示。
圖1 t0和t1的基本構(gòu)成
定時器/計數(shù)器的核心是一個加1計數(shù)器,在作定時器使用時,它對機(jī)器周期進(jìn)行計數(shù),每過一個機(jī)器周期計數(shù)器加1,直到計數(shù)器計滿溢出。
當(dāng)它用作對外部事件計數(shù)時,計數(shù)器接相應(yīng)的外部輸入引腳t0(p3.4)或t1(p3.5)并在每個機(jī)器周期的s5p2時采樣,當(dāng)采樣到1—0的負(fù)跳變時,計數(shù)器加1。
二、定時器/計數(shù)器的結(jié)構(gòu)
at89s52單片機(jī)內(nèi)部的定時/計數(shù)器的結(jié)構(gòu)如圖2所示。定時器t0由特殊功能寄存器tl0(低8位)和th0(高8位)構(gòu)成,定時器t1由特殊功能寄存器tl1(低8位)和th1(高8位)構(gòu)成。每個寄存器均可單獨(dú)訪問。
圖2 定時器/計數(shù)器的內(nèi)部結(jié)構(gòu)
三、tmod和tcon
at89s52的定時器/計數(shù)器是一種可編程部件,在定時器/計數(shù)器開始工作之前,cpu必須將一些命令(控制字)寫入定時/計數(shù)器。
例如:選擇哪一個定時器/計數(shù)器在何種工作方式下工作?
是用作定時器計時功能還是用作計數(shù)器的計數(shù)功能?
是否啟動定時器/計數(shù)器的運(yùn)行?
……
這些設(shè)置的功能是通過對特殊功能寄存器tmod和tcon的設(shè)置來實現(xiàn)。在初始化過程中,要將工作方式控制字寫入方式寄存器(初始化工作的一部分),工作狀態(tài)字寫入控制寄存器,cpu就會按設(shè)定的工作方式獨(dú)立運(yùn)行。
1.定時器/計數(shù)器方式寄存器tmod
定時器/計數(shù)器方式控制寄存器tmod在特殊功能寄存器中,字節(jié)地址為89h。tmod不能進(jìn)行位尋址,只能用字節(jié)傳送指令設(shè)置定時器工作方式,低半字節(jié)定義為定時器/計數(shù)器0,高半字節(jié)定義為定時器/計數(shù)器1。復(fù)位時,tmod所有位均為0。tmod的格式
如下表所示。
d7
d6
d5
d4
d3
d2
d1
d0
gate
c/
m1
m0
gate
c/
m1
m0
t1方式控制字
t0方式控制字
m1、m0:工作方式選擇位。用來定義定時器/計數(shù)器的四種工作方式。
c/:功能選擇位:c/位為定時器方式或計數(shù)器方式選擇位。c/=1時,為計數(shù)器方式;c/=0時,為定時器方式。
gate:門控制位,確定定時器的開啟與關(guān)閉。當(dāng)gate=0時,只要定時器控制寄存器tcon中的tr0(或tr1)被置1時,t0(或t1)被允許開始計數(shù)(tcon各位含義見后面敘述)。
當(dāng)gate=1時,外部中斷引腳或的輸入電平控制t0或t1的開啟與關(guān)閉。
2.定時器/計數(shù)器控制寄存器tcon
tcon是t0和t1的控制寄存器,它同時也用來鎖存t0、t1的溢出中斷請求源和外部中斷請求源。tcon寄存器復(fù)位時為00h,可以進(jìn)行位尋址。定時器/計數(shù)器控制寄存器tcon字節(jié)地址為88h。tcon寄存器各位定義如下表
d7
d6
d5
d4
d3
d2
d1
d0
tf1
tr1
tf0
tr0
ie1
it1
ie0
it0
用于外部中斷
tcon中各標(biāo)志位的功能是:
tf1(d7):定時器1溢出標(biāo)志位。當(dāng)t1計滿溢出時,由硬件使tf1置1,申請中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動清0,在查詢方式下用軟件清0。
tr1(d6):定時器1運(yùn)行控制位。tr1置1,啟動定時器1;tr1置0則停止工作。tr1由軟件置1或清零
tf0(d5):定時器0溢出標(biāo)志。其功能及操作情況同tf1。
tr0(d4):定時器0運(yùn)行控制位。其功能及操作情況同tr1。
ie1(d3):外部中斷1中斷請求標(biāo)志。it1=1時,外部中斷1引腳上的電平由1變0時,ie1由硬件置位,外部中斷1請求中斷。當(dāng)cpu響應(yīng)中斷并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時,由內(nèi)部硬件自動清0。
it1(d2):外部中斷1()電平觸發(fā)方式或者脈沖觸發(fā)方式控制位。it1=1時,外部中斷1為負(fù)邊沿觸發(fā)方式,引腳上的電平從高到低負(fù)跳變有效。it1=0時,外部中斷1為電平觸發(fā)方式。上輸入低電平有效。
ie0(d1):外部中斷0中斷請求標(biāo)志。如果it0置1,則當(dāng)上的電平由1變0時,ie0由硬件置位。在cpu把控制轉(zhuǎn)到中斷服務(wù)程序時由硬件使ie0復(fù)位。
it0(d0):外部中斷源0觸發(fā)方式控制位,其含義同it1。
3.tmod和tcon的控制功能可以通過一個具體的電路結(jié)構(gòu)來加強(qiáng)理解
圖3tmod和tcon控制功能的實現(xiàn)
在圖3中,清楚的表示了tmod和tcon中的控制位對工作方式、定時/計數(shù)模式、啟動、溢出中斷的控制的實現(xiàn)。