PIC Encoder 16F84A

Device=16F84A
REMINDERS = False
Config XT_OSC, PWRTE_ON, WDT_OFF
REMINDERS = True

TRISA  = %11111    ' Puerto A como entradas. Sólo usamos RA0 y RA1.
TRISB  = %00000000 ' Puerto B como salidas, para los 8 LEDs.
PORTB=0            ' Inicialmente ponemos a cero el puerto B.

Dim x    As  Byte  ' Declaramos el valor de X como byte, se corresponderá con los 8 LEDs de salida.
Dim Aux  As  Byte  ' Se almacenará el valor anterior de RA0 y RA1, hasta la siguiente comparación.
Dim Enc  As  Byte  ' Se almacenará el valor actual de RA0 y RA1, hasta la siguiente comparación.

x=0                ' Ponemos todas las variables a cero.
Aux=0              
Enc=0
         
While 1=1                              ' Bucle infinito.                        
     
     Aux = Enc                         ' Igualamos 'AUX' y 'ENC' para luego comparar cuando
                                       ' cambie 'ENC'.               
     Enc = (PORTA & 3)                 ' Aislamos RA0 y RA1 como un número de 2 bits y
                                       ' se carga en la variable 'ENC'.
     If Aux = 2 And Enc = 3 Then Inc x ' Si en la comparación hay flanco de subida, incrementamos X.                                    
     If Aux = 3 And Enc = 2 Then Dec x ' Si en la comparación hay flanco de bajada, decrementamos X.
     
     PORTB = x                         ' El valor de X sale por el puerto B, los 8 LED de salida.
     
Wend
End