processor 16F1827
#include <P16F1827.INC>
__config _CONFIG1, 0x0E04
;_FCMEN_OFF & _IESO_OFF & _CLKOUTEN_OFF & _BOREN_ON &
;_CPD_ON & _CP_ON & _MCLRE_OFF & _PWRTE_ON & _WDTE_OFF &
;_FOSC_INTOSC
__config _CONFIG2, 0x1CFC
;_LVP_OFF & _WRT_ALL & _BORV_19 & _STVREN_OFF & _PLLEN_OFF &
;_DEBUG_OFF ;0x3EFF
; __idlocs 0x0214
ERRORLEVEL -302
ERRORLEVEL -306
; EEPROM-Data
Org 0xF000
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; .....m25
; RAM-Variable
DISTEMP equ 0x20
TABLETEMP equ 0x21
DISPLAY1 equ 0x22
DISPLAY2 equ 0x23
DISPLAY3 equ 0x24
DISPLAY4 equ 0x25
DISPLAY5 equ 0x26
DISPLAY6 equ 0x27
DISPLAY7 equ 0x28
TEMPDECRE equ 0x29
DISCONTROL equ 0x2A
LECTUTEMP equ 0x2B
BUZZON equ 0x2C
REGPULFSR equ 0x2D
BOTONTEMP equ 0x2E
BOTONHIGH equ 0x2F
DIVIDENDO0 equ 0x30;7B
DIVIDENDO1 equ 0x31;7C
DIV_COUNT equ 0x32;7D
RETARDO0 equ 0x33
NUMENVIOS equ 0x34
BOTONES equ 0x35
BCDTEMP0 equ 0x36
BCDTEMP1 equ 0x37
BCDTEMP2 equ 0x38
BCDTEMP3 equ 0x39
BCDTEMP4 equ 0x3A
BCDTEMP5 equ 0x3B
BCDTEMP6 equ 0x3C
TEMPBCD equ 0x3D
ABANDERADOS equ 0x3E
LETRVAR equ 0x3F
RETARDO1 equ 0x40
CONT0 equ 0x41
RETAROFF equ 0x42
REGPU0 equ 0x43
REGPU1 equ 0x44
TEMPPULSOS0 equ 0x45
TEMPPULSOS1 equ 0x46
DIALACTUAL equ 0x47;57
EEADT equ 0x54;53
EERD equ 0x55;54
EEWR equ 0x56;55
COUNTAR equ 0x57;56
NDIALACTUAL equ 0x58
BANHORARIO equ 0x59
BAILN equ 0x5A
PORTEMP equ 0x5B
CALCTEMP0 equ 0x5C
CALCTEMP1 equ 0x5D
CALCTEMP2 equ 0x5E
OPCIONES equ 0x5F
TRASHCAL equ 0x60
COUNTBIT equ 0x61
TXENV equ 0x62
CONTBAU equ 0x63
RESULT0 equ 0x77
RESULT1 equ 0x78
DIVISOR0 equ 0x79
DIVISOR1 equ 0x7A
TEMPCLATH equ 0x7B;30
TEMPFSR0 equ 0x7C;31
TEMPW equ 0x7D;32
TEMPSTATUS equ 0x7E;33
TEMPBSR equ 0x7F;34
CLAVE0 equ 0xA0
CLAVE1 equ 0xA1
CLAVE2 equ 0xA2
BANDACTIV equ 0xB1
; Program
Org 0x0000
; Reset-Vector
ORIGEN
GOTO INICIO
ADDLW 0xFF
ADDLW 0xFF
ADDLW 0xFF
; Interrup-Vector
MOVWF TEMPW
MOVF STATUS,W
MOVWF TEMPSTATUS
MOVF BSR,W
MOVWF TEMPBSR
MOVF PCLATH,W
MOVWF TEMPCLATH
MOVF FSR0,W
MOVWF TEMPFSR0
CLRF BSR
CLRF PCLATH
BTFSC PIR1,TMR1IF
GOTO TIEMPO
BTFSC INTCON,INTF
GOTO REGPULSO
BTFSC PIR1,RCIF
GOTO RECEIVED
BTFSC INTCON,TMR0IF
GOTO DISPLAYS
BANKSEL IOCBF
CLRF IOCBF
CLRF BSR
MOVLW 0xF7
ANDWF INTCON,F
CLRF BSR
MOVLW 0x30
ANDWF PIR1,F
MOVLW 0x10
ANDWF PIR2,F
CLRF PIR3
CLRF PIR4
GOTO ENDINTERR
;#############################################
TIEMPO
BCF PIR1,TMR1IF
MOVF RETARDO1,W
BTFSS STATUS,Z
DECF RETARDO1,F
INCF CONT0,F
MOVLW 0x05
XORWF CONT0,W
BTFSS STATUS,Z
GOTO FIN_TIEMPO
CLRF CONT0
MOVF RETAROFF,W
BTFSS STATUS,Z
DECF RETAROFF,F
MOVF BAILN,W
BTFSS STATUS,Z
DECF BAILN,F
FIN_TIEMPO
MOVLW 0xB0;9
ADDWF TMR1L,F
MOVLW 0x3C
ADDWF TMR1H,F
GOTO ENDINTERR
;#############################################
RECEIVED
BANKSEL RCSTA
MOVF RCREG,W
CLRF BSR
GOTO ENDINTERR
;#############################################
REGPULSO
BCF INTCON,INTF
MOVF REGPULFSR,W
BTFSS STATUS,Z
GOTO TURNOFFPULED
MOVLW 0x22
MOVWF REGPULFSR
GOTO PULSOREG
TURNOFFPULED
CLRF REGPULFSR
PULSOREG
INCF REGPU0,F
BTFSC STATUS,Z
INCF REGPU1,F
GOTO ENDINTERR
;###############################################
DISPLAYS
BCF INTCON,TMR0IF
MOVLW 0x3B
BANKSEL LATB ;55 US
IORWF LATB,F
MOVLW 0x3F
ANDWF LATB,F
MOVLW 0x20
ANDWF LATA,F
MOVLW 0xDF ;BOTON1
ANDWF LATB,F
CLRF BSR
BSF BOTONHIGH,0
BTFSC PORTA,5
BCF BOTONHIGH,0
BANKSEL LATB
MOVLW 0xF7 ;BOTON2
ANDWF PORTB,F
CLRF BSR
BSF BOTONHIGH,1
BTFSC PORTA,5
BCF BOTONHIGH,1
BANKSEL LATB
BSF PORTB,3 ;BOTON3
BCF PORTB,4
CLRF BSR
BSF BOTONHIGH,2
BTFSC PORTA,5
BCF BOTONHIGH,2
BANKSEL LATB
MOVLW 0xF7 ;BOTON4
ANDWF PORTB,F
CLRF BSR
BSF BOTONHIGH,3
BTFSC PORTA,5
BCF BOTONHIGH,3
BANKSEL LATB
MOVLW 0x3B
IORWF LATB,F
CLRF BSR
MOVF BOTONHIGH,W
SUBWF BOTONTEMP,W
BTFSS STATUS,Z
GOTO MOVBOTO
DECFSZ PORTEMP,F
GOTO PREDISPLAYS
MOVF BOTONHIGH,W
MOVWF BOTONES
GOTO RETBOTO
MOVBOTO
MOVF BOTONHIGH,W
MOVWF BOTONTEMP
RETBOTO
MOVLW 0x0A
MOVWF PORTEMP
PREDISPLAYS
CLRF DISCONTROL
MOVLW 0xB1
MOVWF FSR0
MOVF BUZZON,W
BTFSC STATUS,Z
GOTO BOTRE
BANKSEL LATB
BTFSC INDF0,0
BSF LATB,6
CLRF BSR
DECF BUZZON,F
BOTRE
CLRF PCLATH
MOVF DISTEMP,W
ADDWF PCL,F
GOTO DISPLAY_1
GOTO DISPLAY_2
GOTO DISPLAY_3
GOTO DISPLAY_4
GOTO DISPLAY_5
GOTO DISPLAY_6
GOTO DISPLAY_7
DISPLAY_7
MOVLW 0x18
IORWF DISCONTROL,F
; BTFSC BOTONHIGH,0
; BCF DISCONTROL,6
MOVLW 0x28
GOTO IMPRES
DISPLAY_1
MOVLW 0x30
IORWF DISCONTROL,F
MOVLW 0x22
GOTO IMPRES
DISPLAY_2
MOVLW 0x10
IORWF DISCONTROL,F
; BTFSC BOTONHIGH,1
; BCF DISCONTROL,6
MOVLW 0x23
GOTO IMPRES
DISPLAY_3
MOVLW 0x08
IORWF DISCONTROL,F
; BTFSC BOTONHIGH,2
; BCF DISCONTROL,6
MOVLW 0x24
GOTO IMPRES
DISPLAY_4
MOVLW 0x00
IORWF DISCONTROL,F
; BTFSC BOTONHIGH,3
; BCF DISCONTROL,6
MOVLW 0x25
GOTO IMPRES
DISPLAY_5
MOVLW 0x28
IORWF DISCONTROL,F
MOVLW 0x26
GOTO IMPRES
DISPLAY_6
MOVLW 0x20
IORWF DISCONTROL,F
MOVLW 0x27
GOTO IMPRES
IMPRES
MOVWF FSR0
MOVF INDF0,W
IORLW 0x20
BANKSEL LATA
MOVWF LATA
CLRF BSR
MOVF REGPULFSR,W
XORWF FSR0,W
BTFSS STATUS,Z
GOTO CONTPULS
BTFSC ABANDERADOS,4
BSF DISCONTROL,7
CONTPULS
BTFSC INDF0,5
BSF DISCONTROL,7
BTFSC PORTB,1
BSF DISCONTROL,1
BTFSC PORTB,2
BSF DISCONTROL,2
MOVF DISCONTROL,W
BANKSEL LATB
MOVWF LATB
CLRF BSR
ENDEISPLAY
MOVF RETARDO0,W
BTFSS STATUS,Z
DECF RETARDO0,F
MOVLW 0x08
ADDWF TMR0,F
INCF DISTEMP,F
MOVLW 0x07
XORWF DISTEMP,W
BTFSC STATUS,Z
CLRF DISTEMP
;#########################################
ENDINTERR
MOVF TEMPFSR0,W
MOVWF FSR0 ;163us
MOVF TEMPCLATH,W
MOVWF PCLATH
MOVF TEMPBSR,W
MOVWF BSR
MOVF TEMPSTATUS,W
MOVWF STATUS
SWAPF TEMPW,F
SWAPF TEMPW,W
RETFIE
;##########################################
INICIO
CLRF BSR
CLRF FSR0
CLRF PORTA
CLRF PORTB ;Se borran puertos
MOVLB 0x01
MOVLW 0x6A
MOVWF OSCCON ;Se selecciona oscilador a 4 Mhz
MOVLB 0x03
BCF BAUDCON,3
MOVLW 0x0C
MOVWF SPBRGL
MOVLW 0x06
MOVWF TXSTA
MOVLW 0x80
MOVWF RCSTA ;Se configura USART para 19200
CLRF ANSELA
CLRF ANSELB ;Ninguna entrada analoga
MOVLB 0x02
CLRF CM1CON1
CLRF CM1CON0
CLRF CM2CON1
CLRF CM2CON0 ;Se borran los registros para comparadores
MOVLB 0x01
MOVLW 0x02;07 ;Lectora de switch por flanco bajada y
MOVWF OPTION_REG ;Preescales 1:8 retardo cada 2ms aprox.
BSF PIE1,TMR1IE ;Timer 1 Activo para interrupcion
MOVLW 0x03
MOVWF TRISB ;RB0, RB1 como entradas (RB1 RX USART)
MOVLW 0x20
MOVWF TRISA ;RA5/MCLR Como entrada
BANKSEL WPUA
MOVLW 0x00;20
MOVWF WPUA ;PullUps Activos
MOVLW 0xFF
MOVWF WPUB
CLRF BSR ; !!Bank Register-Bank(0/1)-Select
MOVLW 0x70
MOVWF INTCON ;Interrupciones externas, timer y periferias
MOVLW 0x07 ;activas
MOVWF PORTB
CLRF PORTA ; !!Bank!! PORTA - TRISA - WDTCON - SRCON
MOVLW 0xFF
MOVWF BUZZON
BUZZRET
DECFSZ BUZZON,F ;PEQUEÑO DELAY
GOTO BUZZRET
MOVLW 0x20
MOVWF FSR0
ERASEREG
CLRF INDF0
INCF FSR0,F
BTFSS FSR0,7
GOTO ERASEREG ;Se borra la GPR del primer banco
CLRF TMR0
BCF INTCON,TMR0IF ; Deshabilita la interrupcion de desbordamiento (por si se desbordo)
BSF INTCON,GIE ;Habilitamos Globalmente las interrupciones
BANKSEL RCSTA
MOVLW 0x40
MOVWF BAUDCON
BSF TXSTA,5
BAUDER
BCF BAUDCON,4
BTFSC BAUDCON,4 ;Comunicacion serial 19200
GOTO BAUDER ; Se habilitan la recepcion y envio serial
CLRF BSR
MOVLW 0x03 ; !!Bank Program-Page-Select
MOVWF PCLATH
CALL CARGAELEMENTOS ;Carga elementos de la EEPROM, de momento no estan seteados
LETRELIBRE
CLRF LETRVAR
MOVLW 0x01
MOVWF PCLATH
CALL PREGUNHORARIO ;Pregunta si es AM/PM via Serial, si no recibe respuesta, asume que es AM
BTFSC BANHORARIO,0
BCF COUNTAR,0
BTFSC BANHORARIO,1
BSF COUNTAR,0
MOVLW 0xB0
MOVWF BUZZON ;VALOR PARA ACTIVAR EL BUZZER POR 0xB0 * 2ms
MOVLW 0xB4
MOVWF RETAROFF ;RETAROFF EQUIVALE A DELAY DE n SEGUNDOS, ESTE CASO 180 SEGUNDOS (3 MINUTOS)
MOVLW 0x02
MOVWF BAILN ;UN SEGMENTO DEL DISPLAY CAMBIARA CADA 2 SEGUNDOS
MOVLW 0x03
MOVWF PCLATH
BSF LETRVAR,0
MOVLW 0x05
MOVWF PCLATH
CALL CARGALETREROS ;CARGA EL LETRERO DEL UNICIO DEL PROGRAMA
MOVLW 0x01
MOVWF PCLATH
MOVF DIALACTUAL,W
MOVWF DISPLAY1
BSF ABANDERADOS,4
MOVLW 0xB0;9
MOVWF TMR1L
MOVLW 0x3C
MOVWF TMR1H ;HABILITA EL TIMMER1 A 200ms
MOVLW 0x21
MOVWF T1CON
BCF INTCON,TMR1IF
BCF INTCON,TMR0IF ;BORRA LOS DESBORDAMIENTOS EN CASO DE HABERLOS
BSF INTCON,GIE ;HABILITA LA INTERRUPCION GLOBAL
MOVLW 0x0A
ADDWF TMR0,F ;TMR0 MAS 10 PARA RETARDO
; MOVLW 0x0D
; MOVWF PCLATH
; CALL PREP_INTERRUP ;ESTA LINEA ERA PARA VERIFICAR LOS BITS DE RESET, NO MOSTRO NADA UTIL
BUCLE
MOVLW 0x02
MOVWF PCLATH
CALL RET400 ;RETARDO 400 ms
CLRF PCLATH
MOVF BAILN,W
BTFSS STATUS,Z ;EL SEGMENTO YA DEBE CAMBIAR?
GOTO BOLIBRNES ;SEGMENTO NO CAMBIA
CALL PREGUNHORARIO ;SEGMENTO CAMBIA Y VERIFICA SI ES AM/PM
BTFSS BANHORARIO,1
GOTO BANHORARIODIA
BTFSS COUNTAR,0
BSF BANHORARIO,2
BTFSS BANHORARIO,2
GOTO CONTINUA_HORARIO
BSF COUNTAR,0
BSF LETRVAR,0
BCF LETRVAR,0
GOTO CONTINUA_HORARIO
BANHORARIODIA
BTFSC COUNTAR,0
BSF BANHORARIO,2
BTFSS BANHORARIO,2
GOTO CONTINUA_HORARIO
BCF COUNTAR,0
BSF LETRVAR,0
BCF LETRVAR,0
CONTINUA_HORARIO
BCF BANHORARIO,2
MOVLW 0x01
MOVWF PCLATH
BOLIBRNES
MOVF BOTONES,W ;SE OPRIMIO ALGUN BOTON?
BTFSS STATUS,Z
GOTO BOTONACTIVO
MOVF RETAROFF,W ;NO SE OPRIMIO BOTON,
BTFSS STATUS,Z ;HAN PASADO 3 MINUTOS?
GOTO BUCLE ;NO, REPETIR CICLO
CLRF DISPLAY1
CLRF DISPLAY2
CLRF DISPLAY3
CLRF DISPLAY4
CLRF DISPLAY5
CLRF DISPLAY6
CLRF DISPLAY7 ;PASARON 3 MINUTOS, SE APAGARON LOS DISPLAYS
SLEEPPIC
MOVF BOTONES,W
BTFSC STATUS,Z ;MIENTRAS NO HAYA BOTONES, CICLAR
GOTO SLEEPPIC
CLRF BOTONES
GOTO LETRELIBRE ;HUBO UN BOTON ACTIVO, REGRESAMOS AL MENU INICIAL
;###########################################
;###########################################
PREGUNHORARIO
MOVLW 0x06 ;IMPLEMENTACION PRIMITIVA DE ENVIO
MOVWF NUMENVIOS ;ACK DATO CONTINUA
REPEDIRHORARIO ;NO ACK IGNORO Y ASUMO UN VALOR
DECF NUMENVIOS,F
BTFSS STATUS,Z
GOTO AUNINTENTO
MOVLW 0x01
BANKSEL RCSTA
BCF RCSTA,4
GOTO CONTINUA_RECE
AUNINTENTO
MOVLW 0x0F
BANKSEL TXREG; MOVWF TXENV
MOVWF TXREG; MOVLW 0x0F
BSF TXSTA,5
WAYIT
BTFSS TXSTA,1
GOTO WAYIT
BSF RCSTA,4
CLRF BSR
MOVLW 0xFF
MOVWF LECTUTEMP
HORARIOESPERA
DECF LECTUTEMP,F
BTFSC STATUS,Z
GOTO REPEDIRHORARIO
BTFSS PIR1,5
GOTO HORARIOESPERA
HORARIOLLEGO
BANKSEL RCSTA
MOVF RCREG,W
CONTINUA_RECE
CLRF BSR
MOVWF BANHORARIO
MOVLW 0x01
XORWF BANHORARIO,W
BTFSC STATUS,Z
GOTO HORARIOCONTINUA
MOVLW 0x02
XORWF BANHORARIO,W
BTFSC STATUS,Z
GOTO HORARIOCONTINUA
MOVLW 0x01
MOVWF BANHORARIO
HORARIOCONTINUA
CLRF BSR
RETURN
;####################################
;####################################
BOTONACTIVO
MOVLW 0x03 ;MENU PARA BOTONES QUE QUIZAS SE OPRIMIERON
MOVWF PCLATH
BTFSC BOTONES,0
NOP
MOVLW 0x02
MOVWF PCLATH
BTFSC BOTONES,1
GOTO MENHORA
BTFSC BOTONES,2
NOP
MOVLW 0x04
MOVWF PCLATH
BTFSC BOTONES,3
NOP
CLRF BOTONES
MOVLW 0x01
MOVWF PCLATH
GOTO BUCLE
;##################################
;##################################
ORG 0x0208
;#######################################
RET200 ;200 ms
MOVLW 0x01
MOVWF RETARDO1
GOTO DECRETAR
RET400 ;400 ms
MOVLW 0x02
MOVWF RETARDO1
DECRETAR
MOVF RETARDO1,W
BTFSS STATUS,Z
GOTO DECRETAR
RETURN
MENHORA ;MENU PARA MOSTRAR LA HORA RECIBIDA VIA SERIAL
MOVLW 0xBD;9D ;DS1302 BURST-MODE
MOVWF DISPLAY1
MOVLW 0xB0
MOVWF BUZZON
MEHORA
BCF ABANDERADOS,4
CALL RECIBOHORA
BCF INTCON,GIE
MOVLW 0xBD
XORWF DISPLAY1,W
MOVLW 0xAA
BTFSS STATUS,Z
MOVLW 0xAD
MOVWF FSR0
MOVLW 0x0E
MOVWF PCLATH
MOVLW 0x0F ; b'00001111' d'015'
ANDWF INDF0,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY7
SWAPF INDF0,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF INDF0,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY6
INCF FSR0,F
SWAPF INDF0,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF INDF0,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY4
SWAPF INDF0,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF INDF0,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY5
INCF FSR0,F
SWAPF INDF0,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF INDF0,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY2
SWAPF INDF0,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF INDF0,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY3
BSF DISPLAY5,5
BSF DISPLAY3,5
BSF INTCON,GIE
MOVLW 0x02
MOVWF PCLATH
CALL RET400
CLRF TMR0
MOVLW 0x32
MOVWF RETARDO0
BOT_TI_HOR
MOVLW 0x01
MOVWF PCLATH
BTFSC BOTONES,0
GOTO LETRELIBRE
MOVLW 0x02
MOVWF PCLATH
BTFSC BOTONES,2
GOTO MEFECH
BTFSC BOTONES,3
GOTO MENPULSOS
BTFSC BOTONES,1
GOTO SND_CHANGE
MOVF RETARDO0,W
BTFSS STATUS,Z
GOTO BOT_TI_HOR
GOTO MEHORA
MEFECH
MOVLW 0xB0
MOVWF BUZZON
MOVLW 0xAB
XORWF DISPLAY1,W
MOVLW 0xAB
BTFSC STATUS,Z
MOVLW 0xBD
MOVWF DISPLAY1
GOTO MEHORA
;#######################################
RECIBOHORA
MOVLW 0x10
BANKSEL TXREG
MOVWF TXREG
BSF TXSTA,5
EXREAS
BTFSS TXSTA,1
GOTO EXREAS
BSF RCSTA,4
CLRF BSR
MOVLW 0x02
MOVWF PCLATH
MOVLW 0x30
MOVWF BUZZON
LOLBUZREA
DECFSZ BUZZON,F
GOTO LOLBUZREA
MOVLW 0xAA
MOVWF FSR0
ESREAS
MOVLW 0xFF
MOVWF LECTUTEMP
ESPERORELO
BTFSC PIR1,5
GOTO RELOFINSF
DECF LECTUTEMP,F
BTFSS STATUS,Z
GOTO ESPERORELO
ETICEN
MOVLW 0x10
GOTO ECTIOS
RELOFINSF
BANKSEL RCREG
MOVF RCREG,W
ECTIOS
CLRF BSR
MOVWF INDF0
INCF FSR0,F
MOVLW 0xB1
XORWF FSR0,W
BTFSS STATUS,Z
GOTO ESREAS
BSF INTCON,GIE
CLRF PCLATH
RETURN
;#################################
MENPULSOS
CALL RET200
MOVLW 0x8F
MOVWF DISPLAY1
CLRF REGPU0
CLRF REGPU1
MOVLW 0xB0
MOVWF BUZZON
BSF ABANDERADOS,4
MENUPULSOS
BCF INTCON,GIE
MOVF REGPU1,W
MOVWF BCDTEMP1
MOVF REGPU0,W
MOVWF BCDTEMP0
MOVLW 0x0E
MOVWF PCLATH
CALL CONVERTBCD
BCF DISPLAY5,5
CLRF TMR0
MOVLW 0x32
MOVWF RETARDO0
BSF INTCON,GIE
WAITPUL
MOVLW 0x01
MOVWF PCLATH
BTFSC BOTONES,0
GOTO LETRELIBRE
MOVLW 0x02
MOVWF PCLATH
BTFSC BOTONES,1
GOTO SND_CHANGE
BTFSC BOTONES,2
GOTO MENHORA
BTFSC BOTONES,3
GOTO MENPULSOS
MOVF RETARDO0,W
BTFSC STATUS,Z
GOTO MENUPULSOS
GOTO WAITPUL
;#######################################
;#####################################
;#####################################
CARGADOR
MOVLW 0x47
MOVWF FSR0
MOVLW 0x0F
MOVWF PCLATH
CALL EEPROMLECTURA
MOVLW 0x0E
MOVWF PCLATH
MOVF INDF0,W
MOVWF TABLETEMP
CALL MAYUS
MOVWF INDF0
INCF FSR0,F
INCF EEADT,F
MOVLW 0x03
MOVWF PCLATH
BSF BSR,0
BTFSS BANDACTIV,1
GOTO NJUNTO
CLRF BSR
MOVLW 0x0A
MOVWF TABLETEMP
GOTO LECTURCONST
NJUNTO
CLRF BSR
MOVLW 0x06
MOVWF TABLETEMP
CALL LECTURCONST
MOVLW 0x04
MOVWF TABLETEMP
MOVLW 0x47
MOVWF EEADT
LECTURCONST
MOVLW 0x0F
MOVWF PCLATH
CALL EEPROMLECTURA
INCF EEADT,F
INCF FSR0,F
MOVLW 0x03
MOVWF PCLATH
DECFSZ TABLETEMP,F
GOTO LECTURCONST
RETURN
SND_CHANGE
BSF LETRVAR,7
MOVLW 0x05
MOVWF PCLATH
CALL CARGALETREROS
SNDCHANGE
MOVLW 0xB1
MOVWF FSR0
MOVLW 0xD8
MOVWF DISPLAY5
MOVLW 0x8B
BTFSS INDF0,0
MOVLW 0xB8
MOVWF DISPLAY6
MOVLW 0xAB
BTFSS INDF0,0
MOVLW 0x00
MOVWF DISPLAY7
MOVLW 0xA0
MOVWF BUZZON
BSF INTCON,GIE
SND_MENU
MOVLW 0x01
MOVWF PCLATH
CALL RET400
BTFSC BOTONES,0
GOTO LETRELIBRE
MOVLW 0x02
MOVWF PCLATH
BTFSC BOTONES,2
GOTO MENHORA
BTFSS BOTONES,1
GOTO SND_MENU
BTFSC INDF0,0
GOTO APAGARBUZZ
BSF INDF0,0
GOTO GUARDASND
APAGARBUZZ
BCF INDF0,0
GUARDASND
MOVLW 0xC0
MOVWF EEADT
MOVF INDF0,W
MOVWF EEWR
MOVLW 0x0F
MOVWF PCLATH
CALL EEPROMESCRITURA
MOVLW 0x04
MOVWF PCLATH
GOTO SNDCHANGE
;#####################################
CARGAELEMENTOS
MOVLW 0xA0
MOVWF FSR0
MOVLW 0xBB
MOVWF EEADT
MOVLW 0x03
MOVWF TABLETEMP
CALL LECTURCONST
MOVLW 0x4B
MOVWF EEADT
MOVLW 0x05
MOVWF TABLETEMP
CALL LECTURCONST
MOVLW 0xC0
MOVWF EEADT
MOVLW 0xB1
MOVWF FSR0
MOVLW 0x05
MOVWF TABLETEMP
CALL LECTURCONST
MOVLW 0xB8
MOVWF FSR0
MOVLW 0x04
MOVWF TABLETEMP
CALL LECTURCONST
MOVLW 0xBE
MOVWF FSR0
MOVLW 0x02
MOVWF TABLETEMP
CALL LECTURCONST
MOVLW 0x52
MOVWF FSR0
MOVLW 0x5B
MOVWF EEADT
MOVLW 0x02
MOVWF TABLETEMP
CALL LECTURCONST
RETURN
;#####################################
;#################################
LIMPIAR_DISPLAY
MOVLW 0x22
MOVWF FSR0
BUCDIS
CLRF INDF0
INCF FSR0,F
MOVLW 0x29
XORWF FSR0,W
BTFSS STATUS,Z
GOTO BUCDIS
RETURN
;#####################################
;#####################################
ORG 0x0604
CARGALETREROS
CLRF TABLETEMP
MOVLW 0x22
MOVWF FSR0
CARGA
BCF INTCON,GIE
MOVLW 0x0F
MOVWF PCLATH
BTFSC LETRVAR,0
CALL LETRERO
BTFSC LETRVAR,1
NOP
BTFSC LETRVAR,2
NOP
BTFSC LETRVAR,3
NOP
BTFSC LETRVAR,4
NOP
BTFSC LETRVAR,5
NOP
BTFSC LETRVAR,6
NOP
BTFSC LETRVAR,7
CALL SNDLETRE
MOVWF LECTUTEMP
MOVLW 0x02
MOVWF PCLATH
CALL RECORRE
INCF TABLETEMP,F
MOVLW 0x07
SUBWF TABLETEMP,W
BTFSS STATUS,C
GOTO CARGA
CLRF LETRVAR
CLRF PCLATH
RETURN
RECORRE
BCF INTCON,GIE
MOVF DISPLAY6,W
MOVWF DISPLAY7
MOVF DISPLAY5,W
MOVWF DISPLAY6
MOVF DISPLAY4,W
MOVWF DISPLAY5
MOVF DISPLAY3,W
MOVWF DISPLAY4
MOVF DISPLAY2,W
MOVWF DISPLAY3
MOVF DISPLAY1,W
MOVWF DISPLAY2
MOVF LECTUTEMP,W
MOVWF DISPLAY1
RETURN
RECORRER
BCF INTCON,GIE
MOVF DISPLAY2,W
MOVWF DISPLAY1
MOVF DISPLAY3,W
MOVWF DISPLAY2
MOVF DISPLAY4,W
MOVWF DISPLAY3
MOVF DISPLAY5,W
MOVWF DISPLAY4
MOVF DISPLAY6,W
MOVWF DISPLAY5
MOVF DISPLAY7,W
MOVWF DISPLAY6
MOVF LECTUTEMP,W
MOVWF DISPLAY7
RETURN
ORG 0x0D00
PREP_INTERRUP
CLRF DISPLAY2
CLRF DISPLAY3
CLRF DISPLAY4
CLRF DISPLAY5
CLRF DISPLAY6
CLRF DISPLAY7
BANKSEL PCON
BTFSC PCON,7
BSF DISPLAY2,3
BTFSC PCON,6
BSF DISPLAY2,1
BTFSS PCON,3
BSF DISPLAY3,2
BTFSS PCON,2
BSF DISPLAY4,0
BTFSS PCON,1
BSF DISPLAY5,4
BTFSS PCON,0
BSF DISPLAY6,3
BTFSS STATUS,4
BSF DISPLAY7,2
BTFSS STATUS,3
BSF DISPLAY7,4
CLRF BSR
CLRF PCLATH
RETURN
ORG 0x0E00
;#########################################
DECRIPASC
MOVLW 0x20
XORWF TABLETEMP,W
BTFSC STATUS,Z
RETLW 0x00
MOVLW 0x5B
XORWF TABLETEMP,W
BTFSC STATUS,Z
RETLW 0x08
MOVLW 0x2D
XORWF TABLETEMP,W
BTFSC STATUS,Z
RETLW 0x08
MOVLW 0x30
SUBWF TABLETEMP,F
MOVLW 0x2A
SUBWF TABLETEMP,W
BTFSS STATUS,C
GOTO MAYUS
MOVLW 0x20
SUBWF TABLETEMP,F
MAYUS
MOVLW 0x2A
SUBWF TABLETEMP,W
BTFSC STATUS,C
CLRF TABLETEMP
MOVLW 0x0E
MOVWF PCLATH
MOVF TABLETEMP,W
NUMEROS
ADDWF PCL,F
RETLW 0xD7 ;"0"
RETLW 0x14 ;"1"
RETLW 0xCE ;"2"
RETLW 0x5E ;"3"
RETLW 0x1D ;"4"
RETLW 0x5B ;"5"
RETLW 0xDB ;"6"
RETLW 0x16 ;"7"
RETLW 0xDF ;"8"
RETLW 0x5F ;"9"
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETLW 0x9F ;"A"
RETLW 0xD9 ;"B";
RETLW 0xC3 ;"C"
RETLW 0xDC ;"D"
RETLW 0xCB ;"E"
RETLW 0x8B ;"F"
RETLW 0xDB ;"G"
RETLW 0x9D ;"H"
RETLW 0x10 ;"I"
RETLW 0xD4 ;"J"
RETLW 0x89 ;"K"
RETLW 0xC1 ;"L"
RETLW 0x97 ;"M"
RETLW 0x98 ;"N"
RETLW 0xD8 ;"O"
RETLW 0x8F ;"P"
RETLW 0x1F ;"Q"
RETLW 0x88 ;"R"
RETLW 0x5B ;"S"
RETLW 0xC9 ;"T"
RETLW 0xD0 ;"U"
RETLW 0xD5 ;"V"
RETLW 0x00 ;"W"
RETLW 0x95 ;"X"
RETLW 0xCE ;"Z"
;#############################
CONVERTBCD
CLRF TEMPBCD
CALL BCDCONVERT
MOVLW 0x0E
MOVWF PCLATH
MOVLW 0x0F ; b'00001111' d'015'
ANDWF BCDTEMP6,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY3
SWAPF BCDTEMP6,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF BCDTEMP6,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY2
SWAPF BCDTEMP5,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF BCDTEMP5,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY4
SWAPF BCDTEMP5,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF BCDTEMP5,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY5
SWAPF BCDTEMP4,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF BCDTEMP4,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY6
SWAPF BCDTEMP4,F
MOVLW 0x0F ; b'00001111' d'015'
ANDWF BCDTEMP4,W
CALL NUMEROS ; !!Bank!! 0x002E - 0x082E - 0x102E - 0x182E
MOVWF DISPLAY7
BTFSS ABANDERADOS,1
GOTO LIMPIACEROEXTRA ; !!Bank!! 0x04C2 - 0x0CC2 - 0x14C2 - 0x1CC2
BSF DISPLAY5,5
LIMPIACEROEXTRA
MOVLW 0xD7 ; b'11011101' d'221'
SUBWF DISPLAY2,W
BTFSS STATUS,Z
GOTO QUITAABANDE ; !!Bank!! 0x04DD - 0x0CDD - 0x14DD - 0x1CDD
CLRF DISPLAY2
BTFSC ABANDERADOS,6
GOTO QUITAABANDE
MOVLW 0xD7 ; b'11011101' d'221'
SUBWF DISPLAY3,W
BTFSS STATUS,Z
GOTO QUITAABANDE ; !!Bank!! 0x04DD - 0x0CDD - 0x14DD - 0x1CDD
CLRF DISPLAY3
BTFSC ABANDERADOS,5
GOTO QUITAABANDE
MOVLW 0xD7 ; b'11011101' d'221'
SUBWF DISPLAY4,W
BTFSS STATUS,Z
GOTO QUITAABANDE ; !!Bank!! 0x04DD - 0x0CDD - 0x14DD - 0x1CDD
CLRF DISPLAY4
BTFSC ABANDERADOS,1
GOTO QUITAABANDE ; !!Bank!! 0x04DD - 0x0CDD - 0x14DD - 0x1CDD
MOVLW 0xD7 ; b'11011101' d'221'
SUBWF DISPLAY5,W
BTFSS STATUS,Z
GOTO QUITAABANDE ; !!Bank!! 0x04DD - 0x0CDD - 0x14DD - 0x1CDD
CLRF DISPLAY5
MOVLW 0xD7 ; b'11011101' d'221'
SUBWF DISPLAY6,W
BTFSS STATUS,Z
GOTO QUITAABANDE ; !!Bank!! 0x04DD - 0x0CDD - 0x14DD - 0x1CDD
CLRF DISPLAY6
QUITAABANDE
BCF ABANDERADOS,6
BCF ABANDERADOS,5
BCF ABANDERADOS,1
RETURN
;###############################
;####################################
BCDCONVERT
BCF STATUS,C
MOVLW 0x18 ; b'00011000' d'024'
MOVWF TEMPDECRE
CLRF BCDTEMP6
CLRF BCDTEMP5
CLRF BCDTEMP4
CLRF BCDTEMP3
PASSTROUGHT
RLF BCDTEMP0,F
RLF BCDTEMP1,F
RLF BCDTEMP2,F
RLF BCDTEMP4,F
RLF BCDTEMP5,F
RLF BCDTEMP6,F
RLF BCDTEMP3,F
DECFSZ TEMPDECRE,F
GOTO PASSOUT ; !!Bank!! 0x07BD - 0x0FBD - 0x17BD - 0x1FBD
RETURN
PASSOUT
MOVLW 0x3A ; b'00110000' d'048' "0"
MOVWF FSR0
CALL ADICIONBCD ; !!Bank!! 0x07CA - 0x0FCA - 0x17CA - 0x1FCA
MOVLW 0x3B ; b'00101111' d'047' "/"
MOVWF FSR0
CALL ADICIONBCD ; !!Bank!! 0x07CA - 0x0FCA - 0x17CA - 0x1FCA
MOVLW 0x3C ; b'00101110' d'046' "."
MOVWF FSR0
CALL ADICIONBCD ; !!Bank!! 0x07CA - 0x0FCA - 0x17CA - 0x1FCA
MOVLW 0x39 ; b'00110001' d'049' "1"
MOVWF FSR0
CALL ADICIONBCD ; !!Bank!! 0x07CA - 0x0FCA - 0x17CA - 0x1FCA
GOTO PASSTROUGHT ; !!Bank!! 0x07B3 - 0x0FB3 - 0x17B3 - 0x1FB3
ADICIONBCD
MOVLW 0x03 ; b'00000011' d'003'
ADDWF INDF0,W
MOVWF TEMPBCD
BTFSC TEMPBCD,3
MOVWF INDF0
MOVLW 0x30 ; b'00110000' d'048' "0"
ADDWF INDF0,W
MOVWF TEMPBCD
BTFSC TEMPBCD,7
MOVWF INDF0
RETURN
DIV16X16:
CLRF RESULT0 ; Clear the result
CLRF RESULT1 ; Clear the result
MOVF DIVISOR0,W ; Check for zero
IORWF DIVISOR1,W ;
BTFSC STATUS,Z ; Check for zero
RETLW 0xFF ; return 0xFF if illegal
MOVLW 0x01 ; Start count at 1
MOVWF DIV_COUNT ; Clear Count
D1
BTFSC DIVISOR1,7 ; High bit set ?
GOTO D2 ; Yes then continue
INCF DIV_COUNT,F ; Increment count
BCF STATUS,C
RLF DIVISOR0,F ; Shift it left
RLF DIVISOR1,F
GOTO D1
D2
BCF STATUS,C
RLF RESULT0,F ; Shift it left
RLF RESULT1,F
MOVF DIVISOR0,W
SUBWF DIVIDENDO0,F
MOVF DIVISOR1,W
BTFSS STATUS,C
INCF DIVISOR1,W
SUBWF DIVIDENDO1,F
BTFSC STATUS, C ; Did it reduce?
GOTO D3 ; No, so it was less than
MOVF DIVISOR0,W
ADDWF DIVIDENDO0,F
MOVF DIVISOR1,W
BTFSC STATUS,C
INCF DIVISOR1,W
ADDWF DIVIDENDO1,F
GOTO D4 ; Continue the process
D3
BSF RESULT0,0 ; Yes it did, this gets a 1 bit
D4
DECF DIV_COUNT,F ; Decrement N_COUNT
BTFSC STATUS,Z ; If its not zero then continue
RETLW 0x00 ; Else return, as we are done.
BCF STATUS,C
RRF DIVISOR1,F
RRF DIVISOR0,F
GOTO D2 ; Next bit.
;################################
ORG 0x0F00
;################################
DEBIT
MOVLW 0x07 ; PARA 19200 BAUDIOS / XTAL DE 4 MEGA HZ.
MOVWF CONTBAU
X02
NOP
NOP
DECFSZ CONTBAU,1
GOTO X02
RETLW 00H
;***************************************************
TXRUTINA
MOVLW 0x0C
MOVWF FSR1
MOVLW 0x01
MOVWF FSR1H ;UBICACION DE LATB
BCF INTCON,GIE
BCF INDF1,1 ; START BITS
CALL DEBIT
MOVLW 08H ; SIETE BITS
MOVWF COUNTBIT
NOP
NOP
NOP
S7
BCF STATUS,C
NOP
RRF TXENV,1
BTFSS STATUS,C ; 0
GOTO S4 ; FUE CERO 1
GOTO S3
S3
BSF INDF1,1 ; FUE UNO 1
GOTO S5 ; 2
S4
NOP
BCF INDF1,1 ; 2
GOTO S5
S5
CALL DEBIT ; DELAY ENTRE BITS 3
DECFSZ COUNTBIT,F
GOTO S7
MOVLW 0x02;
MOVWF COUNTBIT
CDELAYTX
DECFSZ COUNTBIT,F
GOTO CDELAYTX
NOP
BSF INDF1,1 ; STOP BITS
CLRF BSR
CLRF PCLATH
BSF INTCON,GIE
RETLW 0x00
;#########################################
LETRERO
MOVF TABLETEMP,W; 9D D8 C1 9F
ADDWF PCL,F
RETLW 0x9F
RETLW 0xC1
RETLW 0xD8
RETLW 0x9D
RETLW 0x00
RETLW 0x00
RETLW 0x00
SNDLETRE
MOVF TABLETEMP,W
ADDWF PCL,F
RETLW 0x00
RETLW 0x00
RETLW 0x00
RETLW 0x00
RETLW 0xFC
RETLW 0x98
RETLW 0x5B
;#########################################
EEPROMESCRITURA
CLRF BSR
MOVF EEADT,W ;
BANKSEL EEADRL ;
MOVWF EEADRL ;Data Memory Address to write
CLRF BSR
MOVF EEWR,W ;
BANKSEL EEDATL ;
MOVWF EEDATL ;Data Memory Value to write
BCF EECON1, CFGS ;Deselect Configuration space
BCF EECON1, EEPGD ;Point to DATA memory
BSF EECON1, WREN ;Enable writes
MOVLW 0x55 ;
MOVWF EECON2 ;Write 55h
MOVLW 0xAA ;
MOVWF EECON2 ;Write AAh
BSF EECON1, WR ;Set WR bit to begin write
BCF EECON1, WREN ;Disable writes
EEWRWAIT
BTFSC EECON1, WR ;Wait for write to complete
GOTO EEWRWAIT ;Done
CALL EEPROMLECTURA
XORWF EEWR,W
BTFSS STATUS,Z
GOTO EEPROMESCRITURA
CLRF PCLATH
RETURN
;###################################
EEPROMLECTURA
CLRF BSR
MOVF EEADT,W
BANKSEL EEADRL
MOVWF EEADRL
BCF EECON1, CFGS
BCF EECON1, EEPGD
BSF EECON1, RD
MOVF EEDATL, W
CLRF BSR
MOVWF INDF0
CLRF PCLATH
RETURN
;################################################
End