Vous êtes sur la page 1sur 15

Universidad Autnoma de Baja California

Facultad de Ingeniera Mexicali

Microprocesadores y
microcontroladores
- Interrupciones con Arduino M.C. Jorge Eduardo Ibarra Esquer
jorge.ibarra@uabc.edu.mx
Semestre 2015-1

Comunicacin con perifricos


Dispositivos de E/S (Perifricos)
Permiten que el microprocesador se
comunique con el mundo exterior para
intercambiar datos
Hay tres formas de hacer dicho intercambio:
E/S Programada
E/S controlada por interrupciones
Acceso Directo a Memoria DMA

http://users.ece.utexas.edu/~valvano/Volume1/E-Book/C12_Interrupts.htm

Interrupciones
Son una tcnica para distraer al
procesador del programa que est
ejecutando, para que atienda algn
evento que se presente
Le evitan al procesador el tener que
estar verificando el estado de cada
dispositivo de E/S presente en el sistema

ISR Interrupt Service Routine


Se refiere al segmento de cdigo que se
ejecuta de manera automtica al recibir
la solicitud de interrupcin.
No reciben parmetros.
No regresan valores.
Deben ejecutarse lo ms rpido posible.
Identificar variables en secciones crticas
del cdigo.

Interrupciones externas en
Arduino
Se utilizan 4 mtodos
attachInterrupt()
detachInterrupt()
interrupts()
noInterrupts()

Interrupciones externas
Modelo

int.0

int.1

int.2

int.3

int.4

int.5

Uno

Mega2560

21

20

19

18

Leonardo

attachInterrupt()
Especifica la ISR a llamar cuando se recibe
una solicitud de interrupcin.
attachInterrupt(interrupt, ISR, mode)

mode:

LOW
CHANGE
RISING
FALLING

attachInterrupt() Galileo
Especifica la ISR a llamar cuando se recibe
una solicitud de interrupcin.
attachInterrupt(pin, ISR, mode)

mode:

LOW
CHANGE
RISING
FALLING

Ejemplo de uso de interrupciones


int LED= 13;
int INT_NUMBER=0;
volatile int state = LOW;
void setup()
{
pinMode(LED, OUTPUT);
attachInterrupt(INT_NUMBER, blink, RISING);
}
void loop()
{
digitalWrite(LED, state);
}
void blink()
{
state = !state;
}

Ejemplo de uso de interrupciones


con Galileo
int LED=13;
int INT_PIN=2;
volatile int state=LOW;
void setup() {
pinMode(LED,OUTPUT);
attachInterrupt(INT_PIN,blink,CHANGE);
}
void loop() {
digitalWrite(LED,state);
}
void blink(){
if(digitalRead(INT_PIN)==HIGH)
state=!state;
}

detachInterrupt()
Deshabilita la interrupcin seleccionada
detachInterrupt(interrupt)

interrupts()
Habilita las interrupciones configuradas
en el sistema.
interrupts()

noInterrupts()
Deshabilita las interrupciones
configuradas en el sistema.
noInterrupts()

Intel Galileo
Los mtodos interrupts() y
noInterrupts() no estn
implementados para Galileo.