單片機(jī)定時(shí)器/計(jì)數(shù)器基本原理
目前常用的單片機(jī)中往往都配備了定時(shí)器/計(jì)數(shù)器。在AT89S52芯片內(nèi)包含有三個(gè)16位的定時(shí)器/計(jì)數(shù)器:T0、T1和T2,其核心是加1計(jì)數(shù)器。我們主要要求掌握T0和T1的結(jié)構(gòu)和功能。學(xué)習(xí)中要注意從電路結(jié)構(gòu)上來(lái)理解功能的實(shí)現(xiàn)。定時(shí)器/計(jì)數(shù)器方式寄存器TMOD和定時(shí)器/計(jì)數(shù)器控制寄存器TCON是用以設(shè)定定時(shí)器/計(jì)數(shù)器的工作方式、定時(shí)或計(jì)數(shù)功能,控制啟動(dòng)或停止以及產(chǎn)生溢出中斷的重要模塊,應(yīng)該對(duì)這兩個(gè)寄存器中的逐位的定義和功能進(jìn)行學(xué)習(xí)和掌握。
一、定時(shí)器/計(jì)數(shù)器的功能
AT89S52單片機(jī)定時(shí)器/計(jì)數(shù)器的基本部件是兩個(gè)8位的計(jì)數(shù)器(T1計(jì)數(shù)器分為高8位TH1和低8位TL1,T0計(jì)數(shù)器的高8位是TH0,低8位是TL0)。如圖1所示。
定時(shí)器/計(jì)數(shù)器的核心是一個(gè)加1計(jì)數(shù)器,在作定時(shí)器使用時(shí),它對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),每過(guò)一個(gè)機(jī)器周期計(jì)數(shù)器加1,直到計(jì)數(shù)器計(jì)滿溢出。
當(dāng)它用作對(duì)外部事件計(jì)數(shù)時(shí),計(jì)數(shù)器接相應(yīng)的外部輸入引腳T0(P3.4)或T1(P3.5)并在每個(gè)機(jī)器周期的S5P2時(shí)采樣,當(dāng)采樣到1—0的負(fù)跳變時(shí),計(jì)數(shù)器加1。
二、定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)
AT89S52單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)如圖2所示。定時(shí)器T0由特殊功能寄存器TL0(低8位)和TH0(高8位)構(gòu)成,定時(shí)器T1由特殊功能寄存器TL1(低8位)和TH1(高8位)構(gòu)成。每個(gè)寄存器均可單獨(dú)訪問(wèn)。
圖2 定時(shí)器/計(jì)數(shù)器的內(nèi)部結(jié)構(gòu)
一、定時(shí)/計(jì)數(shù)的基本概念
定時(shí)和計(jì)數(shù)是日常生活和生產(chǎn)中最常見(jiàn)和最普遍的問(wèn)題。
定時(shí)器和計(jì)數(shù)器功能基本上都是使用相同的邏輯實(shí)現(xiàn)的,而且這兩個(gè)功能都包含輸入的計(jì)數(shù)信號(hào),本質(zhì)上都是對(duì)脈沖計(jì)數(shù)。計(jì)數(shù)器用來(lái)計(jì)數(shù)并指示在任意間隔內(nèi)輸入信號(hào)(事件)的個(gè)數(shù),而定時(shí)器則對(duì)規(guī)定間隔內(nèi)輸入的信號(hào)個(gè)數(shù)進(jìn)行計(jì)數(shù),用來(lái)指示經(jīng)歷的時(shí)間。
在單片機(jī)中,定時(shí)/計(jì)數(shù)器作定時(shí)功能用時(shí),對(duì)機(jī)器周期計(jì)數(shù)(由單片機(jī)的晶體振蕩器經(jīng)過(guò)12分頻后得到),因每次計(jì)數(shù)的周期是固定的,所以根據(jù)它計(jì)數(shù)的多少就可以很方便的計(jì)算出它計(jì)數(shù)的時(shí)間。如圖1所示。
圖1 計(jì)數(shù)與定時(shí)
二、溢出的基本概念
從一個(gè)生活中的例程看起:一個(gè)水盆在水龍頭下,水龍頭沒(méi)關(guān)緊,水一滴滴地滴入盆中。盆的容量是有限的,水滴持續(xù)落下,盆中的水持續(xù)變滿,最終有一滴水使得盆中的水滿了,這就是“溢出”。
如果一個(gè)空的盆要1萬(wàn)滴水滴進(jìn)去才會(huì)滿,開(kāi)始滴水之前可以先放入一部分水,叫做計(jì)數(shù)初值。如果現(xiàn)在要計(jì)數(shù)9000,那么可以先放入1000滴水,也就是計(jì)數(shù)初值為1000,再計(jì)數(shù)9000就可以溢出產(chǎn)生中斷。
單片機(jī)中通常采用計(jì)數(shù)初值的辦法,如果每個(gè)脈沖是1微秒,則計(jì)滿256個(gè)脈沖需時(shí)256微秒,如果現(xiàn)在要定時(shí)100微妙,只要在計(jì)數(shù)器里面先放進(jìn)156,然后計(jì)數(shù)100就可以就可以溢出產(chǎn)生中斷了。如圖2所示。
圖2 定時(shí)器/計(jì)數(shù)器的溢出
三、定時(shí)/計(jì)數(shù)的主要方法
實(shí)現(xiàn)定時(shí)或計(jì)數(shù),主要有三種方法。
(1)軟件延時(shí)
軟件延時(shí)利用微處理器執(zhí)行一個(gè)延時(shí)程序段實(shí)現(xiàn)。因?yàn)槲⑻幚砥鲌?zhí)行每條指令都需要一定時(shí)間,通過(guò)指令的循環(huán)實(shí)現(xiàn)軟件延時(shí)。軟件定時(shí)具有不使用硬件的特點(diǎn),但卻占用了大量CPU時(shí)間。另外,軟件定時(shí)精度不高,在不同系統(tǒng)時(shí)鐘頻率下,執(zhí)行一條指令的時(shí)間不同,同一個(gè)軟件延時(shí)程序的定時(shí)時(shí)間也會(huì)不同。
(2)硬件定時(shí)
硬件定時(shí)采用數(shù)字電路中的分頻器將系統(tǒng)時(shí)鐘進(jìn)行適當(dāng)分頻產(chǎn)生需要的定時(shí)信號(hào),也可以采用單穩(wěn)電路或簡(jiǎn)易定時(shí)電路(如常用的555定時(shí)器)由外接RC(電阻、電容)電路控制定時(shí)時(shí)間。這樣的定時(shí)電路較簡(jiǎn)單,利用不同分頻倍數(shù)或改變電阻阻值、電容容值使定時(shí)時(shí)間在一定范圍內(nèi)改變。
(3)可編程的硬件定時(shí)
可編程定時(shí)器/計(jì)數(shù)器最大特點(diǎn)是可以通過(guò)軟件編程來(lái)實(shí)現(xiàn)定時(shí)時(shí)間的改變,通過(guò)中斷或查詢方法來(lái)完成定時(shí)功能或計(jì)數(shù)功能。這種電路不僅定時(shí)值和定時(shí)范圍可用程序改變,而且具有多種工作方式,可以輸出多種控制信號(hào),具備較強(qiáng)的功能。