Exact. dans l'AVR, il faut imaginer que chaque ligne de ton programme est numérotée de 0 à ... N par exemple, avec la ligne "void setup(){" numérotée 0. le numéro de ligne est appelé "adresse". le µP possède un compteur programme qui démarre à 0 après le reset. L'AVR exécute les lignes une par une, donc ligne 0, ligne 1 etc etc. exemple :
0 void setup(){
1 pinMode (13, OUTPUT);
2 digitalWrite (13, LOW);
3 }
4 void Loop(){
5 allumeLed();
6 eteindLed();
7 }
8 void allumeLed(){
9 digitalWrite(13, HIGH);
10 }
11 void eteindLed(){
12 digitalWrite(13, LOW);
13 }
Le compteur démarre à n=0, donc exécute la ligne 0, puis la ligne 1, jusqu'à la ligne 5, où l'appel de la fonction allumeLed() est interprétée en n = 8, alors n passe de 5 à 8 en sauvegardant dans un coin de sa tête la valeur avant le saut : 5, et le µP continue sur sa lancée, n = 8, 9... à 10, l’accolade veut dire "retourne d'où tu viens", donc n revient à 5 et continue d'être incrémenté : 6. ben la ligne 6 lui dit de sauter à 11, même principe, n = 11, 12, à 13, il retourne à 7 où il interprète un saut à 4 et ainsi de suite.
si on suit les valeurs de n, ça donne n = 0, 1, 2, 3, 4, 5, 8, 9, 10, 6, 11, 12, 13, 7, 4, 5, 8, 9, 10, 6, 11, 12, 13, 7, 4, 5, 8... L'AVR exécute les fonctions, mais les lignes de code une par une.
En réalité, ce simple code génère un millier de lignes d'assembleur (codage compréhensible par le coeur de l'AVR), mais le principe reste le même, un code l'un après l'autre avec des "sauts".