.nolist .include "tn26def.inc" .list .listmac .def save_SREG = r14 .def int_i = r15 .def int_val3 = r16 .def enc_last = r17 .def count0 = r18 .def count1 = r19 .def count2 = r20 .def count3 = r21 .equ GRAY_IN = PINA .equ PHASE_A = PA0 .equ PHASE_B = PA1 rjmp main .org OC1Aaddr in save_SREG, SREG clr int_i sbic GRAY_IN, PHASE_A ; if( PIND & 1 ) inc int_i ; i++; sbic GRAY_IN, PHASE_B ; if( PIND & 2 ) eor int_i, int_val3 ; i ^= 3; sub int_i, enc_last ; i -= enc_last; add enc_last, int_i ; enc_last += i; sbrs int_i, 0 ; if( i & 1 ){ rjmp _ioc1a1 sbrs int_i, 1 ; if( i & 2 ) rjmp _ioc1a2 subi count0, byte1(1) ; enc_delta--; sbci count1, byte2(1) sbci count2, byte3(1) sbci count3, byte4(1) out SREG, save_SREG reti _ioc1a2: ; else subi count0, byte1(-1) ; enc_delta++; sbci count1, byte2(-1) sbci count2, byte3(-1) sbci count3, byte4(-1) _ioc1a1: ; } out SREG, save_SREG reti ; 26 cycle main: ldi int_val3, 3 ; for usage in interupt ; hier T1 starten und SPI-Slave bearbeiten rjmp main