• Aucun résultat trouvé

Réalisation d’un programme

Dans le document LA PROGRAMMATION DES PIC® (Page 49-53)

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. Premièrement, allez ligne 105 (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 226, 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 immédiate (c’est à dire une valeur sous forme d’un nombre), codée sur 11 bits (rappelez-vous, le programme peut faire 1Ki mots, 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é à 1 ou à 0 selon le résultat de l’opération, comme déjà expliqué.

Mais comme le but de l’opération est de mettre la variable à 0, le bit Zvaudra 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 emplacement pour chacune des 2 banques.

Placez ensuite une étiquette (première colonne) 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 Z du registre SFR STATUS 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 une instruction modifiant Z, évidement).

Pour terminer, remplacez goto start

par

goto boucle

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

L’assemblage d’un projet peut s’effectuer de 2 façons. Soit on assemble uniquement le fichier sélectionné avec <F10>, soit on assemble tous les fichiers de l’arborescence en

pressant <CTRL> + <F10>. Etant donné que nous n’avons qu’un seul fichier dans l’arborescence, nous utiliserons <F10>

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 une nouvelle fenêtre («output » ) qui contient les résultats de sortie de la commande. Si vous rencontrez un problème non prévu (erreur 173 par exemple) jetez un oeil en fin de cours, dans les annexes.

Deleting intermediary files... done.

Executing: "C:\Program Files\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84 "Essai1.asm" /l"Essai1.lst" /e"Essai1.err" /rDEC

Message[302] D:\DATAPIC\ESSAI1.ASM 199 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:\DATAPIC\ESSAI1.ASM 215 : Register in operand not in bank 0. Ensure that bank bits are correct.

Error[113] D:\DATAPIC\ESSAI1.ASM 227 : Symbol not previously defined (mavariable) Error[113] D:\DATAPIC\ESSAI1.ASM 229 : Symbol not previously defined (mavariable)

Halting build on first failure as requested.

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. 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 dans les chapitres suivants.

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 « déclarer ». 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 SUCCEEDED: 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é ?

Notez au passage que la « déclaration » de mavariable n’en est pas une au sens où on l’entend dans un langage évolué (C par exemple). En fait cette « déclaration » ne réserve rien du tout, n’effectue aucun « travail » et n’a d’autre effet que d’assigner une adresse (valeur) à la variable en question.

Sachant que w_temp se trouve à l’adresse RAM 0x0C (puisque CBLOCK renseigne cette adresse), et qu’on a « déclaré » 1 octet, status_temp se trouve donc à l’adresse 0x0D et mavariable à l’adresse 0x0E. Vous auriez pu tout aussi bien écrire, plutôt que de placer mavariable dans la zone CBLOCK :

mavariable EQU 0x0E

ou

#DEFINE mavariable 0x0E

Alors, pourquoi utiliser CBLOCK ? Tout simplement parce que les calculs sont effectués automatiquement, sans risque d’erreur, et qu’une modification vous assure de ne pas devoir tout recalculer. Il y a d’autres raisons pour ceux qui développent des

programmes objet, mais ceci sort du cadre de ce cours.

Je vous conseille donc vivement de toujours utiliser la directive CBLOCK plutôt que de vous « amuser » (chacun son truc) à calculer vous-mêmes toutes les adresses de toutes vos variables.

Vous pouvez maintenant laisser la fenêtre de sortie ouverte, la fermer ou la minimiser. Sortons de notre programme, et confirmez les demandes de sauvegarde.

Je vous conseille de toujours sauver régulièrement votre fichier source lorsque vous effectuez des modifications, à l’aide du raccourci <Ctrl> + « s ». Ceci vous évitera de perdre votre travail en cas de plantage de votre machine ou simplement de panne de courant.

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

Dans le document LA PROGRAMMATION DES PIC® (Page 49-53)