我正在学习使用avr-gcc,但我不知道如何解决以下任务:
端口B中的8位应该交替设置为0到1,间隔为500毫秒。
谢谢你的帮助。
发布于 2012-11-25 19:57:21
您可以使用#include <util/delay.h>,如果您编写:_delay_loop_2(1000);,您将有1ms的延迟;您可以使用以下函数:
void delay()
{
for(int i=0;i<500;i++)
_delay_loop_2(1000);
}发布于 2013-04-07 11:57:10
看一下这个例子。这是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;
}
}发布于 2012-12-26 03:25:31
正如@Alex所说,您可以使用#include <util/delay.h>,但是使用提供的代码(由@Alex提供)时,您可以简单地使用_delay_ms(500);
这将为您提供500毫秒的延迟。
选择是您的,请记住,在这两种情况下,您的时钟的频率必须正确地定义给您的编译器:
16 for的示例:#define F_CPU 16000000UL
https://stackoverflow.com/questions/13553337
复制相似问题