;************ Drehencoder Zuordnung************ /*.equ DrehENC_ddr = ddrD .equ DrehENC_port= Portd .equ DrehENC_pin = PinD .equ Phase_A = 2 .equ Phase_B = 3 .equ Taster_ENC = 4 */ ;Initialisierung Drehencoder init_DrehEncoder: rcall INIT_EXT_INT01 ;* rcall INIT_PC_INTx ;* ; rcall mode2_t0_init ;** ; rcall prescaler_T0_on ;** sbi DrehENC_port,Phase_A sbi DrehENC_port,Phase_B sbi DrehENC_port,Taster_ENC ;Test Ausgabe sbi DrehENC_ddr,0 sbi DrehENC_ddr,1 ;Test Ende in temp0,DrehENC_pin andi temp0,(1<>11 neu breq Dreh_ENCODER_ende cpi temp0,$C0 ;11>>00 neu breq Dreh_ENCODER_ende ;bei folgenden Kombinationen wurde nach links gedreht ;cpi temp0,$23 ;>>>8C 10(2,8) -- 11(3,C) <<>>C4 11(3,C) -- 01(1,4) <<<4C cpi temp0,$C4 ; links rechts breq links ;cpi temp0,$10 ;>>>40 01(1,4) -- 00(0,0) <<<04 cpi temp0,$40 ; links rechts breq links ;cpi temp0,$02 ;>>>08 00(0,0) -- 10(2,8) <<<80 cpi temp0,$08 ; links rechts breq links ;Ansonsten wurde nach rechts gedreht, Fehler (z.B. von 00 nach 11) werden bei Auskommentierung unten ;als rechtsdrehung gewertet. Passiert nicht wenn die Abtastrate hoch genug ist. ; cpi temp0,$01 ;von 00(0) nach 01(1) ; breq rechts ; cpi temp0,$13 ;von 01(1) nach 11(3) ; breq rechts ; cpi temp0,$32 ;von 11(3) nach 10(2) ; breq rechts ; cpi temp0,$20 ;von 10(2) nach 00(0) ; breq rechts rechts: ;lds temp3,dreh_Richt ;inc temp3 ;Richtung als Zahl verändern ;sts dreh_Richt,temp3 ;lds temp3,dreh_Richt ;Drehrichtung nur als Bit setzen ;andi temp3,(0<