Table des matières

Utiliser les interruptions externes

Exemple 1 : Comptabilise les interruptions sur INT0

#include <avr/io.h>
#include <avr/interrupt.h>		//Librairie pour la gestion des interruptions
 
 
ISR(INT0_vect) 				//Vecteur d'interruption de INT0
{
	PORTA++;			//Incrémente PORTA
}
 
int main (void)
{
 
 
	DDRD &=~_BV(2); 		//INT0 en entrée 
	PORTD |= _BV(2); 		//Active la résistance de tirage sur l'entrée INT0
 
	DDRA = 0xFF;			//Port A en sortie
 
	GICR |= _BV(INT0);		//Interruption sur INT0
 
	MCUCR |= _BV(ISC01);		//Interruption sur front  descendant donc dans le registre MCUCR ISC01 = 1 ISC00 =0
					//Vu que MCUCR à comme valeur par defaut 0 on a juste à mettre ISC01 à 1 Cf : datasheet
 
 	sei();				//Active les interruptions
 
	while(1);			//Boncle sans fin 
 
 
	return 1;
}

Proposition de montage

C1 sert à supprimer les rebonds

A chaque pression sur S1, les leds afficheront la valeur binaire de PORTA.

:avr:winavr:avr_int0.gif

Vidéo

:projets:devmodavr:avr_int.jpg