gpt4 book ai didi

c - Atmega @ 8MHZ 延迟 8 倍到快

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:34 30 4
gpt4 key购买 nike

我是 Atmegas ant AVR 编程的新手,所以我希望你能原谅我这个菜鸟问题:我有这段代码,它可以在 1MHZ 下完美运行,但是如果我在更改 F_CPU 频率的同时将 Atmega 融合到内部 8MHZ也达到 8 MHZ,LED 闪烁得很快,似乎 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.hex

非常感谢您的宝贵时间和帮助;)延迟.h:http://pastebin.com/wzppfma3

最佳答案

问题是 _delay_ms 的最大毫秒值取决于您的 F_CPU 频率。根据文档,这个最大值是:

262.14 毫秒/以 MHz 为单位的 F_CPU

对于您的 8 MHz,最大计算结果为 32 毫秒。因此,改为编写这样的循环以获得 500 毫秒的延迟:

for (uint8_t i=0; i<50; i++) _delay_ms(10);

关于c - Atmega @ 8MHZ 延迟 8 倍到快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com