MOVF 操作后工作寄存器中的值错误
Wrong value in the working register after a MOVF operation
MOVF操作后W寄存器获取错误值如何解决?
我正在调试一个成功构建和编程的代码,但作为电路的一部分通电时没有得到预期的结果,我注意到在 MOVF 操作后工作寄存器不包含正确的值,在调试时。
如果复制到 W-reg 的值是在调试期间手动写入的,那么代码会正常运行。
我相信下面的图片很好地说明了我的问题。
1.端口定义.
2。 LEDportA 值 0x02 将被移动到 W-reg.
3。运行后,W-reg 包含 0x00,而不是 0x02。
4.最终图像显示 LEDportA 与 LATA 相同,因为它在“clrf LEDportA 指令后被清除。
我完全不知道是什么原因造成的,非常感谢任何人可以提供的任何见解或建议。
请注意,使用的PIC单片机是PIC16F1829。
由于您没有提供足够的信息,例如您正在使用的 PIC 型号和其余代码,据我所知,您的问题是因为银行选择错误。您的 TempC 寄存器位于 bank 0 中的 0x70,而 LATA 寄存器位于内存中的 0x10C bank 2。因此,当您尝试读取 LATA 时,实际上您读取的是 bank0 中相应的 0C 地址位置。在尝试从 RAM 中的任何寄存器读取或写入之前,您必须切换正确的存储区。检查具有访问寄存器的正确方法的代码片段。您可以使用 BANKSEL 指令切换到一个库,这对程序员来说更方便,或者将一个库值加载到 BSR(Bank Select 寄存器)。
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
....
MOVF操作后W寄存器获取错误值如何解决?
我正在调试一个成功构建和编程的代码,但作为电路的一部分通电时没有得到预期的结果,我注意到在 MOVF 操作后工作寄存器不包含正确的值,在调试时。
如果复制到 W-reg 的值是在调试期间手动写入的,那么代码会正常运行。
我相信下面的图片很好地说明了我的问题。
1.端口定义.
2。 LEDportA 值 0x02 将被移动到 W-reg.
3。运行后,W-reg 包含 0x00,而不是 0x02。
4.最终图像显示 LEDportA 与 LATA 相同,因为它在“clrf LEDportA 指令后被清除。
我完全不知道是什么原因造成的,非常感谢任何人可以提供的任何见解或建议。
请注意,使用的PIC单片机是PIC16F1829。
由于您没有提供足够的信息,例如您正在使用的 PIC 型号和其余代码,据我所知,您的问题是因为银行选择错误。您的 TempC 寄存器位于 bank 0 中的 0x70,而 LATA 寄存器位于内存中的 0x10C bank 2。因此,当您尝试读取 LATA 时,实际上您读取的是 bank0 中相应的 0C 地址位置。在尝试从 RAM 中的任何寄存器读取或写入之前,您必须切换正确的存储区。检查具有访问寄存器的正确方法的代码片段。您可以使用 BANKSEL 指令切换到一个库,这对程序员来说更方便,或者将一个库值加载到 BSR(Bank Select 寄存器)。
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
....