将 TABLAT 值发送到端口给我错误的值
Sending TABLAT value to a port gives me the wrong value
我正在尝试在 PIC18F4550 上编写一个程序,我在内存中定义了数据,并希望将其逐个字符地发送到 PORTC。我这样做了,但是 PORTC 上显示的值不是 TABLAT 寄存器中显示的值。例如,在我的代码中,字符串“NAME”被读取为“FAEE”。我已经尝试将它们存储在文件寄存器中,并且 WREG 和值正确显示。这是端口的正常行为,还是我遗漏了什么?我在 MPLAB V5.30
上使用模拟器工具
LIST p=18f4550
INCLUDE <p18f4550.inc>
ORG 0x00 ; Program Origin/Start Address
MAIN
CLRF TRISC
MOVLW 0X0
MOVWF TBLPTRL
MOVLW 0X05
MOVWF TBLPTRH
READ
TBLRD*+
MOVF TABLAT, W
BZ EXIT
MOVWF PORTC
GOTO READ
EXIT
GOTO $ ; This Line Is To Keep The Program Running, Not To Terminate
ORG 0x500
NAME DB "NAME",'0'
END ; Program End
C 端口上的一些引脚与备用硬件复用,例如 CCP 和 USB。如果相关引脚配置不正确,即使您在 TRISC 中将它们设置为输出,这也可能导致行为问题。
CCP2 在 CONFIG 中默认与 RC1 引脚复用。因此,您必须更改该配置位并将其设置为 0,以便 CCP2 与 RB3 引脚复用。这将释放 RC1 引脚以供通用 IO 使用。我认为您使用 mpasm 来编译程序集。对于这种情况,您需要添加这一行来实现它:
__CONFIG _CCP2MX_OFF_3H
如果启用USB,它会成为高优先级并且可以改变RC4和RC5的tris设置 个引脚。虽然 USB 在重置时被禁用,但您可以禁用它以防止在初始化程序时 PORTC 上的错误行为。
CLRF UCON ; Set all UsbCONtrol register bits to zero
我正在尝试在 PIC18F4550 上编写一个程序,我在内存中定义了数据,并希望将其逐个字符地发送到 PORTC。我这样做了,但是 PORTC 上显示的值不是 TABLAT 寄存器中显示的值。例如,在我的代码中,字符串“NAME”被读取为“FAEE”。我已经尝试将它们存储在文件寄存器中,并且 WREG 和值正确显示。这是端口的正常行为,还是我遗漏了什么?我在 MPLAB V5.30
上使用模拟器工具 LIST p=18f4550
INCLUDE <p18f4550.inc>
ORG 0x00 ; Program Origin/Start Address
MAIN
CLRF TRISC
MOVLW 0X0
MOVWF TBLPTRL
MOVLW 0X05
MOVWF TBLPTRH
READ
TBLRD*+
MOVF TABLAT, W
BZ EXIT
MOVWF PORTC
GOTO READ
EXIT
GOTO $ ; This Line Is To Keep The Program Running, Not To Terminate
ORG 0x500
NAME DB "NAME",'0'
END ; Program End
C 端口上的一些引脚与备用硬件复用,例如 CCP 和 USB。如果相关引脚配置不正确,即使您在 TRISC 中将它们设置为输出,这也可能导致行为问题。
CCP2 在 CONFIG 中默认与 RC1 引脚复用。因此,您必须更改该配置位并将其设置为 0,以便 CCP2 与 RB3 引脚复用。这将释放 RC1 引脚以供通用 IO 使用。我认为您使用 mpasm 来编译程序集。对于这种情况,您需要添加这一行来实现它:
__CONFIG _CCP2MX_OFF_3H
如果启用USB,它会成为高优先级并且可以改变RC4和RC5的tris设置 个引脚。虽然 USB 在重置时被禁用,但您可以禁用它以防止在初始化程序时 PORTC 上的错误行为。
CLRF UCON ; Set all UsbCONtrol register bits to zero