Saltar al contenido principal
Library homepage
 

Text Color

Text Size

 

Margin Size

 

Font Type

Enable Dyslexic Font
LibreTexts Español

29.2: Interrupciones externas

( \newcommand{\kernel}{\mathrm{null}\,}\)

Consideremos primero una interrupción externa. En este caso, el cambio de estado visto en un pin externo provoca una interrupción. Utilizaremos Solicitud de Interrupción Externa 0, también conocida como el vector INT0. Esta interrupción examina los cambios de estado en PORTD.2, Uno pin 2. Nuestro ejemplo será bastante sencillo: conectamos un interruptor pasivo usando el pull-up interno al pin 2. Cuando se activa el interruptor alternará un LED conectado a Uno pin 8 (PORTB.0). El código sigue:

01/* External Interrupt Example, INT0
02   External interrupt pin lights an LED
03 
04   Active high LED attached to PORTB.0
05   Switch on Uno pin 2, falling edge triggers external pin interrupt 0,
06   ISR toggles LED at PORTB.0
07*/
08 
09#define LEDMASK 0x01
10 
11void setup()
12{
13    DDRB |= LEDMASK;
14    // set Uno pin 2 for input with pullup
15    DDRD &= ~(0x04);
16    PORTD |= 0x04;
17 
18    EIMSK |= (1<<INT0);  // enable external interupt INT0 (Uno pin 2)
19    EICRA |= (1<<ISC01); // trigger INT0 on falling edge
20}
21 
22ISR(INT0_vect)
23{
24    PORTB ^= LEDMASK;    // toggle LED
25}
26 
27void loop()
28{
29}

Después de configurar los pines IO, el código establece el bit INT0 en el registro EIMSK para habilitar la interrupción. El Registro de Control de Interrupciones Externas (EICRA) está programado para activarse en un borde descendente (negativo). Cuando se activa el interruptor, el borde descendente activa el ISR para que funcione. El ISR simplemente alterna la broca a la que está atado el LED. Tenga en cuenta que no hay ajuste de puerto y examen de pines en el código principal. De hecho, loop () está vacío y no hace nada.

Entre otras cosas, una interrupción externa como esta es muy útil para elementos de gran importancia como un interruptor de pánico.


This page titled 29.2: Interrupciones externas is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform.

Support Center

How can we help?