<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

 

La Programmation des pics
par Bigonoff
Premiere partie - pic 16f84 - Révision 5

Téléchargement des fichiers originels ici
Publié le 27/02/2002

8. La simulation d’un programme

Index coursIndex du cours
Chapitre précédent7. Réalisation d’un programme
Chapitre suivant8. La simulation d’un programme (Suite)

 

8. La simulation d’un programme
Nous avons créé, dans le chapitre précédent, notre premier petit programme en 16F84. Bien sûr, ce programme ne sert strictement à rien. Cependant nous allons l’utiliser en vue d’expérimenter le simulateur de MPLAB. Une fois ce chapitre vu, vous serez en mesure de :
  • Créer et modifier un projet
  • Assembler votre programme
  • Le faire tourner sur simulateur pour le debugger
8.1 Lancement et paramétrage du simulateur

Commencez donc par lancer MPLAB. Ce dernier connaît le nom de votre dernier projet (essai1.prj) et vous demande si vous désirez l’ouvrir. Répondez " yes ". Si vous avez procédé à des essais personnels depuis, chargez-le depuis le menu " project->open ". Vous vous retrouvez avec la fenêtre de votre dernière leçon.

Rappelez-vous que si vous avez un problème, le fichier essai1.asm est disponible dans les fichiers d’exemples fournis avec ce cours [ NDLR : Fichiers exemples ici ]. Rappelez-vous alors de lancer la compilation par la touche <F10>.

Si vous lancez <F10> et que votre fichier source n’a pas été modifié depuis le dernier assemblage (on peut aussi utiliser le terme impropre de compilation), vous aurez le message explicite " Target is current " (le fichier de destination est celui déjà créé).

L’intérêt d’un simulateur est de visualiser le fonctionnement du programme, nous allons donc signaler à MPLAB ce que nous désirons observer. Sélectionnons d’abord la mise en service du simulateur de MPLAB.

Allez dans le menu " options->development mode ". Vous connaissez déjà la fenêtre qui apparaît maintenant. Remarquez que seul l’éditeur est actif.

Sélectionnez la case MPLAB-SIM pour activer le simulateur. Vous recevez alors dans la fenêtre un message d’avertissement qui vous signale que les transmissions série ne sont pas simulées et que tous les composants ne sont pas repris dans le simulateur.

Rassurez-vous. Il y a moyen de simuler quand même les liaisons série (en agissant sur quelques registres) pour les Pics qui le gèrent (16F876) et toutes les PICs courantes sont dans le simulateur (qui du reste est régulièrement mis à jour). Cliquez sur <OK>

Vous obtenez alors un nouveau message qui vous prévient que les informations que vous avez pu entrer dans certains emplacements de votre projet seront perdues. Cliquez également sur <OK>

A partir de maintenant, le simulateur est activé. Vous pouvez le vérifier en constatant que tous les sous-menus du menu " Windows " ne sont plus en grisé.

Nous allons donc faire apparaître à l’écran les informations à surveiller. Sélectionnez " Windows->Special function registers ". Une nouvelle fenêtre s’ouvre à l’écran. Rangez-la dans la partie droite de votre écran, afin de ne pas cacher l’éditeur.

Vous voyez dans cette fenêtre le contenu de tous les registres que vous avez découverts dans le tableau 4-2 de la page 13. Dans les chapitres suivants, nous les utiliserons progressivement tous.

Dans notre petit programme, nous utilisons une variable. Nous allons donc la faire apparaître. Allez dans le menu " Windows->watch windows->new watch windows ". Une nouvelle fenêtre apparaît. Dans l’emplacement prévu, entrez le nom de votre variable " mavariable " ou sélectionnez la en la choisissant dans la grande fenêtre.

Cliquez ensuite sur " properties " pour indiquer au simulateur le format d’affichage de votre variable. Indiquez, mais cela doit déjà être fait, 8 bits / format hexadécimal.

Pressez ensuite sur <OK>. La variable est maintenant validée. Fermez la fenêtre " Add watch symbol " avec le bouton <Close> et rangez la fenêtre watch_1 sous la fenêtre " special function registers ".

A cette étape, vous devriez vous retrouvez avec l’écran suivant :

 

8.2 Explication des registres fondamentaux

Vous voici prêt à lancer une simulation. Mais à quoi cela pourrait-il vous servir si vous ne comprenez pas les changements qui vont s’opérer dans les registres spéciaux ? Je vais donc commencer par vous expliquer les registres de base nécessaires à la compréhension du processus.

8.2.1 Les registres " PCL " et " PCLATH "

Un processeur, quel qu’il soit est un composant qui exécute SEQUENTIELLEMENT une série d’INSTRUCTIONS organisées selon un ensemble appelé PROGRAMME.

Il existe donc dans le processeur un SEQUENCEUR, c’est à dire un compteur qui permet de pointer sur la PROCHAINE instruction à exécuter. Ce séquenceur est appelé suivant les processeurs " compteur ordinal ", " Pointeur de programme " etc. Dans le cas des PICs, il s’appelle PC, pour Program Counter. Le PC n’est pas accessible directement par l’utilisateur.

Le principe de base est toujours le même. Dans les PICs, les registres ne font que 8 bits, on ne peut donc stocker qu’une adresse maximale de 255. Il faudra donc 2 registres pour accéder à une adresse. Les PICs ont un fonctionnement un peu particulier à ce sujet.

Nous trouvons tout d’abord un registre qui contient l’adresse basse du PC, c’est à dire les 8 bits de poids faibles. Ce registre est accessible en lecture et en écriture. Il est appelé PCL (PC Low)

Il existe un autre registre de 5 bits qui participe au fonctionnement du séquenceur. Il s’appelle PCLATH (PC LATch counter High). Il est accessible en lecture et en écriture par l’utilisateur.

Le PC complet étant codé sur 13 bits, il faudra donc compléter PCL avec 5 bits supplémentaires. Il existe deux cas possibles :

  • Lors d’un saut, par exemple, le contenu du PC est chargé directement avec les 11 bits de destination contenus dans l’instruction en elle-même. Les 2 bits manquants sont extraits du registre PCLATH.. Les bits 3 et 4, qui doivent être positionnés par l’utilisateur, sont placés directement dans les bits 11 et 12 du PC afin de compléter l’adresse de destination. Comme la 16F84 ne gère que 1K de mémoire programme, nous n’aurons pas besoin de ce registre dans le cas des sauts. Rappelez-vous que la 16F84 ne gère que 10 des 13 bits du PC.
  • En cas de modification du PCL directement par l’utilisateur, comme pour un registre ordinaire, PCL est chargé dans PC et complétés par les 5 bits du registre PCLATH. Comme la 16F84 ne traite que 1K de mémoire programme, les bits b2, b3 et b4 de PCLATH seront inutilisés ici.

Remarquez que la limite du PC est de 13 bits, ce qui implique que les PICs de la famille mid-range auront une capacité de mémoire programme de 8K mots maximum (soit 213).

Il est très important de se rappeler que le PC pointe toujours sur l’instruction suivante, donc l’instruction qui n’est pas encore exécutée. C’est indispensable de bien comprendre ceci pour analyser les programmes en cours de debbuggage.

8.2.2 Le registre " W "

Ce registre est un registre utilisé par les pics pour réaliser toutes sortes de calculs. Souvenez-vous que la destination d’un résultat (d) peut en général être un emplacement RAM (f) ou le registre de travail (w). C’est un donc un registre fondamental.

8.2.3 Le registre " STATUS "

C’est un registre dont chaque bit a une signification particulière. Il est principalement utilisé pour tout ce qui concerne les tests. Il est donc également d’une importance fondamentale. Il est décrit dans le tableau de la page 15.

Voici les différents bits qui le composent, en commençant par le bit0 (b0), donc le bit le plus à droite, ou encore le moins significatif. Remarquez qu’on utilise le terme LSB, parfois comme byte le moins significatif, parfois comme bit le moins significatif. C’est également un abus de langage, mais le contexte permet très bien de les distinguer.

b0 C Carry (report) Ce bit est en fait le 9ème bit d’une opération.
Par exemple, si une addition de 2 octets donne une valeur >255 (0xFF), ce bit sera positionné.
b1 DC Digit Carry Ce bit est utilisé principalement lorsque l’on travaille avec nombres BCD : il indique un report du bit 3 vers le bit 4. Pour info, un nombre BCD est un nombre dont chaque quartet représente un chiffre décimal. Nous n’aborderons pas ce principe ici.
b2 Z Zero Ce bit est positionné à 1 si le résultat de la dernière opération vaut 0. Rappelez-vous cependant que ces flags ne sont positionnés que pour les instructions qui le précisent (Status bit affected).
b3 PD Power Down Indique quel événement a entraîner le dernier arrêt de la PIC (instruction sleep ou dépassement du temps du watchdog). Nous y reviendrons plus tard. En réalité, vous verrez que PD est surmonté d’une petite barre qui signifie : actif à l’état bas. Donc que 0 = bit validé. Comme je n’arrive pas avec ce traitement de textes à écrire ces petites barres, j’écrirais les inversions en italique
b4 TO Time-Out bit Ce bit indique (si 0), que la mise en service suit un arrêt provoqué par un dépassement de temps ou une mise en sommeil. Dans ce cas, PD effectue la distinction.
b5 RP0 Register Bank Select 0 Permet d’indiquer dans quelle banque de RAM on travaille.0 = banque 0.
b6 RP1 Register Bank Select 1 Permet la sélection des banques 2 et 3. Inutilisé pour la 16F84, doit être laissé à 0 pour garantir la compatibilité ascendante (portabilité du programme).
b7 IRP Indirect RP Permet de décider quelle banque on adresse dans le cas de l’adressage indirect (que nous verrons plus tard).


 

Index cours
Index du cours
Chapitre précédent
7. Réalisation d’un programme
Chapitre suivant
8. La simulation d’un programme (Suite)

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/cours/pic16f84/PART1_cours08a.html modifiée le 14/10/2002.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail