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