Vous êtes sur la page 1sur 38

;====================================================================

; Main.asm file generated by New Project wizard


;
; Created: lun abr 10 2017
; Processor: PIC16F877A
; Compiler: MPASM (Proteus)
;====================================================================

;====================================================================
; DEFINITIONS
;====================================================================
list p=16f877a
include <p16f877a.inc>
__config 3FB9H

;====================================================================
; VARIABLES
;====================================================================
CONT EQU 0X30
CONT2 EQU 0X31
CONT3 EQU 0X32
DATOW EQU 0X33
DATOH EQU 0X34
DATOL EQU 0X35
CONTADOR EQU 0X36
MENSAJE EQU 0X37
DURACIONSONIDO1 EQU 0X38
DURACIONSONIDO2 EQU 0X39
TECLAPULSADA EQU 0X3A
CANTIDAD_DIGITOS EQU 0X3B
DIRECCION_EEPROM EQU 0X3C
DATOS_EEPROM EQU 0X3D
CLAVE_P1 EQU 0X3E
CLAVE_P2 EQU 0X3F
CLAVE_P3 EQU 0X40
CLAVE_P4 EQU 0X41
MODO_ALARMA EQU 0X42 ;1 ES MANUAL 2 ES AUTOMATICO
REPETIR_TIMER0 EQU 0X43
WAUX EQU 0X44
SEGUNDOS20 EQU 0X45
ARMADA EQU 0X46 ;1 ESTA ARMADA LA PUERTA
USUARIOPULSADO EQU 0X47
CANTIDAD_DE_USUARIOS EQU 0X48
USUARIO_SELECCIONADO EQU 0X49
INTENTOS_DE_CLAVE EQU 0X4A
UNIDAD_SEGUNDOS EQU 0X4B
SUENA EQU 0X4C; 1=SUENA LA ALARMA
OPCION_AGREGAR EQU 0X4D;1=ES QUE QUIERE AGREGAR USUARIO
CAMBIO_DE_CLAVE EQU 0X4E
DOBLE_TIMER1 EQU 0X4F
SEGUNDOS120 EQU 0X50
BLOQUEO2MIN EQU 0X51
MINUTOS EQU 0X52
DECENA_SEGUNDOS EQU 0X53
UNI_SEGUNDOS EQU 0X54
RESULTADO EQU 0X55

;=================================================================
; RESET and INTERRUPT VECTORS
;=================================================================

; Reset Vector
ORG 0x00
GOTO Start
ORG 0X04
GOTO INTERRUPCIONES
;=================================================================
;=================================================================
;INTERRPCIONES
;==================================================================
INTERRUPCIONES:
MOVWF WAUX
BTFSC INTCON,INTF
GOTO INTERRUPCION_PUERTA
BTFSC INTCON,TMR0IF
GOTO TMR
BTFSC PIR1,TMR1IF
GOTO TIMER1

FIN_INTERRUPCION:
MOVF WAUX,W ;retorno el W
RETFIE ;Fin rutina de interupcion
;=================================================================
;INTERRUPCION TIMER 0
;=================================================================
TMR:
DECFSZ REPETIR_TIMER0,F
GOTO SIGUECONTANDO
GOTO SEGUNDERO
SEGUNDERO:
MOVLW .20
MOVWF REPETIR_TIMER0
MOVLW .1
XORWF SUENA,W
BTFSS STATUS,Z
GOTO NO_SUENA
;--empieza a sonar la alarma------------------------------
BSF ADCON0,GO ;Start A/D conversion
BTFSC ADCON0,GO;ADCON0 es 0? (la conversion esta completa?)
GOTO $-1 ;No, ir _espera
COMF PORTB,7 ;LED
MOVLW .2
MOVWF DURACIONSONIDO2
REPT4:
MOVLW .100
MOVWF DURACIONSONIDO1
REPT5:
BSF PORTB,3 ;BOCINA
BSF PORTB,6 ;LED VERDE
;RETARDO
MOVLW .1
MOVWF CONT2
CICLO6:
MOVF ADRESH,W ;VALOR DE ADC
MOVWF CONT
DECFSZ CONT,F
GOTO $-1
DECFSZ CONT2,F
GOTO CICLO6

BCF PORTB,3 ;BUFFER


BCF PORTB,6
;RETARDO
MOVLW .1
MOVWF CONT2
CICLO7:

MOVF ADRESH,W ;Si, W=ADRESH


MOVWF CONT
DECFSZ CONT,F
GOTO $-1
DECFSZ CONT2,F
GOTO CICLO7
DECFSZ DURACIONSONIDO1,F
GOTO REPT5
DECFSZ DURACIONSONIDO2,F
GOTO REPT4
NO_SUENA:
DECFSZ SEGUNDOS20,F
GOTO SIGUECONTANDO
GOTO YA_HAY_20S
YA_HAY_20S:
MOVLW .19
MOVWF SEGUNDOS20
MOVLW .1
MOVWF ARMADA ;ARMAMOS LA PUERTA DESPUES DE 20 SEGUNDOS
SIGUECONTANDO:
MOVLW .61
MOVWF TMR0
BCF INTCON,TMR0IF;Resetea el flag de la interrupcio
GOTO FIN_INTERRUPCION
;================================================================
;INTERRUPCION DE RB0
;=================================================================
INTERRUPCION_PUERTA:
MOVLW .1
MOVWF SUENA
BSF PORTB,7
BCF INTCON,INTF ;Resetea el flag de la interrupcion RB0/INT
BCF INTCON,INTE
BSF INTCON,TMR0IE
GOTO FIN_INTERRUPCION
;=================================================================
;INTERRUPCION DE TIMER 1
;=================================================================
TIMER1:
DECFSZ DOBLE_TIMER1,F
NOP
MOVLW 0x00
MOVWF TMR1H
MOVLW 0x00
MOVWF TMR1L
BCF PIR1,TMR1IF
GOTO FIN_INTERRUPCION

;=================================================================
Start
;BANCO 1 --------------------------------------------------------
BSF STATUS,RP0
BCF STATUS,RP1
;--------------------------------------------------------------
CLRF TRISA
CLRF TRISB
BSF TRISB,0 ;RBO ENTRADA
CLRF TRISC
CLRF TRISD
CLRF TRISE
;ADC
MOVLW b'00001110' ;FORMATO ADFM =0
MOVWF ADCON1 ;ENTRADAS DIGITALES Y ANALOGICO RA0
BSF TRISA,0 ;Canal AN0 como entrada
BSF TRISA,3 ;ENTRADA 3 DEL TECLADO
BSF TRISA,5 ;ENTRADA 1 DEL TECLADO
BSF TRISE,1 ;ENTRADA 2 DEL TECLADO
MOVLW b'11000000'
MOVWF INTCON ;Configura INTCON

;|GIE|PEIE|TMR0IE|INTE|RBIE|TMR0IF|INTF|RBIF|
; 1 1 1 1 1 0 0 0
movlw b'00000111';resistencias pull-up,flancos de bajada,
movwf OPTION_REG ;prescales 1:256 en timer 0
;-RBPU|INTEDG|T0CS|T0SE|PSA|PS2|PS1|PS0
BSF PIE1,TMR1IE ;INTERRUPCION POR TIMER 1

;config de serial-----------------------------------------------
BCF TRISC,6 ;RC6/TX salida, pin de transmisi�n
BSF TRISC,7 ;RC7/Rx entrada, pin de recepci�n
BCF TXSTA,TX9 ;8 bits de datos a transmitir
BSF TXSTA,TXEN ;Activa la transmisi�n serial, TXIF = 1
BCF TXSTA,SYNC ;Modo as�ncrono
BSF TXSTA,BRGH ;Selecci�n de baja velocidad
MOVLW .25 ;9600 baud rate Xtal=4Mhz
MOVWF SPBRG
;TXSTA BANCO 1
;|CSRC|TX9|TXEN|SYNC|-|BRGH|TRMT|TX9D|
; NO 0 1 0 - 0 X X
;ASYNC

;BANCO 0 ---------------------------------------
BCF STATUS,RP0
BCF STATUS,RP1
;--------------------------------------------------------------
;RCSTA BANCO 0
;|SPEN|RX9|SREN|CREN|ADDEN|FERR|OERR|RX9D|
BCF STATUS,RP0 ;Ir banco 0
BCF STATUS,RP1
BSF RCSTA,SPEN ;habilita e l puerto serie
BCF RCSTA,RX9 ;8 Bits de datos
BSF RCSTA,CREN ;Para Rx Continuo
;-----------------------------------------------------------------

CLRF PORTD
CLRF PORTB
CLRF PORTC
MOVLW 0FFH
MOVWF PORTA
MOVWF PORTE

MOVLW b'01000001' ;A/D conversion Fosc/8 CHANE 0


MOVWF ADCON0
;CONFIGURACION TIMER 1
;|-|-|T1CKPS1|TQCKPS0|T1OSCEN|T1SYNC|TRM1CS|TMR1ON|
BSF T1CON,T1CKPS1
BSF T1CON,T1CKPS0 ;PRESCALER 1:8
BSF T1CON,T1OSCEN ;DESABILITA OSCILADOR
BCF T1CON,TMR1CS ;FUENTE INTERNA
BCF T1CON,TMR1ON
BCF PIR1,TMR1IF
MOVLW 0x00
MOVWF TMR1H
MOVLW 0x00
MOVWF TMR1L
MOVLW .19
MOVWF DOBLE_TIMER1
MOVLW .119
MOVWF SEGUNDOS120
;CONFIGURACION TIMER0--------------------------
MOVLW .61 ;cargamos el timer 0 para 50 mil microsegundos
MOVWF TMR0
MOVLW .20
MOVWF REPETIR_TIMER0;AL REPETIRSE 50.000 POR 20 = 1 SEGUNDO
BCF INTCON,TMR0IF ;
BCF INTCON,TMR0IE; ACTIVAMOS TIMER 1
MOVLW .19
MOVWF SEGUNDOS20
;----------------------------------------------------------------
CLRF ARMADA
MOVLW .1
MOVWF CANTIDAD_DE_USUARIOS
MOVLW .3
MOVWF INTENTOS_DE_CLAVE
CLRF SUENA
MOVLW .4
MOVWF CANTIDAD_DE_USUARIOS
CLRF OPCION_AGREGAR
MOVLW .9
MOVWF UNI_SEGUNDOS
MOVLW .5
MOVWF DECENA_SEGUNDOS
MOVLW .1
MOVWF MINUTOS

; CODIGO PRINCIPAL

CALL CONFIG4
CALL QUITAR_CURSOR
CALL MSJ_BIENVENIDO
CALL RETARDO1S
CALL RETARDO1S
CALL BORRAR
goto CONFIGURADO
;==================================================================
; YA FUE CONFIGURADO
;=================================================================
CONFIGURADO:
BCF INTCON,INTE
BCF INTCON,INTF;Resetea el flag de la interrupcion
BTFSS PORTB,0 ;COMO ESTA RB0
GOTO PUERTA_ABIERTA
GOTO PUERTA_CERRADA
PUERTA_ABIERTA:
CLRF SUENA
CALL BORRAR
CALL MSJ_PUERTA_ABIERTA
BCF INTCON,TMR0IE
BCF INTCON,INTE
MOVLW .61
MOVWF TMR0
MOVLW .20
MOVWF REPETIR_TIMER0;AL REPETIRSE 50.000 POR 20 = 1
MOVLW .19
MOVWF SEGUNDOS20
;AQUI ES CUANDO CERRO LA PUERTA
BTFSS PORTB,0 ;RB0
GOTO $-1
BSF INTCON,TMR0IE
PUERTA_CERRADA:
BCF INTCON,INTE
BCF INTCON,INTF
CLRF SUENA
CALL BORRAR
CALL MSJ_PUERTA_CERRADA
CALL SALTO_DE_LINEA
CALL MSJ_PARA_AMAR
MOVLW .61
MOVWF TMR0
MOVLW .20
MOVWF REPETIR_TIMER0
MOVLW .19
MOVWF SEGUNDOS20
BCF INTCON,TMR0IF
BSF INTCON,TMR0IE
CLRF ARMADA
GOTO ESPERA_DE_20S

ESPERA_DE_20S:
Loop
BTFSC PORTB,0
GOTO AUN_CERRADA
GOTO CONFIGURADO
AUN_CERRADA:
MOVLW 0C0H
CALL INST
MOVLW 0D0H ;POSICION 13 DE LA PANTALLA SEGUNDA LINEA
CALL INST
MOVLW .10
SUBWF SEGUNDOS20,W
MOVWF UNIDAD_SEGUNDOS
BTFSS STATUS,C
GOTO SEGUNDOS20_ES_MENOR_A_10
GOTO SEGUNDOS20_ES_MAYOR_A_10

SEGUNDOS20_ES_MENOR_A_10:
MOVLW 30H ;SE VE UN 1 EN LA LCD
CALL DATO
MOVF SEGUNDOS20,W
MOVWF UNIDAD_SEGUNDOS
MOVLW 30H
ADDWF UNIDAD_SEGUNDOS,W
CALL DATO
MOVLW 'S'
CALL DATO
GOTO YA_MOSTRO

SEGUNDOS20_ES_MAYOR_A_10:
MOVLW 31H ;SE VE UN 1 EN LA LCD
CALL DATO
MOVLW 30H
ADDWF UNIDAD_SEGUNDOS,F ;MOSTRAMOS EL NUMERO DE LA UNIDAD DE 20
SEGUNDOS
MOVF UNIDAD_SEGUNDOS,W
CALL DATO
MOVLW 'S'
CALL DATO

YA_MOSTRO:
BCF PORTA,4 ;PARA QUE APRIETE ATERISCO BAJAMOS D
BTFSS PORTA,5 ;APRIETA ATERISCO
GOTO PUERTA_ARMADA
MOVLW .1
XORWF ARMADA,W
BTFSC STATUS,Z
GOTO PUERTA_ARMADA
CALL RETARDO1S
goto Loop
PUERTA_ARMADA:
BSF INTCON,INTE
;GENERAMOS UN SONIDO PARA SABER QUE ESTA ARMADA LA PUERTA
MOVLW .61 ;cargamos el timer 0 para 50 mil microsegundos
MOVWF TMR0
MOVLW .20
MOVWF REPETIR_TIMER0;AL REPETIRSE 50.000 POR 20 = 1 SEGUNDO
MOVLW .19
MOVWF SEGUNDOS20
BCF INTCON,TMR0IE
MOVLW .1
MOVWF DURACIONSONIDO2
REPT21:
MOVLW .255
MOVWF DURACIONSONIDO1
REPT1:
BSF PORTB,3
CALL RETARDO500uS
BCF PORTB,3
CALL RETARDO500uS
DECFSZ DURACIONSONIDO1,F
GOTO REPT1
DECFSZ DURACIONSONIDO2,F
GOTO REPT21
PUERTA_ARMADA_SIN_SONNIDO:

MOVLW .1
MOVWF ARMADA
CALL BORRAR
CALL MSJ_PUERTA_ARMADA
CALL SALTO_DE_LINEA
MOVLW '*'
CALL DATO
MOVLW ')'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW ' '
CALL DATO

MOVLW 0FFH
MOVWF PORTA
MOVWF PORTE
BSF INTCON,INTE ;ACTIVAMOS INTERRUPCIONES POR RB0
VER_MENU:
BCF PORTA,4
BTFSC PORTA,5
GOTO VER_RX
GOTO PRESIONO_MENU
VER_RX:
btfss PIR1,RCIF ;Pregunta si el buffer de RX esta full
goto VER_MENU
movf RCREG,W ;Si, W=RCREG y pone a cero el RCIF
MOVWF CLAVE_P2
btfss PIR1,RCIF ;Pregunta si el buffer de RX esta full
goto $-1
movf RCREG,W ;Si, W=RCREG y pone a cero el RCIF
MOVWF CLAVE_P4
GOTO DESBLOQUEO_POR_PC

PRESIONO_MENU:
;MENSAJE DEL MENU 1
CALL BORRAR
CALL MSJ_DESARMAR
CALL SALTO_DE_LINEA
CALL MSJ_CONFIGURAR
;----------------------------------------------
NO_FUE_NUMERAL:
CALL TECLADO
MOVWF TECLAPULSADA
MOVLW '1'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FUE_1
SELECCIONAR_USUARIO:
CALL BORRAR
CALL MSJ_USUARIO
CALL SALTO_DE_LINEA_Y_CENTRAR
GOTO SELECCIONANDO_USUARIO

NO_FUE_1:
MOVLW '2'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FUE_2
;PRESIONO 2 PARA CONFIGURAR
GOTO PRESIONA_CONFIGURAR
NO_FUE_2:
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FUE_NUMERAL
GOTO PUERTA_ARMADA_SIN_SONNIDO

SELECCIONANDO_USUARIO:
CLRF OPCION_AGREGAR
CALL TECLADO
MOVWF USUARIOPULSADO
MOVWF TECLAPULSADA
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO SELECCIONO
GOTO PUERTA_ARMADA_SIN_SONNIDO

SELECCIONO:
MOVF USUARIOPULSADO,W
CALL DATO
CALL RETARDO1S
GOTO VERIFICAR_USUARIO
YA_SELECCIONO_USER:
CLRF CANTIDAD_DIGITOS
MOVLW 0X20
MOVWF FSR
CALL BORRAR
CALL MSJ_INGRESE_CLAVE
CALL SALTO_DE_LINEA
CALL MSJ_PARA_USUARIO
MOVLW 30H
ADDWF USUARIO_SELECCIONADO,W
CALL DATO
CALL TECLADO ;ESTA METIENDO CLAVE
MOVWF TECLAPULSADA
CALL BORRAR
CALL MSJ_INGRESE_CLAVE
CALL SALTO_DE_LINEA_Y_CENTRAR
GOTO PRIMERA_TECLA_PULSADA
SIGUE_PULSANDO1:
CALL TECLADO ;ESTA METIENDO CLAVE
MOVWF TECLAPULSADA
PRIMERA_TECLA_PULSADA:
MOVLW '*'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_ATERISCO1
GOTO VERIFICAR_CLAVE
NO_ATERISCO1:
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_NUMERAL1
;PRESIONO NUMERAL PARA BORRAR LO QUE ESCRIBIO
GOTO YA_SELECCIONO_USER ;AQUI QUIERE BORRAR
NO_NUMERAL1:
INCF CANTIDAD_DIGITOS,F
MOVF TECLAPULSADA,W
MOVWF INDF ;GUARDA EN RAM DE 0X20-0X23
INCF FSR,F ;DIRECCIONAMIENTO INDIRECTO
MOVLW '*'
CALL DATO
MOVLW .4
XORWF CANTIDAD_DIGITOS,W
BTFSS STATUS,Z
GOTO SIGUE_PULSANDO1
GOTO YA_VAN_4DIGITOS1
YA_VAN_4DIGITOS1:
CALL TECLADO
MOVWF TECLAPULSADA
MOVLW '*'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FATERISCO1
GOTO VERIFICAR_CLAVE
NO_FATERISCO1:
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO YA_VAN_4DIGITOS1
GOTO YA_SELECCIONO_USER ;AQUI QUIERE BORRAR

VERIFICAR_CLAVE:
CALL BORRAR
CALL MSJ_VERIFICANDO_CLAVE
CALL RETARDO1S
CALL RETARDO1S
MOVLW 0X20
MOVWF FSR
MOVF INDF,W
MOVWF CLAVE_P1
MOVLW 30H
SUBWF CLAVE_P1,F
SWAPF CLAVE_P1,F ;INTERCABIO LOS 4 BITS
INCF FSR,F
MOVF INDF,W
MOVWF CLAVE_P2
MOVLW 30H
SUBWF CLAVE_P2,F
MOVF CLAVE_P1,W
ADDWF CLAVE_P2,F
INCF FSR,F
MOVF INDF,W
MOVWF CLAVE_P3
MOVLW 30H
SUBWF CLAVE_P3,F
SWAPF CLAVE_P3,F ;INTERCABIO LOS 4 BITS
INCF FSR,F
MOVF INDF,W
MOVWF CLAVE_P4
MOVLW 30H
SUBWF CLAVE_P4,F
MOVF CLAVE_P3,W
ADDWF CLAVE_P4,F
MOVLW .1
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO VER_2
DESBLOQUEO_POR_PC:
MOVLW 00H
MOVWF DIRECCION_EEPROM
GOTO ENCONTRADO
VER_2:
MOVLW .2
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO VER_3
MOVLW 02H
MOVWF DIRECCION_EEPROM
GOTO ENCONTRADO
VER_3:
MOVLW .3
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO VER_4
MOVLW 04H
MOVWF DIRECCION_EEPROM
GOTO ENCONTRADO
VER_4:
MOVLW .4
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO VER_5
MOVLW 06H
MOVWF DIRECCION_EEPROM
GOTO ENCONTRADO
VER_5:
MOVLW .5
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO VER_5
MOVLW 08H
MOVWF DIRECCION_EEPROM
GOTO ENCONTRADO
;CUANDO VERIFICA LA CLAVE DEL USUARIO
ENCONTRADO: ;ES QUE YA SE LOCALIZO EN LA MEMORIA CORRESPONDIENTE

CALL LEER_EEPROM
MOVF CLAVE_P2,W
XORWF DATOS_EEPROM,W
BTFSS STATUS,Z
GOTO NO_COINCIDEN_CLAVES
INCF DIRECCION_EEPROM,F
CALL LEER_EEPROM
MOVF CLAVE_P4,W
XORWF DATOS_EEPROM,W
BTFSS STATUS,Z
GOTO NO_COINCIDEN_CLAVES
;=================================================================
; CUANDO INTRODUJO LA CLAVE CORRECTAMENTE
;=================================================================
CALL BORRAR
CALL MSJ_CLAVE_CORRECTA
CALL RETARDO1S
CALL RETARDO1S

MOVLW .1
XORWF OPCION_AGREGAR,W
BTFSS STATUS,Z
GOTO VER_SI_QUIERE_CAMBIAR_CLAVE
GOTO AGREGAR_USUARIO_NUEVO
VER_SI_QUIERE_CAMBIAR_CLAVE:
MOVLW .1
XORWF CAMBIO_DE_CLAVE,W
BTFSS STATUS,Z
GOTO SOLO_QUIERE_ABRIR
GOTO CAMBIAR_CLAVE
SOLO_QUIERE_ABRIR:
BCF INTCON,INTE ;DESACTIVAMOS INTERRUPCIONES POR RB0
BCF INTCON,TMR0IE ;DESACTIVAMOS TMR0
MOVLW .3
MOVWF INTENTOS_DE_CLAVE
CLRF ARMADA
CLRF SUENA
BCF PORTB,7
BSF PORTB,6
GOTO CONFIGURADO
AGREGAR_USUARIO_NUEVO:
MOVLW .0
MOVWF OPCION_AGREGAR
CALL BORRAR
MOVLW .5
XORWF CANTIDAD_DE_USUARIOS,W
BTFSS STATUS,Z
GOTO MENOS_DE_5_USUARIOS
GOTO YA_HAY_5_USUARIOS
MENOS_DE_5_USUARIOS:

INCF CANTIDAD_DE_USUARIOS,F
MOVF CANTIDAD_DE_USUARIOS,W
MOVWF USUARIO_SELECCIONADO

CAMBIAR_CLAVE: ;AQUI QUIERE CAMBIAR LA CLAVE DE ALGUNO DE LOS USUARIOS


MOVLW .0
MOVWF CAMBIO_DE_CLAVE ;REINICIO LA OPCION DE CAMBIAR LA CLAVE

MOVLW .1
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO USUARIO2
MOVLW 00H
MOVWF DIRECCION_EEPROM
GOTO CLAVE_PARA_NUEVO_USUARIO

USUARIO2:
MOVLW .2
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO USUARIO3
MOVLW 02H
MOVWF DIRECCION_EEPROM
GOTO CLAVE_PARA_NUEVO_USUARIO
USUARIO3:
MOVLW .3
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO USUARIO4
MOVLW 04H
MOVWF DIRECCION_EEPROM
GOTO CLAVE_PARA_NUEVO_USUARIO
USUARIO4:
MOVLW .4
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO USUARIO5
MOVLW 06H
MOVWF DIRECCION_EEPROM
GOTO CLAVE_PARA_NUEVO_USUARIO
USUARIO5:
MOVLW .5
XORWF USUARIO_SELECCIONADO,W
BTFSS STATUS,Z
GOTO USUARIO5
MOVLW 06H
MOVWF DIRECCION_EEPROM
GOTO CLAVE_PARA_NUEVO_USUARIO

CLAVE_PARA_NUEVO_USUARIO:
INTENTAR_OTRA3:
CLRF CANTIDAD_DIGITOS
CALL BORRAR
CALL MSJ_NUEVA_CLAVE
CALL SALTO_DE_LINEA
CALL MSJ_PARA_USUARIO
MOVLW 30H
ADDWF USUARIO_SELECCIONADO,W
CALL DATO
CALL TECLADO ;ESPERANDO
;empieza a meter clave
MOVWF TECLAPULSADA
BORRO_LO_ESCRITO3:
CLRF CANTIDAD_DIGITOS
CALL BORRAR
CALL MSJ_INGRESE_CLAVE
CALL SALTO_DE_LINEA_Y_CENTRAR
MOVLW 0X20 ;donde empezara a guardarse lo que pulsa
MOVWF FSR
GOTO PRIMER_PULSO3
SIGUE_PULSANDO3:
CALL TECLADO
MOVWF TECLAPULSADA
PRIMER_PULSO3:
MOVLW '*'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_ATERISCO3
;FUE ATERISCO

MOVLW .4
XORWF CANTIDAD_DIGITOS,W
BTFSS STATUS,Z
GOTO NO_HAY_CUATRO_DIGITOS3
GOTO GUARDAR_CLAVE

NO_ATERISCO3:
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_NUMERAL3
;PRESIONO NUMERAL PARA BORRAR LO QUE ESCRIBIO
GOTO BORRO_LO_ESCRITO3
NO_NUMERAL3:
INCF CANTIDAD_DIGITOS,F
MOVF TECLAPULSADA,W
MOVWF INDF ;GUARDA EN RAM DE 0X20-0X23
INCF FSR,F ;DIRECCIONAMIENTO INDIRECTO
MOVLW '*'
CALL DATO
MOVLW .4
XORWF CANTIDAD_DIGITOS,W
BTFSS STATUS,Z
GOTO SIGUE_PULSANDO3
GOTO YA_VAN_4DIGITOS3
YA_VAN_4DIGITOS3:
CALL TECLADO
MOVWF TECLAPULSADA
MOVLW '*'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FATERISCO3
GOTO GUARDAR_CLAVE
NO_FATERISCO3:
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO YA_VAN_4DIGITOS3
GOTO BORRO_LO_ESCRITO3

NO_HAY_CUATRO_DIGITOS3:
CALL BORRAR
CALL MSJ_DEBE_INTRODUCIR
CALL SALTO_DE_LINEA
CALL MSJ_4_DIGITOS
CALL RETARDO1S
CALL RETARDO1S
CALL RETARDO1S
GOTO INTENTAR_OTRA3
;=================================================================
; GUARDAR CLAVE EN EEPROM DE LA FORMA 12H 34H
;=================================================================
GUARDAR_CLAVE:
CALL BORRAR
CALL MSJ_GUARDANDO_CLAVE
;GUARDANDO CLAVE DE USUARIO 1
MOVLW 0X20
MOVWF FSR
MOVF INDF,W
MOVWF CLAVE_P1
MOVLW 30H
SUBWF CLAVE_P1,F
SWAPF CLAVE_P1,F ;INTERCABIO LOS 4 BITS
INCF FSR,F
MOVF INDF,W
MOVWF CLAVE_P2
MOVLW 30H
SUBWF CLAVE_P2,F
MOVF CLAVE_P1,W
ADDWF CLAVE_P2,F
INCF FSR,F
MOVF INDF,W
MOVWF CLAVE_P3
MOVLW 30H
SUBWF CLAVE_P3,F
SWAPF CLAVE_P3,F ;INTERCABIO LOS 4 BITS
INCF FSR,F
MOVF INDF,W
MOVWF CLAVE_P4
MOVLW 30H
SUBWF CLAVE_P4,F
MOVF CLAVE_P3,W
ADDWF CLAVE_P4,F
;DEBEMOS GUARDAR P2 Y P4
MOVF CLAVE_P2,W
MOVWF DATOS_EEPROM
CALL ESCRIBIR_EEPROM
INCF DIRECCION_EEPROM,F
MOVF CLAVE_P4,W
MOVWF DATOS_EEPROM
CALL ESCRIBIR_EEPROM
CALL RETARDO1S
CALL RETARDO1S
CALL BORRAR
CALL MSJ_CLAVE_GUARDADA
CALL RETARDO1S
CALL RETARDO1S
CALL BORRAR
CALL MSJ_USUARIO_AGREGADO
CALL RETARDO1S
CALL RETARDO1S
GOTO PUERTA_ARMADA_SIN_SONNIDO
;==============================================================
; GUARDAR EN LA EEPROM
;==============================================================
ESCRIBIR_EEPROM:
BCF STATUS,RP0
BCF STATUS,RP1
MOVF DIRECCION_EEPROM,W
BCF STATUS,RP0
BSF STATUS,RP1
MOVWF EEADR
BCF STATUS,RP0
BCF STATUS,RP1
MOVF DATOS_EEPROM,W
BCF STATUS,RP0
BSF STATUS,RP1
MOVWF EEDATA
BSF STATUS,RP0
BSF STATUS,RP1
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BTFSC EECON1,WR
GOTO $-1
BCF PIR2,EEIF
BCF EECON1,WREN
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
;=================================================================
; LEER EEPROM
;=================================================================
LEER_EEPROM:
BCF STATUS,RP0
BCF STATUS,RP1
MOVF DIRECCION_EEPROM,W
BCF STATUS,RP0
BSF STATUS,RP1
MOVWF EEADR
BSF STATUS,RP0
BSF STATUS,RP1
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
BSF STATUS,RP1
MOVF EEDATA,W
BCF STATUS,RP0
BCF STATUS,RP1
MOVWF DATOS_EEPROM
RETURN

YA_HAY_5_USUARIOS:
CALL MSJ_NO_PUEDE_AGREGAR
CALL SALTO_DE_LINEA
CALL MSJ_MAS_USUARIOS
CALL RETARDO1S
CALL RETARDO1S
GOTO PUERTA_ARMADA_SIN_SONNIDO
;================================================================
; CLAVE ERRONEA
;=================================================================

NO_COINCIDEN_CLAVES:
CALL BORRAR
CALL MSJ_CLAVE_INCORRECTA
DECFSZ INTENTOS_DE_CLAVE,F
GOTO INTENTOS_NO_ES_CERO
GOTO INTENTOS_ES_CERO
INTENTOS_NO_ES_CERO:
CALL RETARDO1S
CALL RETARDO1S
GOTO PUERTA_ARMADA_SIN_SONNIDO
INTENTOS_ES_CERO:
MOVLW .3
MOVWF INTENTOS_DE_CLAVE
CALL BORRAR
CALL MSJ_3_INTENTOS
CALL SALTO_DE_LINEA
CALL MSJ_FALLIDOS
CALL RETARDO1S
CALL RETARDO1S
MOVLW .1
MOVWF BLOQUEO2MIN
GOTO BLOQUEADO_2_MINUTOS
;==================================================================
; BLOQUE DE 2 MINUTOS
;==================================================================
BLOQUEADO_2_MINUTOS:
CALL BORRAR
CALL MSJ_BLOQUEADO_2_MIN
CALL SALTO_DE_LINEA
BCF T1CON,TMR1ON ;ACTIVO EL TIMER 1
VER_TIEMPO
DECF UNI_SEGUNDOS,F
MOVLW .255
XORWF UNI_SEGUNDOS,W
BTFSS STATUS,Z
GOTO BRINCA1
MOVLW .9
MOVWF UNI_SEGUNDOS
DECF DECENA_SEGUNDOS,F
MOVLW .255
XORWF DECENA_SEGUNDOS,W
BTFSS STATUS,Z
GOTO BRINCA1
MOVLW .5
MOVWF DECENA_SEGUNDOS
CLRF MINUTOS
BRINCA1:
MOVF UNI_SEGUNDOS,W
ADDWF DECENA_SEGUNDOS,W
ADDWF MINUTOS,W
XORLW 00H
BTFSS STATUS,Z
GOTO BRINCA2
CLRF BLOQUEO2MIN
BRINCA2:
CALL SALTO_DE_LINEA_Y_CENTRAR
MOVF MINUTOS,W
ADDLW 30H
CALL DATO
MOVLW 3AH ;':'
CALL DATO
MOVF DECENA_SEGUNDOS,W
ADDLW 30H
CALL DATO
MOVF UNI_SEGUNDOS,W
ADDLW 30H
CALL DATO
CALL RETARDO1S
MOVLW .0
XORWF BLOQUEO2MIN,W
BTFSS STATUS,Z
GOTO VER_TIEMPO
BCF T1CON,TMR1ON ;DESACTIVO EL TIMER 1
MOVLW .9
MOVWF UNI_SEGUNDOS
MOVLW .5
MOVWF DECENA_SEGUNDOS
MOVLW .1
MOVWF MINUTOS
MOVLW 0x00
MOVWF TMR1H
MOVLW 0x00
MOVWF TMR1L
MOVLW .1
MOVWF DOBLE_TIMER1
MOVLW .119
MOVWF SEGUNDOS120
GOTO PUERTA_ARMADA_SIN_SONNIDO
;==================================================================
; MENU DE CONFIGURAR
;==================================================================

PRESIONA_CONFIGURAR:
CALL BORRAR
CALL MSJ_AGREGAR_USER;OPCION 1)
CALL SALTO_DE_LINEA
CALL MSJ_CAMBIAR_CLAVE ;OPCION 2)
NO_PULSO_VALIDO:
CALL TECLADO
MOVWF TECLAPULSADA
MOVLW '1'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FUE_11
; FUE 1 QUIERE AGREGAR USUARIO
MOVLW .1
MOVWF OPCION_AGREGAR

MOVLW 31H ;ESTE ES EL USUARIO 1


MOVWF USUARIOPULSADO
GOTO VERIFICAR_USUARIO

NO_FUE_11:
MOVLW '2'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_FUE_22
;=================================================================
; MENU DE CAMBIO DE CLAVE
;================================================================
MOVLW .1
MOVWF CAMBIO_DE_CLAVE
GOTO SELECCIONAR_USUARIO
NO_FUE_22:
MOVLW '#'
XORWF TECLAPULSADA,W
BTFSS STATUS,Z
GOTO NO_PULSO_VALIDO
MOVLW .0
MOVWF OPCION_AGREGAR
GOTO PUERTA_ARMADA_SIN_SONNIDO
;=================================================================

VERIFICAR_USUARIO:

; VER SI EL USUARIO EXISTE


MOVLW 30H
SUBWF USUARIOPULSADO,F
MOVF USUARIOPULSADO,W
SUBWF CANTIDAD_DE_USUARIOS,W
BTFSS STATUS,C
GOTO HUBO_ACARREO
GOTO NO_HUBO_ACARREO
HUBO_ACARREO:
CALL BORRAR
CALL MSJ_NOEXTITE_USER
CALL RETARDO1S
GOTO PUERTA_ARMADA
NO_HUBO_ACARREO:
MOVF USUARIOPULSADO,W
MOVWF USUARIO_SELECCIONADO
GOTO YA_SELECCIONO_USER

;=================================================================
; SUBRUTINA AL PULSAR EL TECLADO
;=================================================================
TECLADO:
BSF PORTE,0 ;FILA A
BSF PORTA,1 ;FILA B
BSF PORTA,2 ;FILA C
BSF PORTA,4 ;FILA D
;-----------------------------------------------
BCF PORTE,0 ;FILA A
BTFSS PORTA,5 ;COLUMNA1
GOTO UNO
BTFSS PORTE,1 ;COLUMNA2
GOTO DOS
BTFSS PORTA,3 ;COLUMNA3
GOTO TRES
BSF PORTE,0 ;FILA A
;----------------------------------------
BCF PORTA,1 ;FILA B
BTFSS PORTA,5 ;COLUMNA1
GOTO CUATRO
BTFSS PORTE,1 ;COLUMNA2
GOTO CINCO
BTFSS PORTA,3 ;COLUMNA3
GOTO SEIS
BSF PORTA,1 ;FILA B
;----------------------------------------
BCF PORTA,2 ;FILA C
BTFSS PORTA,5 ;COLUMNA1
GOTO SIETE
BTFSS PORTE,1 ;COLUMNA2
GOTO OCHO
BTFSS PORTA,3 ;COLUMNA3
GOTO NUEVE
BSF PORTA,2 ;FILA C
;----------------------------------------
BCF PORTA,4 ;FILA D
BTFSS PORTA,5 ;COLUMNA1
GOTO ATERISCO
BTFSS PORTE,1 ;COLUMNA2
GOTO CERO
BTFSS PORTA,3 ;COLUMNA3
GOTO NUMERAL
BSF PORTA,4 ;FILA D
;----------------------------------------
GOTO TECLADO

UNO: BTFSS PORTA,5


GOTO $-1
MOVLW '1'
RETURN
DOS: BTFSS PORTE,1
GOTO $-1
MOVLW '2'
RETURN
TRES: BTFSS PORTA,3
GOTO $-1
MOVLW '3'
RETURN
CUATRO: BTFSS PORTA,5
GOTO $-1
MOVLW '4'
RETURN
CINCO: BTFSS PORTE,1
GOTO $-1
MOVLW '5'
RETURN
SEIS: BTFSS PORTA,3
GOTO $-1
MOVLW '6'
RETURN
SIETE: BTFSS PORTA,5
GOTO $-1
MOVLW '7'
RETURN
OCHO: BTFSS PORTE,1
GOTO $-1
MOVLW '8'
RETURN
NUEVE: BTFSS PORTA,3
GOTO $-1
MOVLW '9'
RETURN
ATERISCO: BTFSS PORTA,5
GOTO $-1
MOVLW '*'
RETURN
CERO: BTFSS PORTE,1
GOTO $-1
MOVLW '0'
RETURN
NUMERAL: BTFSS PORTA,3
GOTO $-1
MOVLW '#'
RETURN

;=================================================================
;CONFIGUARACION DE LA PANTALLA LCD A 4 LINEAS DE DATOS
;=================================================================
CONFIG4:
CALL RETARDO1S
MOVLW B'00110000' ;MODO 4 BITS
MOVWF PORTD
CALL INST
MOVLW B'00100000' ;MODO 2 LINEAS
MOVWF PORTD
CALL INST
MOVLW B'00100000' ;MODO 4 BITS
MOVWF PORTD
CALL INST
MOVLW B'10000000' ;MODO 2 LINEAS
MOVWF PORTD
CALL INST
;MANDAMOS EL 28 A FUNCION SET
; FUNCION SET |DB7|DB6|DB5|DB4|DB3|DB2|DB1|DB0|
; | 0 | 0 | 1 |DL | N | F | X | X | DL:"1" 8 BITS,"0" 4
BITS; N:"1" 2 LINEAS;F:"1" CARACTERES 5X10 "0" 5X7
;------------------------------------------------------------------
;MOV A,#0FH ;
MOVLW B'00000000' ;DISPLAY ON/OFF CONTROL
MOVWF PORTD
CALL INST
MOVLW B'11110000'
MOVWF PORTD
CALL INST
;---------------------------------------------
;MOV A,#06H ;ENTRY MODO SET
MOVLW B'00000000' ;MODO 4 BITS
MOVWF PORTD
CALL INST
MOVLW B'01100000' ;MODO 4 BITS
MOVWF PORTD
CALL INST
;---------------------------------------------
;MOV A,#01H BORRAR E IR A HOME
MOVLW B'00000000' ;MODO 4 BITS
MOVWF PORTD
CALL INST
MOVLW B'0001000' ;MODO 4 BITS
MOVWF PORTD
CALL INST
CALL RETARDO2mS
RETURN
QUITAR_CURSOR:
MOVLW 00H
CALL INST
MOVLW 0C0H
CALL INST
RETURN
PONER_CURSOR:
MOVLW 00H
CALL INST
MOVLW 0F0H
CALL INST
RETURN
;================================================================
; ENVIAR INTRUCCION O DATOS DE 4 BITS
;=================================================================
INST: BCF PORTD,2 ;rs=0
GOTO SIGUE ; COMENTARIO
DATO:
;envio de 4 bits sera por el puerto d el cual usa pd7,6,5,4
;ENVIO POR UART
MOVWF DATOW ;EL DATO A ENVIAR SIN FRAGMENTAR
MOVWF TXREG ;TXREG = W ENVIAMOS EL DATO
BTFSS PIR1,TXIF ;Espera hasta que transmisi�n culmin�
GOTO $-1
CALL RETARDO2mS
BCF STATUS,RP0
MOVLW 0F0H
MOVWF DATOH
MOVF DATOW,W
ANDWF DATOH,F
MOVF DATOH,W
MOVWF PORTD ;SE ENVIA EL DATO H
BSF PORTD,2 ;rs=1
BSF PORTD,3 ;E=1
CALL RETARDO40uS
BCF PORTD,3 ;E=0
;........................................................
MOVLW 0FH
MOVWF DATOL
MOVF DATOW,W
ANDWF DATOL,F
SWAPF DATOL,F ;INTERCAMBIA LOS NIBBLES
MOVF DATOL,W
MOVWF PORTD ;SE ENVIA EL DATO L
BSF PORTD,2 ;rs=1
GOTO SIGUE2
SIGUE:
MOVWF PORTD ;SE ENVIA EL DATO L
SIGUE2: BSF PORTD,3 ;E=1
CALL RETARDO40uS
BCF PORTD,3 ;E=0

RETURN
;===============================================================
; subrutinas especiales como borrar,salto de linea
;===============================================================
BORRAR:
MOVLW 00H
CALL INST
MOVLW 10H
CALL INST
CALL RETARDO2mS
RETURN
SALTO_DE_LINEA:
MOVLW 0C0H
CALL INST
MOVLW 00H
CALL INST
CALL RETARDO2mS
MOVLW 0DH;SALTO DE LINEA EN X-CTU
MOVWF TXREG ;TXREG = W ENVIAMOS EL DATO
BTFSS PIR1,TXIF ;Espera hasta que transmisi�n culmin�
GOTO $-1
RETURN
SALTO_DE_LINEA_Y_CENTRAR:
MOVLW 0C0H
CALL INST
MOVLW 50H
CALL INST
CALL RETARDO2mS
MOVLW 0DH;SALTO DE LINEA EN X-CTU
MOVWF TXREG ;TXREG = W ENVIAMOS EL DATO
BTFSS PIR1,TXIF ;Espera hasta que transmisi�n culmin�
goto $-1
RETURN

;==================================================================
;RETARDOS
;==================================================================
RETARDO1S
MOVLW .100
MOVWF CONT3
CICLO3 MOVLW .97
MOVWF CONT2
CICLO2
MOVLW .33
MOVWF CONT
CICLO
DECFSZ CONT,F
GOTO CICLO
DECFSZ CONT2,F
GOTO CICLO2
DECFSZ CONT3,F
GOTO CICLO3
RETURN
;------------------------------------------------------------------
RETARDO2mS
MOVLW .20 ; M=19.4 ;SI N=33 ENTONCES MICROSEGUNDOS ES CON M=(T-
1)/103; T=2000 uSEG
MOVWF CONT2
CICLO22
MOVLW .35 ;N
MOVWF CONT
CICLO11
DECFSZ CONT,F
GOTO CICLO11
DECFSZ CONT2,F
GOTO CICLO22
RETURN
RETARDO40uS
MOVLW .100
MOVWF CONT
DECFSZ CONT,F
GOTO $-1
RETURN
RETARDO500uS
MOVLW .2 ; M=19.4 ;SI N=33 ENTONCES MICROSEGUNDOS ES CON M=(T-
1)/103; T=2000 uSEG
MOVWF CONT2
CICLO23
MOVLW .100 ;N
MOVWF CONT
DECFSZ CONT,F
GOTO $-1
DECFSZ CONT2,F
GOTO CICLO23
RETURN
;==================================================================
; MENSAJES
; EVITAMOS EL USO DE TABLAS A PESAR DE QUE SEAN MAS LINEAS
;==================================================================
MSJ_CLAVE_USER_1:
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW '1'
CALL DATO
RETURN
MSJ_CLAVE_GUARDADA:
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'A'
CALL DATO
RETURN

MSJ_CAMBIAR_CLAVE:
MOVLW '2'
CALL DATO
MOVLW ')'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'B'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO

RETURN
MSJ_AGREGAR_USER:
MOVLW '1'
CALL DATO
MOVLW ')'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO

RETURN
MSJ_3_INTENTOS:
MOVLW '3'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'S'
CALL DATO
RETURN
MSJ_NUEVA_CLAVE:
MOVLW 'N'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
RETURN
MSJ_FALLIDOS:
MOVLW 'F'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'S'
CALL DATO
RETURN
MSJ_BLOQUEADO_2_MINUTOS:
MOVLW 'B'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'Q'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW '2'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'N'
CALL DATO
RETURN
MSJ_CLAVE_INCORRECTA:
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
RETURN

MSJ_CLAVE_CORRECTA:
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
RETURN
MSJ_PUERTA_ABIERTA:
MOVLW 'P'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'B'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
RETURN
MSJ_NOEXTITE_USER:
MOVLW 'U'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'X'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'E'
CALL DATO
RETURN
MSJ_PUERTA_CERRADA:
MOVLW 'P'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'A'
CALL DATO
RETURN
MSJ_DESARMAR:
MOVLW '1'
CALL DATO
MOVLW ')'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
RETURN
MSJ_CONFIGURAR:
MOVLW '2'
CALL DATO
MOVLW ')'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'F'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'N'
CALL DATO
RETURN
MSJ_USUARIO:
MOVLW 'S'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'C'
CALL DATO

MOVLW ' '


CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'S';8
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'I';
CALL DATO
MOVLW 'O'
CALL DATO
RETURN
MSJ_VERIFICANDO_CLAVE:
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'F'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
RETURN
MSJ_USUARIO_AGREGADO:
MOVLW 'U'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'F'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'R'
CALL DATO
RETURN
MSJ_PARA_USUARIO:
MOVLW 'P'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
RETURN
MSJ_NO_PUEDE_AGREGAR:

MOVLW 'N'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'P'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
RETURN
MSJ_MAS_USUARIOS:
MOVLW 'M'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'S'
CALL DATO
RETURN
MSJ_PUERTA_ARMADA:
MOVLW 'P'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'A'
CALL DATO
RETURN
MSJ_BLOQUEADO_2_MIN:
MOVLW 'B'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'Q'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW '2'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'N'
CALL DATO
RETURN
MSJ_BIENVENIDO:
MOVLW 'B'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
RETURN
MSJ_PARA_AMAR:
MOVLW '*'
CALL DATO
MOVLW ')'
CALL DATO
MOVLW 'P'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
RETURN
MSJ_INGRESE_CLAVE:
MOVLW ' '
CALL DATO
MOVLW ' '
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
RETURN
MSJ_DEBE_INTRODUCIR:
MOVLW 'D'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'B'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'R'
CALL DATO
RETURN
MSJ_4_DIGITOS:
MOVLW '4'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'G'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'S'
CALL DATO
RETURN
MSJ_GUARDANDO_CLAVE:
MOVLW 'G'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'V'
CALL DATO
MOVLW 'E'
CALL DATO
RETURN

END

Vous aimerez peut-être aussi