avrmega16在7.3728Mhz的晶振下 不能用定时器产生1ms的精确时间吗?

时间:2021-11-23 19:34:41
为了实现9600的标准波特率 我试用了7.3728Mhz的晶振频率,可好像怎么这个晶振频率下产生1秒的时间呢??

11 个解决方案

#1


这个有计算公式的吧,你看看数据手册呗。
这个肯定可以达到的。

#2


产生定时用32.768k晶振比较准

#3


ding

#4


7.3728Mhz

如果你的系统不分频的话

那你的定时器得记7.3728M次,才是一秒

你得有24位的定时器才够

没用过AVR

具体的不好说。。。

#5


引用 2 楼 MBWQ 的回复:
产生定时用32.768k晶振比较准

可是这样的话如何产生9600的波特率呢?

#6


大家都说avr比51功能强大,更方便。我看也不尽然。

#7


精确定时就用外部ic好了,ds1302?忘了,好像是这个

#8


你所希望的“精确”的1s,到底希望精确到什么程度?没有具体要求,无法做出判断。

#9


可以生成的,定时器1,256分频,0%的误差。初始化代码如下:
//TIMER1 initialize - prescale:256
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Sec
// actual value:  1.000Sec (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x8F; //setup
 TCNT1L = 0x81;
 OCR1AH = 0x70;
 OCR1AL = 0x7F;
 OCR1BH = 0x70;
 OCR1BL = 0x7F;
 TCCR1A = 0x00;
 TCCR1B = 0x04; //start Timer
}

#10


我记得AVR的开发软件有这么个功能啊。
可以选择波特率,输入晶振大小,然后可以自动配置代码的。
——当时很无知,看了一下,现在还记得那个软件不错,可以直接生成代码的。

#11


gooogleman说的好像是 icc avr

zxq6 可以生成准确的1s,但1ms好像就不行了啊,不过1s满足我的要求了 呵呵

#1


这个有计算公式的吧,你看看数据手册呗。
这个肯定可以达到的。

#2


产生定时用32.768k晶振比较准

#3


ding

#4


7.3728Mhz

如果你的系统不分频的话

那你的定时器得记7.3728M次,才是一秒

你得有24位的定时器才够

没用过AVR

具体的不好说。。。

#5


引用 2 楼 MBWQ 的回复:
产生定时用32.768k晶振比较准

可是这样的话如何产生9600的波特率呢?

#6


大家都说avr比51功能强大,更方便。我看也不尽然。

#7


精确定时就用外部ic好了,ds1302?忘了,好像是这个

#8


你所希望的“精确”的1s,到底希望精确到什么程度?没有具体要求,无法做出判断。

#9


可以生成的,定时器1,256分频,0%的误差。初始化代码如下:
//TIMER1 initialize - prescale:256
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Sec
// actual value:  1.000Sec (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x8F; //setup
 TCNT1L = 0x81;
 OCR1AH = 0x70;
 OCR1AL = 0x7F;
 OCR1BH = 0x70;
 OCR1BL = 0x7F;
 TCCR1A = 0x00;
 TCCR1B = 0x04; //start Timer
}

#10


我记得AVR的开发软件有这么个功能啊。
可以选择波特率,输入晶振大小,然后可以自动配置代码的。
——当时很无知,看了一下,现在还记得那个软件不错,可以直接生成代码的。

#11


gooogleman说的好像是 icc avr

zxq6 可以生成准确的1s,但1ms好像就不行了啊,不过1s满足我的要求了 呵呵