Sei sulla pagina 1di 13

Instrucciones.

Empleando el PIC16F84A realizar el cdigo e implementacin fsica del funcionamiento de


un seguro electrnico usando de apoyo una LCD para mostrar mensajes que soliciten el
cdigo de acceso para el desbloqueo del seguro as como los mensajes correspondientes
para indicar un acceso denegado por dar un cdigo errneo y un acceso por dar el cdigo
de seguridad correcto; adems un teclado matricial con el cual se tecleara el cdigo
solicitado. Tambin se deben de utilizar dos LEDs (uno rojo y uno verde) que se
encendern dependiendo del estado del acceso que se halla generado con el cdigo de
activacin ingresado en el teclado; encender el verde si se da acceso y desbloqueo del
seguro y encender el rojo si se niega el acceso.
Nota: Emplear para el uso de la LCD la configuracin en la cual se reciben los datos en
dos partes, es decir, separar los datos en sus dos nibles (superior e inferior).

Descripcin del programa.


El cdigo generado es bastante complejo en cuanto a su construccin con las
instrucciones del PIC16F84A, pero fcil en cuanto al algoritmo seguido. Cabe mencionar
que para evitar usar un archivo .asm muy largo en lneas de cdigo, todas las
instrucciones para el manejo de la LCD y algunas rutinas de tiempo fueron separadas en
otro archivo con la extensin .inc para que as el compilador considerara a este archivo
como una continuacin del cdigo principal.
En general el programa se trata de estar continuamente realizando una deteccin de
seales en el puerto B, que es donde se conecta el teclado, para as cuando se presione
una tecla se reciba la posicin de la tecla presionada mediante la deteccin de cada de
tensin en los pines correspondientes a la fila y columna que pertenece la tecla.
Empleando esta informacin se realiza una designacin del carcter correspondiente y
mediante una tcnica de multiplexado se activa la mitad del puerto B como salida en un
pequeo instante mandando el dato del carcter presionado hacia los pines 11, 12, 13 y
14 que reciben la informacin en nibles separados y muestran el carcter
correspondiente. La cantidad de caracteres permitida como cdigo es de 8, por lo que se
emplea un contador que incrementa en uno cada vez que se ingresa un dato desde el
teclado hacia la LCD, as al tener este un valor de 8 se terminara el proceso de revisar las
cadas de tensin en las entradas y comenzara el proceso de comparacin de los
caracteres tecleados con los correctos para tener acceso en el seguro electrnico. Antes
de que se realice la comparacin los caracteres que se van tecleando al mismo tiempo se
guardan en registros individuales que son designados por el valor del contador, esto se
realiza mediante la cuestin Qu valor tiene el contador en ese momento?, conociendo
esto mediante simples restas se designa el registro donde se guardar el valor de la tecla
presionada para formar la cadena de 8 caracteres que conforman el cdigo de acceso.
La comparacin para saber si el cdigo de acceso tecleado es el correcto o no se realiza
mediante simples restas, activacin de la bandera de cero (Z) en el registro STATUS y
Pgina 1 de 13

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

PORTB ; Directivas del PIC16F84A y definiciones de


PORTA,0 ; pines para reconocimiento rpido en su
PORTA,1 ; manipulacin.
PORTA,2
PORTA,3
PORTB,4
PORTB,5
PORTB,6
PORTB,7
; Variables auxiliares para el manejo de la
informacin.

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

;
;
;
;

Origen del programa.


Cambio al banco 1 para definir entradas y salidas.
Designacin del puerto A como salida.
Carga del valor 11110000 al puerto B para
designarlo con la mitad como entrada y la mitad
TRISB
como salida.
OPTION_REG,NOT_RBPU ; Activacin de las resistencias Pull Up.
STATUS,RP0
; Cambio al banco 0.
PORTA
; Limpieza de los puertos A y B para asegurar que
PORTB
estos no contengan datos basura.
LCD_INI
; Llamada a la inicializacin dela LCD.
LCD_CONFIG
; Llamada a la configuracin de la LCD.
01H
; Carga de un 1 al registro de trabajo para mandarlo
LCD_CMND
como comando a la LCD y esta se borre.
T_15MS
; Tiempo necesario para el comando de borrar la LCD.
""
; Carga de caracteres y envo de estos como datos
LCD_DATA
hacia la LCD para obtener el mensaje de BIENVENIDO
""
al encender o resetear el PIC.
LCD_DATA
""
LCD_DATA
"B"
LCD_DATA
"I"
LCD_DATA
"E"
LCD_DATA
"N"
LCD_DATA
"V"
LCD_DATA
"E"
LCD_DATA
"N"
LCD_DATA
"I"
LCD_DATA
"D"
LCD_DATA
"O"
LCD_DATA
T_1R
; Llama a la rutina de tiempo de 261, 892s para
T_1R
mantener el mensaje de BIENVENIDO un momento en
T_1R
la pantalla de la LCD.
T_1R
T_1R
T_1R
01H
; Se vuelve a cargar y enviar un 1 como comando para
LCD_CMND
borrar la pantalla de la LCD y mostrar un mensaje
T_15MS
posterior.
"C"
; Carga y envo de los caracteres a la LCD para
LCD_DATA
mostrar un mensaje de solicitud del cdigo de
"O"
activacin (CODIGO:).
LCD_DATA
"D"
LCD_DATA
"I"

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

INI_TCL: MOVLW 08H


; Carga del valor de 8 para realizar la comparacin
SUBWF COUNT,0
del valor del contador y determinar el termino de
BTFSC STATUS,Z
la revisin de los pines para el teclado debido a
GOTO REVISAR
ya haber ingresado 8 caracteres para el cdigo.
MOVLW
MOVWF
MOVF
CALL
MOVWF
CALL
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
DECFSZ
GOTO
GOTO

04H
FILA
FILA,0
CEROS
BUS
T_15MS
COL1
COLUMNA1
COL2
COLUMNA2
COL3
COLUMNA3
COL4
COLUMNA4
FILA,1
CCL_TCL
INI_TCL

; Carga de un valor de 4 para realizar la revisin de


la cada de tensin en alguna de las 4 filas del
teclado.
; Llamada a la funcin de ceros que entrega la cadena
de 4 bits que indica la posicin en fila de la tecla
que se detecte presionada.
; Revisin y llamada de las funciones para obtener la
posicin en columna de la tecla que se detecte como
presionada debido a la cada de tensin provocada.

ASCII:

MOVWF
CALL
MOVWF
CALL
INCF
CALL
GOTO

COLUMNA
CARACTER
VALUE
LCD_DATA
COUNT,1
GUARDA
CCL_TCL

; Rutina empleada para obtener el valor del


carcter que se presione, se guarde en los registros
auxiliares para la posterior comparacin, se
muestre en la LCD y se incremente el contador para
los 8 caracteres del cdigo de acceso.

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'

; Esta rutina da la cadena de bits que designa la


posicin en fila de la tecla que se presione.

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

; Funcin que realiza la revisin de la columna 1 del


teclado para asignar el valor correspondiente a la
tecla que se presione en caso de que esta sea de
dicha columna.

CCL_TCL:

; Regreso para otra revisin de las columnas.


; Regreso para otra revisin de las filas y
posteriormente columnas.

; Rutina con los posibles caracteres que se


generan al presionar una tecla.

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

; Funcin que realiza la revision de la columna 2 del


teclado para asignar el valor correspondiente a la
tecla que se presione en caso de que esta sea de
dicha columna.

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

; Funcin que realiza la revisin de la columna 3 del


teclado para asignar el valor correspondiente a la
tecla que se presione en caso de que esta sea de
dicha columna.

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

; Funcin que realiza la revisin de la columna 4 del


teclado para asignar el valor correspondiente a la
tecla que se presione en caso de que esta sea de
dicha columna.

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

; Rutina de tiempo que tarda 261, 892s.

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

; Esta funcin realiza el guardado de los valores


los caracteres que se vallan presionando en el
teclado en las variables NUM1 a NUM8 segn la
posicin del carcter que indica el contador de
la cantidad de caracteres para el cdigo de
acceso.

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

; Carga el carcter 0 para la comparacin del primer


carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
primer carcter sea errneo.
; Carga el carcter 9 para la comparacin del segundo
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
segundo carcter sea errneo.
; Carga el carcter 0 para la comparacin del tercer
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
tercer carcter sea errneo.
; Carga el carcter 3 para la comparacin del cuarto
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
cuarto carcter sea errneo.
; Carga el carcter 0 para la comparacin del quinto
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
quinto carcter sea errneo.
; Carga el carcter 7 para la comparacin del sexto
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
sexto carcter sea errneo.
; Carga el carcter 6 para la comparacin del sptimo
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
sptimo carcter sea errneo.
; Carga el carcter 2 para la comparacin del octavo
carcter en el cdigo de acceso.
; Incremento de la variable MAL en caso de que el
Octavo carcter sea errneo.

; Esta rutina verifica el valor que tiene MAL y si es


0 direcciona hacia el mensaje de acceso y al mensaje
de acceso denegado cuando es mayor a 0.

; Muestra de los mensajes PROCESANDO y


CODIGO CORRECTO en la LCD.

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

; Muestra de los mensajes PROCESANDO y ERROR! en


la LCD.

<LCD.INC>

; Inclusin del archivo con las funciones para


la LCD.
; Fin del cdigo.

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

; Funcin que realiza la configuracin de


inicializacin para la LCD.

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

; Funcin que permite mandar un valor como comando


para la LCD.

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

; Funcin que permite mandar un valor como dato para


la LCD.

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

; Rutina de tiempo de 15ms.

T_5MS:

CALL
CALL
CALL
CALL
CALL
RETURN
END

T_1MS
T_1MS
T_1MS
T_1MS
T_1MS

; Rutina de tiempo de 5ms.

T_100US:

T_40US:

T_1MS:

; Rutina de tiempo de 100s.

VAR1,1
$-2

; Rutina de tiempo de 40s.

VAR1,1
$-2

; Rutina de tiempo de 1ms.

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

realizada exitosamente gracias los circuitos vistos en clase, adems de las


presentaciones acerca del LCD y teclado matricial, en las cuales se indica el
funcionamiento a detalle de uno.

Figura 1. Diseo del circuito requerido en la prctica en Proteus utilizando el PIC16F84A.

EL teclado matricial presentado en el paquete de simulacin es distinto al de la prctica en


fsico, debido a que este presenta operadores y otros botones, pero en el modo de
operacin son exactamente iguales. Probando el funcionamiento del cdigo, se cargo el
archivo .cof al PIC y en el primer instante de la simulacin aparece en el display la palabra
BIENVENIDO, vista en la figura 2. Despus de pocos segundos, el programa sigue,
borra del LCD los anteriores caracteres y ahora el PIC coloca en l la palabra CDIGO,
como se observa en la figura 3. En este paso, ya se requiere colocar la cadena de bits o
caracteres, combinados o no, que permitan la apertura de la caja fuerte.

Figura 2.Inicio de la simulacin, LCD mostrando la palabra BIENVENIDO.

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.

Figura 4.Secuencia dada en la simulacin despus de la introduccin de un cdigo errneo.

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.

Figura 5.Secuencia dada en la simulacin despus de la introduccin de un cdigo correcto.

Pgina 13 de 13

Potrebbero piacerti anche