利用计时器的计时误差就是一个系统周期,请明白计时误差和测量误差的概念,测量误差我不敢说,因为这个和探头有关。单片机使用的不是51系列,不存在分频一说。同时程序又不是基于中断来写来的,判断只需要两条语句,显然没有你说的保护性操作。程序是精心设计的,写法是考虑到延时的,因此不会按照经典的T2-T1公式来得到时间差,正是通过这种方式来达到消除误差的目的。系统时钟是经过标准时钟校正,不是一般简单的校正,在室温下震荡频率误差小于15kHz,毫无夸张。
至于你想说的定时程序本身的误差,如下分析
定时器的计时和停止就是用了以下几句话,这是c语言对应的汇编代码:
判断
+00000815: 999D SBIC 0x13,5 Skip if bit in I/O register cleared A
+00000816: CFFE RJMP PC-0x0001 Relative jump B
开始计时
+00000817: E081 LDI R24,0x01 Load immediate
+00000818: BD8E OUT 0x2E,R24 Out to I/O location
判断时间结束否
+0000081C: 99B3 SBIC 0x16,3 Skip if bit in I/O register cleared C
+0000081D: CFFE RJMP PC-0x0001 Relative jump D
停止计时
+0000081E: 2422 CLR R2 Clear Register
+0000081F: BC2E OUT 0x2E,R2
程序分析和仿真:计时的开始和结束只有四种情况,A处开始C处结束,A处开始D处结束,B处开始C处结束,B处开始D处结束
对于的计时误差为 0 -2 2 0。不信的话你自己仿真看看。
可见误差最大就是两个时钟周期,这就是最坏情况下的测量误差,对应时间就是0.25us,这个遇到的概率是50%。对于测量1000米每秒的子弹速度,间距取200mm,那么最大误差带了的速度误差不超过1.25米每秒。如果间距加到400mm,则误差减小为0.625米每秒,这是最极端的情况。对于与10000米每秒的爆速误差会增加100倍,即200mm下最大为123米每秒。实际上对于diy,测量的子弹很少超过500米秒,极端误差就会下降一倍,即200mm时为0.625米每秒,对于400mm间距时为0.312米每秒。相信已经满足大家需要了吧。
请你不要在这里信口开河。在这里扰乱视听有意思吗?我是用C语言写的,但是你了解我的定时思路吗?我做定时器要是连你说的这些都没有考虑过,那我还做个什么定时器。这个程序修改过多次,精简而可靠,定时精度好于中断,同时方法简单,不是拍脑袋写出来的。可卖的定时器均采用这个版本的定时程序。
想买的人我会把特性,如何测量,注意事项给讲清楚、讲明白,这东西没有必要欺骗大家。
你这么爱质疑别人的东西,是不是感觉很兴奋啊?我知道否定别人肯定确实有很大的快感。