p.313
今度はCからTimer0を利用して時間遅延を生成してみる。普通はわざわざ自分で作ったりせずに<util/delay.h>
の_delay_ms()
函数、_delay_us()
函数を使う。
//#define F_CPU 8000000UL #include <avr/io.h> //#include <util/delay.h> void delay_T0(int n){ for(int i=0; i<n; i++){ TCNT0 = 0x0; // カウンタを初期値にリセットして、 TCCR0B = 1 << CS02 | 1 << CS00; // 分周比(1024分周)を設定してカウントを開始して、 loop_until_bit_is_set(TIFR0, TOV0); // オーバーフローするまでとどまって、 //while((TIFR0 & (1 << TOV0)) == 0); TCCR0B = 0; // オーバーフローしたらカウントを停止して、 TIFR0 |= 1 << TOV0; // オーバーフローフラグをクリアする。 } // を何回か繰り返す。 } int main(){ DDRB = 0xFF; PORTB = 0b10101010; while(1){ PORTB ^= 0xFF; delay_T0(20); //_delay_ms(650); } return 0; }