Vous êtes sur la page 1sur 21

C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.

asm

;INSTITUTO POLITECNICO NACIONAL


;CENTRO DE ESTUDIOS CIENTIFICOS Y TECNOLOGICOS NUM. 9
;JUAN DE DIOS BATIZ
;
;PROYECTO AULA
;
;SAFE HOUSE
;
;GRUPO: 6IM1
;
;ALVARADO GÓMEZ RICARDO
;ESPINOSA DE LOS MONTEROS ALFARAO DIEGO
;LUCIANO PÉREZ SERGIO
;NÚÑEZ RAMÍREZ DIANA BERTHA
;SUÁREZ VÁZQUEZ KEVIN
;CONSULTOR: TORRES GONZÁLEZ ERICK RODRIGO

;---------------------------------------------------------------------------------------------

LIST P=16F877A
#INCLUDE "C:\PROGRAM FILES (X86)\MICROCHIP\MPASM SUITE\P16F877A.INC";
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF;
;---------------------------------------------------------------------------------------------------
; FOSC = 4MHZ.
;CICLO DE TRABAJO DEL PIC = (1/FOSC)*4 = 1US.
;T INT =(256-TMR0)*(P)*((1/40000000)*4) = 1 MS;// TIEMPO DE INTERRUPCION.
;TMR0=131, P=8.
;FREC INT = 1/T INT=874 HZ.
;---------------------------------------------------------------------------------------------------
;VARIABLES EN RAM

RESP_W EQU 0X20; VARIABLE QUE RESPALDARÁ AL REGISTRO W


RESP_STATUS EQU 0X21; VARIABLE QUE RESPALDARÁ AL REGISTRO STATUS
RES_PCLATH EQU 0X22; VARIABLE QUE RESPALDARÁ AL REGISTRO PCLATH
RES_FSR EQU 0X23; VARIABLE QUE RESPALDARÁ AL REGISTRO FSR
PRESC_1 EQU 0X24; VARIABLE QUE FUNCIONARÁ COMO MULTIPLICADOR
PRESC_2 EQU 0X25; VARIABLE QUE FUNCIONARÁ COMO MULTIPLICADOR
BANDERAS EQU 0X26; REGISTRO CUYOS PINES SE USAN COMO BANDERAS
MS_CONTADOR EQU 0X27; CONTADOR QUE REGISTRA LOS MILISEGUNDOS
VAR_TEC EQU 0X2B;
TEC_OPRI EQU 0X2C;

RAYO EQU 0X2E;


CONTADOR2 EQU 0X32;
CONTADOR1 EQU 0X33;
TEMPORAL EQU 0X34;
SEGURO EQU 0X35;
CONT_SEGUNDOS EQU 0X36;
CONT_MIN EQU 0X37;
CONTRA1 EQU 0X38;
CONTRA2 EQU 0X39;
CONTRA3 EQU 0X3A;
CONTRA4 EQU 0X3B;
INTENTO EQU 0X3C;
CERRADO_OPC EQU 0X3D;
VUELTA EQU 0X3E

;---------------------------------------------------------------------------------------------------

;DEF. DE CONSTANTES A UTILIZAR.


;COD. DE CARACTERES ALFANUMERICOS EN 7 SEGMENTOS.

L EQU .15;
M EQU .59;.3;
N EQU .191;
;NUM_ITERA EQU .10;
;DEC EQU 0X35;
NO_HAYTECLA EQU 0XF0;
TEC_1 EQU 0XE0;
TEC_2 EQU 0XD0;
TEC_3 EQU 0XB0;
1
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

TEC_A EQU 0X70;


TEC_4 EQU 0XE0;
TEC_5 EQU 0XD0;
TEC_6 EQU 0XB0;
TEC_B EQU 0X70;
TEC_7 EQU 0XE0;
TEC_8 EQU 0XD0;
TEC_9 EQU 0XB0;
TEC_C EQU 0X70;
TEC_AST EQU 0XE0;
TEC_0 EQU 0XD0;
TEC_GATO EQU 0XB0;
TEC_D EQU 0X70;

REN1 EQU .0;


REN2 EQU .1;
REN3 EQU .2;
REN4 EQU .3;

;-------------------------------------------------------------------------------------------------

;DEF. DE PTOS. F/0

;PUERTO A
RS_LCD EQU .0; PIN DE CONTROL R/S DE LA LCD
E_LCD EQU .1; PIN DE CONTROL DE ENABLE DE LA LCD
SIN_USORA2 EQU .2; PIN 2 DEL PUERTO D
SIN_USORA3 EQU .3; PIN 3 DEL PUERTO D
SIN_USORA4 EQU .4; PIN 4 DEL PUERTO D

PROG_A EQU B'111100'; PROGRAMACIÓN INICIAL DEL PUERTO A COMO ENTRADAS

;PUERTO B
REN_1 EQU .0; //BIT D0 DE LA LCD.
REN_2 EQU .1; //BIT D0 DE LA LCD.
REN_3 EQU .2; //BIT D0 DE LA LCD.
REN_4 EQU .3; //BIT D0 DE LA LCD.
COL_1 EQU .4; //BIT D0 DE LA LCD.
COL_2 EQU .5; //BIT D0 DE LA LCD.
COL_3 EQU .6; //BIT D0 DE LA LCD.
COL_4 EQU .7; //BIT D0 DE LA LCD.

PROG_B EQU B'11110000'; PROGRAMACIÓN INICIAL DEL PUERTO B COMO SALIDAS

;PUERTO C
D0_LCD EQU .0; //BIT D0 DE LA LCD.
D1_LCD EQU .1; //BIT D0 DE LA LCD.
D2_LCD EQU .2; //BIT D0 DE LA LCD.
D3_LCD EQU .3; //BIT D0 DE LA LCD.
D4_LCD EQU .4; //BIT D0 DE LA LCD.
D5_LCD EQU .5; //BIT D0 DE LA LCD.
D6_LCD EQU .6; //BIT D0 DE LA LCD.
D7_LCD EQU .7; //BIT D0 DE LA LCD.

PROG_C EQU B'00000000';PROGRAMACIÓN INICIAL DEL PUERTO C COMO ENTRADAS

;PUERTO D
AZUL_ON1 EQU .0; PIN DE CONTROL R/S DE LA LCD
AZUL_0N2 EQU .1; PIN DE CONTROL DE ENABLE DE LA LCD
ROJO_ON1 EQU .2; PIN 2 DEL PUERTO D
ROJO_ON2 EQU .3; PIN 3 DEL PUERTO D
VERDE_ON1 EQU .4; PIN DE CONTROL R/S DE LA LCD
VERDE_0N2 EQU .5; PIN DE CONTROL DE ENABLE DE LA LCD
NEGRO_ON1 EQU .6; PIN 2 DEL PUERTO D
NEGRO_ON2 EQU .7; PIN 3 DEL PUERTO D

PROG_D EQU B'00000000';PROGRAMACIÓN INICIAL DEL PUERTO D

;PUERTO E
SIN_USORE0 EQU .0; PIN 0 DEL PUERTO E
SIN_USORE1 EQU .1; PIN 1 DEL PUERTO E
2
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

LED_ROJO EQU .2; LED DE OPERACION

PROG_E EQU B'000';PROGRAMACIÓN INICIAL DEL PUERTO E

;----------------------------------------------------------------------------------------------

;BANDERAS DEL REGISTRO BANDERA

FLG_INT EQU .0; PIN QUE INDICA LA INTERRUPCION DE 1 SEG


SIN_BD1 EQU .1; PIN 1 DEL REGISTRO BANDERAS
SIN_BD2 EQU .2; PIN 2 DEL REGISTRO BANDERAS
SIN_BD3 EQU .3; PIN 3 DEL REGISTRO BANDERAS
SIN_BD4 EQU .4; PIN 4 DEL REGISTRO BANDERAS
SIN_BD5 EQU .5; PIN 5 DEL REGISTRO BANDERAS
SIN_BD6 EQU .6; PIN 6 DEL REGISTRO BANDERAS
SIN_BD7 EQU .7; PIN 7 DEL REGISTRO BANDERAS

;------------------------------------------------------------------------------------------------
;VECTOR RESET
;
ORG 0000H; DIRECCIÓN DE RESET
VEC_RESET CLRF PCLATH; SE ASEGURA LA PAGINA 0 DE MEMORIA
GOTO PROG_PRIN; VA A PROGRAMA PRINCIPAL

;------------------------------------------------------------------------------------------------

;VECTOR INTERRUPCION
;
ORG 0X0004;; DIRECCIÓN DE INTERRUPCIÓN

;SE REALIZA UN RESPALDO DE LOS REGISTROS PARA PODER REGRESAR


;AL MISMO ESTADO EN EL QUE ESTABAMOS ANTES DE LA INTERRUPCION

VEC_INT MOVWF RESP_W; SE RESPALDA W


MOVF STATUS,W;
MOVWF RESP_STATUS; SE RESPALDA STATUS
CLRF STATUS; SE INICIALIZA STATUS
MOVF PCLATH,W;
MOVWF RES_PCLATH; SE RESPALDA EL PCLATH
CLRF PCLATH; SE INICIALIZA PCLATH
MOVF FSR,W;
MOVWF RES_FSR; SE RESPALDA FSR

BTFSC INTCON,T0IF; SE VERIFICA SI HAY UNA INTERRUPCIÓN POR TMR0


CALL INT_TMR0;SI HUBO UNA INTERRUPCIÓN SE LLAMA A RUT_INT

SAL_INT MOVLW .131; SI NO HUBO INTERRUPCIÓN SE CARGA .131 A TMR0


MOVWF TMR0;

MOVF RES_FSR,W; SE REGRESA AL ESTADO PREVIO REGRESANDO LOS RESPALDOS


MOVWF FSR;
MOVF RES_PCLATH,W;
MOVWF PCLATH;
MOVF RESP_STATUS,W;
MOVWF STATUS;
MOVF RESP_W,W;

RETFIE;
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________

INT_TMR0 INCF MS_CONTADOR,F; INCREMENTA EL CONTADOR DE MILISEGUNDOS


INCF PRESC_1,F; INCRIMENTA EL MULTIPLICADOR

MOVLW .100; SE COMPARA SI EL MULTIPLICADOR1 LLEGA A 100


;DE LO CONTRARIO LIMPIA EL T0IF Y SALE DE LA RUTINA
XORWF PRESC_1,W;
BTFSC STATUS,Z;
GOTO RUT1_INT;
GOTO FIN_SUBINT;
3
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

RUT1_INT CLRF PRESC_1; SI EL MULTIPLICADOR 1 LLEGO A 100 AHORA SE COMPARA


;EL MULTIPLICADOR 2 HASTA QUE LLEGUE A 10
;ASÍ SE TENDRÁ EN TOTAL 1000 INTERRUPCIONES DE 1 MILISEGUNDO
INCF PRESC_2,F;
MOVLW .10;
XORWF PRESC_2,W;
BTFSS STATUS,Z;
GOTO FIN_SUBINT;
CLRF PRESC_1;
CLRF PRESC_2;

INCF CONT_SEGUNDOS,F

MOVLW .60;
XORWF CONT_SEGUNDOS,W;
BTFSS STATUS,Z;
GOTO FIN_SUBINT;
CLRF PRESC_1;
CLRF PRESC_2;
CLRF CONT_SEGUNDOS;

FIN_SUBEXT BSF BANDERAS,FLG_INT;


INCF CONT_MIN
FIN_SUBINT BCF INTCON,T0IF;
RETURN;
;:::::::::::::::::

;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________

;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________

BARRIDO_TEC BSF PORTB,REN_4;


NOP
RENGLON_1 BCF PORTB,REN_1;

MOVF PORTB,W;
MOVWF VAR_TEC;
MOVLW 0XF0;
ANDWF VAR_TEC,F;
MOVLW NO_HAYTECLA;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO RENGLON_2;

MOVLW TEC_1;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC1;

MOVLW TEC_2;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC2;

MOVLW TEC_3;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC3;

RENGLON_2 BSF PORTB,REN_1;


NOP
BCF PORTB,REN_2;

MOVF PORTB,W;
4
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

MOVWF VAR_TEC;
MOVLW 0XF0;
ANDWF VAR_TEC,F;
MOVLW NO_HAYTECLA;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO RENGLON_3;

MOVLW TEC_4;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC4;

MOVLW TEC_5;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC5;

MOVLW TEC_6;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC6;

RENGLON_3 BSF PORTB,REN_2;


NOP
BCF PORTB,REN_3;

MOVF PORTB,W;
MOVWF VAR_TEC;
MOVLW 0XF0;
ANDWF VAR_TEC,F;
MOVLW NO_HAYTECLA;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO RENGLON_4;

MOVLW TEC_7;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC7;

MOVLW TEC_8;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC8;

MOVLW TEC_9;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TEC9;

RENGLON_4 BSF PORTB,REN_3;


NOP
BCF PORTB,REN_4;

MOVF PORTB,W;
MOVWF VAR_TEC;
MOVLW 0XF0;
ANDWF VAR_TEC,F;
MOVLW NO_HAYTECLA;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO BARRIDO_TEC;

MOVLW TEC_AST;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TECASTERISCO;

MOVLW TEC_0;
SUBWF VAR_TEC,W;
5
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

BTFSC STATUS,Z;
GOTO ES_TEC0;

MOVLW TEC_GATO;
SUBWF VAR_TEC,W;
BTFSC STATUS,Z;
GOTO ES_TECGATO;

GOTO BARRIDO_TEC;
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________

ES_TEC0 MOVLW .0;


MOVWF TEC_OPRI;
RETURN;

ES_TEC1 MOVLW .1;


MOVWF TEC_OPRI;
RETURN;

ES_TEC2 MOVLW .2;


MOVWF TEC_OPRI;
RETURN;

ES_TEC3 MOVLW .3;


MOVWF TEC_OPRI;
RETURN;

ES_TEC4 MOVLW .4;


MOVWF TEC_OPRI;
RETURN;

ES_TEC5 MOVLW .5;


MOVWF TEC_OPRI;
RETURN;

ES_TEC6 MOVLW .6;


MOVWF TEC_OPRI;
RETURN;

ES_TEC7 MOVLW .7;


MOVWF TEC_OPRI;
RETURN;

ES_TEC8 MOVLW .8;


MOVWF TEC_OPRI;
RETURN;

ES_TEC9 MOVLW .9;


MOVWF TEC_OPRI;
RETURN;

ES_TECGATO MOVLW .35;#;


MOVWF TEC_OPRI;
RETURN;

ES_TECASTERISCO MOVLW .12;*;


MOVWF TEC_OPRI;
RETURN;
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________
;
-------------------------------------------------------------------------------------------------------
--------------------------------------------------

; =====================================================
; = SUBRUTINA RETARDO (MS) PARA MOSTRAR EL TIEMPO =
; =====================================================
;
6
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

RETARDO_MEDIO CLRF CONT_SEGUNDOS


VIENTO MOVLW .1
XORWF CONT_SEGUNDOS,W
BTFSS STATUS,Z
GOTO VIENTO
RETURN;

;-------------------------------------------------------------------------------------------------
;SUBRUTINA DE INICIO
PROG_INI BSF STATUS,RP0; SELEC. EL BCO. 1 DE RAM
MOVLW 0X02; SE ENVIA UN 0X82 AL OPTION REG
MOVWF OPTION_REG ^0X80; CON ESTO EL OPTIONREG CONFIGURA SU PRESCALADOR
MOVLW PROG_A; SE CONFIGURA EL PUERTO A COMO LO ESTABLECIMOS AL INICIO
MOVWF TRISA ^0X80;
MOVLW PROG_B; SE CONFIGURA EL PUERTO B COMO LO ESTABLECIMOS AL INICIO
MOVWF TRISB ^0X80;
MOVLW PROG_C; SE CONFIGURA EL PUERTO C COMO LO ESTABLECIMOS AL INICIO
MOVWF TRISC ^0X80;
MOVLW PROG_D; SE CONFIGURA EL PUERTO D COMO LO ESTABLECIMOS AL INICIO
MOVWF TRISD ^0X80;
MOVLW PROG_E; SE CONFIGURA EL PUERTO E COMO LO ESTABLECIMOS AL INICIO
MOVWF TRISE ^0X80;
MOVLW 0X06; CARGANDO UN 0X06 SE CONFIGURA LAS ENTRADAS Y SALIDAS COMO
DIGITALES
MOVWF ADCON1 ^0X80;
BCF STATUS,RP0; REGRESA AL BANCO 0 DE RAM
NOP;

MOVLW 0X00;
MOVWF SEGURO;
MOVWF CONT_SEGUNDOS;
MOVWF CONT_MIN;
MOVWF CONTRA1;
MOVWF CONTRA2;
MOVWF CONTRA3;
MOVWF CONTRA4;
MOVWF INTENTO;
MOVWF CERRADO_OPC;
MOVWF TEC_OPRI

MOVLW 0XA0; CARGANDO UN 0XA0 AL INTCON SE


MOVWF INTCON;
MOVLW .131; SE CARGA UN .131 AL TMR0 (CALCULADO)
MOVWF TMR0;
CLRF BANDERAS; SE INICIALIZA EL REGISTRO BANDERAS

CLRF PORTE;
CLRF PORTC; SE INICIALIZA EL PUERTO C
MOVLW 0X03; SE INICIALIZA EL PUERTO D
MOVWF PORTA;
MOVLW 0X0F
MOVWF PORTB; SE INICIALIZA EL PUERTO B
RETURN; REGRESA

;-----------------------------------------------------------------------------------------------
;SUBRUTINA DE INICIALIZACION DE LA LCD
INI_LCD BCF PORTA,RS_LCD;

MOVLW 0X38;
MOVWF PORTC;
CALL PUL_E;

MOVLW 0X0C;
MOVWF PORTC;
CALL PUL_E;

MOVLW 0X01;
MOVWF PORTC;
CALL PUL_E;
7
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

MOVLW 0X06;
MOVWF PORTC;
CALL PUL_E;

MOVLW 0X80;
MOVWF PORTC;
CALL PUL_E;3C

BSF PORTA,RS_LCD;

RETURN;

;---------------------------------------------------------------------------------------------------

;PROGRAMA PRINCIPAL

PROG_PRIN CALL PROG_INI;


CALL INI_LCD; SUBRUTINA PARA INCIALIZAR LA LCD

LOOP_PRIN BCF PORTD,.0


MOVLW 0X81; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0
MOVLW 'C';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'T'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'S'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ':'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
NOP

INCF INTENTO,F
CALL BARRIDO_TEC;
MOVF TEC_OPRI,W;
MOVWF CONTRA1;
;CLRF TEC_OPRI
CALL RETAR_TEC
MOVLW '*'
MOVWF PORTC;
CALL SD_LCD;
NOP
;::::::::::::::::::::::::::::::::::
8
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

CALL BARRIDO_TEC;
MOVF TEC_OPRI,W;
MOVWF CONTRA2;
;CLRF TEC_OPRI;
CALL RETAR_TEC
MOVLW '*'
MOVWF PORTC;
CALL SD_LCD;
NOP

;:::::::::::::::::::::::::::::::::

CALL BARRIDO_TEC;
MOVFW TEC_OPRI;
MOVWF CONTRA3;
;CLRF TEC_OPRI
CALL RETAR_TEC
MOVLW '*'
MOVWF PORTC;
CALL SD_LCD;
NOP

;:::::::::::::::::::::::::::::::::

CALL BARRIDO_TEC;
MOVFW TEC_OPRI;
MOVWF CONTRA4;
;CLRF TEC_OPRI
CALL RETAR_TEC
MOVLW '*'
MOVWF PORTC;
CALL SD_LCD;
NOP

;MOVLW .4
;MOVWF CONTRA1
;MOVLW .7
;MOVWF CONTRA2
;MOVLW .9
;MOVWF CONTRA3
;MOVLW .2
;MOVWF CONTRA4

MOVLW .4;
SUBWF CONTRA1,W;
BTFSS STATUS,Z;
GOTO EQUIVOCADO
MOVLW .7;
SUBWF CONTRA2,W;
BTFSS STATUS,Z;
GOTO EQUIVOCADO
MOVLW .9;
SUBWF CONTRA3,W;
BTFSS STATUS,Z;
GOTO EQUIVOCADO
MOVLW .2;
SUBWF CONTRA4,W;
BTFSS STATUS,Z;
GOTO EQUIVOCADO
GOTO ACIERTO

EQUIVOCADO MOVLW 0X81; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER


MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
MOVLW 'C';
9
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B


CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'T'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'S'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' ';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

BCF PORTD,.0
MOVLW 0XC1; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW 'I';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'C'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
10
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD


MOVLW 'E'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'C'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'T'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

CALL PIERDE_5S
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
BCF PORTD,.0
MOVLW 0X81; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW ' ';


MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

BCF PORTD,.0
MOVLW 0XC1; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
11
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD


BSF PORTD,.0

MOVLW ' ';


MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

MOVLW .5;
XORWF INTENTO,W;
BTFSC STATUS,Z;
CALL BLOQUEO_30MIN
BCF PORTD,.0
MOVLW 0X81; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW ' ';


MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
12
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD


MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

BCF PORTD,.0
MOVLW 0XC1; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW ' ';


MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
13
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

MOVLW ' '


MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
GOTO LOOP_PRIN

ACIERTO BSF PORTE,.1;

MOVLW 0X81; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER


MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
MOVLW 'C';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'T'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'S'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' ';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 0XC1; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
14
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
MOVLW 'C'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'R'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'C'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'T'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'A'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
CALL PIERDE_5S
MOVLW 0X80; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
MOVLW 'B';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'I'
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'V'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'I'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'D'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW '@'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
BCF PORTD,.0

MOVLW 0XC0; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER


MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0
MOVLW ' ';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
15
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD


MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

CALL ABRE_MOTOR
BCF PORTD,.0
MOVLW 0X80; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW ' ';


MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
16
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B


CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

BCF PORTD,.0
MOVLW 0XC0; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW ' ';


MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
17
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD


MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
CALL ESPERA_CERRADO
CLRF SEGURO
CLRF INTENTO
CLRF CONTRA1
CLRF CONTRA2
CLRF CONTRA3
CLRF CONTRA4
GOTO LOOP_PRIN

;----------------------------------------------------------------------------------------------
;SUBRUTINA DE BLOQUEO DE TECLADO
BLOQUEO_30MIN BCF PORTD,.0
MOVLW 0X81; SE COLOCA LA DIRECCIÓN DONDE SE COLOCARÁ EL PRIMER CARACTER
MOVWF PORTC;
CALL COMMAND; SUBRUTINA QUE MANDA EL COMANDO EN EL PUERTO B A LA LCD
BSF PORTD,.0

MOVLW 'B';
MOVWF PORTC; SE CARGA UNA "E" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'L'
MOVWF PORTC; SE CARGA UNA "Q" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UNA "U" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'Q'
MOVWF PORTC; SE CARGA UNA "I" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'U'
MOVWF PORTC; SE CARGA UNA "P" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'E'
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'O'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW '3'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW '0'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "0" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'M'
MOVWF PORTC; SE CARGA UN " " EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'I'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW 'N'
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD
MOVLW ' '
MOVWF PORTC; SE CARGA UN "5" EN ASCII AL PUERTO B
CALL SD_LCD; SUBRUTINA QUE MANDA EL DATO EN EL PUERTO B A LA LCD

CLRF CONT_MIN
18
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

FUEGO MOVLW .30


XORWF CONT_MIN,W
BTFSS STATUS,Z
GOTO FUEGO
RETURN;
;----------------------------------------------------------------------------------------------
;SUBRUTINA QUE ESPERA EL BOTÓN DE CERRADO
ESPERA_CERRADO CALL BARRIDO_TEC
MOVF TEC_OPRI,W
MOVWF CERRADO_OPC
MOVLW .35
XORWF CERRADO_OPC,W
BTFSS STATUS,Z
GOTO ESPERA_CERRADO
CALL CIERRA_MOTOR
RETURN

;----------------------------------------------------------------------------------------------
;SUBRUTINA QUE CIERRA EL MOTOR
ABRE_MOTOR CLRF VUELTA
LOOP INCF VUELTA
MOVLW 0X05
MOVWF PORTD
CALL RETARDO_10
MOVLW 0X09
MOVWF PORTD
CALL RETARDO_10
MOVLW 0X0A
MOVWF PORTD
CALL RETARDO_10
MOVLW 0X06
MOVWF PORTD
CALL RETARDO_10
MOVLW .52
XORWF VUELTA,W
BTFSS STATUS,Z
GOTO LOOP
MOVLW .0
MOVWF PORTD
RETURN

;----------------------------------------------------------------------------------------------
;SUBRUTINA PARA ABRIR MOTOR
CIERRA_MOTOR CLRF VUELTA
LOOP_1 INCF VUELTA
MOVLW 0X06
MOVWF PORTD
CALL RETARDO_10
MOVLW 0X0A
MOVWF PORTD
CALL RETARDO_10
MOVLW 0X09
MOVWF PORTD
CALL RETARDO_10
MOVLW 0X05
MOVWF PORTD
CALL RETARDO_10
MOVLW .52
XORWF VUELTA,W
BTFSS STATUS,Z
GOTO LOOP_1
MOVLW .0
MOVWF PORTD
RETURN

;----------------------------------------------------------------------------------------------
;SUBRUTINA PIERDE 5 SEGUNDOS
PIERDE_5S CLRF CONT_SEGUNDOS
AGUA MOVLW .2
XORWF CONT_SEGUNDOS,W
BTFSS STATUS,Z
19
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

GOTO AGUA
RETURN;
;----------------------------------------------------------------------------------------------
RETARDO_10 CLRF MS_CONTADOR
SILLA MOVLW .2
XORWF MS_CONTADOR,W
BTFSS STATUS,Z
GOTO SILLA
RETURN;
;------------------------------------------------------------------------------------------------------

RETAR_TEC CLRF MS_CONTADOR


MESA MOVLW .250
XORWF MS_CONTADOR,W
BTFSS STATUS,Z
GOTO MESA
RETURN;
;--------------------------------------------------------------------------------------------------
; SUBRUTINA DE 10 MILISEGUNDOS PARA ENABLE

PUL_E BCF PORTA,E_LCD;


CLRF MS_CONTADOR;

WAIT_E MOVLW .10;


XORWF MS_CONTADOR,W;
BTFSS STATUS,Z;
GOTO WAIT_E;
BSF PORTA,E_LCD;
CLRF MS_CONTADOR;

RETURN;

;-------------------------------------------------------------
;SUBRUTINA PARA ENVIAR COMANDO A LA LCD

COMMAND BCF PORTA,RS_LCD;


NOP;
BCF PORTA,E_LCD;
CLRF MS_CONTADOR;

WAIT_COMMAND MOVLW .10;


XORWF MS_CONTADOR,W;
BTFSS STATUS,Z;
GOTO WAIT_COMMAND;
BSF PORTA,E_LCD;
CLRF MS_CONTADOR;

RETURN;

;-----------------------------------------------------------------------------------------------
;SUBRUTINA PARA ENVIAR DATO EN ASCII A LA LCD
SD_LCD BSF PORTA,RS_LCD;
NOP;
BCF PORTA,E_LCD;
CLRF MS_CONTADOR;

WAIT_SD MOVLW .10;


XORWF MS_CONTADOR,W;
BTFSS STATUS,Z;
GOTO WAIT_SD;
BSF PORTA,E_LCD;
CLRF MS_CONTADOR;

RETURN;

;-----------------------------------------------------------------------------------------------
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________

20
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm

end

21

Vous aimerez peut-être aussi