運用定時器模式2 八位自動重裝可以達到一秒精確定時。
#include "REG52.H"
sbit LED = P1^0;
sbit key = P1^1;
unsigned int i=0;
bit sign=0;
void Timer0Init() //250微秒@12.000MHz
{
TMOD= 0x02; //設置定時器0模式2
TL0 = 0x06; //設置定時初值
TH0 = 0x06; //設置定時重載值
TR0 = 1; //定時器0開始計時
EA= 1;
ET0=1;
}
void delayms(unsigned int k)
{
unsigned int i,j;
for(i=k;i>0;i--)
for(j=120;j>0;j--);
}
void main()
{
Timer0Init();
while(1)
{
if((key==0)&&(sign==0))
{
delayms(10);
if(!key)
{
sign=1;
while(!key);
}
}
}
}
void InterruptTimer0() interrupt 1
{
if(sign==1)
{
i++;
LED=0;
if(i>=4000)//1秒
{
i=0;
LED=1;
sign=0;
}
}
} |