我正在学习使用 avr-gcc,但我不知道如何解决以下任务:
来自端口 B 的 8 位应以 500 毫秒的间隔从 0 到 1 交替设置。
我感谢您的帮助。
你可以使用#include <util/delay.h>
, 如果你写 :_delay_loop_2(1000);
你会有 1 毫秒的延迟;你可以使用这个功能:
void delay()
{
for(int i=0;i<500;i++)
_delay_loop_2(1000);
}
看看这个例子。这是一个非常基本的代码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;
}
}
正如@Alex 所说,你可以#include <util/delay.h>
,但是使用提供的代码(@Alex)你可以简单地使用_delay_ms(500);
这将为您提供 500 毫秒的延迟。
选择权在您手中,请记住,在这两种情况下,您的时钟频率都必须正确地定义给您的编译器:
16MHz 示例:#define F_CPU 16000000UL