SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 1
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 2
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 3
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 4
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 5
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 6
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 7
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 8
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 9
Ing. Jaime ...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 10
Ing. Jaime...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 11
Ing. Jaime...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 12
Ing. Jaime...
SISTEMAS MICROPROCESADOS: Uso de interrupciones por señales externas para el
control de los programas
Página 13
Ing. Jaime...
Próxima SlideShare
Cargando en…5
×

Ejercicios 07 interrupciones

3.433 visualizaciones

Publicado el

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

0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
3.433
En SlideShare
0
De insertados
0
Número de insertados
13
Acciones
Compartido
0
Descargas
144
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

Ejercicios 07 interrupciones

  1. 1. 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.
  2. 2. 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.
  3. 3. 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
  4. 4. 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
  5. 5. 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
  6. 6. 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.
  7. 7. 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.
  8. 8. 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.
  9. 9. 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
  10. 10. 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.
  11. 11. 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
  12. 12. 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
  13. 13. 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

×