Thanks for the info sayzer! Not sure I explained what I am doing very well. I did some more searching and found out I have 2 bit encoders, not quad. I am using them with a weight attached to one side so they are always parallel to the ground. What I want to do is use them as attitude sensors for pitch and roll in a telemetry system I am building.

They have 36 slots each and return a code of 00 01 11 10 in one direction and 10 11 01 00 in the other. I have it working but it seams to bounce or glitch. I think the 16f628 at 20mhz isnt fast enough to keep up.

Here is what I have so far.
Val should return a value from 2 to 145. Its for 36 slots * 4 states per slot.


INPUT PORTB.4
INPUT PORTB.5
LCDOUT $FE, 1
VAL VAR WORD
VAL = 2

MAIN:
LCDOUT $FE, 1
LCDOUT $FE, $80, #PORTB.4, #PORTB.5
LCDOUT $FE, $C0, #VAL
IF PORTB.4 = 0 AND PORTB.5 = 0 THEN Q00
IF PORTB.4 = 0 AND PORTB.5 = 1 THEN Q01
IF PORTB.4 = 1 AND PORTB.5 = 1 THEN Q11
IF PORTB.4 = 1 AND PORTB.5 = 0 THEN Q10
GOTO MAIN
Q00:
IF PORTB.4 = 0 AND PORTB.5 = 1 THEN VALADD
IF PORTB.4 = 1 AND PORTB.5 = 0 THEN VALMINUS
GOTO Q00


Q01:
IF PORTB.4 = 1 AND PORTB.5 = 1 THEN VALADD
IF PORTB.4 = 0 AND PORTB.5 = 0 THEN VALMINUS
GOTO Q01


Q11:
IF PORTB.4 = 1 AND PORTB.5 = 0 THEN VALADD
IF PORTB.4 = 0 AND PORTB.5 = 1 THEN VALMINUS
GOTO Q11


Q10:
IF PORTB.4 = 0 AND PORTB.5 = 0 THEN VALADD
IF PORTB.4 = 1 AND PORTB.5 = 1 THEN VALMINUS
GOTO Q10

VALADD:
VAL = VAL + 1
IF VAL > 145 THEN VAL = 2
GOTO MAIN

VALMINUS:
VAL = VAL - 4
IF VAL < 2 THEN VAL = 145
GOTO MAIN