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







Zitieren

Lesezeichen