LIST P=16F84A
PCL EQU 0X02 ;************************
STATUS EQU 0X03 ;* *
TRISA EQU 0X05 ;* DECLARACION DE REG *
PORTA EQU 0X05 ;* *
TRISB EQU 0X06 ;* *
PORTB EQU 0X06 ;************************
;----------------------------------- ;********************
NUMERO1 EQU 0X0C ;VARIABLE PARA DIG1 *
NUMERO2 EQU 0X10 ;VARIABLE PARA DIG2 *
VISUAL1 EQU 0X0E ;VARIABLE PARA TIEMPO DE VISUALI1
VISUAL2 EQU 0X0F ;VARIABLE PARA TIEMPO DE VISUALI2
;-----------------------------------
INTCON EQU 0X0B ;DIRECCION PARA LAS INTERRUPCIONES
ACUM EQU 0X14 ;VARIABLE PARA GUARDAR EL CONTENIDO DEL ACUMULADOR
STAT EQU 0X15 ;VARIABLE PARA LA INTERRUPCIO
OPTIONR EQU 0X16 ;DIRECCION PARA CONFIGURAR EL FLANCO DE RB0
;-----------------------------------
START EQU 0X17 ;VARIABLE PARA ENCENDIDO
TERMINO EQU 0X17 ;VARIABLE QUE USO PARA INCREMENTO DE UNI Y7 DEC
TITILO EQU 0X17 ;VARIABLE QUE USO PARA QUE TITILE EL PUNTO
PAUSA EQU 0X17 ;VARIABLE QUE USO PARA PAUSA
TVISUL EQU 0X18 ;VARIABLE PARA TIEMPO DE VISUALIZACION
CONTADOR EQU 0X19 ;VARIABLE PARA TIEMPO DE MUESTREO SEGUNDA PARTE
;-----------------------------------
REG1 EQU 0X20
REG2 EQU 0X21
REG3 EQU 0X22
TIERES EQU 0X23
;-----------------------------------
F EQU 1
w EQU 0
;-----------------------------------
ORG 0X00
GOTO INICIO ;SALTO A INICIO
ORG 0X04 ;DIRECCION DE SALTO EN UNA INTERRUPCION
MOVWF ACUM ;COPIO EL ACUMULADOR EN EL REGISTRO ACUM
MOVF STATUS,W ;GUARDO ESTATUS EN EL ACUMULADOR
BCF STATUS,5 ;PASO AL BANCO CERO
MOVWF STAT ;COPIO EL ACUMULADOR AL REG STA
;***************************************
; PROGRAMA DENTRO DE LA INTERRUPCION.***
;***************************************
BCF INTCON,1 ;PONGO A CERO LA BANDERA DE LA INTERRUPCION
;----------------------------------------
BTFSC START,0 ;PREGUNTO COMO ESTA ESTAR
GOTO INVIERTO ;SI ESTA EN UNO INVIERTO
BSF START,0 ;PONGO A UNO START PARA PASAR A SEGUN PARTE
BCF PAUSA,4 ;PONGO A CERO EL BIT PARA LA PAUSA
GOTO HECHO ;SALTO A HECHO
INVIERTO BCF START,0 ;INVIERTO EL ESTADO DE ESTART
BSF PAUSA,4 ;PONGO A UNO EL BIT PARA LA PAUSA
BCF PORTB,3 ;APAGO EL LED PRINCIPAL
BCF PORTB,7 ;APAGO EL PUNTO SINO ME QUEDA PRENDIDO DURANTE PAUSA
HECHO MOVF STAT,W ;CUARDO EL CONTENIDO DE ESTAT EN EL ACUMULADOR
MOVWF STATUS ;RESTAURO EL ESTATUS
SWAPF ACUM,F ;DA LA VUELTA EL REG ACUM
SWAPF ACUM,W ;DOY VUELTA EL REG ACUM
RETFIE ;SALGO DE LA INTERRUPCION
;--------------------------------------- ;-----------------
;--------------------------------------- ;SUBRRUTINA TABLA
;--------------------------------------- ;-----------------
TABLA ADDWF PCL,F ;SUMA EL VALOR DEL ACUMULADOR A PCL
RETLW b'00000'; 0 ;NUMERO 0 #############################
RETLW b'00001'; 1 ;NUMERO 1 # #
RETLW b'00010'; 2 ;NUMERO 2 # #
RETLW b'00011'; 3 ;NUMERO 3 # TABLA DE NUMEROS DEL #
RETLW b'00100'; 4 ;NUMERO 4 # 0-9 #
RETLW b'00101'; 5 ;NUMERO 5 # #
RETLW b'00110'; 6 ;NUMERO 6 # #
RETLW b'00111'; 7 ;NUMERO 7 # #
RETLW b'01000'; 8 ;NUMERO 8 # #
RETLW b'01001'; 9 ;NUMERO 9 #############################
;------------------------------------------
INICIO BSF STATUS,5 ;PASO AL BANCO 1
MOVLW b'000000' ;CARGO EL ACUMULADOR
MOVWF TRISA ;CONFIGURO EL PUERTO A
MOVLW b'00000111' ;CARGO EL ACU8MULADOR
MOVWF TRISB ;CONFIGURO EL PUERTO B
BCF OPTIONR,6
BCF STATUS,5 ;PASO AL BANCO 0
CLRF INTCON ;BORRA TODAS LAS INTERRUPCIONES
BSF INTCON,7 ;ACTIVA LA INTERRUPCION GLOBALMENTE
BSF INTCON,4 ;ACTIVA LA INTERRUPCION POR CAMBIO DE PORTB
;---------------------------------------
CLRF PORTB ;BORRO EL PUERTO B
CLRF PORTA ;BORRO EL PUERTO A
CLRF NUMERO1
CLRF NUMERO2
CLRF START ;BORRO VARIABLE
CLRF TERMINO ;--------------------
CLRF TIERES
;---------------------------------------- ;TESTEO DE PULSADORES
;--------------------
MOVLW d'9'
MOVWF TIERES
;--------------------------------------
TESTP BCF PORTB,4
BTFSC START,0 ;TESTEA START SI ESTA EN 1 SALTA A LA SEGUNDA PARTE
GOTO SEGUPARTE ;SALTA A LA SGUNDA PARTE
BTFSC PORTB,1 ;PREGUNTA COMO ESTA EL PULSADOR 2
GOTO SIGO ;SI ESTA EN UNO SIGO
INCF NUMERO1,1 ;SI ESTA EN CERO INCREMENTO LAS DECENAS
BSF PORTB,4
;----------------------------------------
MOVF NUMERO1,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
SUBLW 0X04 ;ACA PONGO HASTA DONDE CUENTA MI CONTADOR (VALOR-1)
BTFSC STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
CLRF NUMERO1 ;PONGO A 0 RETARDO
;----------------------------------------
SIGO MOVF NUMERO1,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
SUBLW 0X03 ;ACA PONGO HASTA DONDE CUENTA MI CONTADOR (VALOR-1)
BTFSC STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
CLRF NUMERO2
;---------------------------------------
BTFSC PORTB,2 ;TESTEO DE PULSADOR 1
GOTO MUESTRADEC ;MUESTRA LOS VALORES
INCF NUMERO2,1 ;INCREMENTA LAS UNIDADES
BSF PORTB,4
;----------------------------------------
MOVF NUMERO2,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
SUBLW 0X0A ;ACA PONGO HASTA DONDE CUENTA MI CONTADOR (VALOR-1)
BTFSC STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
CLRF NUMERO2 ;BORRO NUMERO 2
;-------------------
;--------------------------------------- ;MUESTRA LAS DECENAS
;--------------------
MUESTRADEC MOVLW d'55'
MOVWF TVISUL
MOSTRANDO BSF PORTB,5 ;PRENDO EL PRIMER TRANSISTOR
MOVF NUMERO1,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
CALL TABLA ;LLAMO A MI TABLA
MOVWF PORTA ;MUESTRO EL NUMERO EN EL DISPLAY
;-----------------------------------------
DELAY MOVLW 20 ;########################
MOVWF VISUAL1 ;# #
UNN MOVLW 10 ;# TIEMPO PARA #
MOVWF VISUAL2 ;# VISUALIZAR #
TATA DECFSZ VISUAL2,1 ;# DISPLAY #
GOTO TATA ;# #
DECFSZ VISUAL1,1 ;# #
GOTO UNN ;########################
BCF PORTB,5 ;APAGO EL TRANSISTOR PARA LAS DECENAS
CLRF PORTA ;LIMPIO EL PUERTO A
;--------------------
;--------------------------------------- ;MUESTRA LAS UNIDADES
;--------------------
MUESTRAUNI BSF PORTB,6 ;PRENDO EL SEGUNDO TRANSISTOR
MOVF NUMERO2,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
CALL TABLA ;LLAMO A MI TABLA
MOVWF PORTA ;MUESTRO EL NUMERO EN EL DISPLAY
;----------------------------------------
DELAY1 MOVLW 20 ;############################
MOVWF VISUAL1 ;# #
UNN1 MOVLW 10 ;# DELAY PARA #
MOVWF VISUAL2 ;# VISUALIZAR #
TATA1 DECFSZ VISUAL2,1 ;# DISPLAY #
GOTO TATA1 ;# #
DECFSZ VISUAL1,1 ;# #
GOTO UNN1 ;############################
;-----------------------------------------
BCF PORTB,6 ;APAGO EL TRANSISTOR DE LAS UNIDADES
CLRF PORTA ;LIMPIO EL PUERTOA
DECFSZ TVISUL,1 ;DECREMENTA LA VARIABLE P TIMPO DE VISUALIZAR
GOTO MOSTRANDO ;SALTA MIENTRAS TVIS NO SEA CERO
;-----------------------------------------
BTFSS START,0 ;SI STARY ESTA EN UNO SALTA
GOTO TESTP
;*****************************************
;*****************************************
;*****************************************
;---------------------------
;------------------------------------- ;SEGUDA PARTE DEL PROGRAMA
;---------------------------
SEGUPARTE CLRW
MOVF NUMERO1,W ;CARGO EL VALOR DE NUMERO1 EN EL ACUMULADOR
SUBLW 0X00 ;PREGUNTO SI ES IGUAL A CERO
BTFSS STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
GOTO OK
;----------
MOVF NUMERO2,W ;CARGO EL VALOR DE NUMERO2 EN EL ACUMULADOR
SUBLW 0X00 ;PREGUNTO SI ES IGUAL A CERO
BTFSS STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
GOTO OK ;SI NO SE CARGO NADA EN NUM 1 Y 2 SE RESETEA TODO
GOTO INICIO
;-------------------------------------
OK
MUESTRADEC2 MOVLW d'255' ;CARGO ESTE VALOR EN MI
MOVWF CONTADOR ;VARIABLE PARA TIEMPO DE VISUALI
;--------------------------------------
MOSTRANDO2 BSF PORTB,5 ;PRENDO EL PRIMER TRANSISTOR
MOVF NUMERO1,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
CALL TABLA ;LLAMO A MI TABLA
MOVWF PORTA ;MUESTRO EL NUMERO EN EL DISPLAY
;-----------------------------------------
DELAY2 MOVLW 20 ;########################
MOVWF VISUAL1 ;# #
UNN2 MOVLW 10 ;# TIEMPO PARA #
MOVWF VISUAL2 ;# VISUALIZAR #
TATA2 DECFSZ VISUAL2,1 ;# DISPLAY #
GOTO TATA2 ;# #
DECFSZ VISUAL1,1 ;# #
GOTO UNN2 ;########################
BCF PORTB,5 ;APAGO EL TRANSISTOR PARA LAS DECENAS
CLRF PORTA ;LIMPIO EL PUERTO A
;--------------------------------------- ;--------------------
;--------------------------------------- ;MUESTRA LAS UNIDADES
;--------------------------------------- ;--------------------
MUESTRAUNI2 BSF PORTB,6 ;PRENDO EL SEGUNDO TRANSISTOR
MOVF NUMERO2,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
CALL TABLA ;LLAMO A MI TABLA
MOVWF PORTA ;MUESTRO EL NUMERO EN EL DISPLAY
;----------------------------------------
DELAY12 MOVLW 20 ;############################
MOVWF VISUAL1 ;# #
UNN12 MOVLW 10 ;# DELAY PARA #
MOVWF VISUAL2 ;# VISUALIZAR #
TATA12 DECFSZ VISUAL2,1 ;# DISPLAY #
GOTO TATA12 ;# #
DNN12 DECFSZ VISUAL1,1 ;# #
GOTO UNN12 ;############################
;-----------------------------------------
BCF PORTB,6 ;APAGO EL TRANSISTOR DE LAS UNIDADES
CLRF PORTA ;LIMPIO EL PUERTOA
DECFSZ MOSTRANDO ;DECREMENTA LA VARIABLE P TIMPO DE VISUALIZAR
GOTO MOSTRANDO2 ;SALTA MIENTRAS TVIS NO SEA CERO
;------------------------------------- ;--------------------------------
;------------------------------------- ;PARTE PARA QUE EL DISPLAY TITILE
;------------------------------------- ;--------------------------------
BTFSS PAUSA,4
GOTO NADA
MOVLW 255 ;################################
MOVWF REG1 ;# #
TRES MOVLW 55 ;# TIEMPO DE TITILO DEL #
MOVWF REG2 ;# DISPLAY ESTE DEPENDE DE SI #
DOS MOVLW 10 ;# TENGO EN UNO O NO LA #
MOVWF REG3 ;# VARIABLE PAUSA. #
UNO DECFSZ REG3,1 ;# #
GOTO UNO ;# #
DECFSZ REG2,1 ;# #
GOTO DOS ;# #
DECFSZ REG1,1 ;# #
GOTO TRES ;################################
GOTO MUESTRADEC2
;------------------------------------- ;----------------------------
;------------------------------------- ;PARTE PARA QUE EL LED TITILE
;------------------------------------- ;----------------------------
NADA BSF PORTB,3
BTFSS TITILO,3 ;PREGUNTO COMO ESTA LA VARIABLE
GOTO PRENDE ;SI ESTA EN CERO SALTO A PRENDE
GOTO APAGA ;SI ESTA EN UNO SALTO A APAGA
PRENDE BSF PORTB,7 ;PARTE DONDE PRENDE Y
BSF TITILO,3 ;CAMBIA EL ESTADDO DE LA VARIABLE
GOTO TERMINTIT ;SALTO
APAGA BCF PORTB,7 ;PARTE DONDE APAGA Y CAMBIA EL
BCF TITILO,3 ;ESTADO DE LAS VARIABLES
;--------------------------------------- ;-----------------------------
;--------------------------------------- ;DECREMENTO DE UNIDAD Y DECENA
;--------------------------------------- ;------------------------------
TERMINTIT DECF NUMERO2,1 ;TERMINI ES DONDE SALTO DE EL TITILE DEL PUNTO
ULTIMO MOVF NUMERO2,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
SUBLW 0XFFFFFFFF ;ACA PONGO HASTA DONDE CUENTA MI CONTADOR (VALOR-1)
BTFSS STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
GOTO MUESTRADEC2 ;SALTO A CHATO
MOVLW d'9' ;CARGO MAX VALOR QUE PUEDE MOSTRAR DISP 2
MOVWF NUMERO2 ;CARGO ESE VALOR EN NUMERO 2
;---------------------------------------
SIGUEDEC MOVF NUMERO1,W ;CARGO EL VALOR DE NUMERO EN EL ACUMULADOR
SUBLW 0X00 ;ACA PONGO HASTA DONDE CUENTA MI CONTADOR (VALOR-1)
BTFSC STATUS,2 ;STATUS SE PONE A UNO SI LA OP ANTERIOR ES IGUAL A CERO
GOTO FINALIZA ;SALTO A LA PARTE DE CHIRRIDO
;----------------------------------------
DECF NUMERO1,1 ;DECRENENTO NUMERO UNO
GOTO MUESTRADEC2
;---------------------------------------
FINALIZA BSF TERMINO,1
GOTO CHIRRIDO ;SALTO A LA PARTE PARA EL ULTIMO DECREMENTO
;---------------------------------------- ;--------------------------
;---------------------------------------- ;CHIRRIDO PARA FIN DE CICLO
;---------------------------------------- ;---------------------------
CHIRRIDO CLRF NUMERO1
CLRF NUMERO2
BSF PORTB,5
BSF PORTB,6
BSF PORTB,4
MOVLW 255 ;#################################
MOVWF REG1 ;# #
TRE MOVLW 55 ;# PRENDO EL BUZZ ESPERO UN #
MOVWF REG2 ;# SEGUNDO, APAGO TODO Y RETORNO #
DO MOVLW 5 ;# #
MOVWF REG3 ;# #
UN DECFSZ REG3,1 ;# #
GOTO UN ;# #
DECFSZ REG2,1 ;# #
GOTO DO ;# #
DECFSZ REG1,1 ;# #
GOTO TRE ;################################
BCF PORTB,4
GOTO INICIO
END