Atmel Studioで、Delay(遅延)関数を使用する方法について解説します。
Delay関数のサンプル・コード
Delay関数を使用した簡単なサンプル・コードで説明していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Example:Delay //Target Device: ATmega328 //Author: easy labo //Created: 2014/11/02 #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { DDRD |= 0b10000000; while(1) { PORTD |= _BV(7); _delay_ms(1000); PORTD &= ~_BV(7); _delay_ms(1000); } } |
6行目
クロック周波数を元に遅延時間を計算するので、F_CPUを指定する必要があります。
9行目
Delay(遅延)関数を使用するには、util/delay.hをインクルードする必要があります。
17行目、19行目
_delay_msを利用して、1000msの遅延を発生させています。引数が遅延時間(ms)になります。
Delay関数の書式
Delayには、上記サンプル・コードで利用した_delay_msに加えて、us単位の_delay_usも用意されていますので、書式などをまとめておく事にします。
_delay_us
書式:_delay_us(double);
遅延時間:引数usの遅延時間を生成
最大遅延時間:768us÷F_CPU(MHz)
遅延時間超過時:自動で、_delay_msにスイッチする
_delay_ms
書式:_delay_ms( double );
遅延時間:引数msの遅延時間を生成
最大遅延時間:
(A)262.14ms÷F_CPU(MHz)
(B)6.5535s(分解能0.1ms時)
遅延時間超過時:
(A)を過ぎると分解能0.1msになるが、最大遅延時間が6.5535秒に伸びる。
まとめ
Atmel Studioでプログラミングを行う場合、Delay(遅延)関数が用意されているので便利です。なお、より長い遅延時間を発生させたい場合は、上記の遅延をループ構文の中に入れたり、タイマを使用する方法が考えられます。
Sponsored Link