Hi Hanno,
ich bin nicht sicher, ob ich richtig verstanden habe,
was du eigentlich machen willst, aber ich gebe dir hier
mal ein Beispiel für eine Drehgeber-Abfrage.
Kern dieser Methode ist die Tabelle dgtab.
Jede der vier Zeilen steht für einen "alten" Drehgehber-Zustand.
In jeder Zeile stehen die Additionswerte für den Zähler
für jede der vier möglichen "neuen" Zustände.

Vieleicht hilft dir das weiter.

Gruß Jan


Code:
;Codebeispiel zur Auswertung eins Drehgebers
;für Atmel ATTiny15L
;Signale A und B sind an PortB Bit0 und Bit1 angeschlossen
;Es wird 8 Bit weit gezählt mit dem Zähler cnt
;Jan Baare 12/2004

.NOLIST
.INCLUDE "C:\Programme\Atmel\Avr Tools\AvrAssembler\appnotes\tn15def.inc"
.LIST

        .DEF temp = r16
        .DEF cnt  = r17   ;der Zähler
        .DEF ast  = r18   ;alter Zustand Drehgeber

dgstart: ldi temp,0
         out ddrb,temp    ;Portb 0-7 auf Input setzen
         in ast,portb     ;einmal den aktuellen PortZustand holen
         andi ast,3       ;Drehgeber-Bits maskieren

dgloop: in temp,portb     ;aktuellen PortZustand holen
        andi temp,3       ;Drehgeber-Bits maskieren
        cp temp,ast       ;mit altem Zustand vergleichen
        breq dgloop       ;Keine Änderung -> nix machen
        lsl ast           ;*2
        lsl ast           ;*2
        add ast,temp      ;alter Zustand mal 4 plus neuer Zustand
        ldi ZL,low(dgtab<<1) ;Zeiger Z auf Tabellenanfang setzen
        ldi ZH,high(dgtab<<1)
        add ZL,ast        ;zum Zeiger Addieren
        clr ast
        adc ZH,ast
        lpm               ;Tabelleneintrag holen
        add cnt,r0        ;auf Zähler draufaddieren
        mov ast,temp      ;neuer Zustand wird alter Zustand
        rjmp dgloop       ;fertig


dgtab: .db 0,1,-1,0
       .db -1,0,0,1
       .db 1,0,0,-1
       .db 0,-1,1,0

;Ende