Por lo que debo de tener algún fallo en la subrutina de conversión de binario a ascii
Creaste un programa simple con la rutina?
Y que en el loop principal sea:
CLRF valor,F
Loop:
INCF valor,F
MOVF valor,W
CALL LCDCONVERSOR
GOTO Loop
Pone un breakpoint en el GOTO Loop y fijate los estados de los 3 registros, cada ves que pones Run, deberia aumentar en 1 y comenzar desde 0, sino es un error.
Algunos otros consejos:Por que incrementar y decrementar de a 1, cuando podes hacerlo de a 10. Mirando el flag de carry para saber si el numero a restar es menor a 10, y eso va para las unidades directamente.
El hacerlo de a 10 implica menos tiempo en eso, si tuvieras 255 como entrada tendrias 255 vueltas de tu codigo. En cambio de a 10 en 10 solo 26 vueltas
Mejor usar F y W , veo que estas mesclando y por ahi pones un 1 en ves de la F, la cual esta ultima es mas clara.
Para el 0 (cero) podes usar '0' en ves de 0x30, es mas simple de recordar

.
Errores veo uno solo ( o 2 si es correcta mi duda), tengo una duda en que de el valor correcto. Ya que el decfsz primero decrementa y luego pregunta. Si pones 0 en W, pasaria a 255 y no daria el valor correcto. Si pones 1 imagino que tendrias como resultado 0. Una solucion rapida seria incrementar en 1 a W antes de comenzar con el decfsz. con un ADDLW 0x1
Tu error seria este:
ascii movlw 0x30
addlw dec
movlw 0x30
addwf uni,1
movlw 0x30
addwf cen,1
Tenes un ADDLW DEC ... mal instruccion
ascii movlw '0'
addwf dec, F
addwf uni, F
addwf cen, F
Asi estaria solucionado..
-------------
Como lo tenes un CALL podes aplicar el codigo que pase al principio y probar cada porcion de codigo en un programa aparte, esto te permite simularlo sin ningun problema y ver que funcion correctamente.