;============================================================================================
; ENCABEZADO
;============================================================================================
;PROGRAMA: DISPLAY CONTADOR
;AUTOR: JUAN JOSÉ ANGRINO
;FECHA: 2023-09-11
;================ Definición del microcontrolador =========================================
LIST P=18F452 ;Microcontrolador seleccionado
INCLUDE <P18F452.inc> ;Definiciones propias, en proteus debe iniciar con un #
;================ Bits de configuración del microcontrolador ==============================
;BITS_CONF
CONFIG OSC=HS ;Internal oscillator, se colocar FOSC --> PARA EL 18F4550
CONFIG PWRT=ON ;Power-up timer enable bit
CONFIG BOR=OFF ;Brown-out reset disabled in hardware and sofware
CONFIG WDT=OFF ;Watch Dog Timer disabled
; CONFIG MCLRE=ON ;MCLR pin enabled --> PARA EL 18F4550 = ON
; CONFIG PBADEN=OFF ;PORTB<4:0> pins are configured as digital I/O --> PARA EL 18F4550
CONFIG LVP=OFF ;Single-Supply ICSP disabled
CONFIG DEBUG=OFF ;Background debugger disabled
; CONFIG XINST=OFF ;Extended Instruction disabled --> PARA EL 18F4550 = OFF
;============================================================================================
; DEFINICIÓN DE VARIABLES Y CONSTANTES
;============================================================================================
#DEFINE UNI .0
#ifdef UNI
; NUEVE SET .2
; UNI SET .0
DEC EQU D'0'
CONTR EQU D'5' ;Contador de rotacione, ese establece ese valor ya que uno mayor a 10, genera errores en el muestreo de letras
CONT01 EQU D'6' ;Registro del retardo
CONT02 EQU D'7' ;Registro del retardo
CONT03 EQU D'8' ;Registro del retardo
APAG EQU D'5' ;Contador de rotacione, ese establece ese valor ya que uno mayor a 10, genera errores en el muestreo de letras
APAG01 EQU D'6' ;Registro del retardo
APAG02 EQU D'7' ;Registro del retardo
APAG03 EQU D'8' ;Registro del retardo
; AREA SET H'0'
; VARIABLE I=.0 ;Definición de variable
; VARIABLE CONT04=.10 ;Definición de variable
; CONSTANT LONG_MAX=.35 ;Definición de constante
;============================================================================================
; DEFINICIÓN DEL ORIGEN Y VECTORES DE RESET E INTERRUPCIONES
;============================================================================================
ORIGEN
ORG 0X0000 ;Origen de compilación – 00H
GOTO CONF_PUERTOS
;================ Vectores de resert e interrupciones =====================================
RES_E_INT
;Por ahora no hay nada a configurar
;============================================================================================
; CÓDIGO DE PROGRAMACIÓN
;============================================================================================
;================ Configuración de puertos ================================================
;RECOMENDACIÓN: Recordemos que en sesión de clase, les explicaba que hay puertos que tienen
; doble función, digital y análoga. Por lo cual, es necesario configurar sus registros
; propios. Como en el ejemplo a continuación, el puerto A, tiene el registro ADCON1
; para configurar. Si no recuerdas debes ir a las diapositivas y al datasheet para guiarte.
; O me preguntas la duda, sin embargo, Yo te preguntaré que consultaste.
CONF_PUERTOS
;lIMPIAR LOS LATCHES DE CADA PUERTO
CLRF LATA ;Limpieza del latch de salida del puerto A
CLRF LATB ;Limpieza del latch de salida del puerto B
CLRF LATC ;Limpieza del latch de salida del puerto C
CLRF LATD ;Limpieza del latch de salida del puerto D
CLRF LATE ;Limpieza del latch de salida del puerto E
;==================================================
;ENTRADAS PULSADORES D0 - D1 / D2 - D3
;CONFIGURAR LOS PINES ANÁLOGOS COMO DIGITALES O ANÁLOGOS SI ES DEL CASO
MOVLW B'00000111' ;PCFG<3:0> como 1
MOVWF ADCON1 ;Pines A/D configurados como E/S digitales
MOVLW B'00000011' ;En HEX, En binario -> B'00001111'
MOVWF TRISA ;Configuro nible alto como IN y el bajo como OUT
;SALIDAS PARA EL 7447
MOVLW B'11110000' ;En HEX, En binario -> B'00000000'
MOVWF TRISB ;Configuro nible bajo como Out
MOVLW 0x00 ;En HEX, En binario -> B'00000000'
MOVWF TRISC ;Configuro nible bajo como Out
MOVLW B'11110000' ;En HEX, En binario -> B'00000000'
MOVWF TRISD ;Configuro nible bajo como Out
;==================================================
;================ Programa Principal ======================================================
;ETIQ |INST | OPERANDOS | ;COMENTARIOS
;/////////////////////////////////////////////////////////////////////////////////////
INICIO
CALL PUSHINC
; CALL DEC
GOTO INICIO
;/////////////////////////////////////////////////////////////////////////////////////
;_______________PARTE BOTONES MANUALES_______________-
;/////////////PRINCIPAL LLAMADO///////////////////////////////
PUSHINC
BSF PORTC,0
CALL INCM
; CALL DECM
RETURN
;//////////////////////////////////////////////////////////////
INCM ;INCREMENTO MANUAL
BTFSS PORTA,0 ;¿1? SALTA 2
RETURN
CALL PRUEBA ;Paso a mi segundo testeo para saber cuando suelto
RETURN
PRUEBA
BTFSC PORTA,0 ;¿ES 0? SALTA 2, NO, BLUCLE EN PRUEBA
GOTO PRUEBA
CALL INCREMENTO;Llamo mis condiciones para incrementar o poner en 0
RETURN
INCREMENTO
IF UNI==.9
CLRF UNI
CALL MOSTRAR
ELSE
INCF UNI,1
CALL MOSTRAR
ENDIF
RETURN
MOSTRAR
MOVF UNI,0
MOVWF PORTD
RETURN
;PRUEBADEC
; IF PORTD==DEC
; CRLF PORTD
; GOTO INICIO
; ELSE
; INCF DEC,1
; ENDIF
; GOTO PUSHINC
;if
;elseif
;endif
;////////////////////////////////////////////////////////////////////////////////////
;================ RETARDO =================================================================
RETARDO ;
MOVLW .1 ;
MOVWF CONT03 ;
CICLO03
MOVLW .8 ;
MOVWF CONT02 ;
CICLO02
MOVLW .250 ;
MOVWF CONT01 ;
CICLO01
DECFSZ CONT01,F ;
GOTO CICLO01 ;
DECFSZ CONT02,F ;
GOTO CICLO02 ;
DECFSZ CONT03,F ;
GOTO CICLO03 ;
RETURN ;
;================ APAGADO =================================================================
DELAY ;
MOVLW .1 ;
MOVWF APAG03 ;
CICLO3
MOVLW .80 ;
MOVWF APAG02 ;
CICLO2
MOVLW .250 ;
MOVWF APAG01 ;
CICLO1
DECFSZ APAG01,F ;
GOTO CICLO1 ;
DECFSZ APAG02,F ;
GOTO CICLO2 ;
DECFSZ APAG03,F ;
GOTO CICLO3 ;
RETURN ;
;================ FIN =====================================================================
END
;============================================================================================