L'essentiel d'Assembleur

Aborder les différences entre les PIC16F et PIC18F

Testez gratuitement nos 1300 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Explorez la structure interne des PIC. Étudiez notamment le multiplieur hardware, la pile, PC pair, les nombres d'instructions, la hiérarchisation des interruptions, et bien d'autres.
07:59

Transcription

Dans cette vidéo, je vais vous parler des différences fondamentales entre les PIC16 et les PIC18. Alors tout d'abord, il faut savoir que les PIC 18 fonctionnent avec des mots de 16 bits. Attention, ça ne fait d'eux des microcontrôleurs de 16 bits, mais toujours 8 bits. Mais nous allons travailler avec deux fois 8 bits. Pourquoi, parce que nous avons plus de 75 instructions, 83 pour être plus exact, mais j'en reparlerais un peu plus tard. Et de ce fait, vous voyez qu'il faut 8 bits en fait pour pouvoir coder le code ici movlw par exemple et puis k pour avoir la valeur littérale. Donc c'est pour ça que nous travaillons en deux paquets de 8. Au niveau de l'organisation de la mémoire programme, nous avons des valeurs remarquables. Donc le zéro en cas de reset ou de démarrage simplement. L'adresse 8 en cas d'interruption de haute priorité et l'adresse 18 en cas d'interruption de basse priorité. Alors vous voyez qu'ici pour pouvoir adresser tout ce beau monde, entre cette valeur et cette valeur, il nous faut 21 bits. C'est pour ça que le bus d'adresse est sur 21 bits. Et puisque nous travaillons justement sur 16 bits, mais par paquet de deux fois 8 bits, vous n'aurez ici que des adresses paires. Donc vous n'aurez jamais d'adresse impaire, c'est totalement impossible. D'ailleurs, le compilateur vous l'interdira. Alors les instructions, comment sont-elles rangées ? En fait, elles sont rangées au format Little Endian. C'est-à-dire que vous allez prendre code, vous allez l'avoir dans l'octet de poids fort et vous allez avoir le paramètre qui va être mis dans l'octet de poids faible. Alors au niveau de la pile, cette fois-ci, on est plutôt large, nous avons 31 niveaux de pile. Nous retrouvons ici notre bus d'adresse qui est sur 21 bits et notre pointeur de programme qui lui donc assure 21 bits aussi, puisqu'il faut pouvoir enregistrer tout le monde en cas de rupture synchrone ou asynchrone. Alors justement comment fonctionne notre pile ? Nous avons un registre spécial qui s'appelle STKPTR donc Stack Pointer et là nous aussi donc trois registres de 8 bits pour pouvoir stocker toutes les adresses de notre plan mémoire donc nos fameux 21 bits. Donc nous allons pouvoir stocker toutes les adresses qui sont liées à des ruptures synchrones ou asynchrones de notre programme. Alors justement parlons du registre STKPTR et vous avez deux bits ici qui sont le Stack Full et le Stack Underflow. Alors le Stack Full, c'est quand vous avez explosé la pile si je puis dire, si vraiment vous y avez été extrêmement fort. Donc mis des CALL à l'intérieur de GOTO, à l'intérieur de CALL etc. Et cela peut provoquer un reset ou pas de votre pic. Cela dépendra de vos bits de configuration. Par contre, le Stack Underflow provoquera une erreur grave donc un reset automatique du pic. Alors concernant les Bank, ici, nous avons 15 Bank toutes bien alignées avec un BCR pour pointer sur chacune des Bank. Et puis avec quelques spécificités, tout en haut de la Bank zéro, nous avons l'Access RAM qui est en fait une zone de la RAM où si vous mettez vos variables, elles seront visibles de la part de l'ensemble du programme et accessibles en un cycle horloge. Et tout en bas de cette RAM, vous avez le SFR qui sont les Special Function Register Donc qui servent à la configuration et au fonctionnement du pic qui sont, elles toutes placées en Bank 15 et qui évitent lors de la configuration de systématique faire appel à la macro Banksel. Avec le nom du registre, vous savez que tout est en Bank 15, donc tout va bien. Par contre, si vous voulez chercher la valeur d'une variable qui est dans une autre Bank, là, vous devez repasser par le biais de la macro Banksel par exemple. Alors ici, vous avez un extrait de la page 97 du datasheet où on voit apparaître tous les registres SFR. Et au niveau des instructions, nous en avons 75 plus quelques-unes qui nous amènent à 83. Mais ces dernières sont utilisées pour les compilateurs C, pour optimiser le code Assembler lié à l'utilisation du C pour pouvoir programmer nos pics. Alors la différence au niveau des interruptions, c'est que vous avez deux niveaux d'interruption sur les pics 18. Tout ce qui finit par IP est d'interruption de niveau haut, tout ce qui finit par I est d'interruption de niveau bas. Il n'existe pas de sauvegarde de contexte automatique pour la deuxième interruption si la première est en cours. Il faut la faire de façon programmée. C'est ce que nous verrons dans notre exemple. Des sous-interruptions, des plus basiques aux plus graves, on va dire que vous avez les niveaux d'interruption bas donc qui se finissent par P sauf pour INT0 qui se fini pas par P et pourtant qui fait partie des prioritaires. Donc en fait INT fait partie de ce bloc là. Voilà, ça c'est une spécificité, c'est comme ça, il faut pas trop chercher à comprendre, c'est le constructeur qui en a décidé ainsi. Et après vous avez les sources d'interruption graves qui amènent un reset donc tout ce qui nous amène au Stack Full ou à l'UnderFlow ou un manque d'alimentation de notre microcontrôleur. Alors que se passe-t-il lorque nous avons des interruptions hiérarchisées, c'est-à-dire que cette fois-ci, je mets les deux sources d'interruption en route. Si j'ai une interruption de niveau bas, dans ce cas, je dois faire une sauvegarde manuelle de mon contexte, donc en sauvant les registres vitaux. J'effectue ma tâche d'interruption de niveau bas. Après m'être branché évidemment à l'adresse 8 et une fois que j'ai terminé, je reviens à mon programme principal. Maintenant, j'ai une interruption de niveau haut qui apparaît, donc là, je vais me brancher directement à l'adresse 18. Et là, j'ai une sauvegarde automatique du contexte qui se fait. Donc là, je n'ai rien à faire à la main sauf certains registres ou certaines variables qui m’intéressent, nous verrons justement dans notre prochain programme. Et que se passe-t-il si j'ai une interruption qui interrompt mon interruption ? Alors par exemple ici, j'ai mon interruption de niveau bas, donc je vais faire une sauvegarde de contexte manuelle. Et puis d'un seul coup, j'ai un autre événement qui arrive une interruption de niveau haut cette fois, j'ai une sauvegarde automatique. Donc une fois que j'ai fini, je reviens à mon interruption basse. Je finis mon interruption basse et je reviens à mon programme principal. Et puis il y a encore une autre possibilité, c'est une interruption haute qui arrive directement et pendant que j'ai une interruption haute. Et ben, j'ai une interruption basse qui apparaît, donc je traite d'abord mon interruption haute. Et une fois que j'ai terminé, je bascule sur mon interruption basse et je finis avec mon programme principal.

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 !