精确定时是用单片机内的定时器好还是时钟芯片好

2020-02-05 08:53发布

刚看了一个帖子http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4056474&bbs_page_no=1&search_mode=1&search_text=定时&bbs_id=9999
好像用单片机内的定时器定时会有误差,是这样吗?误差来源是什么呢?定时器不是1微妙加一计时的吗? 怎么会有误差呢?我用过方式2,就是那种自动重装载的方式,用protues仿真运行一个小时,好像也看不到误差啊?
    要是用时钟芯片,会不会降低系统的稳定性呢?毕竟多了一部分电路,且在单片机外部,在工控场合会不会容易受到干扰而计时不准呢?
帖子内容如下:
/********定时器T0中断函数**********/
void t0(void) interrupt 1  
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//这样的定时数据,是不是正好是50000*1微秒=50毫秒?
aa++;
if(aa==18)//这里的意思是中断18次,需要1秒的时间(晶振12MHz),我怎么感觉应该是中断20次用时1秒?
  {
    aa=0;
    miao++;
    if(miao==60)
    {
      miao=0;
      fen++;
       if(fen==60)
        {
           fen=0;
           shi++;
          if(shi==24)
             shi=0;
        }
    }
  }

----------------问题附在注释里面,请指点一下,看看这个18是怎么算的吧!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
77条回答
balance
2020-02-09 16:38
回复【36楼】little Monkey
-----------------------------------------------------------------------
非自动重装模式一样要考虑中断后CPU响应时间和赋初值的时间,

-------------------------------- 我都说了,定时精确与否是单片机内的定时器与时钟芯片的事,与中断无关。关于非自动重装模式赋初值的时间,不知道你是想说什么。如果是说非自动重装模式的计时是从赋初值开始的,那的确不能忽略赋初值的时间。但是从逻辑上分析一下,就知道,这个很不正确。既然初值都没有赋上,何来的计时开始呢。如果那你想说,下一次的赋初值的时间,那你就多虑了。既然都是非自动重装模式了,那计时的开始和结束,当然是在本次的计时数值之内的啦,干嘛还要费劲用上下次啊。否则用自动重载岂不是更好。
*************************************************************************************
比较,先比较小时,小时匹配再比较分钟,这样比较的次数最少,效率高,最多比较次数也才23+59次而已,

-------------------------------- 这个确实很好
*************************************************************************************
带闹钟的时钟芯片也有,闹钟时间到来以后CPU响应的时间不会超过1S吧?闹钟可是一分钟之内都有效的,忽略

--------------------------------恩,这个也要用到中断吧。否则,闹钟时间到来时,cpu可是正在干别的啊。既然用了中断,那就有相应中断的相应时间误差。与单片机内的定时器同。
*************************************************************************************
每次1个周期的误差(按12M算是1us),假设定时250us,那么就是1/250的误差了,当250min后就会有1min的误差,每天就是5分多的误差,很可观而不是无伤大雅。。
--------------------------------不是有说,自动重载是由硬件完成的(貌似老师也是这么讲的)吗,与软件无关吧。如果您说的是自动重载要占用一个1个周期的话(按12M算是1us),那在计时中,我少记一个数不就可以了吗,这个只是算法问题,也与精确性无关啊。若是说,自定重载的时间不定,那就没有办法了,不过好像,无此说法啊
*************************************************************************************
听说过CPU死机,跑飞的,没听过时钟芯片跑飞,死机的(孤陋寡闻了,呵呵),而且时钟芯片的耗电比CPU可是小很多的,特别是在掉电以后
--------------------------------至于这个嘛,我的考虑是,多个器件,就多了一个故障几率,况且也增加了电路面积,还增加了成本。至于耗电嘛,好像我不必考虑吧,我做的是定时开关,又不是电子表,至于掉电就更不必考虑了。省电模式下的方案,我确实不知,还望指教。

一周热门 更多>