刚看了一个帖子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是怎么算的吧!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
实践需要理论支持的,关于软件延时准确确实是在没有中断的情况下的。
来自于晶体振荡器的误差无论采取何种方法都是一样的,这个没有疑问,也不是这里讨论的。这里讨论的是定时器定时到底是否精确。看准了题目。
假设你需要每过100ms对P1.0口取反,12M晶振的前提下,你用定时器能实现输出波形周期精确到1us?
举例:
我的系统中含有INT0中断、T0中断、×××中断一批。出于实时性的考虑,INT0中断优先级最高。
现在,INT0中断正在执行过程中,假设耗时100个机器周期,此时T0中断了,你给出一个T0中断最大误差4个机器周期的程序我看看。
————————————————————————————————
你这个例子不恰当吧,INT0优先级最高,那么T0的中断子程序必须要等到INT0中断程序执行完才能执行,你在否定你自己?中断从产生到执行是需要时间的,好好看看,51单片机中断的执行过程。
一周热门 更多>