Está en la página 1de 20

Universidad Nacional de Quilmes. Ingeniera en Automatizacin y Contr ol Industrial.

Diseo de Controladores Digitales.

Presentacin final. Proyecto de aplicacin del Microcontrolador MC68HC11F1. Diseo de una Alarma para domicilio.

v Fecha: 28-12-00. v Docente: Sille, Germn. v Alumnos: Galicchio, Pablo. Scarf, Germn A.

Diseo de una Alarma para domicilio

Pgina 2 de 20

Alarma digital de ltima generacin.

Descripcin general. Esta alarma est diseada para un fcil y rpido adaptamiento a sus funcionalidades. Consiste principalmente en la utilizacin de sensores inductivos, para detectar la apertura de puertas y ventanas y un sensor de movimiento. El modelo aqu presentado posee tres sensores inductivos, uno para la puerta del frente, uno para alguna ventana y el tercero aplicado a la puerta lateral. El tratamiento para cada uno de los sensores es de forma diferenciada. Para la utilizacin de las distintas funciones est provista de un teclado matricial, indicadores lumnicos (leds y un display de siete segmentos), un parlante para avisar de los acontecimientos, y un pulsador de activacin inmediata. El tratamiento aplicado a los distintos sensores, cuando el sistema est armado, es el siguiente: 1- Para la puerta del frente se cuenta con un retardo de treinta segundos, luego de detectada la seal de que esta se abri, ya que debe drsele tiempo al propietario de poder desarmar el sistema antes que se active la alarma. 2- Los sensores de la ventana, la puerta lateral y el detector de movimiento producen una activacin inmediata de la alarma, ya que no son lugares por donde el morador pueda ingresar normalmente. El sensor de movimiento lleva una alimentacin de 12V y, al igual que los otros sensores, se comporta como una llave abierta o cerrada segn la circunstancia. Esta capacidad es la que se aprovecha en la implementacin del sistema, conectando los sensores entre Vcc y un pin de algn port, conocidos ambos, lo que permite detectar si la llave se encuentra abierta o cerrada. Las funciones de armado del sistema y desactivacin de la alarma slo son posibles a travs del teclado. El armado se realiza con la sola condicin de apretar una tecla y para lograr apagar la alarma es necesario ingresar la clave correspondiente. El sistema utiliza una clave tres dgitos. En el momento del armado se realiza una revisin de todos los sensores, para verificar su correcto funcionamiento y saber si las aberturas se encuentran cerradas. Luego de este test hay una espera treinta segundos y posteriormente el sistema se encuentra armado. El pulsador de activacin inmediata tiene una prioridad especial sobre cualquier situacin en que se encuentre el sistema. Su funcin es la de actuar como botn de pnico, esto se utiliza para poder activar la alarma en caso de alguna emergencia, cuando los ocupantes se encuentren dentro del domicilio. Para poder realizar la cuenta de los tiempos de espera, se programan los timers y se utiliza la posibilidad de enmascarar o no sus interrupciones. Cuando

Diseo de una Alarma para domicilio

Pgina 3 de 20

es necesario contar el tiempo se habilita la interrupcin, y cuando no es necesario, la interrupcin est desabilitada. Para poder realizar el sonido de la alarma, tambin se aprovecha un timer, programndolo, para que el llegar su interrupcin, cuando se la atiende, se enva un pulso que a cada llamada invierte su valor, logrando con esto una seal peridica cuadrada.

Instrucciones de funcionamiento. Una vez que haya conectado su central de alarma con poco puede comenzar a disfrutar de la tranquilidad que esta le brinda. Armando el sistema. Para lograr esta operacin slo necesita presionar la tecla (*). En este momento la central realiza un diagnstico del sistema. Para este diagnstico se cuenta con cuatro indicadores lumnicos que le servirn para identificar posibles fallas o descuidos. Pasada esta etapa, el sistema se encuentra armado (deber encenderse el led sistema armado) y listo para cazar a los amigos de lo ajeno. Detectando fallas. Como se dijo arriba, durante la orden de armado usted debe observar los leds indicadores. Si alguno de stos se encontrare encendido al dar la orden de armado, est indicando que algn sensor se encuentra fuera de servicio o, segn la indicacin puede ser: Puerta del frente: sta se halla abierta, debe cerrarla para permitir el armado. Puerta lateral: si sale de casa, cirrela o alguien podr entrar a pasear. Ventana: verifique que est cerrada. Garaje: el sensor est descompuesto o el gato anda por all. Luego de identificar el problema, puede intentar nuevamente el armado. Botn de pnico. Como medida de seguridad extra, el sistema cuenta con un pulsador que le permitir a usted activar la alarma en cualquier circunstancia, con slo presionarlo. Para poder utilizarlo no es necesario que el sistema se encuentre armado, ya que, si usted se encuentra dentro del domicilio e ingresan los malechores, necesitar activar de inmediato la alarma. Apagando la alarma. Una vez que se ha producido algn incidente, que origine en el encendido de la alarma, sta slo podr ser apagada mediante el ingreso de la clave personal del sistema. Para que el sistema atienda su pedido de ingresar la clave, debe presionar la tecla (#), ver en el display la seal indicadora y seguidamente puede ingresar la clave segn el orden establecido: centenas, decenas y unidades. Si la clave tecleada es la correcta, la alarma dejar de sonar. En caso

Diseo de una Alarma para domicilio

Pgina 4 de 20

de que comience a ingresar la clave y se equivoque, podr presionar la tecla (#) para volver a comenzar con el ingreso de la clave. Desarmando el sistema. La nica forma de realizar esta operacin, como la anterior, es mediante el ingreso de la clave personal del sistema. Los pasos son los mismos que los descriptos arriba. Cuando logre su cometido observar que el led indicador se apaga. Cambiando la clave. El sistema debe estar desarmado. Los pasos para realizar esta tarea son: 1. Presionar la tecla numeral. 2. Ingresar la clave vieja. 3. Luego ver la indicacin en el display ( C ). 4. Presionar nuevamente numeral. 5. Ingresar la nueva clave. Luego de estos pasos el sistema ya est programado con la clave por usted elegida. Clave personal del sistema: 284.

Fotos del proyecto.

Vista de la maqueta

Diseo de una Alarma para domicilio

Pgina 5 de 20

Tablero de comandos

Interiores del tablero

Sensores interiores de la maqueta

Diseo de una Alarma para domicilio

Pgina 6 de 20

Diagramas de flujo de la aplicacin.

COMIENZO

-ASIGNAR SP -PROGRAMAR PORTS -HAILITAR INTERRUPCIONES -DECLARACION DE VARIABLES 1

MASKP=PORTD

PANICO

MASKA=PORTG

CONECTAR

MASKN=PORTG

CAMBIO CLAVE

PANICO

ALARMA

NUMERAL

Diseo de una Alarma para domicilio


ALARMA

Pgina 7 de 20

-HABILITAR INTERRUPCION DEL OC2

FIN

NUMERAL

TECLA

no Tecla = # si

MUESTRA n

no si Digitos=3

TECLA

no =U,D,C Tecla

si

MUESTRA H

Diseo de una Alarma para domicilio

Pgina 8 de 20

CONECTAR

SENSAR TODOS LOS DETECTORES ERROR=1

ERROR=0

no
1

si

MASKI1=P0RTG

si

HABILITA TIMER OC4

PANICO

MASKi2=PORTG

si

PANICO

MASKI3=PORTG

si

PANICO

MASKM=PORTG

si

PANICO

MASKP=PORTD

si

PANICO

MASKN=PORTG

si
PANICO

Diseo de una Alarma para domicilio

Pgina 9 de 20

CAMBIO CLAVE

NUMERAL

MUESTRA C

NUMERAL

-CLAVEU =CLAVETECU -CLAVED=CLAVETECD -CLAVEC=CLAVETECC

Listado comentado del cdigo programado.


PORTA PORTAx DDRA PORTG DDRG PORTB PORTF PORTC DDRC PORTD DDRD PORTE TOC2 TOC4 TMSK1 TFLG1 TFLG1x SPCR EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU org Comienza: lds ldaa $1000 $0 $1001 $1002 $1003 $1004 $1005 $1003 $1006 $1008 $1009 $100A $1018 $101C $1022 $1023 $23 $1028 $0 ; Esta la direccion de comienzo del programa. ; Esta la direccion de comienzo del programa. ; Inicializacion del SP. ; Seteamos los puertos A y G como entrada,

#$3FF #0

Diseo de una Alarma para domicilio staa staa ldaa staa ldaa staa ldaa staa cli jmp DDRA DDRG #%11111000 DDRD #0 SPCR #0 PORTD ; colocando en cero sus DDR.

Pgina 10 de 20

; Seteamos como salida los pines libres del ; PORTD.

; Colocamos en cero el registro SPCR. ; Limpiamos el puerto D.

Main

; Habilitamos interrupciones enmascarables. ; Salto al flujo principal del programa.

;***************************************************************************** ;Nuestras definiciones de variales. ;***************************************************************************** ClaveU: BYTE $4 ; La clave del sistema, unidades. ClaveD: BYTE $8 ; La clave del sistema, decenas. ClaveC: BYTE $2 ; La clave del sistema, centenas. ClaveTecU: BYTE $0 ; Valor de la clave tecleada, unidades. ClaveTecD: BYTE $0 ; Valor de la clave tecleada, decenas. ClaveTecC: BYTE $0 ; Valor de la clave tecleada, centenas. org BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE $024 %11111010 %10100000 %11010110 %11110100 %10101100 %01111100 %01111111 %11100000 %11111111 %11111100 %11101110 $0 $1 ; ; ; ; ; ; ; ; ; ; ; ; ; ; Comienzo de la tabla usada para prender el display con lo tecleado. 0 1 2 3 4 5 6 7 8 9 * ( A ) Tabla usada para guardar el numero tecleado.

BYTE $2 BYTE $3 BYTE $4 BYTE $5 BYTE $6 BYTE $7 BYTE $8 BYTE $9 ;***************************************************************************** ;Nuestras definiciones de variables. ;***************************************************************************** ERROR: Mask0: Mask1: Mask2: Mask3: Mask4: Mask5: Mask6: Mask7: Mask8: BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE 0 %00001000 %00000001 %00000010 %00000100 %00001000 %00010000 %00100000 %01000000 %10000000 ; ; ; ; ; ; ; ; ; ; ; La variable para leer los sensores. Mascaras para buscar los valores tecleados. Esta en el portG. Esta en el portA. Esta en el portA. Esta en el portA. Esta en el portA. Esta en el portA. Esta en el portA. Esta en el portA. Esta en el portA.

Diseo de una Alarma para domicilio Mask9: MaskA: MaskN: MaskI1: MaskI2: MaskI3: MaskM: MaskP: Timer2Ac: Timer1Ac: Digitos: InClave: Conec: AUX: NEWCLAVE: BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE %00000001 %00000010 %00000100 %00010000 %00100000 %01000000 %10000000 %00000100 0 $1 $0 $0 $0 $0 $FF ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

Pgina 11 de 20 Esta en el portG. Esta en el portG, el asterisco. Esta en el portG, el numeral. Esta en el portG, ind. 1, puerta. Esta en el portG, ind. 2, ventana. Esta en el portG, ind. 3, puerta lateral. Esta en el portG, mov. para el garage. Esta en el portD, el boton de panico. La variable para reconocer el timer OC4. La variable para reconocer el timer OC2. La cantidad de digitos tecleados. Valor del digito ingresado. Variable para salir de la casa. Variable sin importancia. Variale para indicar el cambio de clave.

;***************************************************************************** ; FLUJO PRINCIPAL DEL PROGRAMA. ;***************************************************************************** Main: clr Conec ; Limpiamos la variable ldaa anda bne ldaa anda bne ldaa anda bne jmp PORTD MaskP PanicoA2 PORTG MaskA ConectarA1 PORTG MaskN CambioCla Main ; Leemos el portd. ; Buscamos que el pulsador este apretado. ; Saltamos a la funcion de Panico. ; Leemos el portg. ; Buscamos que se apriete el asterisco. ; Saltamos a la funcion de Conectar. ; Leemos el portg. ; Buscamos que se apriete el numeral. ; Saltamos a la funcion de Cambiar la clave. ; Volvemos al comienzo de este flujo.

;***************************************************************************** ;Rutina para contar treinta segundos, continuacion... ;***************************************************************************** Treinta: ldaa TSEG1 ; Vemos el valor de TSEG1 comparandolo con cmp #0 ; cero. beq DecT2 ; Si es asi saltamos -> dec TSEG1 ; Decrementamos el valor de TSEG1. Salir: ldaa #$10 ; Limpia el flag de interrupcion del OC2. staa TFLG1 Final: rts ; Volvemos al lugar de partida. DecT2: ldaa staa dec ldaa cmp beq jmp Enmas: ldaa staa ldaa staa ldaa

#$FF TSEG1 TSEG2 TSEG2 #0 Enmas Salir #$0 TMSK1 #1 Conec #$FF

; Incializamos otra vez TSEG1. ; Decrementamos TSEG2. ; ; ; ; ; Si es cero ya paso el tiempo deseado. Saltamos para enmascarar. Sino lo seguimos usando. Para no atender la interrupcion del OC2 lo inhabilitamos en la mascara.

; Variable para saber que termino el tiempo. ; Dejamos inicializada TSEG1.

Diseo de una Alarma para domicilio staa ldaa staa clr clr jmp TSEG1: TSEG2: BYTE BYTE TSEG1 #$2 TSEG2 Timer1Ac PORTB Final $FF $2 ; Dejamos inicializada TSEG2. ; Limpiamos la variable. ; Apagamos la C del display. ; Saltamos para salir ; El conteo interior. ; El conteo exterior.

Pgina 12 de 20

;***************************************************************************** ;Rutina para que suene el parlante. ;***************************************************************************** Parlante: neg BIT ; Invertimos el valor la variable. ldaa BIT anda #%00100000 ; Hacemos esto para enviar un bit solo al pin staa PORTF ; donde esta el parlante. ldaa #$40 ; Limpiamos el flag de interrupcion del OC2. staa TFLG1 ldaa FRECU ; Para que cuente lo mismo siempre debemos adda TOC2 ; sumar. staa TOC2 ; Fijamos duracion pulso. rts ; Vuelve a la rutina principal BIT: FRECU: BYTE BYTE $1 $13 ; La variable para el pulso. ; El ciclo de la onda.

;***************************************************************************** ;Etiquetas por el largo de los saltos. ;***************************************************************************** PanicoA2: jmp PanicoA1 ConectarA1: jmp Conectar ;***************************************************************************** ;Rutina para contar treinta segundos. ;***************************************************************************** org $D6 ; Direccion a donde apunta el vector de int. ; del timer OC4. jsr Treinta ; Llamamos a la funcion usada. rti ; Retornamos al lugar de partida. ;***************************************************************************** ;Rutina para que suene el parlante. ;***************************************************************************** org $DC ; Direccion a donde apunta el vector de int. ; del timer OC2. jsr Parlante ; Llamamos a la funcion usada. rti ; Retornamos al lugar de partida. ;***************************************************************************** ;Funcion para cambiar la clave. ;***************************************************************************** CambioCla: jsr Numeral ; Debe teclearse la clave vieja antes de poder ldaa #%01011011 ; cambiarla. staa PORTB ; Prendemos la C que indica la funcion. clr NEWCLAVE ; Limpiamos la variable para usarla debajo. jsr Numeral ; Vamos a buscar la nueva clave. ldaa ClaveTecU ; Guardamos los valores tecleados, la nueva staa ClaveU ; clave. ldaa ClaveTecD

Diseo de una Alarma para domicilio staa ldaa staa inc jmp ClaveD ClaveTecC ClaveC NEWCLAVE Main

Pgina 13 de 20

; Clave cambiada, volvemos al MAIN.

;*********************************************************************** ;Funcion para cuando se presiona el boton de panico. ;***************************************************************************** Panico: jsr Alarma ; Llamamos al encendido del parlante. ldaa #%11001110 ; Cargamos una P. staa PORTB ; La mostramos en el display. jsr Numeral ; Vamos a esperar el codigo. jmp Main ;***************************************************************************** ;Funcion para activar el timer que hara sonar el parlante. ;***************************************************************************** Alarma: ldaa #$40 ; Colocamos un uno en OC2I para habilitar las staa TMSK1 ; interrupciones del timer OC2. rts ;***************************************************************************** ;Funcion para armar el sistema. ;***************************************************************************** Conectar: clr PORTF ; Apagamos los leds que indican los errores. clr ERROR ; Limpiamos la variable. ldaa PORTG ; Leemos el portG, la puerta. anda MaskI1 ; Para saber si esta abierto el sensor. beq Error1 ; Si esta abierto -> jmp OkI1 ; Sino saltamos a ver el otro sensor. Error1: ldab #%00000010 ; -> lo marcamos en el led correspondiente, stab PORTF ; y damos valor a Error. stab AUX ldaa #1 staa ERROR OkI1: ldaa PORTG ; Leemos el portG, la ventana. anda MaskI2 ; Para saber si esta abierto el sensor beq Error2 ; Si esta abierto -> jmp OkI2 ; Sino saltamos a ver el otro sensor. ;***************************************************************************** ;Etiqueta por el largo de los saltos. MainA1: jmp Main ;***************************************************************************** Error2: ldab #%00000100 ; -> lo marcamos en el led correspondiente. orab PORTF ; Si habia otro error la seal se mantiene, stab PORTF ; y damos valor a Error. ldaa #1 staa ERROR OkI2: ldaa PORTG ; Leemos el portG, la puerta lateral. anda MaskI3 ; Para saber si esta abierto el sensor beq Error3 ; Si esta abierto -> jmp OkI3 ; Sino saltamos a ver el otro sensor. Error3: ldab

#%00001000

; -> lo marcamos en el led correspondiente.

Diseo de una Alarma para domicilio orab stab ldaa staa OkI3: ldaa anda beq jmp PORTF PORTF #1 ERROR PORTG MaskM Error4 OkM4

Pgina 14 de 20 ; Si habia otro error la seal se mantiene, ; y damos valor a Error.

; ; ; ;

Leemos el portG, el detec. de movimiento. Para saber si esta abierto el sensor. Si esta abierto -> Sino seguimos.

;***************************************************************************** ;Etiqueta por el largo de los saltos. PanicoA1: jmp Panico ;***************************************************************************** Error4: ldab #%00010000 orab PORTF stab PORTF ldaa #1 staa ERROR OkM4: ldaa #1 cmpa ERROR beq MainA1 jsr Timer1 Esperamos: ldaa Conec cmp #0 beq Esperamos ldaa #%00000001 staa PORTF staa Timer1Ac Sensado: ldaa PORTG anda MaskI1 beq JTimer1 RetTimer: ldaa TMSK1 cmpa #$10 beq Desac SigoSensando: ldaa PORTG anda MaskI2 beq PanicoA1 ldaa PORTG anda MaskI3 beq PanicoA1 ldaa PORTG anda MaskM beq PanicoA1 ldaa PORTD anda MaskP bne PanicoA1 ldaa PORTG anda MaskN bne Desac jmp Sensado Desac: jsr jmp

; -> lo marcamos en el led correspondiente. ; Si habia otro error la seal se mantiene, ; y damos valor a Error.

; Si hubo algun error volvemos al Main, sino ; esperamos los treinta seg. antes de armar ; el sistema.

; En este bucle esperamos el tiempo. ; Conec se setea en el Timer. ; ; ; ; Prendemos un led que indica el armado del sistema. Y seteamos la variable. Aqui estamos cuando se arma el sistema.

; Si la puerta esta abierta activamos el ; timer para esperar la clave. ; Si esta activado esperamos la clave, ; saltamos para desarmar el sistema. ; Sino seguimos viendo el estado del sistema.

; ; ; ;

Si esta abierta la ventana, la alarma suena en el acto. Si esta abierta la puerta lateral, la alarma suena en el acto.

; Y lo mismo para el detector de movimiento.

; Buscamos que el pulsador este apretado. ; Si es asi saltamos a la funcion de Panico. ; Buscamos el numeral para desarmar ; Si es asi vamos a desarmar el sistema. ; Seguimos en el bucle de sensado. ; Para desarmar el sistema. ; Vamos a buscar la clave. ; Volvemos al Main.

Numeral Main

Diseo de una Alarma para domicilio JTimer1: jsr jmp Timer1 RetTimer ; Llamamos para activar el timer. ; Volvemos arriba.

Pgina 15 de 20

;***************************************************************************** ;Activar el timer, para esperar que salga de la casa. ;***************************************************************************** Timer1: ldaa #1 staa Timer1Ac ; En uno para saber que esta activado. ldaa #$10 ; Activacion del timer de treinta segundos. staa TMSK1 ldaa #%01011111 ; Prendemos una E en el display. staa PORTB rts ; Volvemos al lugar de partida. ;***************************************************************************** ;Subrutina para levantar el numeral. ;***************************************************************************** Numeral: ; Aqui esperamos la seal (#) que indica ; el ingreso de la clave. ldaa #$0 ; Cargamos para la cantidad de digitos. staa Digitos ; Indicamos que no se tecleo nada. ldaa PORTG ; Levantamos el valor del portG, si es el anda MaskN ; numeral, prende una n ->. bne ShowN ldaa Timer1Ac ; Si pasaron los treinta segundos se debe cmp #0 ; activar la alarma. beq Alarm0 RetAlarm0: jmp Numeral ; Seguimos esperando que se teclee el numeral. Alarm0: jsr jmp

Activa RetAlarm0

; Llamamos para hacer sonar el parlante. ; Volvemos arriba.

;***************************************************************************** ;Funcion para mostrar el numeral. ;***************************************************************************** ShowN: ldab #%00101110 ; Cargamos una n y la mostramos. stab PORTB jsr Retardo ; Llamamos al retardo para ver la letra. clr PORTB ; Se apaga el display. clr ClaveTecU ; Limpiamos los valores de la clave tecleada, clr ClaveTecD ; ya que debe tomar los valores debajo. clr ClaveTecC ; Luego buscamos los datos para conocer la ; clave tecleada. ; En esta parte leemos el portA y el portG Numeros: ; segun el numero que queremos ver y al -> ldx #$24 ; Ponemos el indice para usar la tabla. ldaa PORTG ; -> encontrarlo con la mascara saltamos a la anda Mask0 ; funcion asociada. bne ShowAll ldx #$25 ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask1 bne ShowAll ldx #$26 ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask2 bne ShowAll ldx #$27 ; Ponemos el indice para usar la tabla.

Diseo de una Alarma para domicilio ldaa anda bne ldx ldaa anda bne ldx ldaa anda bne ldx ldaa anda bne ldx ldaa anda bne ldx ldaa anda bne ldx ldaa anda bne ldx ldaa anda bne jmp PORTA Mask3 ShowAll #$28 PORTA Mask4 ShowAll #$29 PORTA Mask5 ShowAll #$2A PORTA Mask6 ShowAll #$2B PORTA Mask7 ShowAll #$2C PORTA Mask8 ShowAll #$2D PORTG Mask9 ShowAll #$2E PORTG MaskA ShowAll SaltoAux

Pgina 16 de 20

; Ponemos el indice para usar la tabla.

; Ponemos el indice para usar la tabla.

; Ponemos el indice para usar la tabla.

; Ponemos el indice para usar la tabla.

; Ponemos el indice para usar la tabla.

; Ponemos el indice para usar la tabla.

; Ponemos el indice para usar la tabla.

; Salto necesario por la intercalacion.

;***************************************************************************** ;Etiqueta por el largo de los saltos. Numeros1: jmp Numeros ;***************************************************************************** ;Funcion para prender el display y guardar los datos - intercalada. ;***************************************************************************** ShowAll: inc Digitos ; Lo incrementamos para saber cuantos se ldab $0,x ; teclearon. stab PORTB ; Mostramos el numero tecleado. jsr Retardo ; Llamamos para verlo. clr PORTB ; Se apaga el display ldab $B,x ; Cargamos el numero tecleado usando la tabla stab InClave ; correspondiente. ldaa InClave ; Aqui se guarda la clave ingresada segun ldab Digitos ; sea unidades, decenas o centenas. cmpb #1 bne Uno staa ClaveTecC ; Si es el primero guardamos en las centenas. jmp Fin ; No se guardan mas. Uno: ldab Digitos cmpb #2 bne Dos staa ClaveTecD ; Si es el segundo guardamos en las decenas. Dos: ldab Digitos cmpb #3 bne Fin staa ClaveTecU ; Si es el tercero guardamos en las unidades.

Diseo de una Alarma para domicilio Fin: ldaa cmp bne ldaa cmp beq ldaa cmpa bne ldaa cmpa bne ldaa cmpa beq No: ldaa cmpa bne jmp Digitos #$3 No NEWCLAVE #0 CClave0 ClaveTecU ClaveU No ClaveTecD ClaveD No ClaveTecC ClaveC Acierto Digitos #$3 Numeros1 Numeral

Pgina 17 de 20 ; Vemos la cantidad de valores tecleados, si ; todavia no tengo los tres sigue, si ya los ; tengo vemos si estamos cambiando la clave.

; Si es asi saltamos a la funcion asociada. ; Aqui realizamos la comparacion de la clave ; ingresada y la guardada. ; Si el primero es distinto salimos. ; Si es igual seguimos comparando el otro. ; Si el segundo es distinto salimos. ; Si es igual seguimos comparando el otro. ; Si los tres son iguales saltamos -> ; ; ; ; Cargamos el valor de Digitos y vemos si es 3 para no permitir ingresar mas numeros, sino seguimos buscando numeros. Volvemos a esperar un numeral.

CClave0: ; Volvemos a la funcion de partida. rts ; Necesario cuando se cambia la clave. ;***************************************************************************** ;Etiqueta por el largo de los saltos. Numeral1: jmp Numeral ;***************************************************************************** SaltoAux: ldaa PORTG anda MaskN bne SubrNN ldaa Timer1Ac ; Si pasaron los treinta segundos se debe cmp #0 ; activar la alarma beq Alarm1 RetAlarm1: clra ; Limpiamos el acumulador. jmp Numeros ; Volvemos para seguir esperando una tecla. Alarm1: ; Etiqueta para poder realizar un salto jsr Activa ; condicional a la subrutina. jmp RetAlarm1 ; Volvemos arriba. ;***************************************************************************** ;Subrutina para que suene el parlante. ;***************************************************************************** Activa: ldaa #$40 ; Permitimos atender la interrupcion del staa TMSK1 ; OC2, el del parlante. rts ; Retorna al lugar de llamado. ;***************************************************************************** ;Funcion para clave correcta ;***************************************************************************** Acierto: staa TMSK1 ldab #%10101110 ; Muestra una H en el display stab PORTB jsr Retardo ; Llamamos para poder verla clr PORTB ; Se apaga el display. clr PORTF ; Se apaga el led de armado. jmp StopTimer2 RetsTimer2: rts ;*****************************************************************************

Diseo de una Alarma para domicilio

Pgina 18 de 20

;Se enmascara el timer2. ;***************************************************************************** StopTimer2: ldaa #0 ; Se pone en cero para saber que esta staa Timer2Ac ; enmascarado. clr TMSK1 ; Se limpia el registro para no atender jmp RetsTimer2 ; la interrupcion. ;***************************************************************************** ;Funcion para el numeral ;***************************************************************************** SubrNN: ldab #%01010110 ;Esta fucion es para el caso de ingreso stab PORTB ;equivocado jsr Retardo clr PORTB ldaa #$0 ; Cargamos para la cantidad de digitos, staa Digitos ; se guarda para volver a 0 y poder ingresar jmp Numeros ; de nuevo. ;***************************************************************************** ;Ciclo de retardo ;***************************************************************************** Retardo: ldaa #5 staa Contador1 ?Loop1: ldaa #180 staa Contador2 ?Loop2: clr Contador3 ?Loop3: inc Contador3 bne ?Loop3 inc Contador2 bne ?Loop2 dec Contador1 bne ?Loop1 rts Contador1: BYTE $00 Contador2: BYTE $00 Contador3: BYTE $00 ;*****************************************************************************

Diseo de una Alarma para domicilio

Pgina 19 de 20

Diagramas en bloque del sistema.

Diseo de una Alarma para domicilio

Pgina 20 de 20

PLAQUETA

También podría gustarte