【问题标题】:Wrong value in the working register after a MOVF operationMOVF 操作后工作寄存器中的值错误
【发布时间】:2020-12-25 17:38:36
【问题描述】:

如何解决MOVF操作后在W寄存器中获取错误值的问题?

我正在调试一个成功构建和编程的代码,但在作为电路的一部分上电时没有得到预期的结果,我注意到在 MOVF 操作后工作寄存器不包含正确的值,同时调试.

如果复制到 W-reg 的值是在调试期间手动写入的,那么代码将正常运行。

我相信以下图片很好地说明了我的问题。

1.端口定义。

2。 LEDport 0x02 的值将被移动到 W-reg。

3.操作后,W-reg 包含 0x00,而不是 0x02。

4.最终图像显示 LEDportA 与 LATA 相同,因为它在“clrf LEDportA 指令”之后被清除。

我完全不知道是什么原因造成的,任何人都可以提供的任何见解或建议将不胜感激。

请注意,使用的 PIC MCU 是 PIC16F1829。

【问题讨论】:

    标签: debugging microcontroller microchip mplab


    【解决方案1】:

    由于您没有提供足够的信息,例如您正在使用的 PIC 模型和其余代码,据我所知,您的问题是因为银行选择错误。您的 TempC 寄存器位于 bank 0 中的 0x70,而 LATA 寄存器位于内存中 bank 2 的 0x10C。因此,当您尝试读取 LATA 时,实际上您读取的是 bank0 中相应的 0C 地址位置。在尝试从 RAM 中的任何寄存器读取或写入之前,您必须切换正确的存储区。检查可以正确访问寄存器的代码 sn-p。您可以使用对程序员更方便的 BANKSEL 指令切换到 bank,也可以将 bank 值加载到 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
            ....
    

    【讨论】:

    • 谢谢你,我很抱歉没有说明 PIC 模型。不太清楚为什么我认为它无关紧要。无论如何,我认为你已经解决了我的问题。我会试一试,然后马上回复你。再次感谢!!
    • 好的。我可以确认我的问题已经解决。再次感谢您的帮助,尽管信息不足。
    • 很高兴你。您可以将此答案标记为解决方案。
    • 感谢您的提醒。我认为赞成它是我需要做的一切!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多