本帖最后由 84335262 于 2010-2-6 16:01 编辑  
 
所谓更好的方案,就是按2楼的方法逆向一下。2楼的方法是积累到后面去处理,所以积累量不同就处理不同。但想一下如果在早期处理的话就不用变化了。具体如下: 
把处理周期改为1MS处理。这样得到需要333.333个指令周期(假设你用的是16位计数器,8位的把1MS改小)。先四舍五入为333。这样每个中断还欠0.333个指令周期。中断中设一变量。一进中断就+1。最后在中断里嵌入遇到变量等于3进行一次清零动作,刚好把欠的0.333个指令补上(这样的计算必须要把进中断的时间、中断里的浪费的时间比如重新设置中断,开中断等除掉)。这样每次中断都是得到理论上的1MS,1S只要是1000个MS。理论最大的误差都只有1US或2US。定时周期在1MS上去改动(比如定0.5秒就是500个,1秒就是1000个),怎么改都是准的。
 |