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

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条回答
wajlh
1楼-- · 2020-02-07 11:47
源程序

软件延时
        ORG        0000H
       
MAIN:        SETB        P1.0
        LCALL        L1
        NOP
        NOP
        CLR        P1.0       
        LCALL        L1
        SJMP        MAIN
L1:        MOV        R3,#21
L2:        DJNZ        R3,L2
        RET
       
        END




中断延时:
        ORG        0000H
        SJMP        MAIN
        ORG        000BH
        CPL        P1.0
        RETI
       
MAIN:        SETB        ET0
        SETB        EA
        MOV        TMOD,#02H        ;T0设为8位自动重载模式
        MOV        TH0,#0CEH
        MOV        TL0,#0CEH
        SETB        TR0
        MOV        A,#08H
        MOV        B,#02H
L1:        MUL        AB
        MUL        AB
        MUL        AB       
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        MUL        AB
        SJMP        L1
        END
sdccd
2楼-- · 2020-02-07 15:53
回复【楼主位】balance
----------------------------------------------------------------------
自动重载没有误差吧,至于晶振的误差,用时钟芯片也要用晶振的。用时钟芯片的好处是软件开销小,什么时分秒星期月日年闰年等不用计算了,还有掉电不停和ram,以及功耗小。
freedom2010
3楼-- · 2020-02-07 17:23
用定时器的比较中断就没有影响 CTC模式
takashiki
4楼-- · 2020-02-07 22:48
 精彩回答 2  元偷偷看……
little_Monkey
5楼-- · 2020-02-07 23:05
回复【19楼】wajlh
不管变不变态,这里讨论的是中断能不能做到精确定时。上两个仿真图吧,看图说话。第一个图式软件实现的延时,第二个图是定时器中断的方式实现的延时。
看到最大4个机器的误差了吧。


软件延时50us对p1.0取反效果 (原文件名:软件延时1.jpg)

<center>
中断延时50us对p1.0取反效果
-----------------------------------------------------------------------

进中断有机器误差不假,但是每次中断的时间间隔还是固定的。。。。哎,我咋开始婆妈了
hongbinglin
6楼-- · 2020-02-08 02:42
不管变不变态,这里讨论的是中断能不能做到精确定时。上两个仿真图吧,看图说话。第一个图式软件实现的延时,第二个图是定时器中断的方式实现的延时。  
看到最大4个机器的误差了吧。  



_______________________
USB接口JTAGICE制作详解:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3286882
HT1632C点阵电子钟制作:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3568911
视频:http://v.youku.com/v_show/id_XMTE3NTYzMDY0.html
DIY USBASP套件,支持51/AVR
USB转串口模块,稳定支持STC下载
mini USB接口JTAGICE,带隔离缓冲芯片,支持3V~5V宽电压
双 {MOD}OLED模块
我的淘宝店铺:http://shop34694757.taobao.com

一周热门 更多>