运用定时器模式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;
}
}
} |