Este documento describe un programa para un microcontrolador ATmega164P que controla una cerradura eléctrica mediante la detección de secuencias de pulsaciones de teclas. El programa utiliza interrupciones externas para identificar las teclas pulsadas y abre la cerradura si coincide la secuencia ingresada con la clave almacenada en la EEPROM. También permite cambiar la clave almacenada modificando el contenido de la EEPROM mediante otra secuencia de pulsaciones.
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