CからTimer0の各種レジスタにアクセスして時間遅延を生成する

p.313
今度はCからTimer0を利用して時間遅延を生成してみる。普通はわざわざ自分で作ったりせずに<util/delay.h>_delay_ms()函数_delay_us()函数を使う。

f:id:ti-nspire:20200430162533p:plain:h300 f:id:ti-nspire:20200430162738j:plain:h300

//#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;
}