Étape 4: Hello.asm ligne par ligne
À la fin de ce tutoriel d’introduction, nous passerons par le hello.asm programme ligne par ligne pour voir comment cela fonctionne.
Tout ce qui suit un point-virgule est ignoré par l’assembleur et donc ces deux premières lignes sont tout simplement des « commentaires » expliquant en quoi le programme.
Cette ligne indique l’assembleur pour inclure le fichier m328Pdef.inc que vous avez téléchargé. Vous pouvez mettre ceci dans un répertoire de semblables incluent des fichiers et puis modifiez la ligne ci-dessus pour indiquer lui il.
LDI signifie « charge immédiate » et raconte l’assembleur à tenir un registre de travail, r16 dans ce cas et charge un nombre binaire, 0b00100000 dans ce cas. Le 0 en face dit que notre nombre est au format binaire. Si nous voulions nous aurions pu choisir une autre base, par exemple en hexadécimal. Dans ce cas notre numéro aurait été 0 x 20, qui est en hexadécimal pour 0b00100000. Ou nous aurions pu utiliser 32 qui est décimale pour le même nombre de base 10.
Exercice 1: Essayez de changer le nombre dans la ligne ci-dessus à hexadécimal, puis en decimal dans votre code et vérifiez qu’il fonctionne toujours dans chaque cas.
Binaire est plus simple mais à cause des Ports de manière et registres de travail. Nous allons discuter les ports et les registres de l’atmega328p en plus en détail à l’avenir tutoriels mais pour l’instant, je vais juste dire que nous utilisons r16 comme nos sens « Registre de travail » que nous allons l’utiliser comme une variable que nous stockons des numéros en. Un « registre » est un ensemble de 8 bits. Ce qui signifie 8 projecteurs qui peuvent être 0 ou 1 (« off » ou « on »). Quand nous chargeons le 0b00100000 nombre binaire dans le registre à l’aide de la ligne ci-dessus, nous avons simplement conservé ce numéro dans le registre r16.
Cette ligne indique au compilateur de copier le contenu de la r16 de Registre dans le registre DDRB. DDRB est synonyme de « Données Direction Registre B » et il met en place les « pins » sur le port. Sur le plan de brochage pour le 328p que vous pouvez voir qu’il y a 8 broches étiqueté PB7 PB0, PB1,.... Ces broches représentent les « bits » de « Port » et quand nous chargeons le nombre binaire 00100000 dans le registre DDRB, que nous disons que nous voulons ensemble PB0, PB1, PB2, PB3, PB4, PB6 et PB7 comme broches d’entrée puisqu’ils ont 0 s en eux, et PB5 est définie comme une tige de sortie étant donné que nous avons mis un 1 à cet endroit.
Maintenant que nous avons fixé les orientations des broches, nous pouvons maintenant régler les tensions sur eux. La ligne ci-dessus copie le nombre binaire même de notre stockage Registre r16 dans PortB. Cela affecte toutes les broches 0 Volt sauf pin PB5 à élevé, qui est de 5 volts.
Exercice 2: Prendre une prise numérique multimètre, le fil noir dans la masse (GND) et ensuite testé chacune des broches PB0 par PB7 avec le fil rouge. Les tensions sont sur chacune des broches exactement celles correspondant à mettre 0b00100000 dans PortB ? Si il y a ceux qui ne sont pas, pourquoi vous pensez que c’est ? (Voir l’axe plan)
Enfin, la première ligne du dessus est un « label » qui marque un point dans le code. Dans ce cas d’étiquetage cet endroit comme « Start ». La deuxième ligne dit « saut relatif à l’étiquette de début. » Le résultat net est que l’ordinateur est placé dans une boucle infinie qui maintient juste cyclisme revient à. Nous avons besoin de cela parce que nous ne pouvons pas avoir le programme juste fin, ou de tomber d’une falaise, le programme doit juste continuer à fonctionner afin que la lumière reste allumée.
Exercice 3: Supprimer les deux lignes ci-dessus à partir de votre code afin que le programme tombe d’une falaise. Que se passe-t-il ? Vous devriez voir quelque chose qui ressemble à du programme « blink » traditionnel utilisé par Arduino comme leur « hello world! ». Pourquoi pensez-vous qu’il s’agit de cette façon ? (Pensez à tout ce qui doit se produire lorsque le programme tombe d’une falaise...)