我是一个非常新的Atmegas ant AVR编程,所以我希望你会原谅我这个菜鸟问题:我有这个代码,它完美地运行在1兆赫,但如果我融合的Atmega内部8兆赫,同时改变F_CPU频率为8兆赫,发光二极管是闪烁的方式快速,似乎是C编译器忽略了我的新频率。谁能帮帮我;)?
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/io.h>
int main(void)
{
while(1)
{
//TODO:: Please write your application code
/* set PC0 on PORTC (digital high) and delay for 500mS */
PORTD &= ~_BV(PD5);
_delay_ms(500);
/* PC0 on PORTC (digital 0) and delay for 500mS */
PORTD |= _BV(PD5);
_delay_ms(500);
}
}它是用以下命令编译的:
avr-gcc -g -Os -mmcu=atmega8 -c test.c
avr-gcc -g -mmcu=atmega8 -dF_CPU=8000000UL -o flash.elf test.o
avr-objcopy -j .text -j .data -O ihex flash.elf flash.hexA非常感谢您的时间和帮助;)延迟。h:http://pastebin.com/wzppfma3
发布于 2015-08-15 01:50:55
问题是,根据您的F_CPU频率,_delay_ms有一个最大ms值。根据文档,此最大值为:
在MHz中为262.14 ms / F_CPU
对于您的8 MHz,计算出最大为32ms。因此,可以像这样编写一个循环,以获得500ms的延迟:
for (uint8_t i=0; i<50; i++) _delay_ms(10);发布于 2015-08-15 01:29:16
AVR的内部熔丝应改为8 8MHz工作,仅在代码上写入是不够的,将lfuse设置为0xE4可使AVR工作在8 8MHz。
https://stackoverflow.com/questions/31997855
复制相似问题