マイコンの汎用入出力ポートに接続されたLED1を,LED2の状態を変化させずに点灯したい。
汎用入出力ポートに書き込む値として,適切なものはどれか。
ここで,使用されている汎用入出力ポートのビットは全て出力モードに設定されていて,出力値の読出しが可能で,この操作の間に汎用入出力ポートに対する他の操作は行われないものとする。
正答2
解説
正解は2です。
この問題は、ビット演算を使って、出力ポートの特定のビットだけを1にする方法を問うています。
図では、LED1は汎用入出力ポートのビット3に、LED2はビット6に、それぞれ電流制限抵抗を介して接続され、先はグラウンドにつながっています。
このためビットに1を出力するとLEDが点灯します。
【計算】
ビット3だけが1の値:2進数00001000=16進数08
ビット6だけが1の値:2進数01000000=16進数40
ビット3と6が1の値:2進数01001000=16進数48
読み出した値と08の論理和を取ると、ビット3だけが1になり、他のビットは元の値のままです。
【選択肢別解説】
1:× 08との論理積では、ビット3以外のビットがすべて0になります。
LED2(ビット6)が消灯するおそれがあり、ビット3も元が0なら0のままで点灯しません。
2:○ 08との論理和では、ビット3が必ず1になり、他のビットは元の値が保たれます。
LED1が点灯し、LED2の状態は変わらないので、条件を満たします。
3:× 48との論理積では、ビット3と6以外のビットが0になり、ビット3と6は元の値のままです。
ビット3が0なら1にならないため、LED1を点灯できません。
4:× 48との論理和では、ビット3に加えてビット6も1になります。
LED2が消灯していた場合に点灯してしまうため、LED2の状態を変えないという条件に反します。
【ポイント】
特定ビットを1にするには論理和(OR)、0にするには論理積(AND)、反転するには排他的論理和(XOR)を使います。
対象ビットだけを1にした値をマスクと呼びます。