list p=16f877A ; list directive to define processor
#include <p16f877A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
ORG 00H
GOTO MAIN
ORG 04H
GOTO RSI
MAIN
;.. DECLARACION DE VARIABLES, CONFIGURACION DE PUERTOS E INTERRUPCIONES
ADC EQU 21H
ADC_VIEJO EQU 22H
AUX EQU 23H
UNIDAD EQU 24H
DECENA EQU 25H
CENTENA EQU 26H
CONTADOR EQU 27H
TEMP EQU 28H
CUENTA_MILI EQU 29H
WS EQU 2AH
ESTATUS EQU 2BH
FLAGS EQU 2CH
CONT EQU 2DH
ADCDB EQU 30H
RESULT_DB EQU 31H
CUENTADB EQU 32H
MOVLW 0AH
MOVWF CUENTA_MILI
CLRF CONTADOR
MOVLW 3H
MOVWF CONT
BSF STATUS,RP0
CLRF TRISC
CLRF TRISE
MOVLW B'11100000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'00000001'
MOVWF TRISA
MOVLW B'00001110'
MOVWF ADCON1
MOVLW B'11101000'
MOVWF INTCON
MOVLW B'00000000'
MOVWF OPTION_REG
BSF PIE1,ADIE
BCF STATUS,RP0
MOVLW B'10000001'
MOVWF ADCON0
BCF PIR1,ADIF
BCF FLAGS,0
;..PROGRAMA PRINCIPAL..
MOVLW 6H
MOVWF TMR0
CLRF ADC_VIEJO
CLRF ADC
CLRF ADRESH
BACK
BTFSC ADCON0,GO ;TERMINO LA CONVERSION?
GOTO BACK ;NO, VUELVO A PREGUNTAR
MUESTRA
MOVF ADRESH,0
MOVWF ADC
MOVF ADC_VIEJO,0
SUBWF ADC,0
BTFSC STATUS,C
CALL CAMBIO
BTFSS FLAGS,0 ;OCURRIO ADC?
GOTO BACK
BTFSC FLAGS,1 ;
GOTO CONVERTIR
BCF FLAGS,0
MOVF ADC_VIEJO,0
MOVWF AUX
SIGUE
XORLW 00H
BTFSC STATUS,Z; AUX=0?
GOTO BACK ; SI
CLRF UNIDAD
CLRF DECENA
CLRF CENTENA
RESTA_10
MOVLW 0AH
SUBWF AUX,1 ; AUX - 10
BTFSS STATUS,C
GOTO SUMA_10
INCF DECENA,1
GOTO RESTA_10
SUMA_10
MOVLW 0AH
ADDWF AUX,1
MOVF AUX,0
MOVWF UNIDAD
CORREGIR_CENTENA
MOVLW 0AH
SUBWF DECENA,1
BTFSS STATUS,C
GOTO SUMA_DECENA
INCF CENTENA,1
GOTO CORREGIR_CENTENA
SUMA_DECENA
MOVLW 0AH
ADDWF DECENA,1
GOTO BACK
CAMBIO
MOVF ADC,0
MOVWF ADC_VIEJO
RETURN
CONVERTIR
BCF FLAGS,0
MOVF RESULT_DB,0
MOVWF AUX
GOTO SIGUE
; ... RSI...
RSI
MOVWF WS
SWAPF STATUS,0
MOVWF ESTATUS
;..QUE INTERRUPCION OCURRIO??
BTFSC INTCON,T0IF ; TMR0?
GOTO TIEMPO
BTFSC INTCON,RBIF ; TECLAS?
GOTO TECLA
BTFSC PIR1,ADIF ; ADC?
GOTO FIN_ADC
GOTO TERMINAL
TIEMPO
CALL MANDO_DISPLAY
BCF INTCON,T0IF
DECFSZ CUENTA_MILI,1 ; LLEGO A 10MSEG?
GOTO FIN_RSI
BSF ADCON0,GO
SetupDelay
movlw 6 ; Carga Temp con 3
movwf TEMP
SDSSs
decfsz TEMP, F ; Bucle de retardo
goto SDSSs
MOVLW 0AH
MOVWF CUENTA_MILI
FIN_RSI
MOVLW 6H
MOVWF TMR0
TERMINAL
SWAPF ESTATUS,0
MOVWF STATUS
SWAPF WS,1
SWAPF WS,0
RETFIE
MANDO_DISPLAY ;A DISPLAYS
BCF STATUS,RP0
MOVLW 23H
MOVWF FSR
CLRF PORTA
MOVF CONT,0
ADDWF FSR,1
MOVF INDF,0
CALL TABLA_7SEG
MOVWF PORTD
MOVF CONT,0
CALL TABLA_PA
MOVWF PORTA
DECFSZ CONT,1
RETURN
MOVLW 3H
MOVWF CONT
RETURN
TECLA
BTFSC PORTB,5
GOTO CLEAR
BTFSC PORTB,6
GOTO MUESTRA_DB
BTFSC PORTB,7
GOTO MUESTRA_ADC
GOTO TERMINAL
CLEAR
CLRF ADC_VIEJO
CLRF AUX
CLRF UNIDAD
CLRF DECENA
CLRF CENTENA
GOTO TERMINAL
MUESTRA_DB
BSF FLAGS,1
MOVF ADC_VIEJO,0
MOVWF ADCDB
CLRF CUENTADB
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'1' ; ES MAYOR KE 1?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1 ;NO
MOVF ADCDB,0
SUBLW D'2' ; ES MAYOR KE 2?
BTFSC STATUS,C
GOTO DBEL
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'4' ; ES MAYOR KE 4?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'8' ; ES MAYOR KE 8?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'11' ; ES MAYOR KE 11?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'16' ; ES MAYOR KE 16?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'21' ; ES MAYOR KE 21?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'26' ; ES MAYOR KE 26?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'32' ; ES MAYOR KE 32?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'37' ; ES MAYOR KE 37
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'41' ; ES MAYOR KE 41?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'46' ; ES MAYOR KE 46?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'52' ; ES MAYOR KE 52?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'58' ; ES MAYOR KE 58?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'65' ; ES MAYOR KE 65?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'73' ; ES MAYOR KE 73?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'82' ; ES MAYOR KE 82?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'92' ; ES MAYOR KE 92?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'103' ; ES MAYOR KE 103?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'115' ; ES MAYOR KE 115?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'129' ; ES MAYOR KE 129?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'145' ; ES MAYOR KE 145?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'162' ; ES MAYOR KE 162?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'182' ; ES MAYOR KE 182?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'204' ; ES MAYOR KE 204?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'229' ; ES MAYOR KE 229?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
MOVF ADCDB,0
SUBLW D'251' ; ES MAYOR KE 251?
BTFSC STATUS,C
GOTO DBEL ;SI
INCF CUENTADB,1
DBEL
MOVF CUENTADB,0
CALL TABLA_DB
MOVWF RESULT_DB
GOTO TERMINAL
MUESTRA_ADC
BCF FLAGS,1
GOTO TERMINAL
TABLA_PA
ADDWF PCL,1
NOP
RETLW B'00001000'
RETLW B'00000100'
RETLW B'00000010'
FIN_ADC
BCF PIR1,ADIF
BSF FLAGS,0
GOTO TERMINAL
TABLA_7SEG
ADDWF PCL,1
RETLW B'00111111' ;0
RETLW B'00000110' ;1
RETLW B'01011011' ;2
RETLW B'01001111' ;3
RETLW B'01100110' ;4
RETLW B'01101101' ;5
RETLW B'01111101' ;6
RETLW B'00000111' ;7
RETLW B'01111111' ;8
RETLW B'01101111' ;9
TABLA_DB
ADDWF PCL,1
RETLW D'020'
RETLW D'031'
RETLW D'037'
RETLW D'043'
RETLW D'046'
RETLW D'049'
RETLW D'052'
RETLW D'054'
RETLW D'056'
RETLW D'057'
RETLW D'058'
RETLW D'059'
RETLW D'060'
RETLW D'061'
RETLW D'062'
RETLW D'063'
RETLW D'064'
RETLW D'065'
RETLW D'066'
RETLW D'067'
RETLW D'068'
RETLW D'069'
RETLW D'070'
RETLW D'071'
RETLW D'072'
RETLW D'073'
RETLW D'074'
END