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);

これにより、500ms の遅延が発生します。

どちらを選択するかはあなた次第ですが、どちらの場合も、クロックの周波数をコンパイラに対して適切に定義する必要があることに注意してください。

16MHz の例:#define F_CPU 16000000UL

于 2012-12-26T03:25:31.643 に答える