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