L'essentiel d'Assembleur

Lire des données depuis la mémoire flash

Testez gratuitement nos 1270 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
En partant du lab 15, vous allez le modifier de façon à obtenir le même résultat au niveau du programme principal. Vous allez mettre en œuvre la lecture en mémoire programme.
06:57

Transcription

Dans cette vidéo, nous allons apprendre à stocker des données à l'intérieur de notre mémoire programme et non plus en RAM. Pour cela, on va stocker les valeurs des LED à allumer. Nous allons donc stocker ces valeurs dans des adresses mémoire... très lointaines du programme principal pour ne pas écraser les données. Pour ce faire, nous allons utiliser les adresses 1000 et 1100. Toutefois, nous utiliserons la commande DB. Alors, il faut toujours aller chercher le datasheet concernant... MPASM. Pour le coup, une fois que nous l'aurons fait... nous écrirons deux séquences correspondant à « aller » et « retour »... suffisamment lointaines de la fin du programme... afin de ne surtout pas écraser les données. Puis, on écrit une routine pour lire le tableau de données avec une poste-incrémentation. On affecte la valeur depuis TABLAT sur le PORT désiré. On aurait aussi pu travailler qu'avec un tableau si l'instruction tblrd-* existait. Mais hélas! Elle n'existe pas. Allons donc voir depuis le début du programme dans la déclaration en RAM. Ici, nous sommes dans la déclaration en mémoire programme. Pour cela, j'utilise le mot ORG, réservé une fois de plus... pour placer les données depuis l'adresse en hexadécimal 1000 dans la mémoire programme. Notez que la commande DB fonctionne sur deux fois huit bits... car les adresses fonctionnent par nombre pair. Vous pouvez aussi décider de le faire sur une seule ligne... sans perturber le compilateur qui placera des zéros au deuxième registre. On le fera de façon intelligente et directement sur 16. Comme vous le voyez ici, je vais allumer la 1ère LED, 2ème, 3ème, etc. Puis, je reprends l'exercice, cette fois à l'adresse mémoire 1100... en allant de la valeur la plus significative à la moins significative: c'est le retour. Ensuite, j'ai écrit deux macros totalement semblables... où je vais initialiser mon pointeur de tableau à l'adresse 1000. On aura donc 00, 10, et 00. Ce qui renvoie bien à l'adresse 1000. Puisque nous avons simplement 8 valeurs à lire... j'ai donc implanté une variable incrément, dans laquelle je mets la valeur 8. Je refais la même chose, sauf que je vais me connecter cette fois, à l'adresse 1100. mille cent. J'espère que c'est clair ! Nous allons revenir sur un point que j'ai survolé dans ma dernière vidéo. Il s'agit de la configuration de notre interruption hiérarchisée. En effet, il faut se mettre ici sur le registre INCON... et dans INCON, mettre bits7f... donc mettre un 1 dans le registre RCON, IPEN. Mettre GIEH et GIEL à 1... pour autoriser la hiérarchisation. Alors, par défaut INT0 fait partie d'une interruption de haute priorité. Je vais dans ce cas autoriser l'interruption sur le niveau 1... et supprimer son flag. Je vais mettre INT1 prioritaire... mais cette fois, je le mettrai sur CLR. Donc, il ne sera pas mis en prioritaire. Il sera plutôt mis en moins prioritaire, c'est-à-dire en niveau bas. Par contre ici, je n'ai pas besoin de me soucier de la priorité... car ce bit n'existe pas. Par conséquent, INT0 est obligatoirement prioritaire. Après, je configure simplement les fronts. Front montant pour INT0 et INT1. Qu'allons-nous faire maintenant concernant notre programme principal ? Nous ferons simplement un loop, lire d'abord et incrémenter ensuite. Mais ce que nous avons lu, nous le mettrons depuis TABLAT... directement dans PORTD. Ensuite, nous faisons un call DELAY et enfin des incréments de 8, et ce 8 fois... et nos 8 LED s'allumeront. Ceci est valable pour le premier « aller » pour le PORTD. Toujours le premier « aller » pour le PORTE. Ensuite le « retour » pour le PORTE et le « retour » pour le PORTD. Les sous-programmes de temporisation, quant à eux ne changent pas. Regardons maintenant sur Proteus ce que cela donne. Je lance directement la simulation. Là, j'ai mis le point KOF et non le point ECS... et j'ai mis un break point à partir d'ici. Alors, si je clique sur pas à pas, la table est automatiquement sélectionnée. Le contenu de la table va ętre transféré sur PORTD et là, ma 1ère LED s'allume. Je continue après, jusqu'au break point suivant... et à partir de là, ma deuxième LED va s'allumer. Ainsi de suite. Alors, si je lance la simulation, l'opération continuera non stop. Assurez-vous d'avoir ce que vous recherchez dans la mémoire programme. On va donc se connecter à l'adresse 1000 et à l'adresse 1100. Ces adresses fonctionnent par paquet de 32 bits au niveau de la représentation. Vous voyez qu'on a bien ce qu'on veut. 1, 2, 4, 8,10, 20, 40, 80, mais en hexadécimal. Puis, à l'adresse 1100, nous avons... 80, 40, 20,10, 8, 4, 2,1, ce qui est parfait ! Alors, étions-nous assez loin de notre programme principal ? Oui, car il finit ici. Précisément, à l'adresse 228. Par conséquent, on a été vraiment très large.

L'essentiel d'Assembleur

Plongez-vous dans le langage bas niveau, nommé Assembleur. Abordez les notions de jeu d'instructions, de pipeline, de registres, de mode d’adressage, de compteur de programme, etc.

4h52 (57 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :26 sept. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !