Ejercicios 07 interrupciones

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

description

Control de una cerradura eléctrica con alarma, en la que se ingresa una clave con 3 teclas

Transcript of Ejercicios 07 interrupciones

Page 1: Ejercicios 07 interrupciones

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.

Page 2: Ejercicios 07 interrupciones

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.

Page 3: Ejercicios 07 interrupciones

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

Page 4: Ejercicios 07 interrupciones

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

Page 5: Ejercicios 07 interrupciones

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

Page 6: Ejercicios 07 interrupciones

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.

Page 7: Ejercicios 07 interrupciones

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.

Page 8: Ejercicios 07 interrupciones

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.

Page 9: Ejercicios 07 interrupciones

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

Page 10: Ejercicios 07 interrupciones

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.

Page 11: Ejercicios 07 interrupciones

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

Page 12: Ejercicios 07 interrupciones

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

Page 13: Ejercicios 07 interrupciones

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