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.