list P=16F873A INCLUDE "P16F873A.INC" ; __CONFIG (_CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC ) GO EQU .2 ADH EQU 20H ADL EQU 21H CONT EQU 22H START EQU 23H TIEMPO EQU 24H DECIMAS EQU 25H UNIDADES EQU 26H DECENAS EQU 27H DATO EQU 28H CARRIER EQU 29H DATOH EQU 30H ACUM EQU 31H COUNT1 EQU 32H COUNT2 EQU 33H C EQU 0 DC EQU 1 Z EQU 2 PC EQU 2 ORG 0 GOTO INI ORG 4 GOTO INTERRUP TABLA ADDWF PC,1 RETLW 3FH ;0 RETLW 06H ;1 RETLW 5BH ;2 RETLW 4FH ;3 RETLW 66H ;4 RETLW 6DH ;5 RETLW 7CH ;6 RETLW 27H ;7 RETLW 7FH ;8 RETLW 67H ;9 ;***************************************** SEPARA BTFSC DATOH,1 GOTO BIT1H SGTE8 BTFSC DATOH,0 GOTO BIT0H SGTE7 BTFSC DATO,7 GOTO BIT7
SGTE6 BTFSC DATO,6 GOTO BIT6 SGTE5 BTFSC DATO,5 GOTO BIT5 SGTE4 BTFSC DATO,4 GOTO BIT4 SGTE3 BTFSC DATO,3 GOTO BIT3 SGTE2 BTFSC DATO,2 GOTO BIT2 SGTE1 BTFSC DATO,1 GOTO BIT1 SGTE0 BTFSC DATO,0 GOTO BIT0 OUT_SEPARA RETURN ;******************************************************** BIT1H ;VALOR DE 512 MOVLW .2 MOVWF DECIMAS MOVLW .1 MOVWF UNIDADES MOVLW .5 MOVWF DECENAS GOTO SGTE8 ;********************************************************* BIT0H ;VALOR DE 256 ;PRUEBA DECIMAS MOVLW .6 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_0H BTFSC STATUS,C GOTO MAY10_0H GOTO UNI0H MAY10_0H MOVWF DECIMAS
INCF UNIDADES,1 GOTO TUNI0H DECI10_0H CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI0H UNI0H MOVF ACUM,0 MOVWF DECIMAS GOTO TUNI0H ;PRUEBA DE UNIDADES TUNI0H MOVLW .5 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_0H BTFSC STATUS,C GOTO UNIMAY10_0H GOTO DECE0H UNIMAY10_0H MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE0H UNI10_0H CLRF UNIDADES INCF DECENAS,1 GOTO TDECE0H DECE0H MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE0H MOVLW .2 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_0H BTFSC STATUS,C GOTO DECEMAY10_0H GOTO MDECE0H DECEMAY10_0H
MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN0H DECE10_0H CLRF DECENAS BSF PORTC,3 GOTO FIN0H MDECE0H MOVF ACUM,0 MOVWF DECENAS FIN0H GOTO SGTE7 ;********************************************************* BIT7 ;PRUEBA DECIMAS MOVLW .8 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_7 BTFSC STATUS,C GOTO MAY10_7 GOTO UNI7 MAY10_7 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI7 DECI10_7 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI7 UNI7 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI7 MOVLW .2 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_7 BTFSC STATUS,C GOTO UNIMAY10_7
GOTO DECE7 UNIMAY10_7 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE7 UNI10_7 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE7 DECE7 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE7 MOVLW .1 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_7 BTFSC STATUS,C GOTO DECEMAY10_7 GOTO MDECE7 DECEMAY10_7 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN7 DECE10_7 CLRF DECENAS BSF PORTC,3 GOTO FIN7 MDECE7 MOVF ACUM,0 MOVWF DECENAS FIN7 GOTO SGTE6 ;******************************************************* BIT6 ;PRUEBA DECIMAS MOVLW .4 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_6
BTFSC STATUS,C GOTO MAY10_6 GOTO UNI6 MAY10_6 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI6 DECI10_6 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI6 UNI6 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI6 MOVLW .6 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_6 BTFSC STATUS,C GOTO UNIMAY10_6 GOTO DECE6 UNIMAY10_6 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE6 UNI10_6 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE6 DECE6 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE6 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0
BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_6 BTFSC STATUS,C GOTO DECEMAY10_6 GOTO MDECE6 DECEMAY10_6 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN6 DECE10_6 CLRF DECENAS BSF PORTC,3 GOTO FIN6 MDECE6 MOVF ACUM,0 MOVWF DECENAS FIN6 GOTO SGTE5 ;******************************************************* BIT5 ;PRUEBA DECIMAS MOVLW .2 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_5 BTFSC STATUS,C GOTO MAY10_5 GOTO UNI5 MAY10_5 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI5 DECI10_5 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI5 UNI5 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI5 MOVLW .3 ADDWF UNIDADES,0
MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_5 BTFSC STATUS,C GOTO UNIMAY10_5 GOTO DECE5 UNIMAY10_5 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE5 UNI10_5 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE5 DECE5 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE5 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_5 BTFSC STATUS,C GOTO DECEMAY10_5 GOTO MDECE5 DECEMAY10_5 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN5 DECE10_5 CLRF DECENAS BSF PORTC,3 GOTO FIN5 MDECE5 MOVF ACUM,0 MOVWF DECENAS FIN5 GOTO SGTE4 ;******************************************************* BIT4
;PRUEBA DECIMAS MOVLW .6 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_4 BTFSC STATUS,C GOTO MAY10_4 GOTO UNI4 MAY10_4 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI4 DECI10_4 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI4 UNI4 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI4 MOVLW .1 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_4 BTFSC STATUS,C GOTO UNIMAY10_4 GOTO DECE4 UNIMAY10_4 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE4 UNI10_4 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE4 DECE4 MOVF ACUM,0 MOVWF UNIDADES
;PRUEBA DE DECENAS TDECE4 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_4 BTFSC STATUS,C GOTO DECEMAY10_4 GOTO MDECE4 DECEMAY10_4 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN4 DECE10_4 CLRF DECENAS BSF PORTC,3 GOTO FIN4 MDECE4 MOVF ACUM,0 MOVWF DECENAS FIN4 GOTO SGTE3 ;******************************************************* BIT3 ;PRUEBA DECIMAS MOVLW .8 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_3 BTFSC STATUS,C GOTO MAY10_3 GOTO UNI3 MAY10_3 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI3 DECI10_3 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI3
UNI3 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI3 MOVLW .0 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_3 BTFSC STATUS,C GOTO UNIMAY10_3 GOTO DECE3 UNIMAY10_3 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE3 UNI10_3 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE3 DECE3 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE3 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_3 BTFSC STATUS,C GOTO DECEMAY10_3 GOTO MDECE3 DECEMAY10_3 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN3 DECE10_3 CLRF DECENAS BSF PORTC,3
GOTO FIN3 MDECE3 MOVF ACUM,0 MOVWF DECENAS FIN3 GOTO SGTE2 ;******************************************************* BIT2 ;PRUEBA DECIMAS MOVLW .4 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_2 BTFSC STATUS,C GOTO MAY10_2 GOTO UNI2 MAY10_2 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI2 DECI10_2 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI2 UNI2 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI2 MOVLW .0 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_2 BTFSC STATUS,C GOTO UNIMAY10_2 GOTO DECE2 UNIMAY10_2 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE2
UNI10_2 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE2 DECE2 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE2 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_2 BTFSC STATUS,C GOTO DECEMAY10_2 GOTO MDECE2 DECEMAY10_2 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN2 DECE10_2 CLRF DECENAS BSF PORTC,3 GOTO FIN2 MDECE2 MOVF ACUM,0 MOVWF DECENAS FIN2 GOTO SGTE1 ;******************************************************* BIT1 ;PRUEBA DECIMAS MOVLW .2 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_1 BTFSC STATUS,C GOTO MAY10_1 GOTO UNI1 MAY10_1
MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI1 DECI10_1 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI1 UNI1 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI1 MOVLW .0 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_1 BTFSC STATUS,C GOTO UNIMAY10_1 GOTO DECE1 UNIMAY10_1 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE1 UNI10_1 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE1 DECE1 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE1 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_1 BTFSC STATUS,C GOTO DECEMAY10_1 GOTO MDECE1
DECEMAY10_1 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN1 DECE10_1 CLRF DECENAS BSF PORTC,3 GOTO FIN1 MDECE1 MOVF ACUM,0 MOVWF DECENAS FIN1 GOTO SGTE0 ;******************************************************* BIT0 ;PRUEBA DECIMAS MOVLW .1 ADDWF DECIMAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECI10_0 BTFSC STATUS,C GOTO MAY10_0 GOTO UNI0 MAY10_0 MOVWF DECIMAS INCF UNIDADES,1 GOTO TUNI0 DECI10_0 CLRF DECIMAS INCF UNIDADES,1 GOTO TUNI0 UNI0 MOVF ACUM,0 MOVWF DECIMAS ;PRUEBA DE UNIDADES TUNI0 MOVLW .0 ADDWF UNIDADES,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO UNI10_0
BTFSC STATUS,C GOTO UNIMAY10_0 GOTO DECE0 UNIMAY10_0 MOVWF UNIDADES INCF DECENAS,1 GOTO TDECE0 UNI10_0 CLRF UNIDADES INCF DECENAS,1 GOTO TDECE0 DECE0 MOVF ACUM,0 MOVWF UNIDADES ;PRUEBA DE DECENAS TDECE0 MOVLW .0 ADDWF DECENAS,0 MOVWF ACUM MOVLW .10 SUBWF ACUM,0 BTFSC STATUS,Z ;COMPRUEBA SI ES CERO GOTO DECE10_0 BTFSC STATUS,C GOTO DECEMAY10_0 GOTO MDECE0 DECEMAY10_0 MOVWF DECENAS BSF PORTC,3 ;ACTIVA EL 1 EN CENTENAS GOTO FIN0 DECE10_0 CLRF DECENAS BSF PORTC,3 GOTO FIN0 MDECE0 MOVF ACUM,0 MOVWF DECENAS FIN0 GOTO OUT_SEPARA ;******************* TIEMPO **************************** DELAY MOVLW .5 MOVWF COUNT1 SCOUNT MOVLW .255 MOVWF COUNT2
PCOUNT DECFSZ COUNT2,1 GOTO PCOUNT DECFSZ COUNT1,1 GOTO SCOUNT RETURN ;********************************************* INI CLRF CONT MOVLW .13 MOVWF START BSF STATUS,RP0 MOVLW 0FH MOVWF TRISA CLRF PORTB CLRF PORTC MOVLW 80H MOVWF ADCON0 BCF STATUS,RP0 BCF STATUS,1 CLRF PORTC CLRF DECIMAS CLRF UNIDADES CLRF DECENAS IN1 MOVLW .10 MOVWF TIEMPO MOVLW 81H MOVWF ADCON0 BSF STATUS,RP0 BCF PIR1,6 BCF STATUS,RP0 BCF PIR1,ADIF MOVLW 0C0H MOVWF INTCON BSF ADCON0,2 SCAN BTFSS PIR1,ADIF GOTO SCAN MOVF ADRESH,0 MOVWF ADH BSF STATUS,RP0 MOVF ADRESH,0 BCF STATUS,RP0 MOVWF ADL
MOVF ADH,0 MOVWF DATOH MOVF ADL,0 MOVWF DATO CALL SEPARA MUESTRA MOVF DECIMAS,0 CALL TABLA MOVWF PORTB BSF PORTC,0 CALL DELAY BCF PORTC,0 MOVF UNIDADES,0 CALL TABLA MOVWF PORTB BSF PORTC,1 CALL DELAY BCF PORTC,1 MOVF DECENAS,0 CALL TABLA MOVWF PORTB BSF PORTC,2 CALL DELAY BCF PORTC,2 CLRF PORTC CLRF DECIMAS CLRF UNIDADES CLRF DECENAS GOTO IN1 INTERRUP RETFIE END