平成30年度 春期 午前Ⅱ 問3
ハードウェア
負論理に関する問題
8 ビットの方向レジスタ及びデータレジスタで構成される I/O ポートがあり,各ビットに LED が一つずつ負論理で接続されている。システム起動時に LED の不要な点灯を避けるための手続として,適切なものはどれか。ここで,レジスタに書き込む値は 16 進数で表現している。
方向レジスタ(左端 MSB,右端 LSB。0:入力,1:出力)
| ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| リセット時の値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
データレジスタ(左端 MSB,右端 LSB。0:点灯,1:消灯)
| ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| リセット時の値 | 不定 | 不定 | 不定 | 不定 | 不定 | 不定 | 不定 | 不定 |
- アデータレジスタに 00 を書き込んでから,方向レジスタに FF を書き込む。
- イデータレジスタに FF を書き込んでから,方向レジスタに FF を書き込む。
- ウ方向レジスタに FF を書き込んでから,データレジスタに 00 を書き込む。
- エ方向レジスタに FF を書き込んでから,データレジスタに FF を書き込む。
答えと解説を見る
✓ これが正解イデータレジスタに FF を書き込んでから,方向レジスタに FF を書き込む。
解説
先にデータを FF(消灯)にしてから、方向を出力に切り替えます。
LED は負論理で接続されているので、データレジスタの 1 が消灯、0 が点灯です。リセット直後は方向レジスタが全て 0(入力)なので端子からは何も出力されませんが、データレジスタの値は不定です。この状態でいきなり方向レジスタに FF を書いて全ビットを出力にすると、その瞬間に不定のデータがそのまま端子に出て、0 になっていたビットの LED が点灯してしまいます。そこで、まだ入力のうちにデータレジスタへ FF を書いて全ビットを消灯の値にしておき、その後に方向レジスタへ FF を書いて出力に切り替えます。出力にする前に出す値を決めておく、という順序が要点です。値と順序の両方を確かめて選ぶと間違えません。
ほかの選択肢はなぜ違うのか
- アデータレジスタに 00 を書き込んでから…:出力に切り替える前にデータを決めておく順序は正しいのですが、書き込む値が 00 です。負論理なので 0 は点灯を意味し、方向レジスタを FF にした時点で 8 個の LED が全て点灯してしまいます。
- ウ方向レジスタに FF を書き込んでから,…:方向レジスタを先に FF にすると、データレジスタの不定な値がそのまま出力されて一部の LED が点灯するおそれがあります。さらに後から書く 00 は負論理では点灯の値なので、最終的には全ての LED が点きます。
- エ方向レジスタに FF を書き込んでから,…:最後に FF を書くので最終的には消灯しますが、方向レジスタを先に FF にした瞬間には、データレジスタの不定の値が出力されます。そこで 0 になっていたビットの LED が一瞬点灯するので、不要な点灯を避けられません。
出典:平成30年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問3
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)