// caractère volatile etat = 0
unsigned char volatile etat = 0;
// caractère volatile compte = 0
unsigned char volatile compte = 0;
unsigned char masque = 0b00100000;
void setup() {
Serial.begin(9600);
// - Initialiser le port numérique 13 (LED_BUILTIN) en sortie (DEL).
DDRB = 0b00100000; // 0x20
// - Désactiver les interruptions.
noInterrupts();
// - Initialiser le compteur 1 pour générer une interruption à toutes les ¼ seconde.
// a) initialiser le registre TCCR1A à sa valeur par défaut
TCCR1A = 0;
// b) initialiser le registre TCCR1B pour diviser par 64
TCCR1B = 3;
// c) activer les interruptions sur le débordement du compteur 1 (registre TIMSK1)
TIMSK1 = 1;
// - Activer les interruptions
interrupts();
Serial.println("On démarre ! ");
}
void loop() {
// - Écrire la valeur de la variable globale etat sur le port numérique 13
// digitalWrite(13, etat);
if (etat == 1) {
PORTB = PORTB & ~masque; // 0b00100000 -> 0b11011111
}
else {
PORTB = PORTB | masque;
}
Serial.println(compte);
}
ISR(TIMER1_OVF_vect) {
//- Incrémenter la valeur de la variable globale compte.
compte = compte + 1;
//- Si la valeur de la variable globale compte est égale à 8
if (8 == compte) {
//- Mettre la valeur de la variable globale compte à zéro.
compte = 0;
//- Inverser la valeur de la variable globale etat 0 <-> 1 .
etat = etat ^ 1;
}
}