打印

如何处理好定时器和1602液晶显示的问题???

[复制链接]
2218|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lp525110627|  楼主 | 2010-12-9 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自己用单片机的定时器做了一个时钟,但是用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。怎么会这样啊?
希望高手们能多多赐教啊!!!

相关帖子

沙发
airwill| | 2010-12-9 17:54 | 只看该作者
别用 protues 仿真结果当真实结果哪.
protues 仿真计算老是跟不上实时情况的

使用特权

评论回复
板凳
suking1982| | 2010-12-9 22:20 | 只看该作者
楼主你的判断条件是不是出错了? if(second>=59),这条语句意思应该是在second达到59就清零了,少计算了1秒;其他分钟与小时也类似。

使用特权

评论回复
地板
lp525110627|  楼主 | 2010-12-10 11:51 | 只看该作者
不会少吧!你想,当达到58s时,再来20次中断(即i==20)时second+1=59(此时实际时间是59s)但是现在并不会立刻判断second的条件,只能等到再过20次中断才会判断,而此时实际时间却已经是60s,但second的值还是59s。是吧?

使用特权

评论回复
5
lp525110627|  楼主 | 2010-12-10 11:58 | 只看该作者
各位大侠帮帮忙啦!小弟实在想不通啊!我在protues里面用DS1302时钟芯片做仿真时也是计时不准确,刚开始仿真时时间是对的,但是过一会就慢了,而且误差也很大。但是当关闭仿真从新开始仿真时时间又跳到正确的时间了。不知道是不是protues软件的问题???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

23

帖子

1

粉丝