Chinaunix首页 | 论坛 | 博客
  • 博客访问: 850907
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: 嵌入式

2009-11-05 20:31:45

我觉得这个必然要分两个方面来说,精度,分辨率。

不知道这两个词用的准确不。
精度,就是要误差小,说多少频率,就要尽量多少。这方面肯定是手表晶振最好了,都是多少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这样的器件都可以使用此函数。
阅读(1220) | 评论(0) | 转发(0) |
0

上一篇:调试记录

下一篇:常用宏定义

给主人留下些什么吧!~~