私はArduinoでレジスタレベルのプログラミングを行っています。目標は、タイマーを使用して独自の遅延ロジックを作成することです。コードは次のとおりです。
#include<avr/io.h>
int main()
{
DDRB = (1<<PORTB5);
TCCR1B = (1<<CS12);
while(1)
{
if(TCNT1 >= 31250)
{
PORTB ^= (1<<PORTB5);
TCNT1 = 0;
}
}
return 0;
}
上記のプログラムは、遅延関数を使用せずにArduinoに遅延を導入し、問題なく動作するようにするためのものです。しかし、以下のコードを見てください。
#include<avr/io.h>
void setup()
{
DDRB = (1<<PORTB5);
TCCR1B = (1<<CS12);
}
void loop()
{
if(TCNT1 >= 31250)
{
PORTB ^= (1<<PORTB5);
TCNT1 = 0;
}
}
このように書くと、プログラムはコンパイルされますが、Arduinoでは点滅しません。上記のコードに似た以下のコードが正常に動作している場合、何が問題になる可能性がありますか?
#include <util/delay.h>
void setup()
{
DDRB = (1<<PORTB5);
}
void loop()
{
PORTB ^= (1<<PORTB5);
_delay_ms(500);
}