如何在avr-gcc中定义一个计时器

时间:2012-11-25 17:10:51

标签: c avr-gcc atmel

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

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

void delay()
{

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

        _delay_loop_2(1000);
}

答案 1 :(得分: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;
    }

}

答案 2 :(得分:0)

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

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

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

16MHz的示例:#define F_CPU 16000000UL