<< 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 6

Téléchargement des fichiers originels ici
Publié le 20/04/2002

7. Réalisation d’un programme

Index coursIndex du cours
Chapitre précédent6. Organisation d’un fichier " .asm "
Chapitre suivant8. La simulation d’un programme

 

7. Réalisation d’un programme
7.1 Création de notre premier programme

Avant de lancer notre premier programme, nous allons procéder à quelques modifications du fichier " essai1.asm ", afin de ne conserver que ce qui nous intéresse. [ NDLR : Fichiers exemples ici ]

Premièrement, allez ligne 104 (le numéro peut être différent chez vous) et remplacez la ligne goto init par goto start. Ne faites pas de faute d’orthographe.

  goto start ; Adresse 0: démarrer

Descendez ensuite en ligne 225, vous trouverez là notre étiquette start, c’est donc là que notre programme va sauter. Effacez ensuite la ligne :

  clrwdt   ; effacer watch dog

Rassurez-vous, nous verrons tout ceci par la suite.

Il reste donc une instruction que nous avons déjà vue, l’instruction " goto ".

  goto start ; boucler

Le datasheet, page 62, nous apprend que l’instruction "goto" est suivie d’une valeur IMMEDIATE (c’est à dire une valeur sous forme d’un nombre), codée sur 11 bits (rappelez-vous, le programme peut faire 1KMOTS, donc, avec 11 bits, on peut sauter n’importe où dans la mémoire programme.

La valeur peut bien sûr être remplacée par une étiquette, MPASM se chargeant pour vous de calculer son emplacement. Le datasheet vous indique aussi qu’il s’agit d’un saut INCONDITIONNEL, c’est à dire qu’il s’effectuera toujours, sans condition. Il est rappelé qu’un saut prend 2 cycles.

Faisons de la place sous l’étiquette start, et ajoutons la ligne suivante (attention, pas en première colonne) :

  clrf mavariable ; effacer mavariable

CLRF est une instruction détaillée dans le chapitre dédicacé aux instructions. Il y est dit que l’emplacement mémoire précisé derrière l’instruction (ou une variable) est effacé. Le bit Z est positionné selon le résultat de l’opération.

Comme le but de l’opération est de mettre la variable à 0, le bit Z vaudra toujours 1 après cette instruction. Notez que l’emplacement mémoire peut se situer de 0 à 127 (0x7F). C’est logique : si vous consultez le tableau 4-2, vous voyez que la RAM s’arrête au 127ème emplacements pour chacune des 2 banques.

Placez ensuite une étiquette (colonne1) que vous appellerez boucle. Sous cette étiquette, ajoutez l’instruction :

boucle      
  INCF mavariable,f  

Cette instruction est expliquée également dans le chapitre relatif aux instructions. Vous voyez que cette instruction incrémente (+1) le contenu de la variable mavariable, et que le résultat de l’opération est placé dans l’emplacement d. Pour toutes les instructions, d peut valoir soit " f ", dans ce cas le résultat est stocké dans la variable en question, soit " w ", dans ce cas le résultat est placé dans le registre de travail, et la variable n’est pas modifiée.

Vous voyez également que le bit de STATUS ‘Z’ est affecté par l’opération. Je rappelle une dernière fois : si le résultat de l’incrémentation donne ‘0’, Z sera mis à 1. Il sera mis à 0 dans tous les autres cas.

Pour terminer, remplacez :

  goto start  

par

  goto boucle ; boucler

Le programme doit toujours se terminer par la DIRECTIVE " END "

Vous devriez donc vous retrouver avec ceci :

start      
  clrf mavariable ; effacer mavariable
boucle      
  incf mavariable, f ; incrémenter mavariable
  goto boucle ; boucler
       
  END   ; directive fin de programme

 

7.2 L’assemblage d’un programme

Nous allons maintenant tenter d’assembler ce programme pour en faire un fichier .hex. Pressez la touche " F10 ", des fenêtres s’ouvrent, MPLAB passe les commandes à MPASM qui tente d’assembler notre programme. L’assemblage s ‘arrête en chemin, une barre rouge apparaît et nous nous retrouvons avec la fenêtre suivante :

Building ESSAI1.HEX...
Compiling ESSAI1.ASM:
Command line: "C:\PROGRA~1\MPLAB\MPASMWIN.EXE /e+ /l+ /x- /c+ /rdec /p16F84 /q D:\DOCUME~1\LESSONS\DATAPIC\ESSAI1.ASM"
Message[302] D:\DOCUME~1\LESSONS\DATAPIC\ESSAI1.ASM 198 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\DOCUME~1\LESSONS\DATAPIC\ESSAI1.ASM 214 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[113] D:\DOCUME~1\LESSONS\DATAPIC\ESSAI1.ASM 226 : Symbol not previously defined (mavariable)
Error[113] D:\DOCUME~1\LESSONS\DATAPIC\ESSAI1.ASM 228 : Symbol not previously defined (mavariable)
MPLAB is unable to find output file "ESSAI1.HEX".
Build failed

Que s’est-il passé ? Et bien, examinons le rapport construit. Vous voyez d’abord des messages (warning). Ce sont des messages destinés à attirer votre attention, mais qui ne génèrent pas d’impossibilité d’assemblage. Nous expliquerons cela plus tard. N’oubliez pas qu’il y a toute une partie du programme qui ne sert à rien dans notre exemple, mais qui est tout de même écrite (au dessus de l’étiquette start). Nous mettrons cette partie en pratique plus tard.

Le problème vient évidemment des lignes " error ". Il y est dit que le symbole " mavariable " n’a pas été défini par l’utilisateur. Cette erreur se retrouve dans les 2 lignes où nous avons utilisé notre variable. En fait, nous avons oublié de la DECLARER. Pour remédier à cela, fermons la fenêtre des messages d’erreurs, et retournons dans notre éditeur.

Faisons de la place sous la ligne 97, dans la zone des variables. Ajoutons alors :

    mavariable : 1 ; je déclare ma variable

Vous vous retrouvez donc avec ceci :

  CBLOCK 0x00C ; début de la zone variables
    w_temp :1 ; Zone de 1 byte
    status_temp : 1 ; zone de 1 byte
    mavariable : 1 ; je déclare ma variable
  ENDC   ; Fin de la zone

Relançons l’assemblage en pressant sur F10.

Cette fois, tout s’est bien passé, l’indicateur est resté vert, et, après les warnings, nous obtenons la phrase :

Build completed successfully : construction achevée avec succès.

Nous venons de construire notre premier programme, et nous avons déjà appris 3 des 35 instructions que comporte le PIC. Qui a dit que c’était compliqué ?

A ce stade, fermez la fenêtre des messages, et sauvez votre projet par le menu " files->save all ". Quittez MPLAB et répondez "YES" à la demande de sauvegarde du projet.

Allez voir maintenant dans votre répertoire de travail, et vous devriez y trouver 7 fichiers générés par votre application du type " essai1.xxx " Remarquez que MPLAB crée des copies de sauvegarde de vos fichiers à chaque assemblage. Remarquez surtout l’existence de votre premier fichier .hex. Le fichier tel qu’il devrait être à la fin de ce chapitre, est disponible dans les fichiers d’exemples, comme tous les autres créés par la suite.

 

 

Index cours
Index du cours
Chapitre précédent
6. Organisation d’un fichier " .asm "
Chapitre suivant
8. La simulation d’un programme

 


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

Page http://fribotte.free.fr/bdtech/cours/pic16f84/PART1_cours07.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