Académique Documents
Professionnel Documents
Culture Documents
3.0 Introduccin.
Una solicitud de interrupcin o simplemente una interrupcin- es un evento de origen interno o
externo que, si es atendido, hace que el microcontrolador interrumpa la ejecucin del programa
en curso y en su lugar ejecute las instrucciones de otro programa. Regularmente, cuando un
programa que atiende la solicitud de interrupcin ha completado su ejecucin, el
microcontrolador continua con las instrucciones del programa interrumpido, justo con la
instruccin que sigue a la que estaba ejecutando cuando se produjo la solicitud de interrupcin.
En general, las solicitudes de interrupcin son eventos de carcter asncrono respecto al programa
que ejecuta el microcontrolador. Esto significa que una solicitud de interrupcin se puede producir
en cualquier momento mientras se ejecuta cualquier instruccin de un programa. Por ello no es
posible prever durante qu instruccin ocurrir una interrupcin.
En un microcontrolador hay varias fuentes de interrupcin, unas internas y otras externas. Las
interrupciones internas tienen su origen en los mdulos de entrada salida del microcontrolador, la
memoria o la CPU. Los temporizadores y otros mdulos de entrada y salida son fuentes de
interrupciones comunes. Menos comunes son las interrupciones causadas por algn evento que
tenga lugar en la memoria (por ejemplo, por escribir en la EEPROM de datos) o en la propia CPU
(una divisin por cero). Las interrupciones externas se originan en un perifrico y llegan al
microcontrolador por alguna de sus terminales.
Los microcontroladores tienen recursos para recibir y procesar las solicitudes de interrupcin.
Generalmente, cada dispositivo que es fuente de una posible interrupcin tiene asociados dos
bits, que pueden estar en un mismo registro o en registros diferentes. El primer bit tiene una
funcin informativa: es un indicador de que esta activado (es puesto a 1, por ejemplo) por el
dispositivo que solicita la interrupcin. Este bit se puede consultar por programa si para atender al
dispositivo se usa la tcnica de consulta o espera. El otro bit tiene una funcin de control y se
emplea para permitir o impedir el paso de la solicitud de interrupcin hacia la CPU, lo que equivale
a habilitar o inhabilitar la generacin de interrupciones por la fuente en cuestin. Este bit de
control se puede manejar por programa.
Los microcontroladores disponen adems de un bit para el control global de sistema de
interrupciones. Con este bit se permite o impide el paso de cualquier interrupcin hacia la CPU, lo
cual equivale a habilitar o inhabilitar la generacin de interrupciones por la fuente en cuestin.
Para que una solicitud de interrupcin llegue a la CPU y sea atendida, tanto el sistema en su
conjunto como la interrupcin en particular deben de estar habilitadas.
Los bits de control utilizados para permitir o no el paso de las solicitudes de interrupcin hacia la
CPU se denominan mascaras; de ah que las interrupciones que se puedan habilitar o inhabilitar
por programa se llamen interrupciones enmascarables y las interrupciones que no se pueden
inhabilitar por programa (es decir, que estn siempre habilitadas), si las hay, se denominan
interrupciones no enmascarables.
Las interrupciones enmascarables disponen de bits de control asociados a cada fuente de
interrupcin y del bit de control global del sistema. Para que una solicitud de interrupcin
enmascarables progrese hacia la CPU, tanto el bit de control individual correspondiente, como el
bit de control global deben estar en 1. Si la interrupcin es no enmascarable, llegar a la CPU con
independencia del bit de control global, y ser atendida.
En general, cuando una solicitud de interrupcin que llega a la CPU es atendida, el sistema de
interrupcin queda inhabilitado (el bit de control global es puesto a 0). Para poder atender otras
solicitudes de interrupcin, el programador debe habilitar nuevamente el sistema; esto suele
hacerlo el propio programa que atiende la interrupcin.
3.0.1 Manejo de las Interrupciones INT0 e INT1.
Una interrupcin, como su nombre lo indica, interrumpe el programa principal y ejecuta una
subrutina de interrupcin donde se ejecuta el cdigo que el programador desea, el ejemplo ms
representativo es el RESET de una PC cuando se presiona ese botn se interrumpe el programa
principal y vuelve a iniciar el programa.
Existen dos tipos de interrupcin las internas o de software y las externas o de hardware, por
ejemplo la de reset es una externa ya que est asociada a una terminal. Las de software son
generadas por alguna condicin en los perifricos, por ejemplo podemos habilitar una
interrupcin cuando el ADC termine de hacer la conversin, o cuando suceda overflow en el timer,
etc.
Por ejemplo hay interrupciones que son por flanco de bajada en un pin, entonces, suceder una
interrupcin cuando haya un flanco de bajada en el pin. Las subrutinas de interrupcin son como
las funciones que hemos realizado, con la excepcin de que las subrutinas de interrupcin SON
LLAMADAS POR HARDWARE, es decir el microcontrolador llama a la subrutina de interrupcin
cuando el evento sucede y que puede ser en cualquier momento, en cambio las funciones que
define el usuario son llamadas por el software segn donde haya escrito el programador el
llamado de la funcin.
alterarse por la ejecucin de la subrutina de atencin a una interrupcin. Para preservar esos y
otros registros que no deban ser alterados, hay que guardar sus valores al iniciar la subrutina.
Estos valores se guardan en la pila.
3.0.4 Interrupciones fijas y vectorizadas.
Para informar a la CPU de la direccin donde comienza la subrutina que atiende la interrupcin,
hay dos alternativas:
La tabla 3.1 muestra la ubicacin en la memoria del microcontrolador atmega48, del vector de
interrupciones, el nombre con el cual se define la direccin del vector de interrupciones dentro de
Winavr y una breve descripcin de a que corresponde dicha interrupcin.
La tabla muestra la ubicacin en la memoria del microcontrolador atmega48.
Direccin
0x000
0x001
0x002
0x003
0x004
0x005
0x006
0x007
0x008
0x009
0x00A
0x00B
0x00C
0x00D
0x00E
0x00F
0x010
0x011
0x012
0x013
0x014
0x015
0x016
0x017
0x018
0x019
Nombre de la seal
Descripcin
Pin de reset, BOD Reset, watchdog, Power-on Reset
INT0_vect
Requerimiento de interrupcin externa 0
INT1_vect
Requerimiento de interrupcin externa 1
PCINTO_vect
Interrupcin por cambio de pin grupo 0
PCINT1_vect
Interrupcin por cambio de pin grupo 1
PCINT2_vect
Interrupcin por cambio de pin grupo 2
WDT_vect
Watchdog timer
TIMER2_COMPA_vect
Timer/Counter2 igualdad en comparacin A
TIMER2_COMPB_vect
Timer/Counter2 igualdad en comparacin B
TIMER2_OVF_vect
Timer/Counter2 Sobre flujo
TIMER1_CAPT_vect
Timer/Counter1 Evento de captura
TIMER1_CAPA_vect
Timer/Counter1 igualdad en comparacin A
TIMER1_CAPB_vect
Timer/Counter1 igualdad en comparacin B
TIMER1_OVF_vect
Timer/Counter1 Sobre flujo
TIMER0_COMPA_vect
Timer/Counter0 igualdad en comparacin A
TIMER0_COMPB_vect
Timer/Counter0 igualdad en comparacin A
TIMER0_OVF_vect
Timer/Counter0 Sobre flujo
SPI_STC_vect
Transferencia serial completa
USART_RX_vect
Recepcin completa de la USART
USART_UDRE_vect
Buffer de datos vacio de la USART
USART_TX_vect
Transferencia completa de la USART
ADC_vect
Conversin analgico - completa
EE_READY_vect
EEPROM lista
ANALOG_COMP_vect
Comparador analgico
TWI_vect
Interfaz serial Two_wire (I2C)
SPM_RDY_vect
Almacenamiento de memoria de programa listo
Las interrupciones externas pueden ser activadas por flancos de subida, flancos de bajada o un
nivel lgico bajo. Esto es configurable a travs del registro EICRA.
3.3.1 EICRA, registro de control del microcontrolador.
Para la configuracin de las instrucciones externas, se ocupan los cuatro primeros bits de este
registro. Estos bits tienen las siguientes funciones:
Bit 3,2 ISC11, ISC10: Bits de control de sensado de interrupcin externa 1. Estos bits
controlan la forma en la que se activara la interrupcin externa 1 y su configuracin es
igual que la de los bits 1,0.
Bit 1,0 ISC01, ISC00: Bits de control de sensado de interrupcin externa 0. La interrupcin
externa 0 es activada por el pin correspondiente a INT0 (PD2), siempre y cuando el bit I del
registro SREG y su correspondiente mascara de interrupcin estn activados. La tabla 3.2
muestra las posibles configuraciones para disparar las interrupciones 0 y 1.
ISC11 ISC10 Descripcin
0
0
El nivel bajo de INT1 genera una solicitud de interrupcin
0
1
Cualquier cambio lgico en INT1 genera una solicitud de interrupcin
1
0
El flanco de bajada de INT1 genera una solicitud de interrupcin
1
1
El flanco de subida de INT1 genera una solicitud de interrupcin
Bit 1 INT1: Habilitacin de interrupcin externa 1. Si el bit I del SREG est en uno y este
bit se pone en uno; se habilita la interrupcin externa 1.
Bit 0 INT0: Habilitacin de interrupcin externa 0. Si el bit I del SREG est en uno y este
bit se pone en uno; se habilita la interrupcin externa 0.
3.3.3 EIFR registro de banderas de interrupciones externas.
Bit 1 INTF1: cuando un evento dispara la interrupcin externa 1, este bit de bandera se
pone a uno. Si estn activados los bits I del SREG e INT1 de EIMSK, al activarse este bit se
ejecuta un salto al vector de interrupciones. Este bit es limpiado por hardware al
ejecutarse la rutina de interrupcin.
BIT 6 INTF0: cuando un evento dispara la interrupcin externa 0, este bit de bandera se
pone a uno. Si estn activados los bits I del SREG e INT0 de EIMSK, al activarse este bit se
ejecuta un salto al vector de interrupciones. Este bit es limpiado por hardware al
ejecutarse la rutina de interrupcin.
3.4 Practica de interrupcin externa.
3.4.1 Objetivo.
Conocer el funcionamiento de una interrupcin, como se forma el vector de interrupciones y los
registros que interviene en el uso de las interrupciones externas.
3.4.2 Material.
El material necesario para realizar esta prctica es el siguiente:
Cantidad
cantidad
1
Cristal de cuarzo de 4 MHZ.
2
Capacitores de 22 pf
1
Interruptor tipo push button
1
Resistor de 10K
1
4
4
1
1
1
Resistor de 1K
Resistores de 220
Diodos emisores de luz LEDs
Programador de microcontroladores
Microcontrolador atmega48
Fuente de alimentacin de 5 volts
Pinzas, protoboard, cable telefnico
3.4.3 Desarrollo.
Para la realizacin de esta prctica se arma el siguiente circuito.
3.4.4 Cdigo.
//___________inicio de programa
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define step1
#define step2
#define step3
#define step4
8
4
2
1
void config_io(void) {
DDRC=0x0F;
DDRD=0b11111011;
PORTD=_BV(PD2);
EICRA=_BV(ISC01);
EIMSK=_BV(INT0);
sei();
}
//funcin de configuracin de IO
//configuracin de puertos IO
//PD2 como entrada
//activar resistencia de pull up en PD2
//seleccin de comportamiento para INT0
//activacin de interrupcin externa 0
//activacin de interrupciones globales
void retardo(void) {
int16_t i;
for(i=0; i<25000; i++);
}
//funcin de retardo
//declaracin de entero de 16 bits i
//ciclo de for
void secuencia1(void){
PORTC=step1;
retardo();
PORTC=step2;
retardo();
PORTC=step3;
retardo();
PORTC=step4;
retardo();
}
ISR(INT0_vect) {
PORTC=step4;
retardo();
PORTC=step3;
retardo();
PORTC=step2;
retardo();
PORTC=step1;
retardo();
}
void main(void) {
config_io();
while(1){
//funcin principal
//llamada a funcin config_io
//ciclo infinito
secuencia1();
}
}
//se va a la secuencia 1
//______________fin de programa
Interrupcin Externa
Descripcin
El push button est conectado al microcontrolador, el cual se encuentra configurado para las
interrupciones externas, esto es, que el programa deja de hacer lo que est haciendo para atender
la interrupcin y ejecutar las instrucciones dentro esta funcin, que para este caso es prender el
LED que se encuentra conectado al microcontrolador.
Diagrama Esquemtico
Materiales
1 Push Button
1 Resistencia de 220 Ohms
1 Resistencia de 1 kOhms
1 LED
1 Microcontrolador ATmega48
Programador
Introduccin
Interrupcin externa
Las interrupciones externas en el ATmega48 son activadas con los pines INT0 y INT1, en caso de
que se habiliten las interrupciones los pines INT siempre activaran alguna interrupcin sin
importar como se haya configurado el puerto en el que estos pines se encuentren. Las
interrupciones externan se habilitan cuando la entrada del pin, cambia de estado, se puede
configurar si se requiere que se active cuando cambia de un estado bajo a uno alto o viceversa.
Resistencia de Pull down
Programa en C
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR(INT0_vect)
{
PORTB=0x01;
_delay_ms(2000);
PORTB=0x00;
}
Al asignrsele un 0x03 se le est indicando que active los bits 0 y 1 los cuales para el registro EICRA
indican de qu manera se activa la interrupcin, como se puede ver en la tabla, hay cuatro
opciones que son: el nivel bajo de INT1, cualquier cambio lgico, el flanco de bajada y el flanco de
subida. Con los bits 0 y 1 en unos, se habilita la opcin del flanco de subida.
EIFR
0x01 = 0b00000001, esto es, que se est seleccionando el bit 0 del registro EIFR el cual indica que
al activarlo se limpia la bandera INTF0.
EIMSK=0x10;
Al igual que en el registro anterior se est activando el bit 0 del EIMSK el cual indica que se utiliza
el pin INT0 para la interrupcin externa.