打印
[AVR单片机]

会不会出现晶振太高计数器不能使用的情况?

[复制链接]
749|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zl101lz|  楼主 | 2015-7-19 21:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一下

我用的AVR单片机晶振是7.3728MHz。裸机上是这样用的

使用16位的计数器1,设置初始值的时候,选择256分频
TCNT1H=(65536-晶振/256)/256;
TCNT1L=(65536-晶振/256)%256;

但是如果我使用8位的计时器0,设置初始值的时候,即使我选择1024的分频
TCNT0=256-晶振/1024还是小于零啊 是晶振太高了吗?

还有就是移植ucosii到avr单片机的时候

板子的晶振 和 OS_TICKS_PER_SEC这个变量的值有讲究么?

移植的例子上是这样的
#define  CPU_CLK_FREQ   8000000L
#define OS_TICKS_PER_SEC         50
TCNT0 = 256 - (CPU_CLK_FREQ / OS_TICKS_PER_SEC )/ 1024;

这个CPU_CLK_FREQ / OS_TICKS_PER_SEC就是移植的板子的晶振么?8000000/50这个看起来不像啊
我用的是ucos-ii2.76移植到ATmega16的板子

请各位大神指点一下

相关帖子

沙发
airwill| | 2015-7-19 22:03 | 只看该作者
不应该被这个问题困住嘛!
使用8位的计时器0,不可能做到1秒以上的溢出率.  
最常用的做法: 你可以提高一点溢出率 比如 32Hz, 然后在溢出中断用软件来分频.

使用特权

评论回复
板凳
zl101lz|  楼主 | 2015-7-20 00:35 | 只看该作者
airwill 发表于 2015-7-19 22:03
不应该被这个问题困住嘛!
使用8位的计时器0,不可能做到1秒以上的溢出率.  
最常用的做法: 你可以提高一点 ...

多谢大神,你看我下面的理解对不对

晶振7.3728MHz 选1024分频的话 每秒7200个节拍
TCNT0=0x70; (256-144) 就是每次定时0.02秒
然后中断里每50次才执行一次 就是定时1秒了

我这样理解对么?
还有,可能是我自学的不太完善哈。溢出率不是计算波特率的时候才用的吗?

使用特权

评论回复
地板
airwill| | 2015-7-20 09:05 | 只看该作者
理解正确.
溢出率 - 是指定时器溢出的频率.

使用特权

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

本版积分规则

4

主题

6

帖子

0

粉丝