2020-02-08 09:09发布
705192166 发表于 2012-6-25 17:28 好像每次更新定时器的值,都延时2个指令周期,才开始计数,参考一下有用没 ...
wangjiati 发表于 2012-6-25 17:50 死等.什么事情不做就等着定时器到你设定的数据. 这样准了...可就是其他事情?? 建议使用中断. 这样 ...
surf_131 发表于 2012-6-26 21:49 感觉是程序设计思想有问题。 你每次读到一个值,这个时间上有误差,然后清0 TMR2,你这次的误差就加入到下 ...
最多设置5个标签!
我看了下汇编,TMR2=0 被译成一条清零指令,也就一个指令周期;
是不是执行了这条指令后,硬件还得在过2个指令周期?我现在单片机用的是内部8M的振荡器,系统时钟就是2M,定时器是4分频。这样一次就有几us差距。
不太想用中断,中断有其他用处,PIC中断就一个服务函数吗?中断函数里还要查询,很恼火
你每次读到一个值,这个时间上有误差,然后清0 TMR2,你这次的误差就加入到下次判断中,然后每次都累加,终致“滑码”。
你应该给TMR2一个确定的溢出值,每次发现溢出(发现时机有误差)就相应动作。定时器溢出之后自动翻转继续计数,不会有误差累加。
万一需要调整门限值,也是调整那个确定的值。有些型号16位计数要先写H, 再写L, 否则些不进去云云,手册会有交待。
LS的意思是每次就是读TMR2的值和判断溢出标志,然后和上次的做减法从而得到时间差?这样会不会导致效率比较低呢?至少汇编出来的应该会多几条指令吧。
一周热门 更多>