Cerradura electrónica multiusuario

Anuncio
CERRADURA ELECTRÓNICA MULTIUSUARIO PARA PUERTAS INTERIORES DE ALTA
SEGURIDAD
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN
FACULTAD DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERIA ELECTRÓNICA
TITULO DEL TRABAJO
CERRADURA ELECTRÓNICA MULTIUSUARIO
AREQUIPA − PERU
2000
TABLA DE CONTENIDOS
Prologo...................................................................................................4
Introducción...........................................................................................6
Especificaciones.....................................................................................7
Grafico de teclado...................................................................................8
Grafico visualización de display............................................................10
Diagrama de bloques del hardware........................................................12
Diagrama de bloques del software.........................................................13
Tabla de la estructura de datos...............................................................13
Gráficos de lectura de teclado................................................................14−17
Flujo grama de la estructura del programa.............................................19
Flujo grama de los modos de usuario.....................................................20
Flujo grama de modo superusuario.........................................................21
Diagrama esquemático completo............................................................22
Código fuente del programa....................................................................22
Conclusiones y consideraciones finales..................................................36
Bibliografía.............................................................................................36
1
Apéndice A Cálculos de Tiempos.......................................................37
Apéndice B Datos técnicos de los componentes...................................39
Apéndice C Emulador..........................................................................CD
PROLOGO
• OBJETIVOS
El presente trabajo fue concebido con los siguientes objetivo:
• Desarrollar una aplicación con microcontrolador ya que el desarrollo de la electrónica digital y en general
de toda la electrónica tiene una tendencia la reducción del hardware que se utiliza, tomando como una
alternativa altamente eficiente y rentable la implementación por software mediante dispositivos
programables como son los microcontroladores (8052) los cuales hacen posible la implementación de
aplicaciones en una forma mas sencilla.
• Dar una visión practica de los principios de diseño de sistemas implementados con microcontroladores.
• Convencer a la necesidad de la implementación de los diseños tradicionales con aplicaciones empleando
microcontroladores.
• Enseñar ha manejar las herramientas de diseño con microcontroladores.
• METODOLOGÍA
Sea ha procurado dar una distribución adecuada de los contenidos de acuerdo a las etapas en las que se ha
desarrollado el proyecto.
Comenzamos haciendo una introducción al desarrollo del sistema , se describirá en forma detallada las
especificaciones necesarias que se han considerado en el desarrollo de nuestro sistema .
Plantearemos la estructura que tendrá nuestro programa de software en forma de flujo gramas el cual será muy
útil para la elaboración del código y posterior mejora en el.
Se diseñara un detallado y elaborado circuito esquemático el cual será definitivo para la implementación final
de dicho sistema .
Se documentara en forma detallada cara parte de nuestro programa, se incluirá todo el código fuente en
ensamblador debidamente documentado.
Referiremos las consideraciones y conclusiones finales necesarias obtenidas a la finalización de dicho
proyecto.
Finalmente ajuntaremos algunos apéndices que contendrán la descripción del simulador usado, las
características de los circuitos usados y todos los cálculos justificativos
• HERRAMIENTAS UTILIZADAS
Se utilizo el PK51 VISION COMPILADOR, y el simulador DSCOPE para 8052, se utilizo también en el
dibujo del circuito esquemático el programa CIRCUIT MAKER 6, y ORCAD 9.
INTRODUCCIÓN
2
El proyecto que se va ha desarrollar ha sido considerado en un supuesto contrato que nos ha hecho una
empresa fabricante de puertas de alta seguridad TRANQUERA la cual esta desarrollando una puerta interior
para el LABORATORIO DE MUESTRAS CLINICAS de la Universidad Nacional de San Agustín.
La empresa fabricante de puertas TRANQUERA nos ha hecho un subcontrato para el diseño e
implementación tan solo de la parte electrónica, pues ellos se encargaran del desarrollo de la parte eléctrica y
mecánica de dicha.
En general nuestro trabajo constara del diseño e implementación de una cerradura multiusuario.
ESPECIFICACIONES
Hemos desarrollado un pequeño proyecto suponiendo que hemos sido contratados por una empresa fabricante
de puertas de alta seguridad para diseñar y fabricar la parte electrónica de una cerradura multiusuario.
El sistema estará colocado en puertas interiores, es decir, no estará en la calle. Controlará accesos a
laboratorios. En definitiva, se usará en recintos donde el acceso deba estar muy restringido y controlado.
Habrá un máximo de 20 usuarios, contando además con un superusuario que se encargará de la gestión del
sistema.
También contará cada usuario con un número de accesos autorizados determinado por el superusuario (de 0 a
99), de manera que, por ejemplo, un empleado de la limpieza solo podrá acceder al recinto un par de veces
diarias, y el encargado del lugar, 50.
Las claves de cada usuario serán de seis dígitos, para entrar deberán pulsarse después del número de usuario
(1 a 20).
El superusuario será el 0, y cuando entre en el sistema, podrá modificar la clave y el número de accesos
autorizados de cualquier usuario incluyendo su misma clave. Además, podrá bloquear el sistema para que
nadie entre y poner los contadores de entradas a cero.
La entrada de datos se hará por medio de un teclado con 12 pulsadores y el control del sistema se llevará por
medio de dos displays de siete segmentos.
El funcionamiento será el siguiente: partiendo del estado de espera (stand−by), en el que se visualizará (1) en
el display, se introduce el número de usuario (00 para superusuario), y aparece dicho número en el display, a
continuación se introduce la clave de 6 dígitos, los cuales no se visualizan por razones obvias. Si la clave ha
sido correcta y no se trata del superusuario, se abre la puerta durante unos segundos al tiempo que aparece (2)
en el display, volviendo a stand−by. En caso de que la clave haya sido incorrecta, aparecerá (3) en el display
durante unos segundos para volver después a stand−by.
En caso de que la clave haya sido correcta y se trate del superusuario, se visualizará (4) en el display,
indicando que se espera el número de usuario a modificar o bien la orden de borrar contadores o de bloqueo
del sistema. Si pulsamos una de las teclas numéricas, diremos al sistema que modificaremos lo que atañe a ese
usuario, visualizándose su número en el display. En primer lugar, debemos introducir su clave, que quedará
grabada en la memoria y será la que deberá utilizar dicho usuario de aquí en adelante. Al introducir el sexto
dígito de la clave, se pedirá el número de accesos autorizados para el usuario en cuestión visualizándose (5) en
el display (excepto que superusuario esté modificando superusuario, en cuyo caso la operación terminará con
3
la introducción de la clave). Para ello, se introducirán primero decenas y luego unidades, de manera que si los
accesos autorizados son 2, teclearemos 02. Después de esto, volveremos al estado de stand−by, visualizándose
(1).
Si se entra al sistema como superusuario, se pueden también borrar los contadores simplemente pulsando la
tecla indicada para ello después de la clave. Existe la posibilidad de bloquear el sistema, impidiendo la entrada
a todos los usuarios, pulsando en modo superusuario la tecla de bloqueo, con lo que aparece en el display (6).
De este estado de bloqueo solo es posible salir tecleando directamente la clave de superusuario.
DISPLAY
Se montará el teclado y el display sobre un circuito impreso y el resto del circuito en otro. Se interconectarán
ambos por medio de una cinta de 20 conductores y la separación máxima entre placas será de 20 cms.
La fuente de alimentación será blindada y con una batería de emergencia. El circuito no estará sometido a
fuertes vibraciones ni a cambios bruscos de temperatura ni a humedades extremas, así como tampoco tendrá
que soportar fluctuaciones importantes de tensión. La salida para activar la cerradura será de 5V, 100mA.
El sistema deberá contar con un sistema guardián que no permita que se este probando claves en forma
aleatoria este los pondrá el sistema bloqueado por un tiempo necesario como una medida de seguridad.
Los plazos de entrega se fijan en un mes para la entrega de documentos, dos meses para la presentación del
prototipo y de tres a seis meses la entrega del producto, dependiendo de la cantidad de unidades pedidas.
El sistema se construye a partir de un microcontrolador 8052. La velocidad de reloj se fija a 1 MHz no siendo
necesaria una velocidad mayor para el correcto funcionamiento del aparato. Con el objeto de simplificar el
hardware en lo posible, se prescinde de toda circuitería asociada al teclado, haciendo una conexión matricial
de los contactos del mismo (un terminal por fila, uno por columna) y conectando los siete terminales
resultantes a uno de los puertos del microcontrolador. De esta manera, complicamos un poco el software pero
obtenemos un ahorro importante en los costos de producción.
DIAGRAMA DE BLOQUES DE HARDWARE
A continuación se muestra el esquema eléctrico del circuito, obviando alimentaciones y circuitería de reloj:
Se utiliza un display de ánodo común, las resistencias limitadoras podrían ser de 330 ohmios. El buffer que
maneja la cerradura debe ser capaz de suministrar la corriente solicitada (100 mA), podría ser un ULN 2003.
En cuanto a los inversores que manejan el display, podrían obtenerse mediante dos circuitos integrados 7405.
Se opta por subcontratar la fabricación de la fuente de alimentación y del teclado, así como el diseño y
fabricación de las placas de circuito impreso.
DIAGRAMA DE SOFTWARE
En cuanto al software, se basa en una lectura continua del teclado, saltando a uno u otro sitio dependiendo de
un registro de estado, haciendo después un test de botón liberado para volver de nuevo a la lectura del teclado.
Quizá la parte más interesante del programa es la propia lectura del teclado, que se hace rastreando, es decir,
4
ponemos un 0 lógico en el pin correspondiente a la primera columna (P1.0) con todos los demás a 1, después
leemos del puerto y miramos si tenemos un 0 en alguna de las filas (P1.4 a P1.7), lo cual querrá decir que
hemos presionado uno de los botones.
En cuanto a la estructura de datos utilizada, se almacenan todos los datos de cada usuario en ocho bytes
consecutivos de memoria RAM interna. Un byte por dígito de la clave, uno para el número de accesos
autorizados y otro más como contador de accesos. Obviamente, el superusuario solo necesita de seis bytes, ya
que no tiene limitado el número de accesos al sistema.
Debemos precisar que existe una rutina de testeo de tecla presionada que se llama TESTOFF, que detecta si la
tecla ha dejado de ser presionada para poder continuar con el testeo para ver que otra tecla se presiono.
Tenemos implementado un base de registros donde el programa de acuerdo a los acontecimientos el programa
sabe a donde debe de ir, esta tabla de registros direcciona todas las acciones del sistema, como el ingreso de
los usuarios que se hace de acuerdo a una tabla en la cual se registra todos los datos de los usuarios en
memoria.
Después tenemos la rutina de captura de clave que se va almacenar en algunos registros de modo que al
concluir el ingreso del ultimo digito de la clave paso siguiente pasa a verificar si la clave que se ha digitado es
la correcta y a quien pertenece si a un usuario normal o al superusuario.
Si la clave es incorrecta va hacia una subrutina que resetea todos los valores para que se digite de nuevo al
usuario y luego la clave, si se introdujo erróneamente la clave el programa entra en un estado bloqueado
durante 5 minutos, este estado no puede ser parado por nadie, si la clave ha sido correcta y si es usuario
normal se abre la puerta y se cuenta una entrada a favor del usuario, si el usuario es el superusuario, lo
siguiente es ingresar el numero de usuario a modificar o si desea limpiar todas las entradas de los contadores
de los usuarios o bloquear el teclado.
Si decide modificar un usuario (inclusive el superusuario) puede cambiar la clave ingresando la nueva clave, y
darle un numero de accesos (entradas por la puerta excepto superusuario) , en ese orden y ahí finaliza modo
superusuario y regresa al modo stand by.
Debemos hacer algunas precisiones acerca del criterio de seguridad que se pensó y de acuerdo a la necesidad
de nuestro cliente, el superusuario no tiene por que saber las claves de los usuarios dicha clave es solo
responsabilidad del los usuarios, el sistema es totalmente flexible en cuanto a las claves todas las claves se
pueden cambiar, se pensó en un criterio para que el superusuario pueda ingresar por la puerta con una
combinación de dos teclas, mas es potestad del cliente si es que el superusuario pueda entrar o no, se
considero que en superusuario pueda abrir la puerta en este caso mas no se va describir cuales son las dos
teclas.
Presentamos algunos flujo gramas que se utilizaron en la elaboración del proyecto y que serán útiles a un
mejor entendimiento del lector.
5
CODIGO FUENTE COMPLETO
ESP EQU 001110000B ; ESTOS SON LOS CODIGOS QUE DEBEN SALIR POR LOS
LAA EQU 011110111B ; PUERTOS P0 Y P2 PARA VISUALIZAR LOS DISTINTOS
6
LAE EQU 001111001B ; SIMBOLOS EN EL DISPLAY.
LAU EQU 000111110B ; EL DE LA 'A' PONE TAMBIEN A 1 EL BIT QUE ABRE
LAV EQU 000110001B ; LA PUERTA
RAYA EQU 001000000B
LAL EQU 000111000B
CERO EQU 000111111B
UNO EQU 000000110B
DOS EQU 001011011B
TRES EQU 001001111B
CUATRO EQU 001100110B
CINCO EQU 001101101B
SEIS EQU 001111101B
SIETE EQU 000000111B
OCHO EQU 001111111B
NUEVE EQU 001100111B
ORG 000 ;SALTO AL INICIO
AJMP INICIO
ORG 000BH ;VECTOR DE INTERRUPCION TIMER 0
AJMP TIMER
ORG 001BH ;VECTOR DE INTERRUPCION TIMER 1
AJMP PAUSA
INICIO: MOV TMOD,#000010001B ;INICIALIZAMOS LOS TIMER EN MODO 1
MOV IE,#010001010B ;HABILITAMOS INTERRUPCION TIMER 0,1
MOV R1,#30H ;
MOV R2,#06H ;LE DAMOS UNA CLAVE AL SUPERUSUARIO
MOV P2,#000000000B;BLANQUEMOS DISPLAY UNO
7
MOV P0,#000000000B;BLANQUEMOS DISPLAY DOS
CLAVIN: MOV @R1,#010000010B ;PARA QUE PUEDA ENTRAR
INC R1
DJNZ R2,CLAVIN
MOV A,#ESP ;SACAMOS UN SIMBOLO EN LO QUE HACEMOS UN
MOV P0,A ;DELAY
LCALL DELAY ;HACEMOS EL DELAY
MOV A,#RAYA ;VISUALIZAMOS UNA RAYA (STAND−BY)
MOV P0,A
MOV A,R1
PUSH ACC
MOV R1,#2FH
MOV @R1,#03H
POP ACC
MOV R1,A
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
;RUTINA DE TESTEO DE TECLADO
TSTON: MOV A,#0FEH ;TESTEO DE LA PRIMERA COLUMNA DEL TECLADO
MOV P1,A ;
CPL A ;COMPLEMENTAMOS LO SACADO POR EL PTO.
MOV R7,A ;GUARDAMOS EN R7
MOV A,P1 ;LEEMOS DEL PUERTO
ORL A,#0FH ;PONEMOS A UNO LOS 4 DE MENOR PESO (COLUMNAS)
CPL A ;COMPLEMENTAMOS
JNZ BOTON ;SI NO ES CERO, SE HA PULSADO UNA TECLA
MOV A,#0FDH ;TESTEO DE LA SEGUNDA COLUMNA
8
MOV P1,A
CPL A
MOV R7,A
MOV A,P1
ORL A,#0FH
CPL A
JNZ BOTON
MOV A,#0FBH ;TESTEO DE LA TERCERA COLUMNA
MOV P1,A
CPL A
MOV R7,A
MOV A,P1
ORL A,#0FH
CPL A
JNZ BOTON
SJMP TSTON ;EMPEZAMOS DE NUEVO
TSTOFF: MOV A,#0F0H ;AQUI SE TESTEA SI SE HA DEJADO DE PULSAR LA TECLA
MOV P1,A ;SACAMOS UN CERO POR TODAS LAS COLUMNAS
MOV A,P1 ;LEEMOS DEL PUERTO
ORL A,#0FH ;PONEMOS A UNO TODOS LOS 4 DE MENOR PESO (COLUMNAS)
CPL A ;COMPLEMENTAMOS
JNZ TSTOFF ;SI NO ES CERO, LA TECLA SIGUE PULSADA, VUELTA ATRAS
MOV R7,#0FFH ;HACEMOS UN PEQUEÑO DELAY PARA EVITAR POSIBLES
DLY: DJNZ R7,DLY ;REBOTES
MOV A,#0F0H ;VOLVEMOS A HACER EL TEST
MOV P1,A
9
MOV A,P1
ORL A,#0FH
CPL A
JNZ TSTOFF
AJMP TSTON ;SI PASA EL TEST, VOLVEMOS A VER SI SE PULSA OTRA
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
;TABLA DE REGISTROS Y TOMA DE DECICIONES
BOTON: ORL A,R7 ;INCLUIMOS EN A, LA COLUMNA QUE SE TESTEABA
MOV R7,A ;LO GUARDAMOS EN R7 (TECLA PULSADA)
;LO SIGUIENTE, SON SALTOS CONDICIONALES SEGUN ESTADO
MOV A,R0 ;R0 ES EL REGISTRO DE ESTADO
CJNE A,#00,SIGA ;SI ES 00, HEMOS INTRODUCIDO USUARIO DECENAS
AJMP TECLA
SIGA: CJNE A,#01,SIG0 ;SI ES 01, HEMOS INTRODUCIDO USUARIO UNIDADES
AJMP TECLA
SIG0: CJNE A,#002,SIG1 ;SI 02, HEMOS INTRODUCIDO PRIMER DIGITO CLAVE
AJMP PRIMER
SIG1: CJNE A,#003,SIG2 ;SI 03, EL SEGUNDO
AJMP SEGUN
SIG2: CJNE A,#004,SIG3 ;SI 04, TERCERO
AJMP TERCE
SIG3: CJNE A,#005,SIG4 ;SI 05, EL CUARTO
AJMP CUART
SIG4: CJNE A,#006,SIG5 ;SI 06, EL QUINTO
AJMP QUINT
SIG5: CJNE A,#007,SIG6 ;SI 07, EL SEXTO, RECONOCEMOS CLAVE
10
AJMP CLAV
SIG6: CJNE A,#010H,SIG7 ;SI 10H, MODO SUPERUSUARIO, HEMOS INTRODUCIDO
AJMP TECLA ;LAS DECENAS DEL NUMERO DEL USUARIO A MODIFICAR
SIG7: CJNE A,#011H,SIG8 ;SI 11H, MODO SUPERUSUARIO, HEMOS INTRODUCIDO
AJMP TECLA ;LAS UNIDADES DEL NUMERO DEL USUARIO A MODIFICAR
SIG8: CJNE A,#012H,SIG9 ;SI 12H, HEMOS INTRODUCIDO PRIMER DIGITO CLAVE A
AJMP SCLAV ;MODIFICAR
SIG9: CJNE A,#013H,SIG10 ;SI 13H, SEGUNDO
AJMP SCLAV
SIG10: CJNE A,#014H,SIG11 ;SI 14H, TERCERO
AJMP SCLAV
SIG11: CJNE A,#015H,SIG12 ;SI 15H, CUARTO
AJMP SCLAV
SIG12: CJNE A,#016H,SIG13 ;SI 16H, QUINTO
AJMP SCLAV
SIG13: CJNE A,#017H,SIG14 ;SI 17H, SEXTO
AJMP SCLAV
SIG14: CJNE A,#018H,SIG15 ;SI 18H, HEMOS INTRODUCIDO DECENAS DE ACCESOS
AJMP SVECE ;AUTORIZADOS
SIG15: CJNE A,#019H,SIG16 ;UNIDADES
AJMP SVECE
SIG16: CJNE A,#020H,SIG17 ;SI 20H, ESTADO BLOQUEADO, SE HA INTRODUCIDO
AJMP PRIMER ;PRIMER DIGITO DE CLAVE
SIG17: CJNE A,#021H,SIG18 ;SEGUNDO
AJMP SEGUN
SIG18: CJNE A,#022H,SIG19 ;TERCERO
11
AJMP TERCE
SIG19: CJNE A,#023H,SIG20 ;CUARTO
AJMP CUART
SIG20: CJNE A,#024H,SIG21 ;QUINTO
AJMP QUINT
SIG21: CJNE A,#025H,SIG22 ;SEXTO, VERIFICA CLAVE
AJMP CLAV
SIG22: MOV R0,#00 ;SI NO ES NADA DE LO ANTERIOR, HA HABIDO
AJMP TSTOFF ;ALGUN ERROR, NOS PONEMOS EN STD−BY Y ATRAS
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
;TABLA DE COMPARACION DE TECLAS
TECLA: MOV A,R7 ;METEMOS EN A LA TECLA PULSADA
CJNE A,#010000010B,SIG23 ;UN CERO
AJMP T
SIG23: CJNE A,#000010100B,SIG24 ;UN UNO
AJMP TA
SIG24: CJNE A,#000010010B,SIG25 ;UN DOS
SJMP T2
SIG25: CJNE A,#000010001B,SIG26
SJMP T3
SIG26: CJNE A,#000100100B,SIG27
SJMP T4
SIG27: CJNE A,#000100010B,SIG28
SJMP T5
SIG28: CJNE A,#000100001B,SIG29
SJMP T6
12
SIG29: CJNE A,#001000100B,SIG30
SJMP T7
SIG30: CJNE A,#001000010B,SIG31
SJMP T8
SIG31: CJNE A,#001000001B,SIG32
SJMP T9
SIG32: MOV A,R0 ;SI NO ES NADA DE LO ANTERIOR, VEMOS SI
CJNE A,#00,ESTU0 ;ESTAMOS EN SUPERUSUARIO, LO QUE QUIERE
AJMP TSTOFF ;DECIR QUE ESTAMOS BLOQUEANDO O BORRANDO
;CONTADORES. SI NO ESTAMOS EN SUPER,
;SIMPLEMENTE NO TOMAMOS EN CUENTA LA TECLA
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−;ASIGN
REAL DE VALORES A LAS TECLAS Y VALORES DE DISPLAY
T: MOV A,#CERO
MOV R5,#00
SJMP NUMER
TA: MOV A,#UNO ;DAMOS VALOR AL NUMERO QUE HEMOS PULSADO
MOV R5,#001 ;ALMACENAMOS EL VALOR A SALIR POR EL DISPLAY
SJMP NUMER
T2: MOV A,#DOS
MOV R5,#002
SJMP NUMER
T3: MOV A,#TRES
MOV R5,#003
SJMP NUMER
T4: MOV A,#CUATRO
MOV R5,#004
13
SJMP NUMER
T5: MOV A,#CINCO
MOV R5,#005
SJMP NUMER
T6: MOV A,#SEIS
MOV R5,#006
SJMP NUMER
T7: MOV A,#SIETE
MOV R5,#007
SJMP NUMER
T8: MOV A,#OCHO
MOV R5,#008
SJMP NUMER
T9: MOV A,#NUEVE
MOV R5,#009
SJMP NUMER
ESTU0: CJNE A,#01H,ESUPER
AJMP TSTOFF
ESUPER: MOV A,R7 ;SI ES SUPERUSUARIO Y HEMOS PULSADO
CJNE A,#11000010B,NEXT ;UNA COMBINACION DE TECLAS
AJMP ATAJO ;ABRE LA PUERTA, O HEMOS PULSADO
NEXT: CJNE A,#010000001B,SIG33 ;LA TECLA DE CLEAR, SALTAMOS ALLI
AJMP CLEAR
SIG33: AJMP BLOQ ;SI NO, ES QUE HEMOS PULSADO LA DE
;BLOQUEO
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
14
;RUTINA PARA LA COMPOCISION DE NUMEROS (DECENAS UNIDADES) DE LOS USUARIOS
NUMER: MOV B,A ;IDENTIFICAMOS EL NUMERO DE USUARIO
MOV A,R0 ;QUE SE HA INTRODUCIDO POR EL TECLADO
CJNE A,#10H,SIG34
SJMP DECEN
SIG34: CJNE A,#00H,UNITD ;SI ES 00 HEMOS INGRESADO DECENAS
DECEN: MOV P2,B ;LAS DECENAS SE MULTIPLICAN POR 10
MOV A,R5 ;Y SE ALMACENA EN R6
MOV B,#0AH
MUL AB
MOV R6,A
INC R0
AJMP TSTOFF
UNITD: INC R0
MOV P0,B ;SI SON UNIDADES LAS SUMAMOS CON LAS
MOV A,R5 ;DECENAS
ADD A,R6
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
;TABLA DE USUARIOS
CJNE A,#000,NEXT1 ;SI HEMOS INTRODUCIDO USUARIO CERO
SJMP U0
NEXT1: CJNE A,#001,NEXT2 ;UN UNO
SJMP U1
NEXT2: CJNE A,#002,NEXT3 ;UN DOS
SJMP U2
NEXT3: CJNE A,#003,NEXT4
15
SJMP U3
NEXT4: CJNE A,#004,NEXT5
SJMP U4
NEXT5: CJNE A,#005,NEXT6
SJMP U5
NEXT6: CJNE A,#006,NEXT7
SJMP U6
NEXT7: CJNE A,#007,NEXT8
SJMP U7
NEXT8: CJNE A,#008,NEXT9
SJMP U8
NEXT9: CJNE A,#009,NEXT10
SJMP U9
NEXT10: CJNE A,#010,NEXT11
SJMP U10
NEXT11: CJNE A,#011,NEXT12
SJMP U11
NEXT12: CJNE A,#012,NEXT13
SJMP U12
NEXT13: CJNE A,#013,NEXT14
SJMP U13
NEXT14: CJNE A,#014,NEXT15
SJMP U14
NEXT15: CJNE A,#015,NEXT16
SJMP U15
NEXT16: CJNE A,#016,NEXT17
16
SJMP U16
NEXT17: CJNE A,#017,NEXT18
SJMP U17
NEXT18: CJNE A,#018,NEXT19
SJMP U18
NEXT19: CJNE A,#019,NEXT20
SJMP U19
NEXT20: CJNE A,#020,NEXT21
SJMP U20
NEXT21: MOV R0,#00H
MOV R1,#00H
MOV P2,#00
MOV P0,#RAYA
AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
;REGISTRO EN MEMORIA DE USUARIOS
U0: MOV R1,#30H ;PARA CADA USUARIO CARGAMOS R1 CON
SJMP YA ;LA DIRECCION DE SU REGISTRO
U1: MOV R1,#36H
SJMP YA
U2: MOV R1,#3EH
SJMP YA
U3: MOV R1,#46H
SJMP YA
U4: MOV R1,#4EH
SJMP YA
17
U5: MOV R1,#56H
SJMP YA
U6: MOV R1,#5EH
SJMP YA
U7: MOV R1,#66H
SJMP YA
U8: MOV R1,#6EH
SJMP YA
U9: MOV R1,#76H
SJMP YA
U10: MOV R1,#7EH
SJMP YA
U11: MOV R1,#86H
SJMP YA
U12: MOV R1,#8EH
SJMP YA
U13: MOV R1,#96H
SJMP YA
U14: MOV R1,#9EH
SJMP YA
U15: MOV R1,#0A6H
SJMP YA
U16: MOV R1,#0AEH
SJMP YA
U17: MOV R1,#0B6H
SJMP YA
18
U18: MOV R1,#0BEH
SJMP YA
U19: MOV R1,#0C6H
SJMP YA
U20: MOV R1,#0CEH
SJMP YA
YA: AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
CLEAR: MOV R2,#14H ;PARA BORRAR TODOS LOS CONTADORES (SON 20)
MOV R1,#3DH ;METEMOS EN R1 LA PRIMERA DIRECCION
BUCLE: MOV A,#00 ;PONEMOS UN CERO EN LA DIRECCION
MOV @R1,A ;APUNTADA POR R1
MOV A,R1 ;LE SUMAMOS 8
ADD A,#08 ;A R1
MOV R1,A
DJNZ R2,BUCLE ;SE DECREMENTA R2, SI NO HA LLEGADO A 0,SIGUE
MOV R0,#00 ;VOLVEMOS A STAND−BY SI HEMOS TERMINADO
MOV A,#RAYA
MOV P0,A
MOV P2,#00
AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
BLOQ: MOV R1,#30H ;SI BLOQUEAMOS, DEJAMOS PREPARADO EL SISTEMA
MOV R0,#20H ;PARA SER DESBLOQUEADO SOLO POR EL SUPERUSUARIO
MOV A,#LAL ;PONEMOS UNA 'L' EL EL DISPLAY
MOV P0,A
19
MOV P2,#00
AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
;COMPARACION DE CLAVE
PRIMER: MOV A,R7 ;EL PRIMER DIGITO DE LA CLAVE SE GUARDA EN
MOV R2,A ;R2
INC R0 ;SE INCREMENTA REGISTRO DE ESTADO
AJMP TSTOFF
SEGUN: MOV A,R7 ;EL SEGUNDO EN R3
MOV R3,A
INC R0
AJMP TSTOFF
TERCE: MOV A,R7 ;EL TERCERO EN R4
MOV R4,A
INC R0
AJMP TSTOFF
CUART: MOV A,R7 ;EL CUARTO EN R5
MOV R5,A
INC R0
AJMP TSTOFF
QUINT: MOV A,R7 ;EL QUINTO EN R4
MOV B,A
INC R0
AJMP TSTOFF
CLAV: MOV A,R2
XRL A,@R1 ;OR−EXCLUSIVA ENTRE PRIMER DIGITO Y REGISTRO
20
MOV R6,A
INC R1 ;INCREMENTAMOS REGISTRO INDICE
MOV A,R3 ;SEGUNDO DIGITO
XRL A,@R1
ADD A,R6
MOV R6,A
INC R1
MOV A,R4 ;TERCERO
XRL A,@R1
ADD A,R6
MOV R6,A
INC R1
MOV A,R5 ;CUARTO
XRL A,@R1
ADD A,R6
MOV R6,A
INC R1
MOV A,B ;QUINTO
XRL A,@R1
ADD A,R6
MOV R6,A
INC R1
MOV A,R7 ;SEXTO
XRL A,@R1
ADD A,R6
JNZ MAL
21
MOV A,R1
PUSH ACC
MOV R1,#2FH
MOV @R1,#03
POP ACC
MOV R1,A
MOV A,R1 ;SI NO TENEMOS R1 EN 35H, NO ES SUPER
CJNE A,#35H,NORMAL ;USUARIO, ES UNO NORMAL
MOV A,R0
CJNE A,#25H,SUP_US ;SI ESTAMOS EN ESTADO 25H ES DESBLOQUEO
SJMP VUELVE
SUP_US: MOV R0,#10H ;SI ES UN ACCESO SUPERUSUARIO, PONEMOS
MOV A,#LAU ;REGISTRO DE ESTADO A 10H Y VISUALIZAMOS
MOV P0,A ;UNA 'U'
MOV P2,#00
AJMP TSTOFF
NORMAL: INC R1 ;SI ES USUARIO NORMAL, COMPROBAMOS SI
MOV A,@R1 ;HA AGOTADO SUS ACCESOS AUTORIZADOS
INC R1
XRL A,@R1 ;SI ES ASI, SALTAMOS A VUELVE (NO ABRE)
JZ VUELVE
INC @R1 ;SI NO, INCREMENTAMOS CONTADOR Y
ATAJO: MOV A,#LAA ;ABRIMOS PUERTA
MOV P0,A
MOV P2,#00
ACALL DELAY
22
SJMP VUELVE
MAL: MOV A,#LAE ;PONEMOS UNA 'E' EN EL DISPLAY
MOV P2,#00
MOV P0,A
ACALL DELAY ;POR UNOS SEGUNDOS
MOV R1,#2FH
DEC @R1
MOV A,@R1
JNZ CONTIN
ACALL SECUR
CONTIN: MOV A,R0
CJNE A,#025H,VUELVE ;SI NO ESTA BLOQUEADO, SALTAMOS
AJMP BLOQ ;SI LO ESTA, DEJAMOS TODO COMO ESTABA
VUELVE: MOV R0,#00 ;DEJAMOS EL SISTEMA EN STAND−BY
MOV A,#RAYA
MOV P0,A
MOV P2,#00
AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SCLAV: MOV A,R7 ;AQUI SE GUARDA LA CLAVE DE UN USUARIO
MOV @R1,A ;SE METE EL DIGITO EN LA POSICION DE
INC R1 ;MEMORIA APUNTADA POR R1
INC R0 ;INCREMENTAMOS REGISTRO DE ESTADO
MOV A,R0
CJNE A,#018H,SALTO ;SI EL ESTADO NO ES 1H, SEGUIMOS
MOV A,R1
23
CJNE A,#036H,SIGUE ;SI NO ESTAMOS DETERMONANDO CLAVE DE
SJMP VUELVE ;SUPERUSUARIO, SEGUIMOS CON ACCESOS
SIGUE: MOV A,#LAV ;AUTORIZADOS
MOV P0,A
MOV P2,#00
SALTO: AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SVECE: MOV A,R7
CJNE A,#010000010B,SIG35 ;SI HEMOS PULSADO UN CERO
SJMP N0
SIG35: CJNE A,#000010100B,SIG36 ;UN UNO
SJMP N1
SIG36: CJNE A,#000010010B,SIG37 ;UN DOS
SJMP N2 ;
;
SIG37: CJNE A,#000010001B,SIG38
SJMP N3
SIG38: CJNE A,#000100100B,SIG39
SJMP N4
SIG39: CJNE A,#000100010B,SIG40
SJMP N5
SIG40: CJNE A,#000100001B,SIG41
SJMP N6
SIG41: CJNE A,#001000100B,SIG42
SJMP N7
SIG42: CJNE A,#001000010B,SIG43
24
SJMP N8
SIG43: CJNE A,#001000001B,SIG44
SJMP N9
SIG44: AJMP TSTOFF ;SI NO HEMOS PULSADO NINGUN NUMERO, NI CASO
N0: MOV A,#CERO ;PREPARAMOS PARA VISUALIZAR EN DISPLAY
MOV R6,#00 ;GUARDAMOS UN CERO EN R6
SJMP ESCRIB
N1: MOV A,#UNO ;LO MISMO PARA EL UNO
MOV R6,#01
SJMP ESCRIB
N2: MOV A,#DOS
MOV R6,#02
SJMP ESCRIB
N3: MOV A,#TRES
MOV R6,#03
SJMP ESCRIB
N4: MOV A,#CUATRO
MOV R6,#04
SJMP ESCRIB
N5: MOV A,#CINCO
MOV R6,#05
SJMP ESCRIB
N6: MOV A,#SEIS
MOV R6,#06
SJMP ESCRIB
N7: MOV A,#SIETE
25
MOV R6,#07
SJMP ESCRIB
N8: MOV A,#OCHO
MOV R6,#08
SJMP ESCRIB
N9: MOV A,#NUEVE
MOV R6,#09
SJMP ESCRIB
ESCRIB: MOV B,A
MOV A,R0
CJNE A,#18H,UNIDAD ;SI EL ESTADO NO ES 18H, SON UNIDADES
MOV P2,B ;MOSTRAMOS POR EL DISPLAY 0
MOV A,R6
MOV B,#0AH ;SI NO, MULTIPLICAMOS POR 10
MUL AB
MOV @R1,A ;GUARDAMOS EN POSICION DE MEMORIA
INC R0
AJMP TSTOFF
UNIDAD: MOV P0,A ;SI SON UNIDADES, SE LO SUMAMOS A LO
MOV A,R6
ADD A,@R1 ;DE LAS DECENAS
MOV @R1,A
ACALL DELAY ;HACEMOS UN DELAY PARA QUE SE VEA EL
MOV A,#RAYA ;DIGITO PULSADO EN EL DISPLAY
MOV P0,A ;DEJAMOS TODO COMO ANTES
MOV P2,#00
26
MOV R0,#00H
AJMP TSTOFF
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
DELAY: MOV TL0,#00 ;RUTINA DE RETARDO, CONTAMOS
MOV TH0,#00 ;CINCO VECES HASTA FFFFH
MOV A,#05
MOV TCON,#00010000B
ESPERA: JNZ ESPERA
MOV TCON,#00
RET
TIMER: MOV TL0,#00
MOV TH0,#00
DEC A
RETI
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SECUR: MOV TL1,#00 ;RUTINA DE SEGURIDAD ESPERAMOS
MOV TH1,#00 ;APROXIMADAMENTE 5 MINUTOS
MOV A,#0FFH ;MIENTRAS TODO ESTA BLOQUEADO
MOV R7,#00
TERMIN: MOV TCON,#01000000B
CICLO: JNZ CICLO
MOV TCON,#00
INC R7
CJNE R7,#01,SIG45
MOV A,#5DH
AJMP TERMIN
27
SIG45: MOV R1,#2FH
MOV @R1,#03
RET
PAUSA: MOV TL1,#00
MOV TH1,#00
DEC A
RETI
;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
END
CONCLUSIONES Y CONSIDERACIONES FINALES
• Por una parte hay que mencionar que la inclusión de más usuarios pasa ineludiblemente por la
incorporación de memoria RAM externa, lo cual complica considerablemente el diseño (software y
hardware) y conlleva un incremento muy importante del costo.
• Como una medida para asegurarnos un cliente, nos abstenemos de entregar al mismo el código de
nuestro programa, de esta manera siempre le saldrá más barato con nosotros una modificación.
• Las consideraciones necesarias para que el sistema no falle por la perdida de energía eléctrica, evento
que ocasionaría el borrado de los datos almacenados (password ,#accesos) en la memoria RAM del
microcontrolador. Hemos visto la necesidad del uso de un sistema de alimentación de emergencia
como un UPS que estabilice la energía eléctrica y que pueda alimentar al sistema para resguardar los
datos.
• Se incluyo como una medida que mejore la seguridad del sistema la inclusión de seis dígitos
numéricos en la clave de usuario y una rutina guardián que no permita el manipuleo indebido de las
claves.
• Proporcionamos un acceso para el superusuario con la sola combinación de dos teclas, esto permitirá
el ingreso por la puerta un numero indefinido de veces.
• Consideramos necesario aclarar la participación de nuestra empresa a limitarnos a el diseño e
implementación tan solo electrónica del hardware y software detallado claramente en este informe, la
parte mecánica, eléctrica, la puerta en si y la cerradura electromagnética será construida íntegramente
por la empresa TRANQUERA fabricante de puertas de alta seguridad para la cual realizamos el
siguiente trabajo.
Bibliografía
• GONZALES VASQUES, JOSE ADOLFO
28
Microprocesadores , fundamentos diseño y aplicación
• MARTINEZ PEREZ, JAVIER; BARRON RUIZ MARIANO
Introducción a los microcontroladores hardware software y aplicaciones
• REVISTA SABER ELECTRÓNICA N°6 AÑO 10 pag. 42−44
• CATALOGO FARNELL ELECTRONIC
• WWW.KEIL.COM
APÉNDICE A
• CALCULO DEL RETARDO PARA EL ANTI REBOTE
Consideramos necesario un retardo de 3ms para lo cual calculamos el valor de nuestro bucle.
Valor de bucle.− es el valor de repeticiones que hace el programa cuando se encuentra en un bucle.
• CALCULO DE RETARDO PARA DELAY
Consideramos necesario un tiempo de 4 seg. para lo cual calculamos el valor de nuestro bucle.
Si sabemos que el máximo valor que puede contar el TIMER 0 es de FFFFh o 65535 entonces:
• CALCULO DEL TIEMPO PARA RUTINA DE SEGURIDAD
El tiempo necesario para este retardo fue considerado en 5 min.= 300 seg.
Si contamos hasta FFFFh han transcurrido 078642 seg. Para 5 min. Necesitamos que esta cuenta se repita
aproximadamente 381 veces para que se llegue al tiempo establecido, pero para salvar el problema de
almacenar en un registro (de 8 bits) el numero cuenta que es de 12 bits entonces partimos la cuenta en 2.
• PROBABILIDADES
Se ha pensado en una clave de seis digitos de manera que disminuya nuestra probabilidad de encontrar la
clave de usuario.
29
APÉNDICE B
DATOS TECNICOS DE LOS COMPONENTES USADOS
Sexto dígito de la clave
Quinto dígito de la clave
Tercer dígito de la clave
Cuarto dígito de la clave
Primer dígito de la clave
Contador de accesos
Nº máximo de accesos permitidos
Segundo dígito de la clave
Estructura de datos
0
Bloqu
8
9
Clear
6
5
30
7
4
3
2
1
Teclado
Especificación
Bloqueo de la cerradura
Puesta a cero de los contadores
Stand − by (1)
Puerta abierta (2)
En caso de clave errónea (3)
En estado de superusuario (4)
Esperando nº de accesos autorizados (5)
Estado bloqueado (solo permite usarlo al superusuario ) (6)
Se visualiza el nº de usuario al acceder al sistema
31
Descargar