Esta es la rutina terminada y probada, las instrucciones de division y multiplicacion en asm me tiraban error en mikrobasic con el uso de la libreria del lcd .

movf portd,f ;Movemos al reg. F el valor del portd
andlw 48 ;Filtramos los bits 4 y 5 del reg. w
;Antes
(XXTTXXXX) despues
(00TT0000) movwf _temp ;Movemos al reg. temp el valor del reg. w
rrf _temp,1 ;Rotamos el reg. temp a la izquierda
(000TT000) rrf _temp,1 ;Rotamos el reg. temp a la izquierda
(0000TT00) rrf _temp,1 ;Rotamos el reg. temp a la izquierda
(00000TT0) rrf _temp,1 ;Rotamos el reg. temp a la izquierda
(000000TT) BCF STATUS,C ;Ponemos a 0 al bit CARRY del registro STATUS
;La x en el reg. encoder son los bits del resultado de la ejecucion previa de
;esta rutina; se modifican en cada ejecucion.
rlf _encoder,1 ;Rotamos el reg. encoder a la derecha
(xxxxxEE0) rlf _encoder,1 ;Rotamos el reg. encoder a la derecha
(xxxxEE00) movf _temp,w ;Movemos el reg. temp a w
iorwf _encoder,w ;Hacemos la operacion OR entre los reg. encoder y w y
;lo guarda en este ultimo.
; encoder
(XXXXEE00) ; w
(000000TT) ;resultado en w
(XXXXEETT) andlw 15 ;Filtramos con la operacion AND los bits que queremos borrar
;del registro w, en este caso, los primeros 4 bits
; w
(XXXXEETT) ; valor 15
(00001111) <-15 en binario
;resultado
(0000EETT) movwf _encoder ;Movemos el resultado al reg. encoder
;En este momento, el reg. encoder tiene un valor que esta formado por el
;valor antiguo y el valor nuevo de los pines del encoder. De esta manera se
;forma un numero que oscila entre 0000 (0 en decimal) y 1111(15 en decimal)
MOVF _encoder,W ; Pasamos a w el valor del reg. encoder
ADDWF PCL,F ; Sumamos al contador de programa el valor de w
GOTO CERO ; (0000=00) pasa de 00 -> 00 = igual
GOTO DEC_COUNT ; (0001=01) pasa de 00 -> 01 = -1
GOTO INC_COUNT ; (0001=02) pasa de 00 -> 10 = +1
GOTO ERR_COUNT ; (0011=03) pasa de 00 -> 11 = error
GOTO INC_COUNT ; (0100=04) pasa de 01 -> 00 = +1
GOTO FIN ; (0101=05) pasa de 01 -> 01 = igual
GOTO ERR_COUNT ; (0110=06) pasa de 01 -> 10 = error
GOTO DEC_COUNT ; (0111=07) pasa de 01 -> 11 = -1
GOTO DEC_COUNT ; (1000=08) pasa de 10 -> 00 = -1
GOTO ERR_COUNT ; (1001=09) pasa de 10 -> 01 = error
GOTO FIN ; (1010=10) pasa de 10 -> 10 = igual
GOTO INC_COUNT ; (1011=11) pasa de 10 -> 11 = +1
GOTO ERR_COUNT ; (1100=12) pasa de 11 -> 00 = error
GOTO INC_COUNT ; (1101=13) pasa de 11 -> 01 = +1
GOTO DEC_COUNT ; (1110=14) pasa de 11 -> 10 = -1
GOTO FIN ; (1111=15) pasa de 11 -> 11 = igual
INC_COUNT: ;Viene a esta etiqueta si se detecto la secuencia +1
bsf _encoder,7 ;Ponemos a 1 el bit 7 del reg. encoder
goto fin ;Vamos a la etiqueta fin
DEC_COUNT: ;Viene a esta etiqueta si se detecto la secuencia -1
bsf _encoder,6 ;Ponemos a 1 el bit 6 del reg. encoder
goto fin ;Vamos a la etiqueta fin
ERR_COUNT: ;Viene a esta etiqueta si se detecto la secuencia error
bsf _encoder,5 ;Ponemos a 1 el bit 5 del reg. encoder
goto fin ;Vamos a la etiqueta fin
CERO: ;Viene a esta etiqueta si se detecto la secuencia 00->00
bsf _encoder,4 ;Ponemos a 1 el bit 4 del reg. encoder
goto fin ;Vamos a la etiqueta fin
fin:Edito: hay una copia en la seccion Rutinas para compartir.