エンベデッドシステムスペシャリスト 2018年 午前2 問03
問題文
8ビットの方向レジスタ及びデータレジスタで構成されるI/Oポートがあり、各ビットにLEDが一つずつ負論理で接続されている。システム起動時にLEDの不要な点灯を避けるための手続として、適切なものはどれか。ここで、レジスタに書き込む値は16進数で表現している。

選択肢
ア:データレジスタに00を書き込んでから、方向レジスタにFFを書き込む。
イ:データレジスタにFFを書き込んでから、方向レジスタにFFを書き込む。(正解)
ウ:方向レジスタにFFを書き込んでから、データレジスタに00を書き込む。
エ:方向レジスタにFFを書き込んでから、データレジスタにFFを書き込む。
🔒 解説は解答すると表示されます
負論理I/Oの初期化手順【午前2解説】
正解の理由
LEDは負論理で接続されており、データレジスタの値が 0なら点灯、1なら消灯します。一方、データレジスタはリセット時に値が不定なので、起動直後にそのまま出力にすると、LEDが意図せず点灯する可能性があります。
そこで、まずデータレジスタに
FF を書き込み、8ビットすべてを消灯状態にします。次に方向レジスタへ FF を書き込み、8ビットを出力に設定します。この順序で初期化するイが適切です。FF は2進数で 11111111 です。データレジスタに FF を書き込んでから出力に切り替えることで、出力開始時点から全LEDを消灯状態にできます。解法ステップ
-
方向レジスタの設定値を確認します。
0は入力、1は出力です。8ビットすべてを出力にする値はFFです。 -
データレジスタとLEDの対応を確認します。
負論理なので、データが0なら点灯、1なら消灯です。全LEDを消灯させる値はFFです。 -
安全な書込み順序を考えます。
データレジスタはリセット時に不定です。先に消灯値のFFを設定し、その後で出力に切り替えます。
選択肢別の誤答解説
-
ア:データレジスタに
00を書き込んでから、方向レジスタにFFを書き込む
00はLEDを点灯させる値です。方向レジスタを出力に設定したとき、意図しない点灯につながります。 -
イ:データレジスタに
FFを書き込んでから、方向レジスタにFFを書き込む
先にデータを全LEDの消灯値に設定し、その後で全ビットを出力にします。起動時の不要な点灯を避ける手順です。 -
ウ:方向レジスタに
FFを書き込んでから、データレジスタに00を書き込む
データレジスタが不定のまま出力に切り替えるため、切替時にLEDが点灯する可能性があります。また、最終的な設定も全LED点灯になります。 -
エ:方向レジスタに
FFを書き込んでから、データレジスタにFFを書き込む
最終的には全LEDが消灯しますが、データレジスタが不定の状態で先に出力に切り替えるため、一時的に不要な点灯が起こる可能性があります。
よくある誤解
-
負論理では「1」が点灯だと思い込む
この問題では、注記にあるとおり0が点灯、1が消灯です。問題文や図の論理を確認しましょう。 -
最終状態だけ合っていれば、書込み順序は関係ないと思う
初期化では、途中の状態も重要です。出力を有効にする前に、安全なデータを設定します。 -
リセット時の方向レジスタが0なら、データレジスタも安全だと思う
方向レジスタのリセット値は全ビット入力ですが、データレジスタの値は不定です。レジスタごとにリセット時の状態を確認してください。
補足コラム
この問題のように、出力を有効にする前に出力データを設定する手順は、LEDに限らず、モータやリレーなどの制御でも重要です。出力値が不定のまま出力を有効にすると、一瞬の誤動作が機器に影響することがあります。
FAQ
Q. なぜデータレジスタを設定してから、方向レジスタを設定するのですか?
A. 方向レジスタを出力にすると、データレジスタの値が外部に出力されます。先に消灯値を設定しておけば、出力開始時に不要な点灯を防げます。
A. 方向レジスタを出力にすると、データレジスタの値が外部に出力されます。先に消灯値を設定しておけば、出力開始時に不要な点灯を防げます。
Q.
A. 16進数の
FF は何を表していますか?A. 16進数の
FF は2進数の 11111111 です。8ビットすべてに 1 を設定する値です。関連キーワード: 負論理、I/Oポート、方向レジスタ、データレジスタ、初期化順序、出力制御

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

