Está en la página 1de 34

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:

a) 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.

b) Dar una visión practica de los principios de diseño de sistemas


implementados con microcontroladores.

c) Convencer a la necesidad de la implementación de los diseños


tradicionales con aplicaciones empleando microcontroladores.

d) 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.
Especificación

Teclado

1 2 3
4 5 6
7 8 9
Bloqu 0 Clear

Puesta a cero de los


Bloqueo de la cerradura
contadores
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

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

Estructura de datos
Primer dígito de la clave
Segundo dígito de la clave
Tercer dígito de la clave
Cuarto dígito de la clave
Quinto dígito de la clave
Sexto dígito de la clave
Nº máximo de accesos permitidos
Contador de accesos
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 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

a) CALCULO DEL RETARDO PARA EL ANTI REBOTE

Consideramos necesario un retardo de 3ms para lo cual calculamos el valor de nuestro


bucle.

tiempo de retardo
valor del bucle =
ciclo de maquina
3ms
valor del bucle = ≅ 255 = FFh
12 µs
Valor de bucle.- es el valor de repeticiones que hace el programa cuando se encuentra
en un bucle.

b) 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:

valor de bucle ×ciclode maquina = tiempo


65535 ×12 µs = 0.78642 seg.
si necesitamo s 4 seg. debemos repetir 5 veces el conteo
4
= 5 veces
0.78642

c) 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.

d) PROBABILIDADES

Se ha pensado en una clave de seis digitos de manera que disminuya nuestra


probabilidad de encontrar la clave de usuario.
1 1 1 1 1 1
P(A) = × × × × × = 10 −6 ; una en millon para el primer intento
10 10 10 10 10 10
APÉNDICE B

DATOS TECNICOS DE LOS COMPONENTES USADOS

También podría gustarte