0

我正在学习使用 avr-gcc,但我不知道如何解决以下任务:

来自端口 B 的 8 位应以 500 毫秒的间隔从 0 到 1 交替设置。

我感谢您的帮助。

4

3 回答 3

2

你可以使用#include <util/delay.h>, 如果你写 :_delay_loop_2(1000);你会有 1 毫秒的延迟;你可以使用这个功能:

void delay()
{

    for(int i=0;i<500;i++) 

        _delay_loop_2(1000);
}
于 2012-11-25T19:57:21.767 回答
1

看看这个例子。这是一个非常基本的代码timer0

#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 1000000UL
unsigned int t=0;
main()
{
    DDRD=0xFF;
    TCCR0=(1<<CS00);
    TCNT0=0;
    TIMSK=(1<<TOIE0);
    sei();
    while(1);
}
ISR(TIMER0_OVF_vect)
{
    t++;
    if(t==40000)
    {
        PORTD=~PORTD;
        t=0;
    }

}
于 2013-04-07T11:57:10.680 回答
0

正如@Alex 所说,你可以#include <util/delay.h>,但是使用提供的代码(@Alex)你可以简单地使用_delay_ms(500);

这将为您提供 500 毫秒的延迟。

选择权在您手中,请记住,在这两种情况下,您的时钟频率都必须正确地定义给您的编译器:

16MHz 示例:#define F_CPU 16000000UL

于 2012-12-26T03:25:31.643 回答