我正在学习使用avr-gcc,但我不知道如何解决以下任务:
来自端口B的8位应交替设置为0到1,间隔为500毫秒。
感谢您的帮助。
答案 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