Académique Documents
Professionnel Documents
Culture Documents
asm
;---------------------------------------------------------------------------------------------
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
;---------------------------------------------------------------------------------------------------
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
;-------------------------------------------------------------------------------------------------
;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
;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.
;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.
;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
;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
;----------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------
;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
RETFIE;
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________
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;
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________
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;
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;
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;
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;
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________
; =====================================================
; = SUBRUTINA RETARDO (MS) PARA MOSTRAR EL TIEMPO =
; =====================================================
;
6
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm
;-------------------------------------------------------------------------------------------------
;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
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
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
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 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
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
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
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
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
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
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
;----------------------------------------------------------------------------------------------
;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
;----------------------------------------------------------------------------------------------
;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;
;------------------------------------------------------------------------------------------------------
RETURN;
;-------------------------------------------------------------
;SUBRUTINA PARA ENVIAR COMANDO A LA LCD
RETURN;
;-----------------------------------------------------------------------------------------------
;SUBRUTINA PARA ENVIAR DATO EN ASCII A LA LCD
SD_LCD BSF PORTA,RS_LCD;
NOP;
BCF PORTA,E_LCD;
CLRF MS_CONTADOR;
RETURN;
;-----------------------------------------------------------------------------------------------
;______________________________________________________________________________________________________
_______________________________________________________________________________________________________
______________________________________________
20
C:\Users\Ricardo AG\Desktop\Cerrojo P.A\Cerradura.asm
end
21