Module
youssef.rochdi@uit.ac.ma
TP1 : Initiation à l’utilisation de MPLABX et à la programmation
des pic en assembleur
1. Outils de travail
Y.ROCHDI Page 1
Ne pas utiliser de proxy
Y.ROCHDI Page 2
Continuer l’installation avec les options par défaut ; ne pas installer les compilateurs
xc16, xc32 pour le moment.
Dans ce paragraphe on donnera les principales étapes utiles pour créer un projet de programmation
d'un PIC sous MPLABX; plus précisément on abordera la création et la gestion d'un projet, l'édition de
fichiers dans le langage "assembleur", la mise au point d'un programme (debuggage) et la simulation.
Ce tutorial se base sur le MPLABX IDE version 5.05.
Y.ROCHDI Page 3
4. Sélectionner l’outil de débuggage et de mise au point : Simulator
Y.ROCHDI Page 4
6. Donner un nom au projet et choisir le chemin où il sera placé. Eviter des chemin trop long
comme le bureau de windows ou des chemins avec des espaces ou des caractères
accentués.
7. Le projet est créé dans MPLABX et est ouvert dans la fenêtre Projects, mais il est encore vide
car il ne contient aucun fichier source.
Y.ROCHDI Page 5
8. Click droit sur le dossier Sources Files, et choisir l’option add existing item…
9. Naviguer vers le dossier où est installé MplabX, en général ca sera C:/Program Files
(x86)/Microchip/MplabX/v5.05, rentrer dans le dossier mpasm, chercher le fichier
p16F84A.inc , cocher la case copy pour faire une copie vers le dossier projet
Y.ROCHDI Page 6
10. Ajouter de la même manière le fichier template 16F84ATEMP.ASM, à partir du dossier
indiqué sur la figure suivante , Faire une copie en cochant la case copy:
11. Cliquer-glisser le fichier p16F84A.inc vers le dossier Header Files dans la fenêtre Projects :
Le projet crée ne contient que deux fichiers: 16F84ATEMP.ASM et P16F84A.INC. Nous allons
analyser leur contenu.
1. Double-cliquer sur le fichier P16F84A.INC pour l'ouvrir, ce fichier contient plusieurs sections
séparées par des commentaires; Ci-dessous un extrait de ce fichier:
; Register Definitions
;
;======================================================================
W EQU H'0000'
F EQU H'0001'
Y.ROCHDI Page 7
INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
…
;----- STATUS Bits --------------------------------------------------------
Ce fichier donne des noms expressifs aux adresses hexadécimales et aux numéros de bits, à l'aide de
la directive d'assemblage EQU; ainsi écrire dans le programme utilisateur STATUS, est équivalent à
écrire l'adresse 0x03 et IRP est équivalent au bit numéro 7.
2. Double-cliquer sur le fichier 16F84TEMP.ASM pour l'ouvrir; Il contient déjà des directives et
des instructions ; c’est un modèle pour toute application en assembleur pour ce PIC.
On trouve:
Les bits de configurations permettent de définir le type d'oscillateur utilisé, l'activation ou non du
watchdog, la protection en lecture du programme …etc; On en donnera plus de détails par la suite.
A l'instar de ce qui est fait dans le fichier p16f84a.inc, l'utilisateur peut définir, par EQU, ses propres
variables mémoires afin d'utiliser des noms et non pas des adresses numériques dans le programme:
Après un Reset, le programme s'exécute à partir de l'adresse 0x000, mais comme le sous-programme
d’interruption doit être placé à partir de l'adresse 0x004, on trouve souvent à l'adresse 0x000 une
instruction de branchement inconditionnel qui permet de se brancher au programme principal
(main) et donc de sauter la routine d'interruption qui est à l'adresse 0x004.
ORG 0x000 ; adresse de début d'exécution après un reset
goto main ; sauter au programme principal
Y.ROCHDI Page 8
main
; l'utilisateur place ici son code
3. Compléter le fichier précédent par un code simple: on suppose qu'on branche une LED sur la
broche RA0 du PIC qu'on veut allumer par le programme. Les étapes à mettre en place seront
donc:
· Configurer la broche RA0 du port A comme sortie ceci se fait par l'écriture d'un 0 dans le bit 0
du registre TRISA.
· Mettre à un le bit RA0 du port A pour allumer la LED
· Boucler indéfiniment sans rien faire
Pour transformer le code assembleur en code machine exécutable, on doit construire (build) le
projet.
1. Click-droit sur le nom du projet, puis choisir Build ou Clean and Build ceci ouvre la fenêtre
Output, et dans l'onglet Build s'affiche le compte rendu suivant:
Le dernier message de ce compte rendu annonce la réussite de l'opération, il n'y a pas donc d'erreurs
critiques. Noter la mise en garde concernant la ligne 83 qui correspond à l'instruction:
movwf TRISA; on rappelle ici que TRISA n'est pas sur la banque 0 et qu'il faut s'assurer que la banque
a été bien choisie.
Y.ROCHDI Page 9
En cas de présence d'erreurs dans le programme, elles seront signalées dans le compte rendu en
spécifiant les numéros de lignes correspondantes.
Ce petit programme peut être maintenant exécuté et testé.
Le débuggage est une opération qui permet de chercher les bugs (erreurs d’exécution). Quand un
programme ne fait pas ce qu’il devrait faire, on doit l’analyser (debugger) pour trouver les
éventuelles erreurs de programmation, en faisant une trace de son exécution.
1. Lancer le debugger: Click-droit sur le nom du projet puis option : Step into
Le debugger s’arrête sur la première instruction du programme (goto main) et attend les ordres du
développeur pour avancer, en pas à pas non détaillé, en pas à pas détaillé,… à l’aide de la barre de
debuggage, tout en surveillant le PC, les bits d’états (Z, C, DC), la bank sélectionnée :
Y.ROCHDI Page 10
3. Faire avancer l’exécution en pas à pas détaillé (Step Into) ou raccourcis clavier F7, et observer
l’effet des instructions exécutées sur les SFRs (TRISA et PORTA), le Wreg, les bits d’états, le
PC ….
4. Faites un Reset pour recommencer l’exécution depuis le début.
5. Lancer l’exécution de manière continue (F5). Stopper l’exécution à l’aide de Pause
(Ctrl+Alt+F8).
6. Arrêter le debuggage par Finish Debugger Session (Maj+F5)
Y.ROCHDI Page 11
TP2 : Programmation d’une application complète à l’aide du PIC
16F877A
1. Créer un nouveau projet MPLABX basé sur le PIC16F877A, ajouter y les fichiers
p16F877A.inc et 16F877ATEMP.asm.
Y.ROCHDI Page 12
3. Construisez le projet et tester le sur ISIS , testez le sur ISIS. Après 60 secondes les minutes
seront incrémentées…
4. Pour accélérer la cadence d’incrémentation, Indiquez un quartz de 20MHz pour le PIC
dans ISIS, et réduisez la constante 0x14 dans tempo_1s à 0x01. On remarque que les
heures ne sont pas incrémentées quand les minutes atteignent 60minutes. Ajoutez à
votre code, la mise à jour des heures de telle sorte que les heures s’incrémentent de 00 à
23 de manière cycliques. Reconstruisez le projet et testez-le en cadence rapide sur ISIS,
pour attester de son bon fonctionnement.
5. L’affichage des heures peut se faire en deux modes selon l’état du switch placé au niveau
du PORTA :
· Mode 1 : Switch vers le bas RA0=0, mode d’affichage de 00h à 23h
· Mode 2 : Switch vers le haut RA0=1, mode d’affichage de 00h à 12h AM ou 01h à 23h
PM, dans ce dernier cas deux LEDs indiquent AM (Matin) ou PM (après midi).
L’affichage de l’heure devient alors plus élaboré et on décide de le faire avec une
fonction affich_heure dont le code est donné ci-dessous.
Remplacez le code d’affichage des heures, par un appel à la fonction : affich_heure, ci-
dessous. Testez l’application, en changeant la position du switch.
Y.ROCHDI Page 13
Y.ROCHDI Page 14