PHASE_A equ P1.4 PHASE_B equ P1.5 INCREMENT equ P1.6 DECREMENT equ P1.7 enc_last equ r7 init: mov enc_last, #0 main: clr INCREMENT clr DECREMENT ;both outputs low _main1: clr a jb PHASE_A, _main2 ;check input inc a _main2: jb PHASE_B, _main3 xrl a, #3 ;convert gray to bin _main3: clr c subb a, enc_last ;new - last jnb acc.0, _main1 ;no valid change jnb acc.1, _main4 setb DECREMENT _main4: jb acc.1, _main5 setb INCREMENT _main5: add a, enc_last mov enc_last, a ;store new as next last jmp main ; 11 / 22 cycle ; = max 90.000 pulse/s at 24MHz ;------------------------------------------------------------------------- end