Disculpa le hice así, puede revisarle si se encuentra bien, los vales a cargar en los displays puse unidad, decena y centena, cuando le pruebo en proteus e ingreso la señal no me muestra nada, creo que falle en algo, con todo seguiré viendo en que estoy fallando
INCLUDE "P16F877A.INC"
; CONFIG
; __config 0xFF39
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
;%%%%%% Variables para crear retardo
d1 EQU 23H
d2 EQU 24H
d3 EQU 25H
CBLOCK 0x20
NumL
NumH
W_TEMP
STATUS_TEMP
unidad
decena
centena
contadorinterrup
ENDC
ORG 0x00
GOTO INICIO
ORG 0x04
MOVWF W_TEMP
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
CALL INTERRUPCION
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
INICIO:
; Inicio registros
CLRF unidad
CLRF decena
CLRF centena
CLRF NumH
CLRF NumL
MOVLW .16
MOVWF contadorinterrup
;Configuro los pines
bcf STATUS,RP1; Situo en el banco 1
bsf STATUS,RP0; Situo en el banco 1
;%%%%%%%%
movlw 0x00
movwf TRISB; Pines del puerto B como salida
movwf TRISD; Pines del puerto D como salida
bcf STATUS,RP0;
; Configuro Timer0
BANKSEL OPTION_REG
MOVLW 0x07 ;Preescaler 1:256
MOVWF OPTION_REG
BANKSEL T1CON
;Configuro Timer 1
BSF T1CON, TMR1CS
CLRF TMR1H
CLRF TMR1L
BSF T1CON, TMR1ON
CLRF TMR0
BSF INTCON, TMR0IE
BSF INTCON, GIE
LOOP:
CALL BIN_TO_BCD
CALL MOSTRAR
NOP
GOTO LOOP
INTERRUPCION:
BCF INTCON, TMR0IF
MOVLW 0x02
XORWF contadorinterrup, W
BTFSC STATUS, Z
GOTO CUENTA66
DECFSZ contadorinterrup, F
RETURN
BCF T1CON, TMR1ON
MOVF TMR1L, W
MOVWF NumL
MOVF TMR1H, W
MOVWF NumH
CLRF TMR1H
CLRF TMR1L
MOVLW .16
MOVWF contadorinterrup
CLRF TMR0
BSF T1CON, TMR1ON
RETURN
BIN_TO_BCD:
movf NumH, w
addlw d'241'
addwf NumH, w
movwf centena ;b_2 = 2a_2 - 15
addwf centena, w
addwf centena, w
addlw d'253'
movwf decena
swapf NumL, w
andlw 0x0F
addwf decena, f
addwf decena, f ;b_1 = 6a_2 + 2a_1 - 48
addwf NumH, w
sublw d'251'
movwf unidad
addwf unidad, f
addwf unidad, f
addwf unidad, f
movf NumL, w
andlw 0x0F
addwf unidad, f ;b_0 = a_0 - 4(a_2 + a_1) - 20
movlw d'10'
bin2dec999a ;9 cycles max
addwf unidad, f
decf decena, f
skpc
goto bin2dec999a
bin2dec999b ;6 cycles max
addwf decena, f
decf centena, f
skpc
goto bin2dec999b
bin2dec999c ;3 cycles max
addwf centena, f
skpc
goto bin2dec999c
return
MOSTRAR:
movlw 0xff;Limpio el puerto B como es anódo común imprimo 1's en puerto B
movwf PORTB
movlw 0x06;Activo primer display
movwf PORTD
movf unidad,0; Cargo valor de unidades en W
call tabla; Despues con el valor en W llamo a una tabla que retorna en W con la decodificacion 7segmentos
movwf PORTB; Imprimo valor decodificado en el puerto B
call RETARDO; Mantengo ese valor por 5ms
movlw 0xff; Limpio el puerto de nuevo
movwf PORTB
movlw 0x05; Activo el segundo display
movwf PORTD
movf decena,0; Cargo el valor de decenas en W
call tabla; Llamo a tabla que me retorna con el valor decodificado
movwf PORTB; Imprimo ese valor en el display de decenas
call RETARDO; Mantengo ese valor 5ms
movlw 0xff; Limpio el puerto
movwf PORTB
movlw 0x03; Activo el display de centenas
movwf PORTD
movf centena,0; Muevo centenas a W
call tabla; Decodifico el valor de centenas
movwf PORTB; Imprimo ese valor en el display centenas
call RETARDO; Mantengo ese valor 5ms
goto MOSTRAR; Repito en un bucle todo el tiempo
;%%%%%%%%%%%%%%%
tabla
addwf PCL,F; Suma el valor del PCL con el valor de W que venga de unidades, decenas o centenas
retlw b'01000000'; Valor decodificado en 7seg del numero 0
retlw b'01111001'; Valor decodificado en 7seg del numero 1
retlw b'00100100'; Valor decodificado en 7seg del numero 2
retlw b'00110000'; Valor decodificado en 7seg del numero 3
retlw b'00011001'; Valor decodificado en 7seg del numero 4
retlw b'00010010'; Valor decodificado en 7seg del numero 5
retlw b'00000010'; Valor decodificado en 7seg del numero 6
retlw b'01111000'; Valor decodificado en 7seg del numero 7
retlw b'00000000'; Valor decodificado en 7seg del numero 8
retlw b'00010000'; Valor decodificado en 7seg del numero 9
CUENTA66:
DECF contadorinterrup, F
MOVLW .189 ; 255 - 66
MOVWF TMR0
RETURN
RETARDO
movlw 0xE7
movwf d1
movlw 0x04
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;2 cycles
goto $+1
return
END