打印
[AVR单片机]

Timer1计数器不准确问题?

[复制链接]
2626|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hcdg|  楼主 | 2008-9-23 07:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用Atmega162,用Timer1做为外部输入信号的计数器,外部输入信号的频率是1HZ-10KHZ,采用Timer0的定时器(10ms),每1秒钟读取一下Timer1的计数器值。Timer1的计数器值不准确,如果每10ms读取一下TCNT1H和TCNT1L(读取但不作任何处理),则1秒后读取到的计数器值比较大(比如4000);但是如果只是1秒钟后再读取(期间不读取TCNT1H和TCNT1L),则计数值很小(比如100);哪位大侠帮忙解释一下,看看可能是什么问题?谢谢!
Timer1的初始化如下:
 TCCR1A = 0x00;
 TCCR1B = 0x06;   // 计数分频是"外部下降沿信号"
 TCNT1H = 0x00;
 TCNT1L = 0x00;
单片机clock是8MHZ

相关帖子

沙发
cjt| | 2008-10-8 23:21 | 只看该作者

是否是数据溢出了

是否是数据溢出了

使用特权

评论回复
板凳
hcdg|  楼主 | 2008-10-10 20:49 | 只看该作者

不知道是不是溢出

我是,每1秒钟:显示一下TCNT1H和TCNT1L的值,并把TCNT1H和TCNT1L清0。如果这1秒钟之间,频繁读取TCNT1H和TCNT1L,则1秒钟周期到了后,显示的TCNT1H和TCNT1L的值与Timer1的输入信号品率基本匹配;如果在1秒钟之间不读取TCNT1H和TCNT1L,则1秒钟周期到了后,显示的TCNT1H和TCNT1L的值就会很小。输入信号频率是1-10KHZ,按理来说不会出现溢出现象。
不知道这是为什么?请大侠帮解释一下,谢谢!

使用特权

评论回复
地板
dai_weis| | 2008-10-11 11:21 | 只看该作者

不应该用读取的办法

给计数器增加一个中断响应,每次有脉冲到来,通过中断给一个变量计数器+1,你的秒计时器去访问那个变量。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝