Post on 09-May-2018
transcript
1
Tecnológico de Estudios de Superiores de Ixtapaluca
Carrera. Ingeniería en Sistemas Computacionales
Materia: Lenguaje Ensamblador
Profesor: Ramón Lozano Zavala
Integrantes del Equipo:
Rosas Zarate Diana Marlen
Rodríguez Aguilar Nydia
Santiago Martínez Viridiana
Soriano Gutiérrez Alejandra
Sosa Carreón Enrique Román
Vásquez Martínez Oscar
Vázquez Rojas Christian Alexis
Vidal Torres Ángel
Zarate Cruz Ricardo
Grupo: 1502
Ixtapaluca Edo. De México a 19 de Diciembre de 2011.
3
INTRODUCCION
Una cerradura electrónica consiste en llevar acabo una función especifica para
la cual ha sido creada. La ventaja de una cerradura así es que el usuario de
esta cerradura tendrá la confiabilidad de que cualquier persona no podrá
acceder a su habitación o a un armario, caja, etc.
La parte principal del circuito de la cerradura es de PIC 16F876,
microprocesador que se encarga de las funciones de: almacenamiento de la
clave de acceso y la computadora y la comparación de las claves introducidas
con la anteriormente mencionada. Las claves son introducidas por medio de un
teclado de 12 teclas y visualizada en una pantalla LCD. También cuenta con
dos teclas: aceptar y cambiar clave. Si la clave se introduce incorrectamente
tres veces una alarma se activa durante unos segundos para avisar al usuario
que tratan de acceder a su espacio
4
PLANTEAMIENTO Y DELIMITACION
En primera instancia nuestro proyecto era realizar un control por voz, de tal
forma que comenzamos por investigar cuales eran los circuitos existentes para
realizar un control por voz, de los cuales uno fue el que nos llamo más la
atención (Figura 1), ya que este circuito contenía una parte de teclado, es decir,
que si el circuito no podía ser activado por voz(en caso de alguna falla) podría
activarse por medio del teclado. Ya habiendo investigado acerca de este
circuito nos dimos a la tarea de buscar cada uno de los componentes, de los
cuales se tuvo un grave problema con uno de ellos (el elemento principal del
circuito).
5
¿QUÉ ES UN MICRO CONTROLADOR?
Un micro controlador es un circuito integrado o chip que incluye en su interior
las tres unidades funcionales de una computadora: CPU, Memoria y Unidades
de E/S, es decir, se trata de un computador completo en un solo circuito
integrado.
CARACTERÍSTICAS
Son diseñados para disminuir el coste económico y el consumo de energía de
una sistema en particular. Por eso el tamaño de la CPU, la cantidad de
memoria y los periféricos incluidos dependerán de la aplicación. El control de
un electrodoméstico sencillo como una batidora, utilizará un procesador muy
pequeño (4 u 8 bit) por que sustituirá a un autómata finito. En cambio un
reproductor de música y/o vídeo digital (mp3 o mp4) requerirá de un
procesador de 32 bit o de 64 bit y de uno o más Códec de señal digital (audio
y/o vídeo). El control de un sistema de frenos ABS (Antilock Brake System) se
basa normalmente en un microcontrolador de 16 bit, al igual que el sistema de
control electrónico del motor en un automóvil.
Los microcontroladores representan la inmensa mayoría de los chips de computadoras vendidos, sobre un 50% son controladores "simples" y el restante corresponde a DSPs más especializados. Mientras se pueden tener uno o dos microprocesadores de propósito general en casa, usted tiene distribuidos seguramente entre los electrodomésticos de su hogar una o dos docenas de microcontroladores. Pueden encontrarse en casi cualquier dispositivo electrónico como automóviles, lavadoras, hornos microondas, teléfonos, etc. Un microcontrolador difiere de una CPU normal, debido a que es más fácil convertirla en una computadora en funcionamiento, con un mínimo de chips externos de apoyo. La idea es que el chip se coloque en el dispositivo, enganchado a la fuente de energía y de información que necesite, y eso es todo. Un microprocesador tradicional no le permitirá hacer esto, ya que espera que todas estas tareas sean manejadas por otros chips. Hay que agregarle los módulos de entrada/salida (puertos) y la memoria para almacenamiento de información.
6
ESQUEMA DEL MICRO CONTROLADOR
Familias de controladores
Los micro controladores más comunes en uso se muestran a continuación:
TABLA 1. Microcontroladores más comunes.
Empresa 8 bits 12 bits 14 bits 16 bits 32 bits 64 bits
Atmel
AVR
Freescale 68HC05,
x x
68HC12,
683xx, x
68HC08,
68HCS12,
(antes Motorola)
68HC16
68HC11, HCS08 68HCSX12
MCS-48 (familia
8048) MCS96,
Intel MCS51 (familia x x x x
MXS296
8051)
8xC251
National COP8
x
x
X
x
x
Semiconductor
Familia
Familia 12Fxx, 18Cxx y
Microchip
Familia 10f2xx 16Cxx y 16Fxx
x
x
12Cxx de 18Fxx de
de 14 bits
12 bits
16 bits
(PIC16F87X)
Observación: Algunas arquitecturas de microcontrolador están disponibles por tal
cantidad de vendedores y en tantas variedades, que podrían tener, con total
corrección, su propia categoría. Entre ellos encontramos, principalmente, las
variantes de 8051 y Z80.
7
ELECCIÓN DE UN MICROCONTROLADOR PARA EL PROYECTO.
Para ele de microcontrolador a utilizar nos basamos en los siguientes puntos:
• Microcontroladores de uso más común.
• Mas utilizados en el ámbito laboral.
•Mayor información en libros y en internet para la investigación. Más
económicos.
En base a esto decidimos que lo mejor sería utilizar micro controladores PIC,
los cuales tienen una arquitectura RISC.
ARQUITECTURA RISC
Es un tipo de microprocesador con las siguientes características
fundamentales:
1. Instrucciones de tamaños fijos y presentados en un reducido
número de formatos.
2. Solo las instrucciones de carga y almacenamiento acceden a la
memoria por datos.
RISC es una filosofía de diseño de CPU para computadora que está a favor de conjuntos de instrucciones pequeños y simples que toman menor tiempo para ejecutarse. El tipo de procesador más comúnmente utilizado en equipos de escritorio, el x86, está basado en CISC en lugar de RISC, aunque las versiones más nuevas traducen instrucciones basadas en CISC x86 a instrucciones más simples basadas en RISC para uso interno antes de su ejecución. La idea fue inspirada por el hecho de que muchas de las características que eran incluidas en los diseños tradicionales de CPU para aumentar la velocidad estaban siendo ignoradas por los programas que eran ejecutados en ellas. Además, la velocidad del procesador en relación con la memoria de la computadora que accedía era cada vez mas alta. Esto conllevó la aparición de
8
numerosas técnicas para reducir el procesamiento dentro del CPU, así como de reducir el número total de accesos a memoria. CARACTERISTICAS. En pocas palabras esto significa que para cualquier nivel de desempeño dado, un chip RISC típicamente tendrá menos transistores dedicados a la lógica principal. Esto permite a los diseñadores una flexibilidad considerable; así pueden, por ejemplo: • Incrementar el tamaño del conjunto de registros • Implementar medidas para aumentar el paralelismo interno • Añadir cachés enormes • Añadir otras funcionalidades, como E/S y relojes para mini controladores • Construir los chips en líneas de producción antiguas que de otra manera nos serian utilizadas • No hacer nada, ofrecer el chip para aplicaciones de bajo poder o de tamaño limitado
Las características que generalmente son encontradas en los diseños RISC son:
• Codificación uniforme de instrucciones (ejemplo: el código de
operación se encuentra siempre en la misma posición de bit en
cada instrucción, la cual es siempre una palabra), lo que permite
una decodificación más rápida.
• Un conjunto de registros homogéneo, permitiendo que cualquier
registro sea utilizado en cualquier contexto y así simplificar el diseño
del compilador (aunque existen muchas formas de separar los
ficheros de registro de entero y coma flotante).
• Modos de direccionamiento simple con modos más complejos
reemplazados por secuencias de instrucciones aritméticas simples.
• Algunos tipos de datos soportados en el hardware (por ejemplo,
algunas máquinas CISC tiene instrucciones para tratar con tipos
byte, cadena; tales instrucciones no se encuentran en una máquina
RISC).
9
Los diseños RISC también prefieren utilizar como característica un modelo
de memoria Harvard, donde los conjuntos de instrucciones y los conjuntos de
datos están conceptualmente separados; esto significa que el modificar las
direcciones donde el código se encuentra pudiera no tener efecto alguno en las
instrucciones ejecutadas por el procesador (porque la CPU tiene separada la
instrucción y el cache de datos, al menos mientras una instrucción especial de
sincronización es utilizada). Por otra parte, esto permite que ambos caches
sean accedidos separadamente, lo que puede en algunas ocasiones mejorar el
rendimiento.
MICROCONTROLADORES PIC.
Los “PIC” son una familia de micro controladores tipo RISC fabricados por Microchip Technology Inc., originalmente desarrollado por la división de microelectrónica de General Instruments.
El nombre actual no es un acrónimo. En realidad, el nombre completo es PICmicro, aunque generalmente se utiliza como Peripheral Interface Controller (Controlador de Interfaz Periférico). El PIC original se diseñó para ser usado con la nueva UCP (Unidad Central de Procesos) de 16 bits CP16000. Siendo en general una buena UCP, ésta tenía malas prestaciones de E/S, y el PIC de 8 bits se desarrolló en 1975 para mejorar el rendimiento del sistema quitando
10
peso de E/S a la UCP. El PIC utilizaba micro-código simple almacenado en ROM (Read Only Memory) para realizar estas tareas; y aunque el término no se usaba por aquel entonces, se trata de un diseño RISC que ejecuta una instrucción cada 4 ciclos del oscilador. En 1985, dicha división de microelectrónica de General Instruments se convirtió en una filial y el nuevo propietario canceló casi todos los desarrollos, que para esas fechas la mayoría estaban obsoletos. El PIC, sin embargo, se mejoró con EPROM para conseguir un controlador de canal programable. Hoy en día multitud de PIC’s vienen con varios periféricos incluidos (módulos de comunicación serie, UART’s, núcleos de control de motores, etc.) y con memoria de programa desde 512 a 32.000 palabras (una palabra corresponde a una instrucción en ensamblador, y puede ser 12, 14 o 16 bits, dependiendo de familia específica de PICmicro). Para el desarrollo de este proyecto utilizamos el entorno de programación de MPLAB IDE.
11
TAMAÑO DE PALABRA. El tamaño de palabra de los microcontroladores PIC es fuente de muchas confusiones. Todos los PIC’s (excepto los dsPIC) manejan datos en trozos de 8 bits, con lo que se deberían llamar microcontroladores de 8 bits. Pero a diferencia de la mayoría de UCP’s, el PIC usa arquitectura Harvard, por lo que el tamaño de las instrucciones puede ser distinto del de la palabra de datos. De hecho, las diferentes familias de PIC’s usan tamaños de instrucción distintos, lo que hace difícil comparar el tamaño del código del PIC con el de otros microcontroladores. Por ejemplo, un microcontrolador tiene 6144 bytes de memoria de programa: para un PIC de 12 bits esto significa 4096 palabras y para uno de 16 bits, 3072 palabras.
12
CARACTERISTICAS. Los PIC’s actuales vienen con una amplia gama de mejoras de hardware incorporadas: • Núcleos de UCP de 8/16 bits con Arquitectura Harvard modificada • Memoria Flash y ROM disponible desde 256 bytes a 256 kilobytes • Temporizadores de 8/16 bits • Tecnología Nanowatt para modos de control de energía • Periféricos serie síncronos y asíncronos: USART, AUSART, EUSART • Conversores analógico/digital de 10-12 bits • Comparadores de tensión • Módulos de captura y comparación PWM • Controladores LCD • Periférico MSSP para comunicaciones I²C, SPI, y I²S • Memoria EEPROM interna con duración de hasta un millón de ciclos de lectura/escritura motores Puertos de E/S (típicamente 0 a 5,5 voltios) Periféricos de control de motores. LA PROGRAMACIÓN DEL MICROCONTROLADOR.
Para transferir el código de un ordenador al PIC normalmente se usa un
dispositivo llamado programador. La mayoría de PIC’s que Microchip distribuye
hoy en día incorporan ICSP (In Circuit Serial Programming, programación serie
incorporada) o LVP (Low Voltage Programming, programación a bajo voltaje),
lo que permite programar el PIC directamente en el circuito destino. Para la
ICSP se usan los pines RB6 y RB7 como reloj y datos y el MCLR para activar
el modo programación aplicando un voltaje de unos 11 voltios. Existen muchos
programadores de PIC’s, desde los más simples que dejan al software los
detalles de comunicaciones, a los más complejos, que pueden verificar el
dispositivo a diversas tensiones de alimentación e implementan en hardware
casi todas las funcionalidades. Muchos de estos programadores complejos
incluyen ellos mismos PIC’s preprogramados como interfaz para enviar las
órdenes al PIC que se desea programar. Uno de los programadores más
simples es el TE20, que utiliza la línea TX del puerto RS232 como alimentación
y las líneas DTR y CTS para mandar o recibir datos cuando el microcontrolador
está en modo programación. El software de programación puede ser el ICprog,
13
muy común entre la gente que utiliza este tipo de microcontroladores.
Para la programación del microcontrolador elegido (PIC16F876) utilizamos
las siguientes herramientas:
• MPLAP IDE (Herramienta para Depurar y Simular el código del Programa)
• PIC Simulator IDE (Herramienta Visual de simulación PIC)
• Grabador PIC USB
Nosotros utilizamos un programador que utiliza una interfaz USB llamado
“PICProg USB”, el cual utiliza un software especial para transferir el código en
hexadecimal.
14
TECLADO MATRICIAL 4x3.
Este teclado matricial es un excelente dispositivo de entrada cuando se
trabaja con PIC’s. La forma tradicional de conectarlos es utilizando 7 pines, 3
de columnas y 4 de filas. El nombre de este tipo de teclado proviene de su
interconexión entre las columnas y las filas, ya que esta conexión tiene la forma
de una matriz. Existen teclados matriciales de 4 x 4 y de 4 x 3 teclas.
FUENTE DE ALIMENTACIÓN.
La fuente de alimentación es un dispositivo muy importante para un
sistema, ya que de ahí se toma la energía necesaria para la alimentación del
mismo. Esta es un subsistema que convierte la corriente alterna en otro tipo de
corriente eléctrica adecuado para nuestra cerradura. Este otro tipo de corriente
será de tipo continua, ya que nosotros queremos que se mantenga en un solo
valor, pero para nuestro caso se tendrán 2 valores de voltaje de salida (12 y 5
Volts).
Nuestra fuente consta de 4 etapas:
• Atenuación: Disminuye el voltaje y la corriente de corriente alterna
(voltaje de 128Va.c. a 12Va.c. y la corriente la disminuye a 1A).
• Rectificación: Se elimina la parte negativa de la señal de corriente
alterna, esto se logra utilizando un Rectificador de Onda Completa.
• Filtrado: Se suavizan los rizos de la señal saliente del rectificador,
15
tratando de logra un valor de voltaje lineal (hasta este punto
12Vd.c.).
• Regulación: Su función es mantener y controlar el valor deseado a
la carga (5Vd.c. al circuito).
DESARROLLO DEL PROYECTO.
INVESTIGACIÓN.
Se comenzó por la investigación de cada uno de los 3 elementos
principales de nuestro proyecto (PIC, y el Teclado Matricial), de tal
forma de saber cómo es su funcionamiento y como es que se
comportan durante su tiempo de empleo. Ya sabiendo esto, se
continúo con la investigación sobre cómo es que se podrían
comunicar estos dispositivos, lo cual fue sencillo de averiguar, ya
que cada elemento consta con su propio manual (llamados
datasheet). Estos manuales contienen las especificaciones de
trabajo con las que se deben de operar los elementos, es decir,
cuanta alimentación de voltaje se debe de utilizar o como es que se
deben de conectar estos elementos entre si, etc
PROGRAMACIÓN.
La siguiente parte de nuestro proyecto fue la programación, es decir, la
creación del programa con el que funcionaria nuestra cerradura. El programa
se realizo con la ayuda del compilador MPLab. Este compilador nos ayudo a
referenciar nuestros errores en el programa y así corregirlos de tal forma que
nuestra programación fuese la correcta. El programa final quedo realizado en
bloques (El código fuente de este programa se presenta en la pagina 37).
Para la rápida comprensión del programa a continuación se describirán a
grandes rasgos los módulos involucrados en el código. INICIO:
Este modulo inicializa los puertos del PIC definiendo cuales trabajaran
como entradas y cuales como salidas, así como inicializar la EEPROM
para almacenar el código de acceso y realizar la llamada a la rutina que
16
inicializa el Display (LCD).
Rutinas que utiliza este
modulo: ƒ
INITLCD
PRINCI:
Este modulo es el principal del programa ya que da la bienvenida al
usuario desplegando en el Display el mensaje “INTRODUZCA CLAVE” y
coloca el cursor en la línea inferior del Display para esperar a que
ingresen el código de acceso, cuando se requiere reiniciar en sistema se
hace una llamada a este modulo.
Rutinas que utiliza este modulo:
ƒ CLEARL
ƒ SITUCU
ƒ ESCMEN ECOD12, ECOD22, ECOD32, ECOD42:
Estos módulos extraen el código 1, código 2, código 3 y código 4, para
posteriormente verificar la clave compuesta por la unión de los cuatro códigos
coincida con la almacenada en la memoria.
Rutinas que utiliza este modulo: SUELKEY
ESPEKEY
INCOR
CAMBIOC
WRITEL
FINCOD:
Compara la clave obtenida anteriormente con la clave almacenada en la memoria EEPROM, en caso de ser igual activa el bit de apertura de la puerta, en caso contrario se despliega el mensaje de “CLAVE INCORRECTA” y se decrementa el
numero de intentos.
Rutinas que utiliza este modulo:
17
ESPEKEY
CAMBIOC
LEECOD
INCOR
CLEARL
SITUCU
ESCMEN
CAMBIOC:
Este modulo se utiliza para cambiar la clave de acceso, el cual para efectuar el cambio pide introduzcas el código antiguo y a continuación la clave nueva dos veces para confirmar que se introdujo correctamente y posteriormente se almacene
en le memoria EEPROM.
Rutinas que utiliza este modulo:
CLEARL
ESCMEN
SUELKEY
SITUCU
COGECOD
LEECOD
INCORE
INCOREC
NUEVACL:
Captura y verifica que la nueva clave sea correcta.
NOVERI: Verifica que se introdujo bien la clave al realizar un cambio de esta
Rutinas que utiliza este modulo:
CLEARL
ESCMEN
SITUCU
DELAY
NUEVACL
18
INCOREC: Despliega el mensaje de error cuando la clave no tiene el tamaño de 4 dígitos, y
reinicia el sistema sin decrementar los intentos.
Rutinas que utiliza este modulo:
CLEARL
ESCMEN
SITUCU
INCORE: Cuando la clave que se introdujo tiene el tamaño adecuado pero no corresponde con la almacenada en memoria este modulo despliega el mensaje de “CLAVE INCORRECTA” y decrementa el numero de intentos disponibles, si el numero de
intentos llego a su máximo entonces activa la alarma.
Rutinas que utiliza este modulo:
ALARMA
CLEARL
ESCMEN
SUELKEY
DELAY
ALARMA:
Después de 3 intentos incorrectos se activa la alarma, una vez activada
la alarma suena por un tiempo definido y se reinicia el sistema.
COGECOD:
Almacena el código almacenado para su
posterior uso EEWRITE:
Escribe el valor en CODWRITE en la localidad dada por el acumulador
de la memoria.
GETKEY:
Devuelve el valor pulsado en el teclado en
código ASCCI. HAYTECL:
Identifica la fila en la que se encuentra la tecla
presionada.
19
SUELKEY:
Subrutina que espera a que se suelte la tecla
GRABACIÓN Y SIMULACIÓN.
Ya teniendo listo el programa nos dimos a la tarea de buscar un grabador de
PIC’s, el cual fue una herramienta necesaria para nuestro proyecto. Este
grabador fue adquirido por Internet.
Con la posesión de nuestro grabador nos vino consigo el programa
grabador y simulador de PIC (PIC Simulador IDE), el cual nos ayudo a
averiguar si nuestro programa fue logrado con éxito, es decir, con el se
comprobaría que la comunicación entre el PIC que las funciones fueran las
adecuadas. Una vez acabado con este proceso nos dimos a la tarea de grabar
el PIC con la ayuda de este mismo programa y del grabador.
CIRCUITO ELECTRICO.
Una vez hecha toda la investigación, los estudios necesarios, la realización del
programa de funcionamiento y las simulaciones necesarias, se comenzó por
realizar el circuito que se adecuaría a nuestras necesidades del proyecto, esto
con la ayuda de un programa de simulación de circuitos electrónicos (ORCAD
PSpice) y de Paint, ya que había algunos componentes que no se encontraron
en el ORCAD y se tuvieron que realizar en este ultimo programa.
20
COMPONENTES DEL PROYECTO.
Los componentes que se utilizaron para la construcción del proyecto
fueron los siguientes:
Fuente de Alimentación:
• 1 Transformador de 12V a 1A.
• 1 Puente de diodos rectificador a 2ª (RS203L).
• 1 Capacitor de 1000µF a 50V.
• 1 Regulador de voltaje positivo a 5V (L7805CV).
• 2 Conectores plug invertido de 1.3mm.
• Cable.
• 1 Gabinete para eliminador.
Circuito de la Cerradura.
• 1 PIC (16F8576).
• 1 Teclado Matricial 4x3.
• 1 Bocina de 8Ω de impedancia.
• 1 Transistor para aplicación de switcheo (TIP31).
• 2 Capacitores de 22pF.
• 5 Resistencias de 10kΩ a 1/2W.
• 6 Resistencias de 1kΩ a 1/2W.
• 1 Resistencia de 470Ω a 1/2W.
• 1 Potenciómetro de 10kΩ.
• 2 LED’s (1 Verde y 1 Rojo).
• 2 switch’s tipo botón • 2 Conectores plug de 1.3mm.
• Conectores header’s (Hembra y Macho).
• Cable plano de 24 hilos.
• Cable telefónico.
• 1 Gabinete de 8x14cm y 4cm de alto.
21
• 1 Tablilla de Experimentación de circuitos (Protoboard).
Grabación del PIC:
• 1 Grabador de PIC’s.
CONSTRUCCIÓN DEL CIRCUITO.
Se comenzó por armar el circuito en un protoboard para ver que todo Funcionara a la perfección (tanto las conexiones como cada uno de los
Elementos). El primer circuito que se armo fue la fuente de alimentación
ya que con ella se suministra el voltaje necesario para la operación de
nuestra cerradura. Se probo con un led que esta etapa estuviera
funcionando a la perfección y se midió con un multímetro que los niveles
de voltaje a la salida fueran los correctos.
Ya teniendo nuestra fuente, se prosiguió al armado de la parte central del
circuito, empezando por la parte central (Foto 2), es decir, comenzando por
poner el PIC al centro del protoboard y conectado el PIC a cada uno de los
elementos con los cuales tenia que se conectado, de tal forma que se nos
simplificase la conexión del circuito. Esto se tuvo que hacer un par de
ocasiones, ya que al tener tantos cables por conectar nos confundíamos y
conectábamos cables en donde no iban, esto provocaba que al momento de
alimentar el circuito provocaran corto o simplemente no funcionaba el circuito.
Ya conectados todos los cables al PIC, se conectaron al teclado en los
lugares indicados (poniendo cada cable en el pin del teclado). De tal forma que
todo el circuito de la cerradura y la fuente de alimentación quedara en un solo
circuito.
A continuación se hicieron pruebas para ver que todas las funciones de la
cerradura funcionaran correctamente, es decir, se hicieron pruebas con el
teclado para observar que todas las teclas funcionaran, y que los botones de
aceptar y cambiar clave operaran a la perfección.
22
FUNCIONAMIENTO. CLAVE DE ACCESO.
1. Inicialmente la clave es la 0000.
2. La calve se almacena en la memoria EEPROM de datos del PIC,
por lo que, cuando se desconecte la alimentación del circuito se
conserva la clave.
3. Consta de 4 dígitos que pueden ser: números (del 0 al 9),
asteriscos (*) y almohadillas (#). A diferencia de los códigos
tradicionales que solo usan los números. Esto proporciona 20736
combinaciones posibles frente a las 10000 que se consiguen solo
con números, lo que se traduce en mayor seguridad.
4. En la pantalla del LCD se muestra el mensaje "INTRODUZCA
CLAVE" entonces se introduce la clave de acceso (inicialmente
será 0000) y pulsas la tecla ACEPTAR para que se abra la
puerta.
5. Cuando el código introducido es incorrecto se muestra el mensaje
"CLAVE INCORRECTA" y la puerta no se abre.
Cuando se acumulan tres fallos al introducir la clave suena una sirena por
un altavoz durante unos 15 segundos, después se puede volver a probar.
CAMBIO DE LA CLAVE DE ACCESO
1. Pulsar la tecla CAMBIAR CLAVE, entonces aparece durante unos
instantes el mensaje "CAMBIO DE CLAVE"
2. Después te pide la clave con la que se acceso hasta ese
23
momento (inicialmente la 0000) con el mensaje "CLAVE
ANTIGUA". Tecleas la clave y pulsas ACEPTAR.
3. Si la clave es correcta te pide la "NUEVA CLAVE". Tecleas la
nueva clave que deseas guardar y pulsas ACEPTAR.
4. A continuación te pide que repitas la nueva clave para verificarla
(con esto aparecerá el mensaje "VERIFIQUE CLAVE"), tecleas de
nuevo la misma clave y pulsas ACEPTAR. Si te equivocas te
avisa y vuelves a introducir la nueva clave.
Si la verificación es correcta se cambia la clave y se muestra el mensaje
"CLAVE CAMBIADA" durante unos segundos.
CODIGO FUENTE. ; Configuración ****************************************************************************************
LIST P=16F876 ;Procesador a usar
RADIX HEX ;Sistema de numeración Hexadecimal predeterminada
INCLUDE P16F876.INC ;Librería incluida, contiene definiciones de registros
internos
;Palabra de Configuración
__config _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF &
_CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_OFF & _WDT_OFF &
_HS_OSC
********************************************************************** ; Registros Reservados ;-----------------------------------------------------------------------------------------------------------------------------------
PCL EQU 02H
STATUS EQU 03H
24
PORTA EQU 05H ;Puerto A
DATO EQU 06H ;PUERTO B
KEYB EQU 07H ;Puerto C
INTCON EQU 0BH
PIR2 EQU 0DH
PIE2 EQU 8DH
ADECON1 EQU 9FH ; Análogo Digital Configuración
EEDATA EQU 10CH
EEADR EQU 10DH
EECON1 EQU 18CH
EECON2 EQU 18DH
************** ; Registros de Uso General ;-----------------------------------------------------------------------------------------------------------------------------------
T_RELE EQU 20H ;CONTROLA EL TIEMPO DE APERTURA DE LA PUERTA
PUNTAB EQU 20H
INTENTO EQU 21H ;Numero de intentos antes de que se accione la alarma
TECLA EQU 22H ; Almacena la tecla presionada
CUENTA1 EQU 23H
CUENTA2 EQU 24H CUENTA3 EQU 25H
COD1 EQU 26H ; Almacena la primera tecla numérica presionada
COD2 EQU 27H; Almacena la segunda tecla numérica presionada
COD3 EQU 28H ; Almacena la tercera tecla numérica presionada
COD4 EQU 29H ; Almacena la cuarta tecla numérica presionada
CUENTA4 EQU 2AH
COD1A EQU 2BH ; Auxiliar para comprobar código
COD2A EQU 2CH ; Auxiliar para comprobar código
COD3A EQU 2DH ; Auxiliar para comprobar código
COD4A EQU 2EH ; Auxiliar para comprobar código
CODWRITE EQU 2FH ; Auxiliar para escribir código en EEPROM
25
;-----------------------------------------------------------------------------------------------------------------------------------
; ;-----------------------------------------------------------------------------------------------------------------------------------
F EQU 1
W EQU 0 ;-------------------------------------------------------------
----------------------------------------------------------------------
; Definiciones
;-------------------------------------------------
----------------------------------------------------------------------------------
26
#DEFINE EN 05H,2 ; Activa y desactiva el LCD
#DEFINE RW 05H,1 ;
#DEFINE RS 05H,0 ;
#DEFINE ALA 05H,3 ;
#DEFINE PORTERO 05H,5 ; Apertura y cierre de la puerta
ORG 00H
GOTO INICIO
ORG 04H
BCF PIR2,4
RETFIE ;----------------------------------------------------------------------------------------------------------------------------------- TABLA
MOVWF PCL ; Hacemos apuntar el PCL a la dirección de inicio del mensaje
;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 1 'Introduzca' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_1
RETLW 'I'
RETLW 'N'
RETLW 'T'
RETLW 'R'
RETLW 'O'
RETLW 'D'
RETLW 'U'
RETLW 'Z'
RETLW 'C'
RETLW 'A' ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 5 'Clave'
27
;----------------------------------------------------------------------------------------------------------------------------------- MEN_5
RETLW ' '
RETLW 'C'
RETLW 'L'
RETLW 'A'
RETLW 'V'
RETLW 'E'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 2 'Puede Pasar' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_2
RETLW 'P'
RETLW 'U'
RETLW 'E'
RETLW 'D'
RETLW 'E'
RETLW ' '
RETLW 'P'
RETLW 'A'
RETLW 'S'
RETLW 'A'
RETLW 'R'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 3 'Clave Incorrecta' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_3
RETLW 'C'
28
RETLW 'L'
RETLW 'A'
RETLW 'V'
RETLW 'E'
RETLW ' '
RETLW 'I'
RETLW 'N'
RETLW 'C'
RETLW 'O'
RETLW 'R'
RETLW 'R'
RETLW 'E'
RETLW 'C'
RETLW 'T'
RETLW 'A'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 4 'Cambio de' ;-----------------------------------------------------------------------------------------------------------------------------------
MEN_4
RETLW 'C'
RETLW 'A'
RETLW 'M'
RETLW 'B'
RETLW 'I'
RETLW 'O'
RETLW ' '
RETLW 'D'
RETLW 'E'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 6 'Antigua'
29
;----------------------------------------------------------------------------------------------------------------------------------- MEN_6
RETLW ' '
RETLW 'A'
RETLW 'N'
RETLW 'T'
RETLW 'I'
RETLW 'G'
RETLW 'U'
RETLW 'A'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 7 'Nueva' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_7
RETLW 'N'
RETLW 'U'
RETLW 'E'
RETLW 'V'
RETLW 'A'
RETLW 00H
;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 8 'Verifique' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_8
RETLW 'V'
RETLW 'E'
RETLW 'R'
RETLW 'I'
RETLW 'F'
RETLW 'I'
30
RETLW 'Q'
RETLW 'U'
RETLW 'E'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 9 'Cambiada' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_9
RETLW ' '
RETLW 'C'
RETLW 'A'
RETLW 'M'
RETLW 'B'
RETLW 'I'
RETLW 'A'
RETLW 'D'
RETLW 'A'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 10 'La Clave Debe' ;------------------------------------------------------------------
----------------------------------------------------------------- MEN_10
RETLW 'L'
RETLW 'A'
RETLW ' '
RETLW 'C'
RETLW 'L'
RETLW 'A'
RETLW 'V'
RETLW 'E'
RETLW ' '
RETLW 'D'
31
RETLW 'E'
RETLW 'B'
RETLW 'E'
RETLW 00H
;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 11 'Tener 4 Dígitos' ;-----------------------------------------------------------------
------------------------------------------------------------------
MEN_11
RETLW 'T'
RETLW 'E'
RETLW 'N'
RETLW 'E'
RETLW 'R'
RETLW ' '
RETLW '4'
RETLW ' '
RETLW 'D'
RETLW 'I'
RETLW 'G'
RETLW 'I'
RETLW 'T'
RETLW 'O'
RETLW 'S'
RETLW 00H
;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 12 'Intentelo' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_12
RETLW 'I'
RETLW 'N'
RETLW 'T'
RETLW 'E'
32
RETLW 'N'
RETLW 'T'
RETLW 'E'
RETLW 'L'
RETLW 'O'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- ;Mensaje 13 'De Nuevo' ;----------------------------------------------------------------------------------------------------------------------------------- MEN_13
RETLW 'D'
RETLW 'E'
RETLW ' '
RETLW 'N'
RETLW 'U'
RETLW 'E'
RETLW 'V'
RETLW 'O'
RETLW 00H ;----------------------------------------------------------------------------------------------------------------------------------- INICIO: Inicializa los dispositivos. LCD Teclado ;-----------------------------------------------------------------------------------------------------------------------------------
INICIO
CLRF DATO ; Inicializa el Puerto B
CLRF KEYB ; Inicializa el Teclado
CLRF PORTA ; Inicializa el Puerto A
BSF STATUS,5
; Cambiamos al Banco 1 para
33
definir las entradas como digitales
MOVLW 06H
; Bits de configuración para las entradas como digitales
MOVWF ADCON1
; Envía la configuración
CLRF DATO ;
BCF EN ; Configuramos EN, RW,
BCF RW ;
BCF RS ; RS, ALA y Portero
BCF ALA ;
BCF PORTERO ; como salidas
MOVLW 0F0H ; Configuramos el teclado
MOVWF KEYB
; Columnas como salidas y Filas como entradas
BCF STATUS,5
; Regresamos al banco 0
BCF PIR2,4
; La EEPROM eta lista para usarse
MOVLW 03H
; Cargamos el numero de intentos que se podrán
MOVWF INTENTO
; realizar antes que se active la alarma en este caso 3
CALL INITLCD ; Inicializamos la pantalla LCD
;CALL INITLCD ;
;-----------------------------------------------
------------------------------------------------------------------------------------
;PRINCI: Cuerpo principal del
34
programa
;-----------------------------------------------
------------------------------------------------------------------------------------
PRINCI
CALL CLEARL ; Borra el Display y coloca el cursor ala izq.
MOVLW 00H
CALL SITUCU ; Coloca el cursor al inicio de la línea superior del LCD
MOVLW MEN_1 ; Cargamos la dirección del Mensaje en el Acumulador
CALL ESCMEN ; Rutina que escribe el mensaje al que apunta el acumulador
MOVLW 44H
CALL SITUCU ; Coloca el cursor al inicio de la línea inferior del LCD
;----------------------------------------------------------------------------------------------------------------------------------- ;ECOD12: Este modulo almacena la primera tecla numérica presionada y valida
; que no sea una tecla de función en caso de 'C' entra a la sección
; de "Cambio de Clave"
ECOD12
35
CALL SUELKEY ; Verificamos que el teclado se encuentre bien inicializado
CALL ESPEKEY ; Esperamos a que se presione una tecla
MOVWF COD1
; Almacenamos la primera tecla presionada en el Acumulador
SUBLW 'A' ; Verificamos si la tecla fue o no 'A' BTFSC STATUS,2 ;
GOTO INCOR ; Si la tecla = 'A'
MOVF COD1,W ; Cargamos la tecla en el acumulador SUBLW 'C' ; Verificamos si la tecla presionada fue 'C' BTFSC STATUS,2 ; Si la tecla fue 'C'
GOTO CAMBIOC ; cambiamos la clave
MOVF COD1,W ; en caso de que se haya presionado una tecla numérica
MOVLW '*' ; para mantener oculta la tecla oprimida ;----------------------------------------------------------------------------------------------------------------------------------- ;ECOD22: Este modulo almacena la segunda tecla numérica presionada y valida ; que no sea una tecla de función en caso de 'C' entra a la sección ; de "Cambio de Clave" ;----------------------------------------------------------------------------------------------------------------------------------- ECOD22
CALL SUELKEY ; Verificamos que el teclado se encuentre bien inicializado
CALL ESPEKEY ; Esperamos a que se presione una tecla
MOVWF COD2 ; Almacenamos la segunda tecla presionada en el Acumulador
SUBLW 'A' ; Verificamos si la tecla fue o no 'A' BTFSC STATUS,2 ;
GOTO INCOR ; Si la tecla = 'A'
MOVF COD2,W ; Cargamos la tecla en el acumulador SUBLW 'C' ; Verificamos si la tecla presionada fue 'C' BTFSC STATUS,2 ; Si la tecla fue 'C'
36
GOTO CAMBIOC ; cambiamos la clave
MOVF COD2,W ; en caso de que se haya presionado una tecla numérica
MOVLW '*' ; para mantener oculta la tecla oprimida ;-----------------------------------------------------------------------------------------------------------------------------------
;ECOD32: Este modulo almacena la tercera tecla numérica presionada y valida
; que no sea una tecla de función en caso de 'C' entra a la sección
; de "Cambio de Clave"
;-----------------------
----------------- ------------
-------------------------------------------------------------------------------
ECOD32
CALL SUELKEY
CALL ESPEKEY
MOVWF COD3 SUBLW 'A' BTFSC STATUS,2 ;
GOTO INCOR
MOVF COD3,W SUBLW 'C' BTFSC STATUS,2
GOTO CAMBIOC
MOVF COD3,W
MOVLW '*'
CALL WRITEL
;-------------------------------
--------------------------------------------------------------------------------
37
--------------------
;ECOD42: Este modulo almacena la cuarta tecla numérica presionada y valida
; que no sea una tecla de función en caso de 'C' entra a la sección
; de "Cambio de Clave"
;-----------------------
----------------- ------------
-------------------------------------------------------------------------------
ECOD42
CALL SUELKEY
CALL ESPEKEY
MOVWF COD4 SUBLW 'A' BTFSC STATUS,2
GOTO INCOR
MOVF COD4,W MOVLW 01H ; Leemos el registro de la EEPROM
CALL LEECOD ; donde se encuentra almacenado el código correcto
SUBWF COD2 ; Comparamos las teclas
BTFSS STATUS,2 ;
GOTO INCOR ; Si la tecla es incorrecta
MOVLW 02H ; Leemos el registro de la EEPROM
CALL LEECOD ; donde se encuentra almacenado el código correcto
SUBWF COD3 ; Comparamos las teclas
BTFSS STATUS,2 ;
GOTO INCOR ; Si la tecla es incorrecta
MOVLW 03H ; Leemos el registro de la EEPROM
CALL LEECOD ; donde se encuentra almacenado el código correcto
SUBWF COD4 ; Comparamos las teclas
BTFSS STATUS,2 ;
GOTO INCOR ; Si la tecla es incorrecta
CALL CLEARL ; CLAVE CORRECTA
38
MOVLW 02H ; Colocamos en posición
CALL SITUCU ; el cursor para escribir en el LCD
MOVLW MEN_2 ; Escribimos el Mensaje
CALL ESCMEN ; de bienvenida
MOVLW 03H ; Reinicia
MOVWF INTENTO ; el número de intentos
BSF PORTERO ; Activa mecanismo de apertura
MOVLW T_RELE ;
CALL DELAY ; Esperamos el tiempo dado por T_RELE
BCF PORTERO
; Desactivamos mecanismo de apertura
MOVLW 10H
CALL DELAY
GOTO PRINCI ; Reiniciamos el sistema ;----------------------------------------------------------------------------------------------------------------------------------- ;INCOR: La clave fue incorrecta y envía el mensaje al LCD ;---------------------------------------------------------------------------------------------
--------------------------------------
INCOR
MOVLW 0CH
CALL COMANDO
CALL CLEARL
MOVLW MEN_3
;Escribeelmensajedeclave incorrecta
CALL ESCMEN ;
DECFSZ INTENTO,F; Decrementa el número de intentos disponibles
GOTO INCOR2 ; Si aún quedan intentos disponibles
GOTO ALARMA ; Si se acabaron los intentos activa la "Alarma"
INCOR2
MOVLW 20H ;Esperauntiempoantesde
CALL DELAY ; Poder intentar el ingreso
GOTO PRINCI
;------------------- -------- --------- ----------------------------------------
39
---- ------------
---------------------------------------
;ALARMA: Después de 3 intentos incorrectos de acceso se activa
; la alarma ;-----------------------------------------------------------------------------------------------------------------------------------
ALARMA
MOVLW 1EH
MOVWF TECLA
ALARMA4
MOVLW 03H ;Reiniciamoselnumerodeintentos
MOVWF INTENTO ;disponibles
MOVLW 00FH
MOVWF CUENTA1
MOVLW 030H
MOVWF CUENTA2
ALARMA1
MOVLW 20H
MOVWF CUENTA4
DECF CUENTA1,F BTFSC STATUS,2
GOTO ALARMA2
ALARMA3 BSF ALA ; Enciende
CALL FRECU ; Frecuencia de apagado y encendido
BCF ALA ; Apaga
CALL FRECU
DECFSZ CUENTA4,F
GOTO ALARMA3
GOTO ALARMA1
ALARMA2
MOVLW 01H
CALL DELAY
DECFSZ TECLA,F
GOTO ALARMA4
40
GOTO PRINCI
FRECU
MOVF CUENTA1,W
MOVWF CUENTA3
FRECU2
DECFSZ CUENTA3,F
GOTO FRECU2
DECFSZ CUENTA2,F
GOTO FRECU
MOVLW 030H
MOVWF CUENTA2
RETURN ;-----------------------------------------------------------------------------------
------------------------------------------------
;CAMBIOC: Este modulo Cambia la clave almacenada ;--------------------------------
---------------------------------------------------------------------------------------------------
CAMBIOC
CALL CLEARL
MOVLW MEN_4 ; 'CAMBIO DE'
CALL ESCMEN ; Escribe el mensaje
MOVLW MEN_5 ; ' CLAVE'
CALL ESCMEN ; Escribe el mensaje
MOVLW 20H
CALL DELAY ; Retardo
CALL CLEARL ; Limpiamos el Display
MOVLW MEN_5 ; ' CLAVE'
CALL ESCMEN ; Escribe el mensaje
MOVLW MEN_6 ; ' ANTIGUA'
CALL ESCMEN ; Escribe el mensaje
CALL SUELKEY
; Espera a que se deje de presionar la tecla
MOVLW 44H
CALL SITUCU ; Colocamos el cursor en la
41
línea siguiente
CALL COGECOD
; Obtiene el Código Tecleado
MOVLW 00H
; Dirección de la EEPROM donde está almacenado el digito
CALL LEECOD
; Lee el Código de le EEPROM y lo regresa en el acumulador
SUBWF COD1
; compara el código almacenado con el tecleado
BTFSS STATUS,2 ;
GOTO INCORE ; Si no es igual
; Si es igual compara el siguiente digito
MOVLW 01H
; Dirección de la EEPROM donde está almacenado el digito
CALL LEECOD
; Lee el Código de le EEPROM y lo regresa en el acumulador
SUBWF COD2
; compara el código almacenado con el tecleado
BTFSS STATUS,2 ;
GOTO INCORE ; Si no es igual
; Si es igual compara el siguiente digito
MOVLW 02H ; Dirección de
42
la EEPROM donde está almacenado el digito
CALL LEECOD
; Lee el Código de le EEPROM y lo regresa en el acumulador
SUBWF COD3
; compara el código almacenado con el tecleado
BTFSS STATUS,2 ;
GOTO INCORE ; Si no es igual
; Si es igual compara el siguiente digito
MOVLW 03H
; Dirección de la EEPROM donde está almacenado el digito
CALL LEECOD
; Lee el Código de le EEPROM y lo regresa en el acumulador
SUBWF COD4
; compara el código almacenado con el tecleado
BTFSS STATUS,2 ;
GOTO INCORE ; Si no es igual
MOVLW 03H ; Si el código fue correcto
MOVWF INTENTO
; Reiniciamos el número de intentos
;----------------------------------------------------------------------------------------------------------------------------------- ;NUEVACL: Capturamos y verificamos la nueva clave y se almacena
; en la EEPROM
43
;---------------------------------------------------------------------------------
--------------------------------------------------
NUEVACL
CALL CLEARL ; Limpiamos el Display
MOVLW 02H
CALL SITUCU ; Colocamos el cursor en la primera línea
MOVLW MEN_7 ; 'NUEVA'
CALL ESCMEN ; Escribimos el mensaje
MOVLW MEN_5 ; ' CLAVE'
CALL ESCMEN ; Escribimos el mensaje
MOVLW 44H ; Cambiamos de línea
CALL SITUCU ;
CALL SUELKEY ; Esperamos que se libere la tecla
CALL COGECOD ; Leemos el nuevo código
MOVF COD1,W ; Copiamos COD1 para verificar posteriormente
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD1A ; Almacenamos COD1 en COD1A
MOVF COD2,W ; Copiamos COD2 para verificar posteriormente
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD2A ; Almacenamos COD2 en COD2A
MOVF COD3,W ; Copiamos COD3 para verificar posteriormente
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD3A ; Almacenamos COD3 en COD3A
MOVF COD4,W ; Copiamos COD4 para verificar posteriormente
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD4A ; Almacenamos COD4 en COD4A
CALL CLEARL ;VERIFIQUE CLAVE
MOVLW MEN_8 ; 'VERIFIQUE'
CALL ESCMEN ; Escribe mensaje
MOVLW MEN_5 ; ' CLAVE'
CALL ESCMEN ; Escribe mensaje
MOVLW 44H ; Colocamos el cursor en la segunda línea
CALL SITUCU ;
CALL SUELKEY ;
44
CALL COGECOD ; Obtiene el código
MOVF COD1,W ; Compara el COD1 con COD1A
SUBWF COD1A,W ;
BTFSS STATUS,2 ;
GOTO NOVERI ; Si COD1 != COD1A
MOVF COD2,W ; Si COD1 = COD1A continuamos comparando
SUBWF COD2A,W ; COD2 contra COD2A
BTFSS STATUS,2;
GOTO NOVERI ; Si COD2 != COD2A
MOVF COD3,W ; Si COD2 = COD2A continuamos comparando
SUBWF COD3A,W ;
BTFSS STATUS,2;
GOTO NOVERI ; Si COD3 != COD3A
MOVF COD4,W ; Si COD3 = COD3A continuamos comparando
SUBWF COD4A,W ;
BTFSS STATUS,2;
GOTO NOVERI ; Si COD4 != COD4A
; Si COD4 = COD4A continuamos
CALL CLEARL ;CLAVE CAMBIADA
MOVLW MEN_5 ; ' CLAVE'
CALL ESCMEN ; Escribe mensaje
MOVLW MEN_9 ; ' CAMBIADA'
CALL ESCMEN ; Escribe mensaje
MOVF COD1,W ; Guarda en CODWRITE el
MOVWF CODWRITE ; digito que se almacenara en EEPROM
MOVLW 00H ; Dirección donde guardara el digito
CALL EEWRITE ; almacena en EEPROM la clave
MOVF COD2,W ; Guarda en CODWRITE el
MOVWF CODWRITE ; digito que se almacenara en EEPROM
MOVLW 01H ; Dirección donde guardara el digito
CALL EEWRITE ; almacena en EEPROM la clave
MOVF COD3,W ; Guarda en CODWRITE el
MOVWF CODWRITE ; digito que se almacenara en EEPROM
MOVLW 02H ; Dirección donde guardara el digito
CALL EEWRITE ; almacena en EEPROM la clave
MOVF COD4,W ; Guarda en CODWRITE el
MOVWF CODWRITE ; digito que se almacenara en EEPROM
MOVLW 03H ; Dirección donde guardara el digito
45
CALL EEWRITE ; almacena en EEPROM la clave
MOVLW 20H
CALL DELAY
GOTO PRINCI ;---------------------------------------------------------
--------------------------------------------------------------------------
;NOVERI: Identifica un error al ingresar la clave nueva
; por segunda vez
;----------------------------------------------------------------- ------------------------------------------------------------------
NOVERI
CALL CLEARL ; Limpia LCD
MOVLW 03H ;
CALL SITUCU ; Colocamos el cursor en la primera línea
MOVLW MEN_12 ; 'INTENTELO'
CALL ESCMEN ; Escribe Mensaje
MOVLW 43H ;
CALL SITUCU ; Colocamos el cursor en la segunda línea
MOVLW MEN_13 ; 'DE NUEVO'
CALL ESCMEN ; Escribe mensaje
MOVLW 20H
CALL DELAY
GOTO NUEVACL ;--------------------------------------------------------------------------------------------- --------------------------------------
;INCOREC: Despliega un mensaje cuando suscita un error al
; introducir el código INCOREC
CALL CLEARL ;LA CLAVE DEBE TENER 4 DIGITOS
MOVLW MEN_10 ; 'LA CLAVE DEBE'
CALL ESCMEN ; Escribe mensaje
MOVLW 40H
CALL SITUCU ; Cursor a segunda línea
MOVLW MEN_11 ; 'TENER 4 DIGITOS'
CALL ESCMEN ; Escribe mensaje
MOVLW 20H
46
CALL DELAY
GOTO PRINCI
INCORE
DECF INTENTO,F; Decrementa el número de intentos
BTFSC STATUS,2 ; verifica que aun existan intentos
GOTO ALARMA ; si no hay intentos activa ALARMA
CALL CLEARL ; Limpia Display
MOVLW MEN_3 ; 'CLAVE INCORRECTA'
CALL ESCMEN ; Escribe Mensaje
MOVLW 20H
CALL DELAY
CALL SUELKEY ; Esperamos a que suelte la tecla
GOTO PRINCI ;----------------------------------------------------------------------------------------------------------------------------------- ;COGECOD: Lee el código y lo compara con el antiguo ;----------------------------------------------------------------------------------------------------------------------------------- COGECOD
CLRF COD1 ; Limpiamos las variables
CLRF COD2
CLRF COD3
CLRF COD4 ;----------------------------------------------------------------------------------------------------------------------------------- ;ECOD12C: Lee la primera tecla del código y verifica ; que sea numérica ;----------------------------------------------------------------------------------------------------------------------------------- ECOD12C
CALL SUELKEY ;Esperamosaquesueltelatecla
CALL ESPEKEY ;Esperamosaquesepresionelatecla
MOVWF COD1 ; SUBLW 'A' BTFSC STATUS,2
47
RETURN ;Sies'A'
MOVF COD1,W ;Sinoes'A'verificamos'C'
SUBLW 'C' BTFSC STATUS,2
GOTO ECOD12C ;Sies'C'
MOVLW '*' ;Sinoes'C'
CALL WRITEL ;Escribimos'*'enpantalla
;-----------------------------------------------------------------------------------------------------------------------------------
;ECOD22C: Lee la segunda tecla del código y verifica
; que sea numérica
;-----------------------
------------------------ -----
-------------------------------------------------------------------------------
ECOD22C
CALL SUELKEY ;Esperamos a que suelte la tecla
CALL ESPEKEY ; Esperamos a que se presione la tecla
MOVWF COD1 ; SUBLW 'A' BTFSC STATUS,2
RETURN ;Sies'A'
MOVF COD1,W ;Sinoes'A'verificamos'C'
SUBLW 'C' BTFSC STATUS,2
GOTO ECOD22C ;Sies'C'
MOVLW '*' ;Sinoes'C'
CALL WRITEL ;Escribimos'*'enpantalla
;-----------------------------------------
------------------------------------------------------------------------------------------
;ECOD32C: Lee la tercera tecla del código y verifica
; que sea numérico.
48
BIBLIOGRAFIA.
1. Curso Avanzado de Microcontroladores PIC.
2. Iovine, John. PIC Robotics .McGraw Hill. E.U. A. 2004, 290 p.p.
3. http://es.wikipedia.org/wiki/Microcontrolador