定時(shí)器方式0的使用
通過設(shè)置TMOD寄存器中的M1M0為00選擇定時(shí)方式0,方式0的計(jì)數(shù)位數(shù)是13位,對T0來說,有TL0寄存器的低5位,和TH0的8位組成
那么最多能裝入2^13=8192個(gè)數(shù),也就是說,經(jīng)過8192個(gè)計(jì)數(shù),寄存器就會(huì)溢出,向CPU發(fā)出中斷請求。
所以計(jì)算公式為
TH0=(8192-X)/32
TL0=(8192-X)2
程序例子:
#include
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
uchar num;
void main()
{
TMOD=0X00; //設(shè)置定時(shí)器0為工作方式;
TH0=(8192-4607)/32; //裝初值
TL0=(8192-460)2;
EA=1;
ET0=1; //開定時(shí)器0;
TR0=1; //啟動(dòng)定時(shí)器0;
while-(1)
{
if(num==200)
{
num=0; //如果到了200次,說明1秒時(shí)間到
led1=~led1; //讓發(fā)光管狀態(tài)反接
}
}
}
void T0_time() interrupt 1
{
TH0=(8192-4607)/32; //重裝初始值
TL0=(8192-4607)2;
num++;
}
定時(shí)器方式2的使用
方式2被稱為自動(dòng)重裝的八位定時(shí)器/計(jì)數(shù)器。
原理:THX被作為常數(shù)緩沖器,當(dāng)TLX計(jì)數(shù)器溢出時(shí),在溢出標(biāo)志TFX置1的同時(shí),還自動(dòng)地將THX中的常數(shù)重新裝入TLX中,使TLX從初始值開始重新計(jì)數(shù),這樣就避免了認(rèn)為的軟件重裝初始值帶來的時(shí)間誤差,從而提高定時(shí)精度。
適用范圍:方式2特別適用于做較精確的脈沖信號(hào)發(fā)生器,因?yàn)槠渲挥?位計(jì)數(shù)器。
缺點(diǎn):當(dāng)定時(shí)較長的時(shí)間是同時(shí)給編寫程序帶來麻煩,同時(shí)還會(huì)影響精度
公式:
THX=256-N;
TLX=256-N;
程序列子:
#include
#define MOTOR P2^0; //定義電機(jī)的輸出口
int PWMcount,PWM;
void main()
{
TMOD=0X02; //設(shè)置定時(shí)器0的工作模式2
TH0=156; //轉(zhuǎn)載初始值
TL0=156;
EA=0;
ET0=1; //開啟內(nèi)部定時(shí)器中斷0;
TR0=1; //啟動(dòng)定時(shí)器中斷0;
PWM=50; //以50的PWM輸出
while(1){;}
}
void PWM_output() interrupt 1
{
PWM_count++;
if(PWM_count MOTOR=1;
else MOTOR=0;
if(PWM_count==100) PWM_count=0;
}