首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Atmega @8 8MHZ延迟8倍至fast

Atmega @8 8MHZ延迟8倍至fast
EN

Stack Overflow用户
提问于 2015-08-14 04:30:27
回答 2查看 1.9K关注 0票数 1

我是一个非常新的Atmegas ant AVR编程,所以我希望你会原谅我这个菜鸟问题:我有这个代码,它完美地运行在1兆赫,但如果我融合的Atmega内部8兆赫,同时改变F_CPU频率为8兆赫,发光二极管是闪烁的方式快速,似乎是C编译器忽略了我的新频率。谁能帮帮我;)?

代码语言:javascript
复制
#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);
  }
}

它是用以下命令编译的:

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

发布于 2015-08-15 01:50:55

问题是,根据您的F_CPU频率,_delay_ms有一个最大ms值。根据文档,此最大值为:

在MHz中为262.14 ms / F_CPU

对于您的8 MHz,计算出最大为32ms。因此,可以像这样编写一个循环,以获得500ms的延迟:

代码语言:javascript
复制
for (uint8_t i=0; i<50; i++) _delay_ms(10);
票数 3
EN

Stack Overflow用户

发布于 2015-08-15 01:29:16

AVR的内部熔丝应改为8 8MHz工作,仅在代码上写入是不够的,将lfuse设置为0xE4可使AVR工作在8 8MHz。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31997855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档