[AVR单片机] Timer1计数器不准确问题?

[复制链接]
3646|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

粉丝
快速回复 在线客服 返回列表 返回顶部