ADコンバーター / 変換完了をポーリングで確認する / Cで記述する

p.437
前回と同じことを今度はCで記述してみる。

#include <avr/io.h>

int main(){
    DDRB = 0xFF;
    DDRD = 0xFF;
    ADMUX |= (1 << REFS0); // 基準電圧はAVCC
    ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) | (1 << ADEN); // 128分周。ADCペリフェラルをオン。

    while(1){
        ADCSRA |= (1 << ADSC);               // 変換を開始して、
        loop_until_bit_is_set(ADCSRA, ADIF); // 変換完了割り込みフラグがセットされるのを待って、
        ADCSRA |= (1 << ADIF);               // 変換完了割り込みフラグをクリアして、
        
        //loop_until_bit_is_clear(ADCSRA, ADSC); // 変換開始ビットがクリアされるのを待って、
        
        PORTD = ADCL; // 変換結果を読み出す。
        PORTB = ADCH;
        
        /*
       uint16_t sute = ADC; // 10ビットを一度に読み出す。
       PORTB = (0xFF00 & sute) >> 8;
       PORTD = 0x00FF & sute;
       */
    }
    
    return 0;
}