Der uC hängt sich auf, wenn SIG_A=0 und SIG_B=1 ist. Sobald der Debugger an die Zeile JMP @A+DPTR kommt, gibt er "Out of Code" aus. Ich kann mir das aber nicht erklären. Der ACCU enthält zu diesem Zeitpunkt 00001010 und springt sogar zu der Adresse in der Tabelle unten. Dann führt der NOP aus und gibt eben den Fehler aus.Code:;Zweiter Versuch mit dem Drehimpulsencoder include REG8252.INC ;Zuweisungen SIG_A EQU P3.3 ;0 SIG_B EQU P3.2 ;1 LAST_STATE EQU R6 TEMP EQU R2 ;Resets MOV P2, #0 MOV LAST_STATE, #0 ;*************************************************************************************************** ;Die Hauptschleife LOOP: ACALL CHECK_DIG_STATE SJMP LOOP ;*************************************************************************************************** CHECK_DIG_STATE: ACALL READOUT_DIG ;Zustand auslesen und MOV A, LAST_STATE ;im Accu an der Stelle MOV B, #04h ;X X X X - - X X platzieren MUL AB ACALL READOUT_DIG ;Zustand auslesen, an der ORL A, LAST_STATE ;Stelle X X X X X X - - platzieren ANL A, #0Fh MOV P2, A MOV DPTR, #TABLE JMP @A+DPTR ;*************************************************************************************************** ;Liest den Drehimpulsgeber aus und speichert den Zustand im Register LAST_STATE READOUT_DIG: JB SIG_A, A_TRUE SJMP A_FALSE A_TRUE: JB SIG_B, STATE_2 SJMP STATE_1 A_FALSE: JB SIG_B, STATE_3 SJMP STATE_0 STATE_0: MOV LAST_STATE, #0 ;SIG_A=0 and SIG_B=0 RET STATE_1: MOV LAST_STATE, #1 ;SIG_A=1 and SIG_B=0 RET STATE_2: MOV LAST_STATE, #2 ;SIG_A=1 and SIG_B=1 RET STATE_3: MOV LAST_STATE, #3 ;SIG_A=0 and SIG_B=1 RET ;*************************************************************************************************** TABLE: SJMP NOA SJMP CW SJMP ERR SJMP CCW SJMP CCW SJMP NOA SJMP CW SJMP ERR SJMP ERR SJMP CCW SJMP NOA SJMP CW SJMP CW SJMP ERR SJMP CCW SJMP NOA ;*************************************************************************************************** NOA: NOP RET ERR: NOP RET CW: SETB P2.7 RET CCW: CLR P2.7 RET END
Vielleicht überschreibe ich versehentliche wichtige Register?







Zitieren
Lesezeichen