Der Fehler liegt an der Tabelle:
Code:
MOVF zaehler,W ;Zaehler ins Wreg. um mit PCL zu addieren
CALL tab_Joy ;Wert aus Tabelle...
.....
tab_Joy ;zaehler maximal bis 5
ADDWF PCL,F ; Anzeigen der Position des
DT gRJoyX,gRJoyY ; des rechten [x-Achse,y-Achse]...
DT gLJoyX,gLJoyY ; und linken [x-Achse,y-Achse] Joysticks
Du rufst mit CALL die Tabelle auf; der ProgrammCounter steht dann auf der Adresse des 1. Tabelleneintrags.
Dort addierst Du zum PCL einen Wert aus dem W-Register; was steht im PCLATH ?
Wenn zum PCL ein Wert addiert wird, springt der µC zu der errechneten Adresse; was sind das für Befehle in der Tabelle ? Und wo kommt ein RETURN für den Rücksprung ?
Wenn Du nur einen 8-Bit-Wert aus der Tabelle laden möchtest, dann trage in die Tabelle 'RETLW Rückgabewert' ein, damit geht es.
Benötigst Du mehrere Bytes, springe mit GOTO an Stellen, wo Bytes in Speicherstellen abgelegt werden.
Alternativ kannst Du eine Tabelle mit Daten erstellen und diese über indirekte Adressierung auslesen.
Eine Tabelle muß für 'Computed GOTO' Befehle enthalten, wobei eigentlich nur GOTO xxx oder RETLW zzz sinnvoll ist.
Schau Dir mal dieses Beispiel an.
Lesezeichen