Upload
jaime-e-velarde
View
1.989
Download
4
Embed Size (px)
DESCRIPTION
Control de una cerradura eléctrica con alarma, en la que se ingresa una clave con 3 teclas
Citation preview
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 1
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
EJERCICIO DE UTILIZACIÓN DE INTERRUPCIONES EXTERNAS
ENUNCIADO DEL EJERCICIO:
Desarrollar un programa que permita al microcontrolador ATmega164P abrir una
cerradura eléctrica, por alrededor de cinco segundos, o encender una alarma en forma
indefinida. Como resultado del ingreso de una secuencia de cuatro o cinco pulsaciones
efectuadas con tres teclas, identificadas como A, B y C; que se compara con la
secuencia de letras que se encuentra almacenada en las primeras localidades de la
EEPROM, en forma de códigos ASCII y que constituye la clave para abrir la cerradura.
También, debe existir la opción de modificar la clave, modificando el contenido de la
EEPROM mediante otra secuencia de pulsaciones; esto último se activa, cuando se
pulsa una tecla adicional a la secuencia correcta durante el intervalo de tiempo en que la
cerradura está abierta. Finalmente, el programa debe controlar indicadores mediante
LEDs que especifiquen la etapa en que se encuentra el programa, a fin de diferenciar
entre el INGRESO y el CAMBIO de la clave.
ANÁLISIS DE LA SOLUCIÓN:
Para poder identificar a la tecla presionada sin necesitar de incluir la subrutina de
decodificación de teclados, se puede recurrir al uso de las interrupciones externas; por
esto, se conectan las teclas a las entradas INT0 (PD2), INT1 (PD3) e INT2 (PB2), en
paralelo con condensadores de 0.1 µF para eliminar el rebote al pulsar las teclas.
El programa también debe controlar cuatro salidas; dos para la cerradura (PA0) y la
alarma (PA1) que se activan a través de transistores NPN, debido a que los elementos
que tienen como carga son un relé y un zumbador, que utilizan 12 Vdc para trabajar.
Las otras dos salidas son para los indicadores LEDs (PA6 y PA7), que se activan
directamente con resistencias limitadoras de corriente.
En cuanto al número de pulsaciones de las teclas, que pueden ser cuatro o cinco, el
programa se estructura mediante lazos de repetición controlados por el contador que se
inicializa con el valor del número de pulsaciones.
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 2
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
ALGORITMO DE LA SOLUCIÓN:
El programa principal contempla las siguientes tareas:
1. Reservar los vectores de las tres interrupciones externas, para encaminar a la
ejecución de las rutinas de interrupción que identifican a la tecla presionada.
2. Inicializar el Puntero del Stack, configurar los Pórticos de acuerdo a las
necesidades del circuito que se utiliza y activar las Interrupciones Externas para
que respondan a la transición negativa, que se produce cuando de presiona la
tecla.
3. Establecer o armar la clave en la SRAM con los contenidos de la EEPROM.
4. Esperar el ingreso de la secuencia de las pulsaciones, que también se almacenan
en la SRAM.
5. Comparar la secuencia ingresada con la clave.
6. Cuando la secuencia no coincide con la clave: encender la alarma, desactivar la
cerradura para continuar al numeral 4.
7. Al coincidir la secuencia con la clave: activar la cerradura, apagar la alarma y
esperar los cinco segundos.
8. Si durante la espera no se ha pulsado alguna tecla, desactivar la cerradura y
continuar al numeral 4.
9. En el caso de que, durante la espera se pulse cualquier tecla, el programa
desactiva la cerradura y pasa a modificar el contenido de la EEPROM, con las
mismas teclas, para cambiar la clave y luego continuar con el numeral 3, donde
se arma la clave con la nueva secuencia.
El algoritmo también contempla que fuera del programa principal, las tareas asignadas a
las rutinas de las tres interrupciones externas es la identificar la tecla presionada, que
consiste en cargar en un registro el código ASCII de la letra, de la siguiente forma:
• Para la INT0 la letra A
• Para la INT1 la letra B
• Para la INT2 la letra C
Esta modificación del contenido del registro por parte de las rutinas de interrupción, es
la acción que se reconoce como la activación de la tecla; por eso, para poder detectar
esta acción el programa principal: borra el registro y entra en un lazo en el que chequea
constantemente que el registro se mantenga en cero, lo que se constituye en la espera
por una pulsación.
Para el acceso a la EEPROM, el algoritmo en el numeral 3 contiene lecturas desde la
EEPROM para luego escribir en la SRAM, mientras que el numeral 9 contiene
escrituras en la EEPROM. Estas operaciones no se realizan mediante instrucciones
especiales, sino através de los registros de entrada/salida que para este propósito tienen
los ATmega y que son: EEAR Registro de Direcciones, EEDR Registro de Datos y
EECR Registro de Control. Los bits de este último registro establecen el tipo, el inicio y
el finalización de la operación que se realiza con la EEPROM.
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 3
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
CODIFICACIÓN DEL PROGRAMA PRINCIPAL Y DE LAS RUTINAS DE INTERRUPCIÓN:
; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS .DEF AUX1 = R16 ; REGISTRO AUXILIAR1 .DEF AUX2 = R17 ; REGISTRO AUXILIAR2 .DEF AUX3 = R18 ; REGISTRO AUXILIAR3 .DEF AUX4 = R19 ; REGISTRO AUXILIAR4 .EQU CERRADURA = 0 ; BIT DE CONTROL DE CERRADURA .EQU ALARMA = 1 ; BIT DE CONTROL DE ALARMA .EQU LED_A = 6 ; BIT DEL LED DE CAMBIAR LA CLAVE .EQU LED_I = 7 ; BIT DEL LED DE INGRESAR LA CLAVE .EQU NPUL = 5 ; NÚMERO DE PULSACIONES PARA LA CLAVE ; SEGMENTO DE DATOS o MEMORIA SRAM .DSEG SECUEN: .BYTE NPUL ; MEMORIAS PARA INGRESAR LA SECUENCIA CLAVE: .BYTE NPUL ; MEMORIAS PARA ARMAR LA CLAVE ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG JMP PROGP .ORG $02 ; VECTOR DE LA INTERRUPCIÓN EXTERNA 0 JMP RUTINT0 .ORG $04 ; VECTOR DE LA INTERRUPCIÓN EXTERNA 1 JMP RUTINT1 .ORG $06 ; VECTOR DE LA INTERRUPCIÓN EXTERNA 2 JMP RUTINT2 ; INICIALIZACIÓN DEL PUNTERO DEL STACK Y DE LOS PÓRTICOS PROGP: LDI AUX1,LOW(RAMEND) OUT SPL,AUX1 LDI AUX1,HIGH(RAMEND) OUT SPH,AUX1 LDI AUX1,0B11000011 OUT DDRA,AUX1 ; SALIDAS CERRADURA, ALARMA Y LEDS LDI AUX1,0B00000100 OUT PORTB,AUX1 ; PULL-UP INT2 = PB2 LDI AUX1,0B00001100 OUT PORTD,AUX1 ; PULL-UP INT0/1 = PD2/3 ; PROGRAMACIÓN DE LAS INTERRUPCIONES EXTERNAS LDI AUX1,0B00101010 STS EICRA,AUX1 ; TRANSICIONES NEGATIVAS LDI AUX1,0B00000111 OUT EIMSK,AUX1 ; HABILITAR LAS INTERRUPCIONES OUT EIFR,AUX1 ; BORRAR LAS BANDERAS ; HABILITACIÓN GLOBAL DE INTERRUPCIONES SEI ; ESTABLECIMIENTO DE LA CLAVE CARGAR: LDI XL,LOW(CLAVE) ; PUNTERO PARA ESTABLECER LA CLAVE LDI XH,HIGH(CLAVE) LDI AUX2,NPUL ; CONTADOR DE REPETICIONES CLR AUX1 OUT EEARL,AUX1 ; DIRECCIÓN DE LA EEPROM 0x0000 OUT EEARH,AUX1 LOOP1: SBIC EECR,EEPE ; CHEQUEO DE EEPROM DISPONIBLE RJMP LOOP1 SBI EECR,EERE ; INICIO DE LA LECTURA DE LA EEPROM IN AUX1,EEDR ; DATO LEÍDO DE LA EEPROM ST X+,AUX1 ; ALMACENAR EN LA SRAM IN AUX1,EEARL INC AUX1 ; SIGUIENTE LOCALIDAD DE EEPROM OUT EEARL,AUX1 DEC AUX2
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 4
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
BRNE LOOP1 ; HASTA COMPLETAR ESTABLECER ; INGRESO DE LA CLAVE INGRESAR:LDI XL,LOW(SECUEN) ; PUNTERO PARA INGRESAR SECUENCIA LDI XH,HIGH(SECUEN) LDI AUX2,NPUL ; CONTADOR DE REPETICIONES LOOP2: CLR AUX1 WAIT1: CPI AUX1,0 ; ESPERAR POR UNA PULSACIÓN BREQ WAIT1 ST X+,AUX1 ; ALMACENAR EN LA SRAM DEC AUX2 SBI PORTA,LED_I ; ENCENDER LED DE INGRESO DE CLAVE BRNE LOOP2 ; HASTA COMPLETAR EL INGRESO CBI PORTA,LED_I ; APAGAR LED DE INGRESO DE LA CLAVE ; COMPROBACIÓN DE LA SECUENCIA LDI YL,LOW(SECUEN) ; PUNTERO PARA CHEQUEAR SECUENCIA LDI YH,HIGH(SECUEN) LDI AUX3,NPUL ; CONTADOR DE REPETICIONES CHECK: LD AUX1,Y+ ; CARGA LA SECUENCIA INGRESADA LDD AUX2,Y+NPUL-1 ; CARGA LA CLAVE ESTABLECIDA CP AUX1,AUX2 ; COMPARA ENTRE LAS DOS BRNE MAL ; NO COINCIDEN SALTA DEC AUX3 BRNE CHECK ; HASTA COMPLETAR EL CHEQUEO ; ACTIVACIÓN DE LA CERRADURA BIEN: SBI PORTA,CERRADURA ; ACTIVAR LA CERRADURA CBI PORTA,ALARMA ; APAGAR LA ALARMA CLR AUX1 RCALL DELAY1 ; APROXIMADAMENTE 5 SEGUNDOS CBI PORTA,CERRADURA ; DESACTIVAR LA CERRADURA ; PARA CHEQUEAR LA TECLA ADICIONAL CPI AUX1,0 ; NINGUNA TECLA PRESIONADA BREQ INGRESAR ; IR PARA OTRO INGRESO ; CAMBIO DE LA CLAVE CAMBIAR:SBI PORTA,LED_A ; ENCENDER LED DE CAMBIO DE CLAVE LDI AUX2,NPUL ; CONTADOR DE REPETICIONES CLR AUX1 OUT EEARL,AUX1 ; DIRECCIÓN DE LA EEPROM 0x0000 OUT EEARH,AUX1 LOOP3: CLR AUX1 WAIT2: CPI AUX1,0 ; ESPERAR POR UNA PULSACIÓN BREQ WAIT2 OUT EEDR,AUX1 ; DATO PARA ESCRIBIR EN LA EEPROM SBI EECR,EEMPE ; HABILITACIÓN ESCRIBIR EEPROM SBI EECR,EEPE ; INICIO DE LA ESCRITURA EEPROM WAIT3: SBIC EECR,EEPE ; CHEQUEO DE EEPROM DISPONIBLE RJMP WAIT3 IN AUX1,EEARL INC AUX1 ; SIGUIENTE LOCALIDAD DE EEPROM OUT EEARL,AUX1 DEC AUX2 BRNE LOOP3 ; HASTA COMPLETAR EL ALMACENAMIENTO CBI PORTA,LED_A ; APAGAR LED DE CAMBIO DE CLAVE RJMP CARGAR ; IR AL ESTABLECIMIENTO DE LA CLAVE ; RETARDO PARA CINCO SEGUNDOS DELAY1: LDI AUX2,0x19+1 LDI AUX3,0x6E+1 LDI AUX4,0x6A DLY1: DEC AUX4 BRNE DELAY1 DEC AUX3 BRNE DELAY1
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 5
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
DEC AUX2 BRNE DLY1 RET ; ACTIVACIÓN DE LA ALARMA MAL: SBI PORTA,ALARMA ; ENCENDER LA ALARMA CBI PORTA,CERRADURA ; DESACTIVAR LA CERRADURA RJMP INGRESAR ; IR PARA OTRO INGRESO ; RUTINA DE LA INTERRUPCIÓN EXTERNA 0 RUTINT0: LDI AUX1,'A' ; IDENTIFICACIÓN DE LA TECLA A RETI ; RUTINA DE LA INTERRUPCIÓN EXTERNA 1 RUTINT1: LDI AUX1,'B' ; IDENTIFICACIÓN DE LA TECLA B RETI ; RUTINA DE LA INTERRUPCIÓN EXTERNA 2 RUTINT2: LDI AUX1,'C' ; IDENTIFICACIÓN DE LA TECLA C RETI ; CLAVE INICIAL EN LA EEPROM .ESEG CVLINI: .DB "ABACA" ; .EXIT ; FIN DEL MODULO FUENTE
COMPROBACIÓN DEL FUNCIONAMIENTO DE LA CERRADURA ELÉCTRICA MEDIANTE EL PROTEUS
Para comprobar este programa es necesario que la EEPROM contenga los códigos
ASCII de las letras de una clave inicial, lo que se consigue aumentando en el Módulo
Fuente las líneas que sirven para crear una tabla de datos en el Segmento de la
EEPROM. Estas lineas al momento de ensamblar, generan un archivo adicional con la
extención “.eep” que tiene mismo formato que el archivo de extensión “.hex”, tal como
se muestra a continuación.
:050000004142414341B3 :00000001FF
Este contenido deben ser grabado en el microcontrolador junto con los códigos de
máquina del programa; es decir, que se debe cargar en el programador PROGISP, los
archivos .hex y .eep mediante las opciones “Load Flash” y “Load Eprom”,
respectivamente.
BUFFER DE LA FLASH Y DE LA EEPROM
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 6
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
Luego, al momento de grabar utilizando la opción “Auto”, deben estar activadas los
comandos “Chip Erase”, “Program FLASH”, “Program EEPROM”, “Verify FLASH” y
“Verify EEPROM”.
Para simular con el PROTEUS este procedimiento no es igual; en su lugar, se crea otro
archivo de extención “.bin”, que se obtiene desde el PROGISP con la opción “Save
Eeprom”. El cual se incorpora para la simulación, especificándolo en el casillero “Initial
Contents Of Data EEPROM” en las propiedades del ATmega164P.
A continuación se muestran varias capturas de la pantalla del simulador para comprobar
el funcionamiento del programa y también se ha pausado la simulación para capturar las
ventanas con los contenidos de la EEPROM y de la SRAM.
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 7
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
Al inicio el programa lee los contenidos de la EEPROM y los almacena en la SRAM.
Cuando se pulsa la tecla A, el programa almacena esa letra en la SRAM y enciende el
LED indicador de INGRESO de la secuencia, hasta que se complete las cinco
pulsaciones.
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 8
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
Con cada pulsación, continua el almacenamiento de la letra de la tecla en la SRAM. Al
terminar la secuencia de cinco pulsaciones, se comparan con la clave. Como en este
caso, la secuencia está correcta se apaga el LED de INGRESO y se activa el Transistor
de la CERRADURA por 5 segundos.
En el caso de que la secuencia de pulsaciones sea incorrecta, el resultado de la
comparación activa el Transistor de la ALARMA, por tiempo indefinido hasta que se
ingrese la secuencia correcta o se active el RESET.
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 9
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
Al pulsar cualquier tecla durante el intervalo en que está activa la CERRADURA, el
programa se encamina a la modificación de la clave, enciende el LED de CAMBIO y
espera por una nueva secuencia de pulsaciones que cambia primero el contenido de la
EEPROM y luego de la SRAM.
De esta forma queda con una nueva clave, hasta que se vuelva a modificar por el
procedimiento ya descrito.
ERROR DE FUNCIONAMIENTO EN EL CIRCUITO REAL
Al comprobar el programa dentro de un circuito real sucede que: al desactivar el relé de
la cerradura sin existir la pulsación adicional, el programa se encamina al cambio de la
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 10
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
clave. Esto sucede por el ruido eléctrico que se produce en la desactivación del relé, que
ingresa por la fuente de polarización para genera una interrupción indeseada.
Existen varias alternativas de solución, algunas que modifican el hardware del circuito;
pero se ha escogido una solución de software, que consiste en dejar pasar alrededor de
50 milisegundos y borrar las banderas de interrupción antes de continuar con las
instrucciones que determinan si existe o no la pulsación adicional para el cambio de
clave, tal como se indica a continuación:
; ACTIVACIÓN DE LA CERRADURA BIEN: SBI PORTA,CERRADURA ; ACTIVAR LA CERRADURA CBI PORTA,ALARMA ; APAGAR LA ALARMA CLR AUX1 RCALL DELAY1 ; APROXIMADAMENTE 5 SEGUNDOS CBI PORTA,CERRADURA ; DESACTIVAR LA CERRADURA ; PARA ELIMINAR EL RUIDO AL DESACTIVAR LA CERRADURA PUSH AUX1 RCALL DELAY2 ; APROXIMADAMENTE 50 MILISEGUNDOS LDI AUX1,0B00000111 OUT EIFR,AUX1 ; BORRAR LAS BANDERAS POP AUX1 ; PARA CHEQUEAR LA TECLA ADICIONAL CPI AUX1,0 ; NINGUNA TECLA PRESIONADA BREQ INGRESAR ; IR PARA OTRO INGRESO
También se necesita subrutina DELAY2
; RETARDO PARA 50 MILISEGUNDOS DELAY2: LDI AUX2,0x41+1 LDI AUX3,0x1A DLY2: DEC AUX3 BRNE DLY2 DEC AUX2 BRNE DLY2 RET
MODIFICACIÓN DEL EJERCICIO PARA UTILIZAR INTERRUPCIONES POR CAMBIO DE
ESTADO DE LAS LÍNEAS DE UN PÓRTICO
El enunciado del ejercicio es el mismo anterior y del análisis se modifica únicamente en
el circuito la ubicación de las teclas, en este caso se conectan en las entradas menos
significativas del Pórtico B (PB0, PB1 y PB2).
Por estas modificaciones en el circuito, las interrupciones que se utilizan no son las
Interrupciones Externas sino la Interrupción por Cambios en el Pórtico B, lo que
implica usar otro vector de interrupciones.
En cuanto al programa principal, debe cambiar la configuración de los pórticos donde se
conectan las teclas y la programación de la interrupción.
Finalmente, la rutina de interrupción que es una sola, debe identificar a la tecla cuando
es presionada y desechar la interrupción cuando la tecla se libera.
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 11
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
CODIFICACIÓN DE LA NUEVA SOLUCIÓN:
; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS .DEF AUX1 = R16 ; REGISTRO AUXILIAR1 .DEF AUX2 = R17 ; REGISTRO AUXILIAR2 .DEF AUX3 = R18 ; REGISTRO AUXILIAR3 .DEF AUX4 = R19 ; REGISTRO AUXILIAR4 .DEF AUXI = R20 ; REGISTRO AUXILIAR PARA INTERRUPCIÓN .EQU CERRADURA = 0 ; BIT DE CONTROL DE CERRADURA .EQU ALARMA = 1 ; BIT DE CONTROL DE ALARMA .EQU LED_A = 6 ; BIT DEL LED DE CAMBIAR LA CLAVE .EQU LED_I = 7 ; BIT DEL LED DE INGRESAR LA CLAVE .EQU NPUL = 5 ; NÚMERO DE PULSACIONES PARA LA CLAVE ; SEGMENTO DE DATOS o MEMORIA SRAM .DSEG SECUEN: .BYTE NPUL ; MEMORIAS PARA INGRESAR LA SECUENCIA CLAVE: .BYTE NPUL ; MEMORIAS PARA ARMAR LA CLAVE ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG JMP PROGP .ORG $0A ; RUTINA DE LA INTERRUPCIÓN POR CAMBIO EN PB JMP RUTPB ; INICIALIZACIÓN DEL PUNTERO DEL STACK Y DE LOS PÓRTICOS PROGP: LDI AUX1,LOW(RAMEND) OUT SPL,AUX1 LDI AUX1,HIGH(RAMEND) OUT SPH,AUX1 LDI AUX1,0B11000011 OUT DDRA,AUX1 ; SALIDAS CERRADURA, ALARMA Y LEDS LDI AUX1,0B00000111 OUT PORTB,AUX1 ; PULL-UP PB2..0 ; PROGRAMACIÓN DE LAS INTERRUPCIONES POR CAMBIOS EN EL PÓRTICO B LDI AUX1,0B00000010 STS PCICR,AUX1 ; PCINT1 HABILITADA LDI AUX1,0B00000010 STS PCIFR,AUX1 ; BORRAR LA BANDERA LDI AUX1,0B00000111 STS PCMSK1,AUX1 ; MASCARA PARA PCINT10..8 ; HABILITACIÓN GLOBAL DE INTERRUPCIONES SEI ; ESTABLECIMIENTO DE LA CLAVE CARGAR: LDI XL,LOW(CLAVE) ; PUNTERO PARA ESTABLECER LA CLAVE LDI XH,HIGH(CLAVE) LDI AUX2,NPUL ; CONTADOR DE REPETICIONES
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 12
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
CLR AUX1 OUT EEARL,AUX1 ; DIRECCIÓN DE LA EEPROM 0x0000 OUT EEARH,AUX1 LOOP1: SBIC EECR,EEPE ; CHEQUEO PARA EEPROM DISPONIBLE RJMP LOOP1 SBI EECR,EERE ; INICIO DE LA LECTURA DE LA EEPROM IN AUX1,EEDR ; DATO LEÍDO DE LA EEPROM ST X+,AUX1 ; ALMACENAR EN LA SRAM IN AUX1,EEARL INC AUX1 ; SIGUIENTE LOCALIDAD DE EEPROM OUT EEARL,AUX1 DEC AUX2 BRNE LOOP1 ; HASTA COMPLETAR ESTABLECIMIENTO ; INGRESO DE LA CLAVE INGRESAR: LDI XL,LOW(SECUEN) ; PUNTERO PARA INGRESAR SECUENCIA LDI XH,HIGH(SECUEN) LDI AUX2,NPUL ; CONTADOR DE REPETICIONES LOOP2: CLR AUX1 WAIT1: CPI AUX1,0 ; ESPERAR POR UNA PULSACIÓN BREQ WAIT1 ST X+,AUX1 ; ALMACENAR EN LA SRAM DEC AUX2 SBI PORTA,LED_I ; ENCENDER LED DE INGRESO DE LA
CLAVE BRNE LOOP2 ; HASTA COMPLETAR EL INGRESO CBI PORTA,LED_I ; APAGAR LED DE INGRESO DE LA CLAVE ; COMPROBACIÓN DE LA SECUENCIA LDI YL,LOW(SECUEN) ; PUNTERO PARA CHEQUEAR SECUENCIA LDI YH,HIGH(SECUEN) LDI AUX3,NPUL ; CONTADOR DE REPETICIONES CHECK: LD AUX1,Y+ ; CARGA LA SECUENCIA INGRESADA LDD AUX2,Y+NPUL-1 ; CARGA LA CLAVE ESTABLECIDA CP AUX1,AUX2 ; COMPARA ENTRE LAS DOS BRNE MAL ; NO COINCIDEN SALTA DEC AUX3 BRNE CHECK ; HASTA COMPLETAR EL CHEQUEO ; ACTIVACIÓN DE LA CERRADURA BIEN: SBI PORTA,CERRADURA ; ACTIVAR LA CERRADURA CBI PORTA,ALARMA ; APAGAR LA ALARMA CLR AUX1 RCALL DELAY1 ; APROXIMADAMENTE 5 SEGUNDOS CBI PORTA,CERRADURA ; DESACTIVAR LA CERRADURA ; PARA ELIMINAR EL RUIDO AL DESACTIVAR LA CERRADURA PUSH AUX1 RCALL DELAY2 ; APROXIMADAMENTE 50 MILISEGUNDOS LDI AUX1,0B00000111 OUT EIFR,AUX1 ; BORRAR LAS BANDERAS POP AUX1 ; PARA CHEQUEAR LA TECLA ADICIONAL CPI AUX1,0 ; NINGUNA TECLA PRESIONADA BREQ INGRESAR ; IR PARA OTRO INGRESO ; CAMBIO DE LA CLAVE CAMBIAR:SBI PORTA,LED_A ; ENCENDER LED DE CAMBIO DE CLAVE LDI AUX2,NPUL ; CONTADOR DE REPETICIONES CLR AUX1 OUT EEARL,AUX1 ; DIRECCIÓN DE LA EEPROM 0x0000 OUT EEARH,AUX1 LOOP3: CLR AUX1 WAIT2: CPI AUX1,0 ; ESPERAR POR UNA PULSACIÓN BREQ WAIT2
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el control de los programas
Página 13
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
OUT EEDR,AUX1 ; DATO PARA ESCRIBIR EN LA EEPROM SBI EECR,EEMPE ; HABILITAR PARA ESCRIBIR EEPROM SBI EECR,EEPE ; INICIO DE ESCRITURA EN LA EEPROM WAIT3: SBIC EECR,EEPE ; CHEQUEO PARA EEPROM DISPONIBLE RJMP WAIT3 IN AUX1,EEARL INC AUX1 ; SIGUIENTE LOCALIDAD DE EEPROM OUT EEARL,AUX1 DEC AUX2 BRNE LOOP3 ; HASTA COMPLETAR EL ALMACENAMIENTO CBI PORTA,LED_A ; APAGAR LED DE CAMBIO DE CLAVE RJMP CARGAR ; IR AL ESTABLECIMIENTO DE LA CLAVE ; RETARDO PARA CINCO SEGUNDOS DELAY1: LDI AUX2,0x19+1 LDI AUX3,0x6E+1 LDI AUX4,0x6A DLY1: DEC AUX4 BRNE DLY1 DEC AUX3 BRNE DLY1 DEC AUX2 BRNE DLY1 RET ; RETARDO PARA 50 MILISEGUNDOS DELAY2: LDI AUX2,0x41+1 LDI AUX3,0x1A DLY2: DEC AUX3 BRNE DLY2 DEC AUX2 BRNE DLY2 RET ; ACTIVACIÓN DE LA ALARMA MAL: SBI PORTA,ALARMA ; ENCENDER LA ALARMA CBI PORTA,CERRADURA ; DESACTIVAR LA CERRADURA RJMP INGRESAR ; IR PARA OTRO INGRESO ; POR CAMBIO EN LAS ENTRADAS DEL PÓRTICO B RUTPB: IN AUXI,PINB ANDI AUXI,0x07 ; CUANDO TERMINA LA PULSACIÓN CPI AUXI,0x07 BRNE CHECK1 RJMP FINR ; CUANDO ES CERO EN PB0 TECLA A CHECK1: CPI AUXI,0x06 BRNE CHECK2 LDI AUX1,'A' RJMP FINR ; CUANDO ES CERO EN PB1 TECLA B CHECK2: CPI AUXI,0x05 BRNE CHECK3 LDI AUX1,'B' RJMP FINR ; CUANDO ES CERO EN PB2 TECLA C CHECK3: CPI AUXI,0x03 BRNE FINR LDI AUX1,'C' FINR: RETI ; .EXIT