Universidad Nacional de Quilmes. Ingeniería en Automatización y Control Industrial. Diseño de Controladores Digitales. Presentación final. Proyecto de aplicación del Microcontrolador MC68HC11F1. Diseño de una Alarma para domicilio. Fecha: 28-12-00. Docente: Sille, Germán. Alumnos: Galicchio, Pablo. Scarfó, Germán A.
Diseño de una Alarma para domicilio Página 2 de 20 Alarma digital de última generación. Descripción general. Esta alarma está diseñada para un fácil y rápido adaptamiento a sus funcionalidades. Consiste principalmente en la utilización 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 utilización de las distintas funciones está provista de un teclado matricial, indicadores lumínicos (leds y un display de siete segmentos), un parlante para avisar de los acontecimientos, y un pulsador de activación 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 señal de que esta se abrió, ya que debe dársele 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 activación inmediata de la alarma, ya que no son lugares por donde el morador pueda ingresar normalmente. El sensor de movimiento lleva una alimentación de 12V y, al igual que los otros sensores, se comporta como una llave abierta o cerrada según la circunstancia. Esta capacidad es la que se aprovecha en la implementación del sistema, conectando los sensores entre Vcc y un pin de algún port, conocidos ambos, lo que permite detectar si la llave se encuentra abierta o cerrada. Las funciones de armado del sistema y desactivación de la alarma sólo son posibles a través del teclado. El armado se realiza con la sola condición de apretar una tecla y para lograr apagar la alarma es necesario ingresar la clave correspondiente. El sistema utiliza una clave tres dígitos. En el momento del armado se realiza una revisión 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 activación inmediata tiene una prioridad especial sobre cualquier situación en que se encuentre el sistema. Su función es la de actuar como botón de pánico, 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
Diseño de una Alarma para domicilio Página 3 de 20 es necesario contar el tiempo se habilita la interrupción, y cuando no es necesario, la interrupción está desabilitada. Para poder realizar el sonido de la alarma, también se aprovecha un timer, programándolo, para que el llegar su interrupción, cuando se la atiende, se envía un pulso que a cada llamada invierte su valor, logrando con esto una señal periódica 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 operación sólo necesita presionar la tecla (*). En este momento la central realiza un diagnóstico del sistema. Para este diagnóstico se cuenta con cuatro indicadores lumínicos que le servirán 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 algún sensor se encuentra fuera de servicio o, según la indicación puede ser: Puerta del frente: ésta se halla abierta, debe cerrarla para permitir el armado. Puerta lateral: si sale de casa, ciérrela 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. Botón de pánico. Como medida de seguridad extra, el sistema cuenta con un pulsador que le permitirá a usted activar la alarma en cualquier circunstancia, con sólo 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 algún incidente, que origine en el encendido de la alarma, ésta sólo 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 señal indicadora y seguidamente puede ingresar la clave según el orden establecido: centenas, decenas y unidades. Si la clave tecleada es la correcta, la alarma dejará de sonar. En caso
Diseño de una Alarma para domicilio Página 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 operación, 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 indicación 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
Diseño de una Alarma para domicilio Página 5 de 20 Tablero de comandos Interiores del tablero Sensores interiores de la maqueta
Diseño de una Alarma para domicilio Página 6 de 20 Diagramas de flujo de la aplicación. COMIENZO -ASIGNAR SP -PROGRAMAR PORTS -HAILITAR INTERRUPCIONES -DECLARACION DE VARIABLES 1 MASKP=PORTD PANICO MASKA=PORTG CONECTAR MASKN=PORTG CAMBIO CLAVE PANICO ALARMA NUMERAL 1
Diseño de una Alarma para domicilio Página 7 de 20 ALARMA -HABILITAR INTERRUPCION DEL OC2 FIN NUMERAL TECLA no si Tecla = # MUESTRA n no TECLA si Digitos=3 Tecla no =U,D,C si MUESTRA H 1
Diseño de una Alarma para domicilio Página 8 de 20 CONECTAR SENSAR TODOS LOS DETECTORES ERROR=1 ERROR=0 no si 1 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
Diseño de una Alarma para domicilio Página 9 de 20 CAMBIO CLAVE NUMERAL MUESTRA C NUMERAL -CLAVEU =CLAVETECU -CLAVED=CLAVETECD -CLAVEC=CLAVETECC 1 Listado comentado del código programado. PORTA EQU $1000 PORTAx EQU $0 DDRA EQU $1001 PORTG EQU $1002 DDRG EQU $1003 PORTB EQU $1004 PORTF EQU $1005 PORTC EQU $1003 DDRC EQU $1006 PORTD EQU $1008 DDRD EQU $1009 PORTE EQU $100A TOC2 EQU $1018 TOC4 EQU $101C TMSK1 EQU $1022 TFLG1 EQU $1023 TFLG1x EQU $23 SPCR EQU $1028 org $0 ; Esta la direccion de comienzo del programa. Comienza: ; Esta la direccion de comienzo del programa. lds #$3FF ; Inicializacion del SP. ldaa #0 ; Seteamos los puertos A y G como entrada,
Diseño de una Alarma para domicilio Página 10 de 20 staa DDRA ; colocando en cero sus DDR. staa DDRG ldaa #%11111000 ; Seteamos como salida los pines libres del staa DDRD ; PORTD. ldaa #0 staa SPCR ; Colocamos en cero el registro SPCR. ldaa #0 ; Limpiamos el puerto D. staa PORTD cli ; Habilitamos interrupciones enmascarables. jmp Main ; 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 $024 ; Comienzo de la tabla usada para prender el ; display con lo tecleado. BYTE %11111010 ; 0 BYTE %10100000 ; 1 BYTE %11010110 ; 2 BYTE %11110100 ; 3 BYTE %10101100 ; 4 BYTE %01111100 ; 5 BYTE %01111111 ; 6 BYTE %11100000 ; 7 BYTE %11111111 ; 8 BYTE %11111100 ; 9 BYTE %11101110 ; * ( A ) ; Tabla usada para guardar el numero tecleado. BYTE $0 BYTE $1 BYTE $2 BYTE $3 BYTE $4 BYTE $5 BYTE $6 BYTE $7 BYTE $8 BYTE $9 ;Nuestras definiciones de variables. ERROR: BYTE 0 ; La variable para leer los sensores. ; Mascaras para buscar los valores tecleados. Mask0: BYTE %00001000 ; Esta en el portg. Mask1: BYTE %00000001 ; Esta en el porta. Mask2: BYTE %00000010 ; Esta en el porta. Mask3: BYTE %00000100 ; Esta en el porta. Mask4: BYTE %00001000 ; Esta en el porta. Mask5: BYTE %00010000 ; Esta en el porta. Mask6: BYTE %00100000 ; Esta en el porta. Mask7: BYTE %01000000 ; Esta en el porta. Mask8: BYTE %10000000 ; Esta en el porta.
Diseño de una Alarma para domicilio Página 11 de 20 Mask9: BYTE %00000001 ; Esta en el portg. MaskA: BYTE %00000010 ; Esta en el portg, el asterisco. MaskN: BYTE %00000100 ; Esta en el portg, el numeral. MaskI1: BYTE %00010000 ; Esta en el portg, ind. 1, puerta. MaskI2: BYTE %00100000 ; Esta en el portg, ind. 2, ventana. MaskI3: BYTE %01000000 ; Esta en el portg, ind. 3, puerta lateral. MaskM: BYTE %10000000 ; Esta en el portg, mov. para el garage. MaskP: BYTE %00000100 ; Esta en el portd, el boton de panico. Timer2Ac: BYTE 0 ; La variable para reconocer el timer OC4. Timer1Ac: BYTE $1 ; La variable para reconocer el timer OC2. Digitos: BYTE $0 ; La cantidad de digitos tecleados. InClave: BYTE $0 ; Valor del digito ingresado. Conec: BYTE $0 ; Variable para salir de la casa. AUX: BYTE $0 ; Variable sin importancia. NEWCLAVE: BYTE $FF ; Variale para indicar el cambio de clave. ; FLUJO PRINCIPAL DEL PROGRAMA. Main: clr Conec ; Limpiamos la variable ldaa PORTD ; Leemos el portd. anda MaskP ; Buscamos que el pulsador este apretado. bne PanicoA2 ; Saltamos a la funcion de Panico. ldaa PORTG ; Leemos el portg. anda MaskA ; Buscamos que se apriete el asterisco. bne ConectarA1 ; Saltamos a la funcion de Conectar. ldaa PORTG ; Leemos el portg. anda MaskN ; Buscamos que se apriete el numeral. bne CambioCla ; Saltamos a la funcion de Cambiar la clave. jmp Main ; 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 #$FF ; Incializamos otra vez TSEG1. staa TSEG1 dec TSEG2 ; Decrementamos TSEG2. ldaa TSEG2 cmp #0 ; Si es cero ya paso el tiempo deseado. beq Enmas ; Saltamos para enmascarar. jmp Salir ; Sino lo seguimos usando. Enmas: ; Para no atender la interrupcion del OC2 ldaa #$0 ; lo inhabilitamos en la mascara. staa TMSK1 ldaa #1 ; Variable para saber que termino el tiempo. staa Conec ldaa #$FF ; Dejamos inicializada TSEG1.
Diseño de una Alarma para domicilio Página 12 de 20 staa TSEG1 ldaa #$2 ; Dejamos inicializada TSEG2. staa TSEG2 clr Timer1Ac ; Limpiamos la variable. clr PORTB ; Apagamos la C del display. jmp Final ; Saltamos para salir TSEG1: BYTE $FF ; El conteo interior. TSEG2: BYTE $2 ; El conteo exterior. ;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: BYTE $1 ; La variable para el pulso. FRECU: BYTE $13 ; 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
Diseño de una Alarma para domicilio Página 13 de 20 staa ClaveD ldaa ClaveTecC staa ClaveC inc NEWCLAVE jmp Main ; 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 se al 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.
Diseño de una Alarma para domicilio Página 14 de 20 orab PORTF ; Si habia otro error la se al se mantiene, stab PORTF ; y damos valor a Error. ldaa #1 staa ERROR OkI3: ldaa PORTG ; Leemos el portg, el detec. de movimiento. anda MaskM ; Para saber si esta abierto el sensor. beq Error4 ; Si esta abierto -> jmp OkM4 ; Sino seguimos. ;Etiqueta por el largo de los saltos. PanicoA1: jmp Panico Error4: ldab #%00010000 ; -> lo marcamos en el led correspondiente. orab PORTF ; Si habia otro error la se al se mantiene, stab PORTF ; y damos valor a Error. ldaa #1 staa ERROR OkM4: ldaa #1 ; Si hubo algun error volvemos al Main, sino cmpa ERROR ; esperamos los treinta seg. antes de armar beq MainA1 ; el sistema. jsr Timer1 Esperamos: ldaa Conec ; En este bucle esperamos el tiempo. cmp #0 ; Conec se setea en el Timer. beq Esperamos ldaa #%00000001 ; Prendemos un led que indica el armado del staa PORTF ; sistema. staa Timer1Ac ; Y seteamos la variable. Sensado: ; Aqui estamos cuando se arma el sistema. ldaa PORTG anda MaskI1 beq JTimer1 ; Si la puerta esta abierta activamos el RetTimer: ; timer para esperar la clave. ldaa TMSK1 cmpa #$10 ; Si esta activado esperamos la clave, beq Desac ; saltamos para desarmar el sistema. SigoSensando: ; Sino seguimos viendo el estado del sistema. ldaa PORTG anda MaskI2 beq PanicoA1 ; Si esta abierta la ventana, la alarma suena ldaa PORTG ; en el acto. anda MaskI3 ; Si esta abierta la puerta lateral, la alarma beq PanicoA1 ; suena en el acto. ldaa PORTG anda MaskM ; Y lo mismo para el detector de movimiento. beq PanicoA1 ldaa PORTD anda MaskP ; Buscamos que el pulsador este apretado. bne PanicoA1 ; Si es asi saltamos a la funcion de Panico. ldaa PORTG anda MaskN ; Buscamos el numeral para desarmar bne Desac ; Si es asi vamos a desarmar el sistema. jmp Sensado ; Seguimos en el bucle de sensado. Desac: ; Para desarmar el sistema. jsr Numeral ; Vamos a buscar la clave. jmp Main ; Volvemos al Main.
Diseño de una Alarma para domicilio Página 15 de 20 JTimer1: jsr Timer1 ; Llamamos para activar el timer. jmp RetTimer ; Volvemos arriba. ;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 se al (#) 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 Activa ; Llamamos para hacer sonar el parlante. jmp RetAlarm0 ; 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. ldx #$25 ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask1 ldx #$26 ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask2 ldx #$27 ; Ponemos el indice para usar la tabla.
Diseño de una Alarma para domicilio Página 16 de 20 ldaa PORTA anda Mask3 ldx #$28 ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask4 ldx #$29 ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask5 ldx #$2A ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask6 ldx #$2B ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask7 ldx #$2C ; Ponemos el indice para usar la tabla. ldaa PORTA anda Mask8 ldx #$2D ; Ponemos el indice para usar la tabla. ldaa PORTG anda Mask9 ldx #$2E ; Ponemos el indice para usar la tabla. ldaa PORTG anda MaskA jmp SaltoAux ; 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.
Diseño de una Alarma para domicilio Página 17 de 20 Fin: ldaa Digitos ; Vemos la cantidad de valores tecleados, si cmp #$3 ; todavia no tengo los tres sigue, si ya los bne No ; tengo vemos si estamos cambiando la clave. ldaa NEWCLAVE cmp #0 beq CClave0 ; Si es asi saltamos a la funcion asociada. ; Aqui realizamos la comparacion de la clave ldaa ClaveTecU ; ingresada y la guardada. cmpa ClaveU bne No ; Si el primero es distinto salimos. ldaa ClaveTecD ; Si es igual seguimos comparando el otro. cmpa ClaveD bne No ; Si el segundo es distinto salimos. ldaa ClaveTecC ; Si es igual seguimos comparando el otro. cmpa ClaveC beq Acierto ; Si los tres son iguales saltamos -> No: ldaa Digitos ; Cargamos el valor de Digitos y vemos si es cmpa #$3 ; 3 para no permitir ingresar mas numeros, bne Numeros1 ; sino seguimos buscando numeros. jmp Numeral ; 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
Diseño de una Alarma para domicilio Página 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
Diseño de una Alarma para domicilio Página 19 de 20 Diagramas en bloque del sistema.
Diseño de una Alarma para domicilio Página 20 de 20 PLAQUETA