inputモードを試す

DDRxレジスタは初期状態では全部のビットが0 (inputモード)である。

PORTxレジスタはinputモードのときとoutputモードのときとで働きが異なるため注意が必要である。

  • inputモードのときにPORTxレジスタの任意のビットをセットすると、そのビットに対応しているピンが内部プルアップされる。
  • outputモードのときにPORTxレジスタの任意のビットをセットすると、そのビットに対応しているピンからHが出力される。
#include <avr/io.h>

int main(void){
    DDRB = 0xff; // ポートBのIOを全部OUTにする。スイッチが押されたか押されていないかの表示用。
    
    // DDRD &= ~(1 << PD2); // PD2のIOをINにする(これが初期値なので省略できる)。
    PORTD |= (1 << PD2); // PD2を内部プルアップする。

    while(1){
        if(bit_is_clear(PIND, PD2)){  // PD2に接続してあるスイッチが押された状態にあったら(PINDレジスタのPD2ビットがクリアされていたら)、
        //if(!(PIND & (1 << PD2))){
            PORTB = 0xff;             // ポートBの全部のピンからHを出力し、
        }
        else{                         // PD2に接続してあるスイッチが押された状態になかったら、
            PORTB = 0x00;             // ポートBの全部のピンからLを出力する。
        }
    }

    return 0;
}


f:id:ti-nspire:20190426111425p:plain:h315