Hola, parece ser que no es tanto ahi el problema, ya probé poniendo displays de 7 segmentos y despliega los datos muy bien. pongo aqui mi programa.
saludos.
title 'simulación1.asm'
list p=16f877A
#include <p16f877A.inc>
cblock 0x20
dato_obtenido
datodec
contador
centenas
parcial
datodecenas
datodec1
contador1
decenas
parcial1
datounidades
datodec2
contador2
unidades
contlcd
contad
endc
;-------------------A D C-------------------------------------
inicio1 goto inic
inic bsf STATUS,RP0
clrf TRISA
clrf TRISB
clrf TRISC
clrf TRISD
movlw 0x80
movwf ADCON1
bcf STATUS,RP0
movlw 0x41
movwf ADCON0
inicio goto espera20u
clrf PORTB
nop
hecho nop
bsf ADCON0,GO
hecho1 nop
wait btfsc ADCON0,GO
goto wait
bsf STATUS,RP0
movfw ADRESL
bcf STATUS,RP0
;-------------------C E N T E N A S--------------------------------------------------------
movwf dato_obtenido
movwf datodec
repetir movlw .100
subwf datodec
btfsc STATUS,C
goto incrementar
guardar movfw contador
movwf centenas
incf contador
deccont decf contador
btfss STATUS,Z
goto multiplo
movfw parcial
subwf dato_obtenido,0
movwf datodecenas
;-------------------D E C E N A S----------------------------------------------------------
movfw datodecenas
movwf datodec1
repetir1 movlw .10
subwf datodec1,1
btfsc STATUS,C
goto incrementar1
guardar1 movfw contador1
movwf decenas
incf contador1
deccont1 decf contador1
btfss STATUS,Z
goto multiplo1
movfw parcial1
subwf datodecenas,0
movwf datounidades
;-------------------U N I D A D E S--------------------------------------------------------
movfw datounidades
movwf datodec2
repetir2 movlw .1
subwf datodec2,1
btfsc STATUS,C
goto incrementar2
guardar2 movfw contador2
movwf unidades
;-------------------P R E P A R A N D O U, D, C, P A R A L C D------------------------
movlw 0f
andwf unidades,1
andwf decenas,1
andwf centenas,1
movlw 30
iorwf unidades,1
iorwf decenas,1
iorwf centenas,1
;-------------------L C D----------------------------------------------------------------
clrf PORTC
clrf PORTB
movlw 0x06
call enviarinst
movlw 0x0C
call enviarinst
movlw 0x14
call enviarinst
movlw 0x30
call enviarinst
movlw 0x87
call enviarinst
movfw centenas
call enviardato
movfw decenas
call enviardato
movfw unidades
call enviardato
goto inicio
enviarinst bcf PORTB,0
bsf PORTB,1
movwf PORTC
movlw 0x0F
movwf contlcd
otra decfsz contlcd
goto otra
bcf PORTB,1
return
enviardato bsf PORTB,0
bsf PORTB,1
movwf PORTC
movlw 0x0F
movwf contlcd
otra1 decfsz contlcd
goto otra1
bcf PORTB,1
return
;--subrutinas-----------------
espera20u movlw .7
movwf contad
new decfsz contad ;CAD
goto new
goto hecho
;-----------------------------
incrementar incf contador
goto repetir ;CENTENAS
multiplo movlw .100
addwf parcial
goto deccont
;-----------------------------
incrementar1 incf contador1
goto repetir1 ;DECENAS
multiplo1 movlw .10
addwf parcial1
goto deccont1
;-----------------------------
incrementar2 incf contador2
goto repetir2 ;UNIDADES
end