MOVF操作後にWレジスタで間違った値を取得することを解決するにはどうすればよいですか?
正常にビルドおよびプログラムするコードをデバッグしていますが、回路の一部として電源を入れたときに望ましい結果が得られず、デバッグ中に、MOVF操作後に作業レジスタに正しい値が含まれていないことに気付きました。
W-regにコピーされる値がデバッグ中に手動で書き込まれる場合、コードは正常に機能します。
次の画像は、私の問題を非常によく示していると思います。
1.ポート定義。
2. LEDportA値0x02は、W-regに移動されます。
3.操作後、W-regには0x02ではなく0x00が含まれます。
4. Final image shows that LEDportA is the same as LATA, as it is cleared after the "clrf LEDportA instruction.
I am totally bewildered as to what could be causing it and any insights or advice that anyone can provide will be very much appreciated.
Please note that the PIC MCU in use is the PIC16F1829.
使用しているPICモデルや残りのコードなどの十分な情報を提供していないため、私が見る限り、問題はバンクの選択が間違っていることが原因です。TempCレジスタはバンク0の0x70にあり、LATAレジスタはメモリの0x10Cバンク2にあります。したがって、LATAを読み取ろうとすると、実際には、bank0内の対応する0Cアドレスの場所が読み取られます。RAM内のレジスタから読み取りまたは書き込みを試みる前に、正しいバンクを切り替える必要があります。レジスタにアクセスする正しい方法があるコードスニペットを確認してください。プログラマーにとってより便利なBANKSELディレクティブを使用するか、BSR(Bank Select Register)にバンク値をロードすることにより、バンクに切り替えることができます。
UpdateDisplay:
BANKSEL LEDportA ; Switch to LEDportA bank before any access
MOVF LEDportA, w
andlw 0x0f
BANKSEL TempC ; Switch to TempC bank before any access
movwf TempC
bsf TempC, 4
rrf TempC, F
btfss STATUS, C
bcf TempC, 3
btfsc TempC, 0
....
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加