
Det är ett vanligt misstag att tänka sig att en "literal" kan vara en "variablel",
men värdet på en "literal" sätts under assembleringen och är sedan ett
konstant hårdkodat värde i PIC koden/instruktionen. Samma gäller
naturligtsvis alla "literal" instruktioner, t.ex den "XORLW W" som du hade
med förrut. "W" är en symbol i MPASM med värdet h'00' (noll) så det blir
en "XORLW b'00000000'", vilket inte var vad du ville ha, eller hur ?
Att cursurn flyttar på sig låter som om modulen tror att den får tecken den ska
skriva. Problem med R/S kanske ??
En liten detalj...
Du kör ju i 4-bitars mode, vilket är ganska vanligt.
Normalt brukar man dock lägga "splitten" av en 8-biters byte i själva
LCD subrutinen (DISPLAY_SEND i ditt fall). Problemet med din lösning är
att du själv måste dela varje tecken som ska skrivas ut. Fundera t.ex på
om du vill skriva ut "Hej". I ditt fall måste du dela upp "H", "e" och "j" i
deras 4-biars delar och anropa DISPLAY_SEND 6 gånger. Det vore enklare att
göra :
MOVLW a'H'
CALL DISPLAY_SEND
MOVLW a'e'
CALL DISPLAY_SEND
MOVLW a'j'
jämfört med hur det skulle se ut med din nuvarande lösning.
Men, för att gå vidare, lägg till lite kod som skiver ut några ASCII tecken,
så får vi se vad som händer...