SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Modelos equivalentes de pequeña señal de los transistores fet
Modelos equivalentes de pequeña señal de los transistores fetModelos equivalentes de pequeña señal de los transistores fet
Modelos equivalentes de pequeña señal de los transistores fetArmando Bautista
 
Procedimiento de diseño
Procedimiento de diseñoProcedimiento de diseño
Procedimiento de diseñoEdmary Rojas
 
Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01Cristian Ortiz Gómez
 
Conexión en cascada
Conexión en cascadaConexión en cascada
Conexión en cascadajoselin33
 
SMART PID - TOOLBOX CONTROL ROBUSTO MATLAB
SMART PID - TOOLBOX CONTROL ROBUSTO MATLABSMART PID - TOOLBOX CONTROL ROBUSTO MATLAB
SMART PID - TOOLBOX CONTROL ROBUSTO MATLABSerHere07
 
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSOUnidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSODavinso Gonzalez
 
Integral de conv
Integral de convIntegral de conv
Integral de convmayrenr
 
Uso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorUso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorLuis Zurita
 
Anteproyecto amplificador operacional (despertador automatico)
Anteproyecto amplificador operacional (despertador automatico)Anteproyecto amplificador operacional (despertador automatico)
Anteproyecto amplificador operacional (despertador automatico)Marco Salazar
 
Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555Israel Magaña
 
Amplificador colector común clase 8
Amplificador colector común clase 8Amplificador colector común clase 8
Amplificador colector común clase 8ManuelGmoJaramillo
 
8 1 convertidor-digital-analogico
8 1 convertidor-digital-analogico8 1 convertidor-digital-analogico
8 1 convertidor-digital-analogicoRonald_Paul
 
Ejercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daEjercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daCesar Gil Arrieta
 
Motores de repulsión (1)
Motores de repulsión (1)Motores de repulsión (1)
Motores de repulsión (1)mmrb16
 

Tendances (20)

Instrucciones avr
Instrucciones avrInstrucciones avr
Instrucciones avr
 
Diseño combinacional
Diseño combinacionalDiseño combinacional
Diseño combinacional
 
Modelos equivalentes de pequeña señal de los transistores fet
Modelos equivalentes de pequeña señal de los transistores fetModelos equivalentes de pequeña señal de los transistores fet
Modelos equivalentes de pequeña señal de los transistores fet
 
Procedimiento de diseño
Procedimiento de diseñoProcedimiento de diseño
Procedimiento de diseño
 
Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01
 
Conexión en cascada
Conexión en cascadaConexión en cascada
Conexión en cascada
 
Practica0,1,2,3,4
Practica0,1,2,3,4Practica0,1,2,3,4
Practica0,1,2,3,4
 
SMART PID - TOOLBOX CONTROL ROBUSTO MATLAB
SMART PID - TOOLBOX CONTROL ROBUSTO MATLABSMART PID - TOOLBOX CONTROL ROBUSTO MATLAB
SMART PID - TOOLBOX CONTROL ROBUSTO MATLAB
 
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSOUnidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
 
Integral de conv
Integral de convIntegral de conv
Integral de conv
 
Uso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorUso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensamblador
 
Anteproyecto amplificador operacional (despertador automatico)
Anteproyecto amplificador operacional (despertador automatico)Anteproyecto amplificador operacional (despertador automatico)
Anteproyecto amplificador operacional (despertador automatico)
 
Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555
 
Amplificador colector común clase 8
Amplificador colector común clase 8Amplificador colector común clase 8
Amplificador colector común clase 8
 
Conversión de flip flops
Conversión de flip flopsConversión de flip flops
Conversión de flip flops
 
8 1 convertidor-digital-analogico
8 1 convertidor-digital-analogico8 1 convertidor-digital-analogico
8 1 convertidor-digital-analogico
 
Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887
 
Ejercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daEjercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_da
 
Motores de repulsión (1)
Motores de repulsión (1)Motores de repulsión (1)
Motores de repulsión (1)
 
Sistemas secuenciales
Sistemas secuencialesSistemas secuenciales
Sistemas secuenciales
 

En vedette

Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónJaime E. Velarde
 
09 Conjunto de Instrucciones de los Atmega
09 Conjunto de Instrucciones  de los Atmega09 Conjunto de Instrucciones  de los Atmega
09 Conjunto de Instrucciones de los AtmegaJaime E. Velarde
 
Funcionamiento del Timer 0
Funcionamiento del Timer 0Funcionamiento del Timer 0
Funcionamiento del Timer 0Jaime E. Velarde
 
Ejercicios 06 subrutinas con LCD continuación
Ejercicios 06 subrutinas con LCD continuaciónEjercicios 06 subrutinas con LCD continuación
Ejercicios 06 subrutinas con LCD continuaciónJaime E. Velarde
 
06 Elaboración de Programas
06 Elaboración de Programas06 Elaboración de Programas
06 Elaboración de ProgramasJaime E. Velarde
 
15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y Logicas15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y LogicasJaime E. Velarde
 
Ejercicios 06 subrutinas con LCD
Ejercicios 06 subrutinas con LCDEjercicios 06 subrutinas con LCD
Ejercicios 06 subrutinas con LCDJaime E. Velarde
 
Display de cristal líquido grágico GLCD
Display de cristal líquido grágico GLCDDisplay de cristal líquido grágico GLCD
Display de cristal líquido grágico GLCDJaime E. Velarde
 

En vedette (20)

Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuación
 
Ejercicio 08 CAD
Ejercicio 08 CADEjercicio 08 CAD
Ejercicio 08 CAD
 
09 Conjunto de Instrucciones de los Atmega
09 Conjunto de Instrucciones  de los Atmega09 Conjunto de Instrucciones  de los Atmega
09 Conjunto de Instrucciones de los Atmega
 
18 Timers
18 Timers18 Timers
18 Timers
 
Funcionamiento del Timer 0
Funcionamiento del Timer 0Funcionamiento del Timer 0
Funcionamiento del Timer 0
 
Ejercicio 09 Serie
Ejercicio 09 SerieEjercicio 09 Serie
Ejercicio 09 Serie
 
Ejercicios 06 subrutinas con LCD continuación
Ejercicios 06 subrutinas con LCD continuaciónEjercicios 06 subrutinas con LCD continuación
Ejercicios 06 subrutinas con LCD continuación
 
06 Elaboración de Programas
06 Elaboración de Programas06 Elaboración de Programas
06 Elaboración de Programas
 
Ejercicio 07 Timers
Ejercicio 07 TimersEjercicio 07 Timers
Ejercicio 07 Timers
 
Ejercicio 04 Calculos
Ejercicio 04 CalculosEjercicio 04 Calculos
Ejercicio 04 Calculos
 
15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y Logicas15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y Logicas
 
Compiladores teoria e implementacion
Compiladores teoria e implementacionCompiladores teoria e implementacion
Compiladores teoria e implementacion
 
Funcionamiento del CAD
Funcionamiento del CADFuncionamiento del CAD
Funcionamiento del CAD
 
Funcionamiento del USART
Funcionamiento del USARTFuncionamiento del USART
Funcionamiento del USART
 
Ejercicios 06 subrutinas con LCD
Ejercicios 06 subrutinas con LCDEjercicios 06 subrutinas con LCD
Ejercicios 06 subrutinas con LCD
 
Ejercicio 03 Porticos
Ejercicio 03 PorticosEjercicio 03 Porticos
Ejercicio 03 Porticos
 
17 Interrupciones
17 Interrupciones17 Interrupciones
17 Interrupciones
 
Ejercicio 01 Llenar
Ejercicio 01 LlenarEjercicio 01 Llenar
Ejercicio 01 Llenar
 
Ejercicio 05 Subrutinas
Ejercicio 05 SubrutinasEjercicio 05 Subrutinas
Ejercicio 05 Subrutinas
 
Display de cristal líquido grágico GLCD
Display de cristal líquido grágico GLCDDisplay de cristal líquido grágico GLCD
Display de cristal líquido grágico GLCD
 

Similaire à Ejercicios 07 interrupciones

Ejercicio 07 adicionales de Interrupciones
Ejercicio 07 adicionales de InterrupcionesEjercicio 07 adicionales de Interrupciones
Ejercicio 07 adicionales de InterrupcionesJaime E. Velarde
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...SANTIAGO PABLO ALBERTO
 
Introducpic2
Introducpic2Introducpic2
Introducpic2conalep
 
Introducpic
IntroducpicIntroducpic
Introducpicconalep
 
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresMicrocontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresSANTIAGO PABLO ALBERTO
 
Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercanteDaniel Remondegui
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedadordy vc
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84AMicroPart
 
Puertos de entrada diapositivas
Puertos de entrada diapositivasPuertos de entrada diapositivas
Puertos de entrada diapositivastecautind
 
Puertos de entrada/salida
Puertos de entrada/salidaPuertos de entrada/salida
Puertos de entrada/salidatecautind
 
Informe N°2-Microcontroladores
Informe N°2-MicrocontroladoresInforme N°2-Microcontroladores
Informe N°2-MicrocontroladoresOmar Ruiz
 

Similaire à Ejercicios 07 interrupciones (20)

Ejercicio 07 adicionales de Interrupciones
Ejercicio 07 adicionales de InterrupcionesEjercicio 07 adicionales de Interrupciones
Ejercicio 07 adicionales de Interrupciones
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 
At89c52
At89c52At89c52
At89c52
 
Introducpic2
Introducpic2Introducpic2
Introducpic2
 
Introducpic
IntroducpicIntroducpic
Introducpic
 
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresMicrocontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
 
Arquitectura interna micro
Arquitectura interna microArquitectura interna micro
Arquitectura interna micro
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Control nivel luz
Control nivel luzControl nivel luz
Control nivel luz
 
Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercante
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedador
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84A
 
Puertos de entrada diapositivas
Puertos de entrada diapositivasPuertos de entrada diapositivas
Puertos de entrada diapositivas
 
Puertos de entrada/salida
Puertos de entrada/salidaPuertos de entrada/salida
Puertos de entrada/salida
 
Tutorial ii proyectos en basic proton
Tutorial ii   proyectos en basic protonTutorial ii   proyectos en basic proton
Tutorial ii proyectos en basic proton
 
Informe N°2-Microcontroladores
Informe N°2-MicrocontroladoresInforme N°2-Microcontroladores
Informe N°2-Microcontroladores
 

Plus de Jaime E. Velarde

Plus de Jaime E. Velarde (11)

20 Portico Serial
20 Portico Serial20 Portico Serial
20 Portico Serial
 
19 Conversor A/D
19 Conversor A/D19 Conversor A/D
19 Conversor A/D
 
16 Instrucciones de Subrutinas
16 Instrucciones de Subrutinas16 Instrucciones de Subrutinas
16 Instrucciones de Subrutinas
 
13 Instrucciones de manejo de bits
13  Instrucciones de manejo de bits13  Instrucciones de manejo de bits
13 Instrucciones de manejo de bits
 
14 Fusibles Programables
14 Fusibles Programables14 Fusibles Programables
14 Fusibles Programables
 
12 Pórticos de los Atmega
12 Pórticos de los Atmega12 Pórticos de los Atmega
12 Pórticos de los Atmega
 
Ejercicio 02 Tablas
Ejercicio 02 TablasEjercicio 02 Tablas
Ejercicio 02 Tablas
 
11 Instrucciones de Salto de los Atmega
11  Instrucciones de Salto  de los Atmega11  Instrucciones de Salto  de los Atmega
11 Instrucciones de Salto de los Atmega
 
10 Instrucciones de Transferencia
10  Instrucciones  de Transferencia10  Instrucciones  de Transferencia
10 Instrucciones de Transferencia
 
08 Memoria de los Atmega164P
08 Memoria de los Atmega164P08 Memoria de los Atmega164P
08 Memoria de los Atmega164P
 
07 Familia Atmega
07 Familia Atmega07 Familia Atmega
07 Familia Atmega
 

Ejercicios 07 interrupciones

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