51單片機(jī)系列連載6—定時(shí)器初始化補(bǔ)充
首先,再說一下T/C(定時(shí)器/計(jì)數(shù)器)的基本結(jié)構(gòu),它們基本部件是2個(gè)8位的計(jì)數(shù)器,其中TH1和TL1是T1的計(jì)數(shù)器,TH0和TL0是T0的計(jì)數(shù)器,記住這兩個(gè)計(jì)數(shù)器,后面的操作都是圍繞這兩個(gè)展開的,要有這種意識(shí)。
在作為定時(shí)器使用時(shí),是對(duì)單片機(jī)內(nèi)部機(jī)器周期的計(jì)數(shù),因其內(nèi)部頻率為晶振頻率的1/12,如果晶振頻率為12MHz,則定時(shí)器每接受一個(gè)輸入脈沖的時(shí)間為1us,后面很多定時(shí)都用到這個(gè)基本常識(shí)。
當(dāng)它用作對(duì)外部事件計(jì)數(shù)時(shí),接相應(yīng)的外部引腳T0(P3.4)或T1(P3.5)。在這種情況下,當(dāng)檢測(cè)到輸入引腳上的電平由高跳變到低時(shí),計(jì)數(shù)器就加1。
再?gòu)?qiáng)化一下初始化的步驟:
在使用T/C前,要對(duì)它進(jìn)行初始化編程,主要是對(duì)TCON和TMOD編程,還需要計(jì)算很裝載T/C的計(jì)數(shù)初值。包括以下幾點(diǎn):
1、確定T/C的工作方式——編程TMOD寄存器;
2、計(jì)算T/C的計(jì)數(shù)初值,并裝載到TH和TL;
3、T/C在中斷方式工作時(shí),需要cpu中斷和源中斷——編程IE寄存器;
4、啟動(dòng)T/C——編程TCON中的TR1或TR0位。
接下來,重點(diǎn)講一下計(jì)數(shù)初值的計(jì)算。
首先,計(jì)數(shù)器初值的計(jì)算。一般方式一與方式二是最常見的,在方式1中,16位計(jì)數(shù)器的最大計(jì)數(shù)值為216=65536,計(jì)數(shù)初值在寄存器中為TH=X/256,TL=X%6;在方式二中,8位計(jì)數(shù)器的最大計(jì)數(shù)值為28=256,計(jì)數(shù)初值在寄存器中為TH=TL=X。
其次,定時(shí)器初值的計(jì)算。這時(shí),T/C是對(duì)機(jī)器周期脈沖計(jì)數(shù)的,前面提到,若晶振頻率為12MHz,則機(jī)器周期是1us,后面的與計(jì)數(shù)器的一樣,只是這里的最大計(jì)數(shù)值是最大定時(shí)間隔。
t=(2n-X)*T,其中,t為定時(shí)時(shí)間,X為計(jì)數(shù)初值,T為機(jī)器周期。
看一個(gè)實(shí)例,單片機(jī)外接晶振頻率為12MHz,T/C0工作于定時(shí)方式,且允許中斷,定時(shí)時(shí)間為20ms,令其工作在方式1.用C語(yǔ)言進(jìn)行初始化編程。
T/C0工作于定時(shí)方式,從而C/T=0,GATE=0.定時(shí)器0工作于方式1,,所以M1M0=01.定時(shí)器1不用,TMOD=00000001=01H.計(jì)數(shù)寄存器初值分別為:TH0=(65536-20000)/256,TL0=(65536-20000)%6,因此初始化程序如下:
TMOD=0X01;//設(shè)置定時(shí)器工作方式
TH0=(65536-20000)/256;//加1計(jì)數(shù)器高8位TH0賦初值
TL0=(65536-20000)%6;//加1計(jì)數(shù)器低8位TL0賦初值
TR0=1;//啟動(dòng)計(jì)數(shù)器
ET0=1;//開計(jì)數(shù)器中斷
EA=1;
評(píng)論