我正在嘗試在 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
uj5u.com熱心網友回復:
C 埠上的一些引腳與CCP和USB等備用硬體復用。如果相關引腳未正確配置,即使您在 TRISC 中將它們設定為輸出,這可能會導致行為問題。
CCP2 在 CONFIG 中默認與 RC1 引腳復用。因此,您必須更改該配置位并將其設定為 0,以便 CCP2 與 RB3 引腳復用。這將釋放 RC1 引腳以供通用 IO 使用。我認為您使用 mpasm 來編譯程式集。對于這種情況,您需要添加此行來實作它:
__CONFIG _CCP2MX_OFF_3H
如果USB被啟用并且可以改變RC4和RC5引腳的 tris 設定,則USB將成為高優先級。盡管 USB 在復位時被禁用,但您可以在初始化程式時禁用它以防止 PORTC 上的錯誤行為。
CLRF UCON ; Set all UsbCONtrol register bits to zero
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486331.html
下一篇:程式集顯示大量重復代碼?
