Sie sind auf Seite 1von 31

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

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

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

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,

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.

CODIGO FUENTE COMPLETO ESP EQU 001110000B ; ESTOS SON LOS CODIGOS QUE DEBEN SALIR POR

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

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

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

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

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

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

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

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

;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−;ASIG 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

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

;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

;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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

APÉNDICE B DATOS TECNICOS DE LOS COMPONENTES USADOS Sexto dígito de la clave Quinto dígito

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

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