Electrónica, Electricidad y Sonido


Cerradura electrónica multiusuario


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.


    'Cerradura electrónica multiusuario'


    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

    ;-------------------------------------------------------------------------------;ASIGNACION 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.

    'Cerradura electrónica multiusuario'

    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




    Descargar
    Enviado por:Rexios
    Idioma: castellano
    País: Perú

    Te va a interesar