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

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是怎么算的吧!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
76条回答
dreampet
1楼-- · 2020-02-05 14:17
进中断是需要时间的,误差就来源于进中断程序的时间,因此每次定时中断的时间并不是正好50ms,而是50ms+中断执行时间,因此aa才会取18,也就是说,每一秒里,中断执行的时间大约占用了100ms。
wajlh
2楼-- · 2020-02-05 17:56
 精彩回答 2  元偷偷看……
hsztc
3楼-- · 2020-02-05 18:17
使用自动重装置方式,不存在误差,误差就是晶振的误差。可以做到跟时钟芯片一样的精度,而且更方便,

前提是程序要写对,比如一楼说的50mS中断一次,但执行一次中断不只用了50mS,所以中断程序尽量简短。
jpchen
4楼-- · 2020-02-05 19:15
支持3楼的说法。
你可以做到比时钟芯片更高精度的,就是选择很高精度的晶振来当单片机的晶振,如果时钟芯片采用普通的32K晶振的话,那单片机定时就会比时钟芯片更准。
jpchen
5楼-- · 2020-02-05 22:20
我记得阿莫邮购部就卖过一批高精度的晶振,你用它来做,定时精度就高了。
yz0853
6楼-- · 2020-02-06 00:34
进中断也需要时间么。。。直观理解。。

一周热门 更多>