刚看了一个帖子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是怎么算的吧!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
而上面所说的中断要等待,只要等待的时间不超过定时器时间就行了。
剩下的就是精度和省电问题:
一般32.768K 精度要比普通晶振高,还有32.768分频后刚后0.5S,好计算。
其它用RTC最主要是省电问题,且不占用单片机资源。
结贴了。。。。。逸风
-----------------------------------------------------------------------
用事实来说话,我的东西已经完成了,而且运行了将近72个小时,和电脑上的时间对准后,运行至今,至少现在人眼还分辨不出误差
回复【11楼】takashiki 岚月影
我很奇怪,为什么51做不到精确定时?我的小弟也是这么说,我面试过几个,也这么说。但是我自己却从来都是认为51的定时器和时钟芯片的误差是一样的,误差的来源仅仅取决于振荡器。若要定时精确,就选用好的振荡器。
很是不明白为什么总以51的t0说事,52(现在基本上都是标准的52居多吧)是有t2定时器的,自动重载,何来的中断引起的误差?
我面试那些不知道有t2的都被我刷掉了,哈哈。
-----------------------------------------------------------------------
就你这点水平还面试别人,多少人被你冤枉掉了?误差不是来自于计数过程,而是来自于中断执行过程,跟自动重载有何关系?你大学老师没教你?今天心情好免费教你。51单片机中断响应机制就是“等待当前指令执行完毕再响应中断”,中断时随机发生的,所以当......
-----------------------------------------------------------------------
对于重载或者CTC方式,每次发生溢出或比较匹配的时间是一样的,即设置中断标志位的时间间隔是一样的,即只要一到中断发生的情况,就立即产生中断请求。只不过这个中断请求要在执行完一条指令或相应高优先级中断后才能处理,但是只要被处理了,就能被精确使用,比如中断20次是一秒,无论你每一次中断的间隔是19.999还是20.001,只要中断20次就是过去了1秒。
各种放屁啊....
呃..我错了...粗口了....
单片机自己的内部的时钟究竟有多精密,诸君看过datasheet没有.很多片子内部时钟都是1%误差起步啊,居然还在这里谈论精密,有个啥意义哦.
一周热门 更多>