2. Sistemas Electrónicos Programables
Interrupciones
Los microcontroladores pueden tener multitud de
causas de interrupción:
Interrupciones externas
Temporizadores
Recepción Serie
…
Una Interrupción es un código que se ejecuta
fuera del proceso principal de un programa; y
que se lanza automática ante un evento dentro
del microcontrolador.
3. Sistemas Electrónicos Programables
Interrupciones (continuación…)
Cuando se produce un interrupción, ésta
‘interrumpe’ la ejecución del programa principal;
deja en pausa el programa principal y
ejecuta una función específica para cada interrupción.
Cuando la función de interrupción ha terminado;
Re-arranca el programa principal desde el mismo punto
donde se había detenido.
Programa Principal
Se produce la
interrupción
Rutina de interrupción
4. Sistemas Electrónicos Programables
Interrupciones en Arduino
Arduino soporta, de forma directa, únicamente
interrupciones externas:
En el Arduino Uno, hay 2 interrupciones externas:
Interrupción 0 pin 2
Interrupción 1 pin 3
que en el Arduino Mega, hay 6 interrupciones externas:
Interrupción 0 pin 2
Interrupción 1 pin 3
Interrupción 2 pin 21
Interrupción 3 pin 20
Interrupción 4 pin 19
Interrupción 5 pin 18
5. Sistemas Electrónicos Programables
Interrupciones en Arduino (continuación…)
Para habilitar un interrupción, se utiliza la función:
Para deshabilitar una interrupción, se utiliza la función:
void attachInterrupt(interrupción, función, modo)
Donde:
interrupción número de interrupción (0, 1, 2 … n)
función función a ejecutar cuando se produce la interrupción
modo tipo de evento que genera la interrupción
LOW: el pin está en valor bajo
CHANGE: el pin ha cambiado de valor
RISING: el pin pasa de valor bajo a valor alto
FALLING: el pin pasa de valor alto a valor bajo
void detachInterrupt(interrupción)
Donde:
interrupción número de interrupción (0, 1, 2 … n)
6. Sistemas Electrónicos Programables
Interrupciones en Arduino (continuación…)
Ejercicio 1:
Enviar un ‘1’ por el puerto serie cuando se active el pulsador
conectado en el pin 2 [implementar dos versiones: sin usar
interrupciones y usando interrupciones].
#define BUTTON 2
void setup() {
pinMode(BUTTON, INPUT);
Serial.begin(9600);
attachInterrupt(0, buttonInt, RISING);
}
void loop() {
}
void buttonInt() {
Serial.print("1");
}
Con interrupciones
#define BUTTON 2
void setup() {
pinMode(BUTTON, INPUT);
Serial.begin(9600);
}
void loop(){
if (digitalRead(BUTTON)){
Serial.print("1");
}
}
Sin interrupciones