Atmel Studioで、AVRマイコンのIO設定と制御を行う方法を説明していきます。
IOの入出力設定方法
IOポートの各ピンの入力/出力の設定は、”DDRx”で設定します。各ポートは、”1″の場合は出力、”0″の場合は入力となります。例えば、ポートDの入出力方向を設定する場合は、”DDRD”を設定します。次の例では、D5とD6を出力、D2とD3を入力に設定しています。
1 2 3 4 5 6 7 8 |
//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”に制御しています。
1 2 3 4 5 6 7 8 |
//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進数で行った場合が次の例になります。
1 2 3 4 5 6 7 8 |
//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″となります。
1 2 3 4 5 6 7 8 9 10 |
//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