我觉得这个必然要分两个方面来说,精度,分辨率。
不知道这两个词用的准确不。
精度,就是要误差小,说多少频率,就要尽量多少。这方面肯定是手表晶振最好了,都是多少ppm。
分辨率,就是要频率要大,这样最小时间单位就够小了。
像msp430,一般都有一个手表晶振,内部一般还有DCO。这两者一个精度高,一个分辨率可以做到很高。
举例msp430f2132,
我可以使用一个32768的手表晶振,满足我对精度的要求,在我要精确定时,而且分辨率可以容忍1/32768的情况下,定时器的时钟来源可以设置为ACLK。
如果我要一个us级别的定时,我大可以使用DCO,一般由于单片机的cpu时钟就是来源DCO,所以把定时器的来源也设置为DCO,而且只是定时几个clk的话用定时器显然不合适,分辨率肯定因为代码的开销导致不够准确,所以一般这种定时都是用硬件延时,一般代码里面使用__NOP()空指令来实现硬延时。
特别说一下:
IAR中有个函数
__delay_cycles(unsigned long clks)
这个帮助我们实现多少个clk的硬件延时,省的我去查找nop指令在430中咱几个clk,测试可得,这个函数还算准确,至少像DS18B20这样的器件都可以使用此函数。
阅读(1252) | 评论(0) | 转发(0) |