Atmel Studioで、AVRマイコンのIO設定と制御を行う方法を説明していきます。
IOの入出力設定方法
IOポートの各ピンの入力/出力の設定は、”DDRx”で設定します。各ポートは、”1″の場合は出力、”0″の場合は入力となります。例えば、ポートDの入出力方向を設定する場合は、”DDRD”を設定します。次の例では、D5とD6を出力、D2とD3を入力に設定しています。
//Example: GPIO
//Port D5/D6=output, D2/D3=input
//Target Device: ATmega328
//Author: easy labo
//Created: 2014.11.02
DDRD |= 0b01100000; //Port D5 and D6 are output.
DDRD &= ~(0b00001100); //Port D2 and D3 are input.
なお”DDRx”は、LSB側からD0、D1、・・・D7の並びになります。
出力ポートの制御
出力ポートの制御は、”PORTx”の値を設定する事で行います。”1″で”High”レベル、”0″で”Low”レベルが出力されます。ビットの指定は、8ビットの2進数だけでなく、マクロ”_BV(x)”などでも指定する事ができます。次の例では、D5を”High”、D6を”Low”に制御しています。
//Example:GPIO
//D5 is high and D6 is low with macro
//Target Device: ATmega328
//Author: easy labo
//Created: 2014.11.02
PORTD |= _BV(5); //set Port D5 output high.
PORTD &= ~_BV(6); //set Port D6 output low.
同じ制御を、8ビットの2進数で行った場合が次の例になります。
//Example:GPIO
//D5 is high and D6 is low with 8bit binary
//Target Device: ATmega328
//Author: easy labo
//Created: 2014.11.02
PORTD |= 0b00100000; //set Port D5 output high.
PORTD &= ~0b01000000; //set Port D6 output low.
“PORTx”も、LSB側からD0、D1、・・・D7の並びになります。
入力ポートの状態確認
入力ポートの状態は、”PINx”の値で確認する事ができます。次の例では、D2と、D3の入力状態を確認しています。”PINx”の各ビットの値は、”High”レベルの場合は”1″、”Low”レベルの場合は”0″となります。
//Example:GPIO
//Check D2 and D3 input state
//Taget Device: ATmega328
//Author: easy labo
//Created: 2014.11.02
unsigned char stateD2;
unsigned char stateD3;
stateD2 = PIND & _BV(2); //if D2 input is high, stateD2 = 0b1
stateD3 = PIND & 0b00001000 //if D3 input is high, stateD3 = 0b1
“PINx”も、LSB側からD0、D1、・・・D7の並びになります。
Sponsored Link