nada sigue lo mismo pero el error dice "Overwriting previous address contents (0000)" y son multiples
el codigo esta exactamente asi
; programa q convierte lo q hay en portc a BCD, usando libreria.inc
LIST P=16F877A
#INCLUDE "P16F877A.INC"
#INCLUDE "LIBRERIA.INC"
CBLOCK 0X20
BCD_CENTENAS
BCD_DECENAS
BCD_UNIDADES
PDel0
PDel1
PDel2
ENDC
ORG 0X00
GOTO INICIO
INICIO BANCO1
MOVLW 0XFF
MOVWF PORTC
CLRF PORTB
CLRF PORTD
BANCO0
CLRF PORTB
CLRF PORTC
CLRF PORTD
BSF PORTD,0
BSF PORTD,1
BSF PORTD,2
CALL DEMORA
LEE MOVF PORTC,W
; MOVLW B'11111111'
CALL BIN_A_BCD
CLRW
MOVF BCD_CENTENAS,W
MOVWF PORTB
BCF PORTD,0 ;PRENDO DISPLAY
CALL DEMORA
BSF PORTD,0 ;APAGO DISPLAY
CLRF PORTB
CLRW
MOVF BCD_DECENAS,W
MOVWF PORTB
BCF PORTD,1
CALL DEMORA
BSF PORTD,1
CLRF PORTB
CLRW
MOVF BCD_UNIDADES,W
MOVWF PORTB
BCF PORTD,2
CALL DEMORA
BSF PORTD,2
CLRF PORTB
GOTO LEE
DEMORA movlw .21 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .237 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END
y el de LIBRERIA.INC
;############ BANCOS 877 ##########
BANCO1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANCO0 MACRO
BCF STATUS,RP0
ENDM
;###################################
;############ BIN_A_BCD #############################################################################
; CARGAR EN W EL BINARIO A CONVERTIR, EL RESULTADO
;QUEDA EL LOS REGISTROS BCD_DECENAS, BCD_CENTENAS, BCD_UNIDADES
BIN_A_BCD CLRF BCD_CENTENAS ; CARGA LOS REGISTROS CON EL RESULTADO INICIAL.
CLRF BCD_DECENAS ; EN PRINCIPIO LAS CENTENAS Y DECENAS A CERO.
MOVWF BCD_UNIDADES ; SE CARGA EL NÚMERO BINARIO A CONVERTIR.
BCD_RESTA10 MOVLW .10 ; A LAS UNIDADES SE LES VA RESTANDO 10 EN CADA
SUBWF BCD_UNIDADES,W ; PASADA. (W)=(BCD_UNIDADES) -10.
BTFSS STATUS,C ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_UNIDADES)>=10?
GOTO BIN_BCD_FIN ; NO, ES MENOR DE 10. SE ACABÓ.
BCD_INCREMENTADECENAS
MOVWF BCD_UNIDADES ; RECUPERA LO QUE QUEDA POR RESTAR.
INCF BCD_DECENAS,F ; INCREMENTA LAS DECENAS Y COMPRUEBA SI HA LLEGADO
MOVLW .10 ; A 10. LO HACE MEDIANTE UNA RESTA.
SUBWF BCD_DECENAS,W ; (W)=(BCD_DECENAS)-10).
BTFSS STATUS,C ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_DECENAS)>=10?
GOTO BCD_RESTA10 ; NO. VUELVE A DAR OTRA PASADA, RESTÁNDOLE 10 A
BCD_INCREMENTACENTENAS ; LAS UNIDADES.
CLRF BCD_DECENAS ; PONE A CERO LAS DECENAS
INCF BCD_CENTENAS,F ; E INCREMENTA LAS CENTENAS.
GOTO BCD_RESTA10 ; OTRA PASADA: RESTA 10 AL NÚMERO A CONVERTIR.
BIN_BCD_FIN
SWAPF BCD_DECENAS,W ; EN EL NIBBLE ALTO DE (W) TAMBIÉN LAS DECENAS.
ADDWF BCD_UNIDADES,W ; EN EL NIBBLE BAJO DE (W) LAS UNIDADES.
RETURN ; VUELVE AL PROGRAMA PRINCIPAL.
;######################################################################################################