Académique Documents
Professionnel Documents
Culture Documents
toma de decisiones con este resultado. Las restas se hacen entre los registros donde se
guardaron previamente los valores de los caracteres tecleados y los valores de los
caracteres que se deben teclear para desbloquear el seguro electrnico (09030762);
comenzando con el primer carcter tecleado se realiza la resta, cuando el carcter es el
correcto simplemente se continua a realizar el mismo proceso de comparacin pero para
el siguiente carcter inmediato, en caso de que el carcter que se compara no concuerda
con el establecido para el acceso una variable auxiliar incrementa en uno, esto se hace
por cada carcter errneo que se detecte. Con esta ultima variable auxiliar que lleva el
conteo de los caracteres errneos se toma la decisin si el cdigo tecleado es correcto o
no. Esto se realiza mediante la activacin de la bandera de cero al mover este registro a
la misma posicin que esta, as si su valor es de cero (ningn carcter errneo) se
direcciona al mensaje de CDIGO CORRECTO!, pero si su valor no es de cero (al
menos un carcter errneo) se direcciona al mensaje ERROR!.
La parte del control de la LCD se trata bsicamente de la programacin de la inicializacin
que requiere este dispositivo, es decir, los comandos que necesita recibir antes que
cualquier otro para que funcione adecuadamente. Tambin se manejan algunas funciones
que nos permiten el mandar comando e informacin (cada caso en una funcin diferente)
hacia la LCD para que sea mostrada o realice alguna funcin como saltar de lnea, borrar
la pantalla, desaparecer el cursor, etc., esto se logra con la activacin y desactivacin
secuencial de los pines designados para mandar seales a las entradas E y RS de la
LCD. Cabe mencionar que las rutinas de tiempo programadas fueron para tener 40s,
100, 1ms, 5ms, 15ms y 261, 892 s. Los primeros son empleados para dar los tiempos
que requiere el LCD en los comandos de su inicializacin mientras que el ltimo
mencionado se deriva de una rutina de tiempo creada para mantener en la LCD durante
un tiempo algn mensaje que se muestre, como por ejemplo el mensaje de
BIENVENIDO mostrado cada vez que se enciende o reinicia el PIC o el mensaje de
PROCESANDO que aparece posteriormente a ingresar los 8 caracteres para el
cdigo de acceso.
Cdigo.
#INCLUDE
<P16F84.INC>
__CONFIG _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_OFF
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
CBLOCK 0CH
CMD
DATO
VAR1
VAR2
VAR3
FILA
COLUMNA
COUNT
BUS
RS
E
R_LED
G_LED
COL1
COL2
COL3
COL4
Pgina 2 de 13
ENDC
ORG
BSF
CLRF
MOVLW
MOVWF
BCF
BCF
CLRF
CLRF
CALL
CALL
MOVLW
CALL
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
CALL
CALL
CALL
CALL
CALL
CALL
MOVLW
CALL
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
MAL
VALUE
NUM1
NUM2
NUM3
NUM4
NUM5
NUM6
NUM7
NUM8
0000H
STATUS,RP0
TRISA
0F0H
;
;
;
;
Pgina 3 de 13
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
BSF
CLRF
CLRF
LCD_DATA
"G"
LCD_DATA
"O"
LCD_DATA
":"
LCD_DATA
0C0H
LCD_CMND
R_LED
MAL
COUNT
04H
FILA
FILA,0
CEROS
BUS
T_15MS
COL1
COLUMNA1
COL2
COLUMNA2
COL3
COLUMNA3
COL4
COLUMNA4
FILA,1
CCL_TCL
INI_TCL
ASCII:
MOVWF
CALL
MOVWF
CALL
INCF
CALL
GOTO
COLUMNA
CARACTER
VALUE
LCD_DATA
COUNT,1
GUARDA
CCL_TCL
CARACTER:
ADDWF PCL,1
DT
"0123456789ABCD#*"
RETURN
CEROS:
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETURN
PCL,1
B'1111'
B'0111'
B'1011'
B'1101'
B'1110'
COLUMNA1:
BTFSS
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
COL1
$-1
FILA,0
04H
STATUS,Z
$+3
D'1'
ASCII
FILA,0
03H
STATUS,Z
$+3
CCL_TCL:
Pgina 4 de 13
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVLW
GOTO
D'4'
ASCII
FILA,0
02H
STATUS,Z
$+3
D'7'
ASCII
D'14'
ASCII
COLUMNA2:
BTFSS
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVLW
GOTO
COL2
$-1
FILA,0
04H
STATUS,Z
$+3
D'2'
ASCII
FILA,0
03H
STATUS,Z
$+3
D'5'
ASCII
FILA,0
02H
STATUS,Z
$+3
D'8'
ASCII
D'0'
ASCII
COLUMNA3:
BTFSS
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVLW
GOTO
COL3
$-1
FILA,0
04H
STATUS,Z
$+3
D'3'
ASCII
FILA,0
03H
STATUS,Z
$+3
D'6'
ASCII
FILA,0
02H
STATUS,Z
$+3
D'9'
ASCII
D'15'
ASCII
COLUMNA4:
BTFSS
GOTO
FILA,0
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
COL4
$-1
MOVF
04H
STATUS,Z
$+3
D'10'
ASCII
FILA,0
03H
STATUS,Z
$+3
Pgina 5 de 13
T_1R:
MOVLW
GOTO
MOVF
SUBLW
BTFSS
GOTO
MOVLW
GOTO
MOVLW
GOTO
D'11'
ASCII
FILA,0
02H
STATUS,Z
$+3
D'12'
ASCII
D'13'
ASCII
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
NOP
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
CLRW
RETURN
D'1'
VAR1
D'255'
VAR2
D'255'
VAR3
GUARDA:
de
GUARDA1:
GUARDA2:
GUARDA3:
VAR3,1
$-2
VAR2,1
$-6
VAR1,1
$-10
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
SUBLW
BTFSC
GOTO
MOVF
MOVWF
RETURN
MOVF
MOVWF
RETURN
MOVF
MOVWF
RETURN
COUNT,0
01H
STATUS,Z
GUARDA1
COUNT,0
02H
STATUS,Z
GUARDA2
COUNT,0
03H
STATUS,Z
GUARDA3
COUNT,0
04H
STATUS,Z
GUARDA4
COUNT,0
05H
STATUS,Z
GUARDA5
COUNT,0
06H
STATUS,Z
GUARDA6
COUNT,0
07H
STATUS,Z
GUARDA7
COUNT,0
08H
STATUS,Z
GUARDA8
VALUE,0
NUM1
VALUE,0
NUM2
VALUE,0
NUM3
Pgina 6 de 13
GUARDA4:
GUARDA5:
GUARDA6:
GUARDA7:
GUARDA8:
REVISAR:
MOVF
MOVWF
RETURN
MOVF
MOVWF
RETURN
MOVF
MOVWF
RETURN
MOVF
MOVWF
RETURN
MOVF
MOVWF
RETURN
VALUE,0
NUM4
MOVLW
SUBWF
BTFSS
INCF
30H
NUM1,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
39H
NUM2,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
30H
NUM3,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
33H
NUM4,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
30H
NUM5,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
37H
NUM6,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
36H
NUM7,0
STATUS,Z
MAL,1
MOVLW
SUBWF
BTFSS
INCF
32H
NUM8,0
STATUS,Z
MAL,1
VALUE,0
NUM5
VALUE,0
NUM6
VALUE,0
NUM7
VALUE,0
NUM8
CALL
PROCESA
GOTO $+0
RETURN
PROCESA:
F_PROS:
C_CORR:
MOVF
BTFSC
GOTO
GOTO
RETURN
MAL,1
STATUS,Z
C_CORR
C_INCR
MOVLW 01H
CALL
LCD_CMND
CALL
T_15MS
Pgina 7 de 13
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
MOVLW
CALL
CALL
BSF
BCF
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
"P"
LCD_DATA
"R"
LCD_DATA
"O"
LCD_DATA
"C"
LCD_DATA
"E"
LCD_DATA
"S"
LCD_DATA
"A"
LCD_DATA
"N"
LCD_DATA
"D"
LCD_DATA
"O"
LCD_DATA
"."
LCD_DATA
"."
LCD_DATA
"."
LCD_DATA
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
01H
LCD_CMND
T_15MS
G_LED
R_LED
"C"
LCD_DATA
"O"
LCD_DATA
"D"
LCD_DATA
"I"
LCD_DATA
"G"
LCD_DATA
"O"
LCD_DATA
""
LCD_DATA
"C"
LCD_DATA
"O"
LCD_DATA
"R"
LCD_DATA
"R"
LCD_DATA
"E"
LCD_DATA
"C"
LCD_DATA
"T"
LCD_DATA
Pgina 8 de 13
C_INCR:
MOVLW
CALL
MOVLW
CALL
GOTO
"O"
LCD_DATA
"!"
LCD_DATA
F_PROS
MOVLW
CALL
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
MOVLW
CALL
CALL
BSF
BCF
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
GOTO
01H
LCD_CMND
T_15MS
"P"
LCD_DATA
"R"
LCD_DATA
"O"
LCD_DATA
"C"
LCD_DATA
"E"
LCD_DATA
"S"
LCD_DATA
"A"
LCD_DATA
"N"
LCD_DATA
"D"
LCD_DATA
"O"
LCD_DATA
"."
LCD_DATA
"."
LCD_DATA
"."
LCD_DATA
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
T_1R
01H
LCD_CMND
T_15MS
R_LED
G_LED
"E"
LCD_DATA
"R"
LCD_DATA
"R"
LCD_DATA
"O"
LCD_DATA
"R"
LCD_DATA
"!"
LCD_DATA
F_PROS
#INCLUDE
END
<LCD.INC>
Pgina 9 de 13
LCD.INC
LCD_INI: BSF
STATUS,RP0
CLRF
TRISA
MOVLW B'11110000'
MOVWF TRISB
BCF
STATUS,RP0
CLRF
PORTA
CLRF
PORTB
CALL
T_15MS
MOVLW 03H
MOVWF BUS
CALL
SIG_CMD
CALL
T_5MS
MOVLW 03H
MOVWF BUS
CALL
SIG_CMD
CALL
T_100US
MOVLW 03H
MOVWF BUS
CALL
SIG_CMD
CALL
T_40US
MOVLW 02H
MOVWF BUS
CALL
SIG_CMD
CALL
T_40US
RETURN
SIG_CMD:
BCF
BSF
BCF
BCF
CLRF
RETURN
RS
E
E
RS
BUS
LCD_CONFIG:
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
RETURN
06H
LCD_CMND
0FH
LCD_CMND
2CH
LCD_CMND
LCD_CMND:
MOVWF
SWAPF
ANDLW
MOVWF
CALL
MOVF
ANDLW
MOVWF
CALL
CALL
RETURN
CMD
CMD,0
0FH
BUS
SIG_CMD
CMD,0
0FH
BUS
SIG_CMD
T_40US
LCD_DATA:
MOVWF
SWAPF
ANDLW
MOVWF
CALL
MOVF
ANDLW
MOVWF
CALL
CALL
RETURN
DATO
DATO,0
0FH
BUS
SIG_DATA
DATO,0
0FH
BUS
SIG_DATA
T_40US
SIG_DATA:
BSF
RS
Pgina 10 de 13
BSF
BCF
BCF
CLRF
RETURN
E
E
RS
BUS
MOVLW
MOVWF
NOP
DECFSZ
GOTO
NOP
RETURN
D'23'
VAR1
MOVLW
MOVWF
NOP
DECFSZ
GOTO
NOP
RETURN
D'8'
VAR1
MOVLW
MOVWF
NOP
DECFSZ
GOTO
NOP
RETURN
D'248'
VAR1
T_15MS:
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL
RETURN
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_5MS:
CALL
CALL
CALL
CALL
CALL
RETURN
END
T_1MS
T_1MS
T_1MS
T_1MS
T_1MS
T_100US:
T_40US:
T_1MS:
VAR1,1
$-2
VAR1,1
$-2
VAR1,1
$-2
Simulacin.
En esta simulacin se emple un esquemtico del PIC16F84A totalmente diferente, como
se muestra en la figura 1. Ahora, se utilizaron dos componentes nuevos: un display LCD
de dos lneas y un teclado matricial. De esta misma forma, fueron colocados dos
indicadores LED, uno color rojo y otro color verde. Estos LED indican si el motor abrir o
cerrar la caja fuerte dependiendo si el cdigo introducido mediante el teclado matricial es
el correcto. La conexin de todos los componentes del esquemtico en Proteus fue
Pgina 11 de 13
Pgina 12 de 13
Figura 3.CODIGO:, segunda palabra mostrada en el LCD, una vez terminada la parte de
bienvenida.
Ahora, se procede con la introduccin del cdigo mediante el teclado matricial. Por
programacin, se sabe que la cuarta columna mostrada de izquierda a derecha
representa las letras A, B, C y D en orden descendente y que la cuarta fila de arriba hacia
abajo representa a los smbolos *, #, 0 y D, en vez de lo que se tiene en el teclado del
esquemtico. Si se introduce un cdigo errneo de 8 caracteres, en este caso 77777777,
el programa escribir en el LCD PROCESANDO, para luego mostrar unos instantes
despus la palabra ERROR! al mismo tiempo que el LED que indica la caja permanece
cerrada se enciende (color rojo), visto en la figura 4.
Una vez mostrado el mensaje de error, es necesario reiniciar el PIC y por ende se debe
presionar el botn de reinicio, ubicado en la parte izquierda del esquemtico. De nueva
cuenta se mostrarn los mensajes de bienvenida y cdigo; introduciendo el cdigo
correcto (09030762) ocurre la secuencia vista en la figura 5: Se coloca tambin la palabra
PROCESANDO y unos instantes despus se muestra un mensaje de que el cdigo
introducido al teclado si fue el requerido: CODIGO CORRECTO!. Adems, el LED que
indica la apertura de la caja fuerte (LED verde) es encendido.
Pgina 13 de 13