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

Étape 4: directives d’assembleur .org

Nous avons déjà savoir ce que les directives assembleur .nolist .list, comprennent et .def faire de nos tutoriels précédents, nous allons donc tout d’abord prendre un regard sur les 4 lignes de code qui suivent qui :

 .org 0x0000 jmp Reset .org 0x0020 jmp overflow_handler 

L’instruction .org raconte l’assembleur où dans « Mémoire de programme » de mettre l’instruction next. Que votre programme s’exécute, le « Program Counter » (abrégé PC) contient l’adresse de la ligne actuelle en cours d’exécution. Donc dans ce cas lorsque le PC est à 0 x 0000 il verra la commande « Reset jmp » résidant dans cet emplacement de mémoire. La raison pour laquelle nous voulons mettre jmp Reset à cet emplacement est parce que quand le programme commence, ou la puce est réinitialisée, le PC démarre l’exécution de code à cet endroit. Alors, comme nous pouvons le constater, nous avons juste dit il immédiatement « sauter » à la section intitulée « Reset ». Pourquoi est-ce que nous a fait faire cela ? Cela signifie que les deux dernières lignes ci-dessus sont étant juste sautées ! Pourquoi ?

Eh bien, c’est où les choses deviennent intéressantes. Vous allez maintenant devoir ouvrir une visionneuse de pdf avec la feuille de données ATmega328p complet que j’ai indiqué sur la première page de ce tutoriel (c’est pourquoi il est point 4 dans le « vous devez » section). Si votre écran est trop petit, ou vous avez beaucoup trop de fenêtres ouvertes déjà (comme c’est le cas pour moi), vous pourriez faire ce que je fais et le mettre sur un Ereader, ou votre téléphone Android. Vous emploierez tout le temps si vous comptez sur l’écriture de code assembleur. Le truc cool, c’est que tous les microcontrôleurs sont organisés de façon très similaire et donc une fois que vous vous habituez à la lecture des fiches techniques et codage d’eux que vous trouverez presque trivial à faire de même pour un microcontrôleur différent. Donc en fait, nous apprenons comment utiliser tous les microcontrôleurs dans un sens et pas seulement les atmega328p.

Bon, passez à la page 18 dans la fiche technique et jetez un œil à la Figure 8-2.

Voilà comment la mémoire de programme dans le microcontrôleur est mises en place. Vous pouvez voir qu’il commence par l’adresse 0 x 0000 et se divise en deux sections ; une application flash section et un boot flash. Si vous faites référence brièvement page 277 table 27-14 vous verrez que la section flash application reprend les emplacements de 0 x 0000 à 0x37FF et la section flash boot reprend les emplacements restants de 0x3800 à 0x3FFF.

Exercice 1: combien de locaux y a-t-il dans la mémoire du programme ? Savoir convertir 3FFF en nombre décimal et ajouter 1 puisque nous avons démarrer le compteur à 0. Étant donné que chaque emplacement de mémoire est 16 bits (ou 2 octets) large, ce qui est le nombre total d’octets de mémoire ? Maintenant cela convertir en kilo-octets, se souvenant qu’il y a 2 ^ 10 = 1024 octets dans un kilo-octet. La section flash boot va de 0x3800 à 0x37FF, combien de kilo-octets est-ce ? Combien de kilo-octets de mémoire restent pour nous d’utiliser pour stocker notre programme ? En d’autres termes, comment grand notre programme peut-être ? Enfin, le nombre de lignes de code peut-on avoir ?

Bon, maintenant que nous savons tout sur l’organisation de la mémoire programme flash, nous allons continuer notre discussion sur les déclarations de .org. Nous voyons que le premier emplacement de mémoire 0 x 0000 contienne notre instruction à sauter dans notre section nous marqué Reset. Nous voyons maintenant en quoi consiste l’instruction à « 0 x 0020 .org ». Il est dit que nous voulons que l’instruction sur la ligne suivante pour être placé à l’emplacement de mémoire 0 x 0020. L’instruction, nous avons placé il y a un saut vers une section dans notre code que nous avons marqué « overflow_handler »... maintenant, pourquoi diable nous demanderait que ce saut être placé à un endroit de mémoire 0 x 0020 ? Pour en savoir, nous passez à la page 65 dans la fiche technique et jetez un oeil au tableau 12-6.

Tableau 12-6 est une table de "Vecteurs d’interruption et de Reset" et il montre exactement où le PC ira lorsqu’il reçoit une « interruption ». Par exemple, si vous regardez vecteur nombre 1. La "source" de l’interruption est "RESET", qui se définit comme « broche externe, puissance-sur la remise, Brown-out Reset et surveillance system reset » ce qui signifie que, si aucune de ces choses arriver à notre microcontrôleur, le PC va commencer l’exécution de notre programme à l’emplacement de la mémoire programme 0 x 0000. Qu’en est-il de notre directive .org alors ? Eh bien, nous avons placé une commande à l’adresse mémoire 0 x 0020 et si vous regardez en bas du tableau, vous verrez qu’un débordement du Timer/Counter0 cas (venant du TIMER0 OVF) il s’exécutera tout ce qui est à l’emplacement 0 x 0020. Donc chaque fois que cela arrive, le PC va passer au point nous étiqueté « overflow_handler ». Cool non ? Vous verrez dans une minute pourquoi nous l’avons fait, mais d’abord nous allons finir cette étape du tutoriel avec aparté.

Si nous voulons rendre notre code plus propre et bien rangé nous devrions vraiment remplacer les 4 lignes dont nous discutons actuellement avec les points suivants (voir page 66) :

 .org 0x0000 rjmp Reset ; PC = 0x0000 reti ; PC = 0x0002 reti ; PC = 0x0004 reti ; PC = 0x0006 reti ; PC = 0x0008 reti ; PC = 0x000A ... reti ; PC = 0x001E jmp overflow_handler : PC = 0x0020 reti : PC = 0x0022 ... reti ; PC = 0x0030 reti ; PC = 0x0032 

Sorte que si une interruption donnée se produit, il sera juste « reti » qui signifie « retour d’interruption » et rien d’autre qui se passe. Mais si nous jamais « activer » ces interruptions diverses, alors qu’ils ne seront pas utilisées, et nous pouvons mettre le code de programme dans ces taches. Dans notre programme actuel de « blink.asm » nous allons seulement pour permettre l’interruption de débordement timer0 (et, bien sûr, l’interruption de reset qui est toujours activée) et par conséquent nous ne sera pas s’embêter avec les autres.

Comment « permettre » l’interruption de débordement timer0 alors ? ... c’est le sujet de notre prochaine étape dans ce tutoriel.

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 4

Tutoriel d’assembleur AVR 4

Bienvenue au didacticiel numéro 4 !Dans ce tutoriel, nous allons construire un circuit qui simulera l'enroulement des deux dés. Ensuite, nous allons tout d'abord écrire un programme de force brute qui fait le travail. Puis nous permettra de simplifie
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