将 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 端口上的一些引脚与备用硬件复用,例如 CCPUSB。如果相关引脚配置不正确,即使您在 TRISC 中将它们设置为输出,这也可能导致行为问题。
CCP2 在 CONFIG 中默认与 RC1 引脚复用。因此,您必须更改该配置位并将其设置为 0,以便 CCP2 与 RB3 引脚复用。这将释放 RC1 引脚以供通用 IO 使用。我认为您使用 mpasm 来编译程序集。对于这种情况,您需要添加这一行来实现它:

__CONFIG _CCP2MX_OFF_3H

如果启用USB,它会成为高优先级并且可以改变RC4RC5的tris设置 个引脚。虽然 USB 在重置时被禁用,但您可以禁用它以防止在初始化程序时 PORTC 上的错误行为。

CLRF    UCON ; Set all UsbCONtrol register bits to zero