Hola, estoy haciendo la conversión (ADC) de una de las entradas análogas (AN0) de mi PIC16F884, para luego visualizar la conversión digital de 0 a 255 en la Terminal Virtual de PROTEUS, pero al cabo de un minuto aproximadamente, la transformación se detiene.

Me imagino que se debe estar llenando una memoria, aunque limpio el buffer, no sé si lo estoy haciendo bien, pero ya he intentado de todo

Estoy utilizando un oscilador externo de 4Mhz.
les comparto mi código:
list p=16f884
#INCLUDE <p16f884.inc>
;-------------------------------------------------------
;------CONFIGURCIÓN-------------------------------
;-------------------------------------------------------
__CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF
__CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF
;-------------------------------------------------------
;------VARIABLES-------------------------------------
;-------------------------------------------------------
CBLOCK 0X20
unidad
decena
centena
num
contador
ENDC
ORG 0x00
;-------------CONFIGURACION_PUERTOS------------
BANKSEL TRISA
bsf TRISA, 0; entrada analoga
bcf TRISC, 6; TX salida
bsf TRISC, 7; RX entrada
clrf TRISD
;----------CONFIGURACIÓN_CONVERSION_AD---------------
movlw b'00000000'
movwf ADCON1
BANKSEL ADCON0
movlw b'01000001'; 8fosc
movwf ADCON0
;CONFIG_USART_TRASMMISION_RECEPCION_asincrona:
movlw B'10010110'
movwf RCSTA
BANKSEL TXSTA
movlw B'00100110'
movwf TXSTA
movlw d'25' ; 9600 baudios
movwf SPBRG ;
clrf PORTD
clrf contador
call LIMPIA_BUFFER_TRANSMISION
;-------------------------------------------------------
;------PRoGRAMA PRINCIPAL--------------------------------
;-------------------------------------------------------
PRINCIPAL
movf ADRESH,0 ;registro que guarda la conversión
movwf num
movlw B'00000000'
movwf unidad
movwf decena
movwf centena
call DECIMAL
call escribir_uart
movlw B'00000000'
subwf centena,0
btfss STATUS,Z
goto escribe_centena
movlw B'00000000'
subwf decena,0
btfss STATUS,Z
goto escribe_decena
goto escribe_unidad
escribe_centena
call TABLA
movwf TXREG ;muestra en la terminal
call escribir_uart
escribe_decena
movf decena,0
call TABLA
movwf TXREG;
call escribir_uart
escribe_unidad
movf unidad,0
call TABLA
movwf TXREG;
call escribir_uart
movlw d'13' ; salto de linea
movwf TXREG;
bsf ADCON0,1 ; Activa la conversion
goto PRINCIPAL
;-------------------------------------------------------
;------FUNCIONES PARAMETRIZABLES--------------
;-------------------------------------------------------
LIMPIA_BUFFER_TRANSMISION
decfsz contador,F
goto LIMPIA_BUFFER_TRANSMISION
movf TXREG,W
movf TXREG,W
movf TXREG,W
return
DECIMAL
movlw b'01100100'
subwf num,1
btfsc STATUS,C
incf centena,1
btfsc STATUS,C
goto DECIMAL
addwf num,1
DECENA
movlw b'00001010'
subwf num,1
btfsc STATUS,C
incf decena,1
btfsc STATUS,C
goto DECENA
addwf num,0
movwf unidad
return
escribir_uart ; espera que el registro de transmisión esté vacio
BANKSEL TXSTA
btfss TXSTA,1
goto escribir_uart
BANKSEL TXREG
return
TABLA
addwf PCL,1 ;retorno de número
retlw 0x30
retlw 0x31
retlw 0x32
retlw 0x33
retlw 0x34
retlw 0x35
retlw 0x36
retlw 0x37
retlw 0x38
retlw 0x39
end