割り込みによるタイマーで1/100秒を計れるようになりました。
しかし、もっと基本的な時間待ちを試してみたくなりました。
そうです。
単なるループでの時間待ちです。
何回のループで1秒の待ちになるか確認してみます。
500,000,000回(5億回)のループで大体8秒でした。
ということは、1回のループに0.000000002秒です。(0.002μ秒 速っ~!)
すごいよAVR!
と単純にびっくりしていましたが・・・待てよ! また単純なプログラムなので、変数がレジスタに乗ってしまっているだけかも知れない・・・と疑ってみるとやっぱりそうでした。
ループの変数の定義に volatile を付けてみると・・・とてつもなく遅くなりました。
2,500,000回のループで大体11秒です。
すると、1回のループに0.0000004秒です。(0.4μ秒 まあ、こんなもんか)
#include <avr/io.h>
#define LED_SET DDRC |= 0x10
#define LED_ON PORTC |= 0x10
#define LED_OFF PORTC &= ~0x10
int main( void )
{
volatile long i;
LED_SET;
while(1)
{
LED_ON;
for(i=0 ; i<2500000L ; i++);
LED_OFF;
for(i=0 ; i<500000L ; i++);
}
}