| 定时器精确定时 |
用51的TIMER来精确定时,能不能消除定时器溢出到中断函数处的误差呀。因为在执行不同指令的时候响应的时间肯定不一样,难道这部分误差只能忍了吗? 作者:westsfw 2008-1-25 14:33:00 |
|
| 回复1 使用自动重装定时器就可以了167615 |
使用自动重装定时器就可以了
作者:dai_weis 2008-1-25 15:20:00 |
|
| 回复2 中断太频繁了吧167616 |
中断太频繁了吧
作者:westsfw 2008-1-25 17:21:00 |
|
| 回复3 能消除167617 |
你既然都想到了就一定能消除
作者:5880527 2008-1-25 17:58:00 |
|
| 回复4 可以消除167618 |
你可以进行汇编级的调试。把重装的时间也算进去。 我曾用定时器做过时钟。 精度做到了每天小于1秒。我们用的晶振一般都是20ppm,不是太准。做时钟是差点,但一般情况还是够用。
作者:救火车 2008-1-25 18:18:00 |
|
| 回复5 可以消除167619 |
可以消除
作者:ayb_ice 2008-1-25 20:28:00 |
|
| 回复6 把指令执行的时间算进去 可以消除的167620 |
把指令执行的时间算进去 可以消除的
作者:liuf 2008-1-25 22:02:00 |
|
| 回复7 还有误差167621 |
回各位兄弟,我着做过才这么问的。发现每次进入中断的时候计数器计过的数不一样,差一个机器周期吧,也就是说这个误差肯定不能除去了。我已经做到MS级了每24小时哈哈。
作者:westsfw 2008-1-26 19:28:00 |
|
| 回复8 谁说的不能除去了167622 |
那误差不会是差一个机器周期,不过还是可以除去的,使每次进中断的效果都同一时刻,虽然我从没做过时钟之类的东西
作者:5880527 2008-1-26 19:49:00 |
|
| 回复9 这个问题讨论得太多了,这个误差绝对能消除,167623 |
你不能消除的话只能说你太笨了
作者:xwj 2008-1-26 19:50:00 |
|
| 回复10 干吗要那么准,167624 |
又不是做时钟, 做时钟直接用个rtc更好,
作者:后学 2008-1-26 20:53:00 |
|
| 回复11 10楼的同志呀167625 |
我承认我不聪明,我要能解决的话不来这儿丢人了。您老人家这么牛看着这么简单来解决一下呀,别站着说话不腰疼哈哈
作者:westsfw 2008-1-26 21:26:00 |
|
| 回复12 呵呵,楼主受不了拍,看看下面帖子167626 |
呵呵,楼主受不了拍,看看下面帖子
作者:sz_kd 2008-1-26 21:34:00 |
|
| 回复13 可以啊167627 |
可以啊
作者:gyt 2008-1-27 13:29:00 |
|
| 回复14 回13楼167628 |
没办法呀,天和自卑哈哈,拍一下感觉打击不小呀;不过还是谢谢那位兄弟,不是十楼的砖头俺还不知道人有多大胆地有多大产呢,哈哈;用51已经把每次进入中断时定时器低位跑过的数的差值修正了。 下面开始考虑下义隆上怎么搞定了:4M晶振,振荡周期先分频再给计数器,看怎么设法消除分频计数器上的1个差值了。谢谢各位了~
作者:westsfw 2008-1-28 10:48:00 |
|
| 回复15 *们用的晶振一般都是20ppm,不是太准?167629 |
那要什么精度的?
作者:zhang123 2008-1-28 12:04:00 |
|
| 回复16 只是较真儿~167630 |
俺就做来看看的,要求每次进入中断函数的某个指定(自已设的唯一的)位置时用的时间是1S,误差在10US之内就可以了,发这个帖子只是跟自己较下真儿,看看到底能不能做到没有误差,现在在KEIL里模拟已经看不到误差了。如果没问题就不扯这个了,除非还有做得不对的地方。中断程序如下: void timer1(void) interrupt 3 using 1 { unsigned int times; TL1+= 25; TH1= 252; times++; if(times>=500) { times=0; } } 用6M晶振,timer1方式1,每2MS中断一次,现在两次到times=0;语句的时间差是1S,拍吧~哈哈
作者:westsfw 2008-1-28 12:24:00 |
|
| 回复17 re167631 |
uchar times; if(times>=500) 你是不是 #define uchar unsigned int 呀?
作者:yixiupu0 2008-1-28 12:52:00 |
|
| 回复18 sorry167632 |
搞错了,为了简单往上贴的时候弄错的,是unsigned int times
作者:westsfw 2008-1-28 15:34:00 |
|
| 回复19 呵呵,不红不革命,不拍不成材...167633 |
不拍拍你你怎么会去动脑筋? 又怎么能解决问题呢?
作者:xwj 2008-1-28 15:42:00 |
|
| 回复20 自动重载最简单167634 |
自动重载最简单
作者:一朝成名 2008-1-28 16:13:00 |
|