これは4ビットの75Xから32ビットのV850に共通の事項です。
・ビット操作命令
・ポートへのビット操作
マイコンのビット操作は専用のハードウエアで実現しているのではなく、
リード・モディファイ・ライトにより実現しています。
動作としては、
(1) データを 4/8ビット単位で読み込む(読み込む長さは CPUで異なります)
(2) 読み込んだデータの目的のビットのセット/リセットを行う
(3) ビットを処理したデータを 4/8ビット単位で書き戻します
の動作となります。
通常のプログラム処理ではこれらは特に意識する必要はないのですが、
ポートのようなハードウエアに対してビット操作を行う場合には注意が必要です。
一部のデバイスを除いては、ポートへのビット操作を可能にするために、
ポートを出力で使用している時には出力ラッチのデータを読み出し、
入力で使用している時には外部端子の状態を読み出せるような回路構成となっています。
例えば P20-P27 の 8ビットの入出力ポートがあるとします。
このポートへのアクセスは必ず 8ビット単位で行われます。
このポートに対するビット操作を行う場合には、8ビット分のデータが読み込まれます。
この時、出力に指定してあるビットでは出力ラッチのデータが読まれ、
入力に指定してあるビットでは端子の状態が読まれます。
このようなビット毎に異なるところからのデータが組合わさった状態で読まれます。
このデータの中の目的のビットに対して操作が行われ、結果が 8ビットで出力ラッチに書き戻されます。
つまり、入力ポートに指定されたポートの出力ラッチには外部端子の状態が書き込まれる事になります。
このため、操作しないビットに対応するポートが入力の場合、データ化けを生じる可能性があります。従って、入力に指定しているポートに関しては注意が必要になります。
このように、ポートを出力に指定しない状態でのポートに対するビット操作は、対象以外のビットに思いがけない影響を与えますので、注意が必要です。
具体的な現象例での問題については、以下のFAQをご参照ください。
(2006/11)