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