Tutoriel d’assembleur AVR 4 (5 / 9 étapes)

Étape 5: Macros

Les macros sont très semblables à des programmes dont nous avons parlé dans la dernière étape, sauf qu’ils prennent des « arguments ». En d’autres termes, les macros sont essentiellement des « fonctions ». En fait, la principale différence entre le langage assembleur et toutes les langues « de haut niveau » que les gens utilisent est que quelqu'un a compilé un tas de fonctions fréquemment utilisées dans les macros. Ici, nous allons utiliser les macros pour atteindre les mêmes fins, avec une différence importante, nos macros seront là dans le code pour nous de voir et modifier comme on les aime.

Notre philosophie dans ces tutoriels de programmation consiste à se débarrasser de tous les « boîtes noires » et de savoir ce qui se passe dans les coulisses. Nous ne voulons rien qui se passe à moins que nous connaissons à ce sujet et lui avez déjà dit de le faire. C’est pourquoi c’est ce qu’on appelle « Command Line Assembly Language Programming ». Nous utilisons la ligne de commande au lieu de certains Java based IDE comme l’arduino un (en fait, j’utilise la ligne de commande même avec programmation arduino). Une fenêtre de l’ide java est comme une boîte noire pour moi. Je pourrai jamais être absolument certain qu’il n’ya pas de suppositions étant faites dans les coulisses lors de la communication de mes instructions au microcontrôleur, et je n’aime pas ça. Je n’aime pas comment pléthorique et cpu consommant de java est. En fait, c’est aussi pourquoi nous utilisons « avra » plutôt que de l’assembleur ATmel IDE. Je me rends compte que lorsque vous êtes un codeur expert ou un débutant complet, vous le savez déjà, ou vous ne se souciez pas, ce qui se passe dans les coulisses, mais ici nous sacrifierons la commodité pour éviter noir-boxness et l’adiposité.

Maintenant, ce sont quand même les macros ? Eh bien vous avez peut-être remarqué lors de la lecture à travers le programme que nous utilisons la sous-routine de « retard » dans tous les sens. Non seulement de l’intérieur de la main, mais de l’intérieur d’autres sous-routines ainsi. Cela conduit à spaghetti et nous n’aimons pas spaghetti. (tracer des lignes entre chaque bloc de sous-routine de code dans votre diagramme quand un bloc appelle une autre et vous verrez rapidement que la sous-routine de « retard » provoque le diagramme ressembler à un plat de spaghetti)

Voici comment le « retard » est généralement appelé :

Vous voyez que nous tout d’abord définir les variable (c'est-à-dire travail Registre) « millisecondes » à la valeur 25 et puis nous appelons la sous-routine « retard ». La sous-routine va retarder de 25 ms et ensuite revenir. En dehors de spaghetti, un autre problème avec cette façon de faire les choses est que si nous oublions définir la valeur de millisecondes immédiatement avant que nous appelons la sous-routine nous n’aurons aucune idée de ce que sera le retard. Ce sera n’importe quelle valeur nous mettons en millisecondes ailleurs. Il s’agit d’une façon risquée d’écrire du code. Donc pour résoudre tout cela nous suffit d’écrire une « macro ». Ici ' tis :

C’est une directive de l’assembleur que nous mettons au sommet de notre programme que le même retarde les choses que nous avions dans notre sous-routine de tarder, ça s’appelle le retard, mais c’est la différence importante que nous avons défini les variables « millisecondes » dedans ! Le symbole (signe zéro) représente tout ce que nous plaçons à côté de retard lorsque nous l’appelons. Voici comment nous l’appelons ensuite. Si nous voulions un retard de 25 ms quelque part dans notre programme nous écrivons simplement

et l’assembleur remplacera le dans la macro avec 25 et nous obtenons notre attente de 25 ms.

Pourquoi, Eh bien vous pouvez écrire les macros qui ont beaucoup plus d’arguments si vous le souhaitez. Dans ce cas, vous utiliseriez et et ainsi de suite. Lorsque vous appelez la fonction vous devez fournir tous les arguments correspondant à ces @ choses dans la macro.

Je pense que maintenant vous pouvez voir comment ils ont fait la commande de « delay(20) » du langage Arduino de droite ?

Exercice 2: ajouter une macro dans le programme et changer toutes les sous-routines afin qu’ils appellent la macro au lieu d’une sous-routine de retard. (Remarque ! Dans l’un des incidents, vous devrez chercher autour de comprendre ce que le retard est censé pour être ! J’ai délibérément laissé de côté les millisecondes de ldi dans ce cas)

Articles Liés

Tutoriel d’assembleur AVR 11

Tutoriel d’assembleur AVR 11

Bienvenue au didacticiel 11 !Dans ce bref didacticiel, nous allons enfin construire la première partie de notre projet final.La première chose que vous devriez faire est d'aller à la toute dernière étape de ce tutoriel et voir la vidéo. Puis revenez
Tutoriel d’assembleur AVR 1

Tutoriel d’assembleur AVR 1

J'ai décidé d'écrire une série de tutoriels sur la façon d'écrire des programmes de langage d'assemblage pour le Atmega328p qui est le microcontrôleur utilisé dans l'Arduino. Si les gens restent intéressées, je vais continuer à mettre un une semaine
Tutoriel d’assembleur AVR 8

Tutoriel d’assembleur AVR 8

Bienvenue au didacticiel 8 !Dans ce bref didacticiel, nous allons prendre un peu d'une déviation de l'introduction de nouveaux aspects de la programmation en langage assembleur pour montrer comment déplacer nos composants de prototypage pour un circu
Tutoriel d’assembleur AVR 6

Tutoriel d’assembleur AVR 6

Bienvenue au didacticiel 6 !Tutoriel d'aujourd'hui sera un court où nous mettrons au point une méthode simple pour transmettre des données entre un atmega328p et un autre à l'aide de deux ports qui les relient. Nous puis prendre dés rouleau de tutori
Tutoriel d’assembleur AVR 9

Tutoriel d’assembleur AVR 9

Bienvenue au didacticiel 9.Aujourd'hui nous allons montrer comment piloter un afficheur 7 segments, mais aussi un affichage à 4 chiffres à l'aide de notre code en langage assembleur ATmega328P et AVR. Ce faisant cela que nous allons devoir prendre de
Tutoriel d’assembleur AVR 2

Tutoriel d’assembleur AVR 2

Ce tutoriel est une continuation de "tutoriel d'assembleur AVR 1"Si vous n'avez pas passé par 1 tutoriel, vous devez arrêter maintenant et faire celui-là en premier.Dans ce tutoriel, nous allons poursuivre notre étude de programmation en langage
Tutoriel d’assembleur AVR 7

Tutoriel d’assembleur AVR 7

Bienvenue au didacticiel 7 !Aujourd'hui nous allons voir la première comment faire pour nettoyer un clavier et ensuite montrer comment utiliser les ports d'entrée analogiques pour communiquer avec le clavier.Nous ferons cela en utilisant les interrup
Tutoriel d’assembleur AVR 10

Tutoriel d’assembleur AVR 10

Bienvenue au didacticiel 10 !Désolé, qu'il a fallu si longtemps pour sortir cette nouvelle tranche mais c'est un moment assez intense de l'année. En tout cas, ici c'est !Nous avons parcouru un long chemin et vous êtes probablement déjà assez compéten
Tutoriel d’assembleur AVR 5

Tutoriel d’assembleur AVR 5

Aujourd'hui nous allons regarder de plus près aux divers emplacements mémoire dans le microcontrôleur Atmega328p et voir si nous pouvons mieux comprendre comment les choses sont stockés, où ils sont stockés et comment les pointeurs et les tables de r
Tutoriel d’assembleur AVR 3

Tutoriel d’assembleur AVR 3

Bienvenue au didacticiel numéro 3 !Avant que nous commencions, je tiens à faire un point philosophique. N'ayez pas peur d'expérimenter avec les circuits et le code que nous construisons dans ces tutoriels. Changer les câbles près, ajouter de nouveaux
MRETV - vidéo, stéréo Sound et beaucoup plus d’un Arduino standard !

MRETV - vidéo, stéréo Sound et beaucoup plus d’un Arduino standard !

MRETV - vidéo, stéréo Sound et beaucoup plus d'un Arduino standard !Maintenant mis à jour pour Arduino 1.6.6 novembre 2015 !Utiliser seulement deux résistances et deux diodes pour générer la vidéo plein écran. Texte 47 x 29 de 8 x 8 caractères, doubl
Comment charger des programmes à un Arduino UNO de Atmel Studio 7

Comment charger des programmes à un Arduino UNO de Atmel Studio 7

Dans ce court Instructable, nous allons apprendre à charger un programme à une carte Arduino UNO utilisant Atmel Studio au lieu de l'IDE Arduino. Cela est utile lorsque vous avez besoin élaborer un programme à l'aide de plusieurs fonctions avancées o
Star Trek sonnette Hack

Star Trek sonnette Hack

J'ai toujours été un fan de la Star Treks et comme tel, j'étais très excité lorsque mon colocataire ramené un panneau la comm série style Star Trek original. Je n'avais jamais vu l'un d'entre eux, mais une recherche rapide nous a pris sur le site de
Carte de développement pour microcontrôleurs Attiny84

Carte de développement pour microcontrôleurs Attiny84

Il s'agit d'une carte de développement pour microcontrôleur Attiny84. Tha Attiny84 puce possède 11 broches adressables avec l'IDE Arduino, 8k de mémoire flash pour le stockage de programme et 512 octets de mémoire vive disponible pour les variables d