我自己用单片机的定时器做了一个时钟,但是用protues仿真时误差不是一般的大,大概一分钟就得差十多秒,就算是处理程序占用了时间也不至于这么大的误差吧?中断程序如下:
void Time0_isr(void) interrupt 1 using 0
{
TF0=0; //溢出标志清零
TH0=(65536-50000)/256; //晶振为12M,一次中断时间为50000*1us TL0=(65536-50000)%256;
if(i==20)
{
i=0; //时间达到1S,i清零
if(second>=59)
{
second=0;
if(min>=59)
{
min=0;
if(hour>=23)
{
hour=0;
}
else
{
hour=hour+1;
}
}
else
{
min=min+1;
}
}
else
second=second+1;
}
else
{
i++;
}
}
然后我就把计数 i 改为 i==16 来弥补程序处理的时间,但是这是1602的液晶显示又出问题了,显示时每隔几秒就跳过一秒直接加了两秒,例如这一时刻是16s下一时刻就是18s。怎么会这样啊?
希望高手们能多多赐教啊!!! |