Informatique Industrielle : TP 4 MICROCONTROLEURS PIC INTRODUCTION A MPLAB
Télécharger PDFTP4 : Introduction à MPLAB et Programmation Assembleur
Objectifs : L’objectif de cette manipulation est de se familiariser avec l’environnement de développement (IDE) MPLAB et de comprendre la structure d’un programme écrit en assembleur. Dans la première partie du TP, on présente la structure d’un programme assembleur et on en décortique les différentes parties. La deuxième partie consiste à compiler le programme, chercher et corriger les erreurs, suivre les registres et les variables, et vérifier le contenu des mémoires.
Environnement Logiciel
Pour réaliser cette manipulation, on utilise l’environnement de développement (IDE) de Microchip : MPLAB. MPLAB est un IDE contenant tous les outils nécessaires à la mise au point d’une application avec un cœur de microcontrôleur PIC. Il inclut :
- Un éditeur de texte interactif
- Un compilateur assembleur (MPASM) et C
- Un simulateur
Partie A : Structure d’un Programme Assembleur
1. Démarrer un Nouveau Projet
1. Ouvrir MPLAB
2. Sélectionner Project puis Project Wizard : suivre les étapes sans modification particulière.
3. Choisir le microcontrôleur à utiliser. Dans ce TP, le PIC 16F84 est sélectionné.
4. Sélectionner le langage de programmation : MPASM Assembler (assembleur).
5. Définir le nom et l’emplacement du projet. Il est recommandé de créer un nouveau dossier pour organiser tous vos projets.
6. Ajouter les fichiers nécessaires au projet. Dans ce cas, ne rien choisir et ajouter manuellement le fichier TP1.asm.
2. Organisation d’un Fichier .ASM
Ouvrir le fichier TP1.asm et cliquer n’importe où dans l’éditeur. Les commentaires, directives et structures sont détaillés ci-dessous.
3. Les Commentaires
Un commentaire commence toujours par ;. Il est conseillé de commenter systématiquement vos programmes pour faciliter leur compréhension et leur modification future.
4. Les Directives
Les directives sont des commandes destinées à l’assembleur pour indiquer sa configuration. Par exemple, à la ligne 42, on trouve LISTp=16F84, qui précise le type de processeur utilisé. Ces directives ne sont pas traduites en opcode.
5. Les Fichiers « Include »
La ligne #include <p16F84.inc> signale à l’assembleur que les assignations sont définies dans le fichier P16F84.inc. Ce fichier contient les valeurs des constantes utilisées dans le programme, comme FSR EQU H’04’, où FSR est associé à l’adresse 0x04 en mémoire.
6. La Directive Config
La directive CONFIG définit les fusibles du PIC, influençant son fonctionnement. Par exemple :
- _CP_ON : active la protection du code
- _WDT_ON : active le watchdog
- _HS_OSC : utilise un oscillateur quartz haute vitesse
Ces valeurs sont intégrées dans le fichier TP1.hex pour configurer correctement le programmateur.
7. Les Assignations
Les assignations remplacent un nom par une valeur lors de l’assemblage. Par exemple : OPTIONVAL EQU H’0040’. Si la valeur est modifiée, le changement s’applique à tout le programme.
8. Les Définitions (#DEFINE)
Les définitions #DEFINE permettent de substituer un texte complexe. Par exemple : #DEFINE LED1 PORTB,1, où LED1 est remplacé par PORTB,1 dans le code.
9. Les Macros
Une macro est un bloc de code nommé, défini par macro et terminé par endm. Par exemple :
LIREIN macro
comf PORTB,0
andlw 1
endm
10. La Zone des Variables
La zone RAM librement utilisée commence à l’adresse 0x0C et est définie par CBLOCK. Chaque variable est déclarée avec son nom suivi de sa taille (en octets). Exemple :
CBLOCK 0x00C
w_temp :1
status_temp :1
ENDC
11. Les Étiquettes
Les étiquettes sont des références associées à des adresses dans le programme. L’assembleur les remplace par l’adresse correspondante.
12. La Directive ORG
La directive ORG, suivie d’une adresse, indique où placer les instructions suivantes dans le PIC. Après un reset, le PIC démarre toujours à l’adresse 0x000. Exemple :
ORG 0x000 goto init
L’adresse 0x004 est réservée aux interruptions, laissant peu d’espace pour le programme principal. Une solution consiste à utiliser un saut vers la routine principale.
Partie B : Compiler un Programme en Assembleur et le Tester
Pour compiler le programme, appuyer sur F10 (assemblage du fichier sélectionné) ou CTRL+F10 (assemblage complet du projet). Si le message BUILD SUCCEEDED apparaît, le fichier TP1.hex est généré.
En cas d’erreurs, les corriger en tenant compte que chaque instruction a une taille de 14 bits et que le registre PC (Program Counter) contient l’adresse de la prochaine instruction à exécuter.
Pour suivre le contenu du registre PC, utiliser View → Watch et sélectionner les registres PCL et PCLATH.
Exécuter le programme en mode pas à pas et vérifier le contenu des registres PCL et PCLATH pour comprendre le rôle de PC.
Observer la mémoire programme via View → Program Memory. Les lignes vides contiennent la valeur 3FF car cette valeur est utilisée par défaut pour les emplacements non programmés.
Exemple de Programme à Tester
Ajouter les lignes suivantes à la fin du programme pour tester une boucle d’incrémentation :
init clrf mavariable
boucle END incf mavariable,f
goto boucle
Compiler et corriger les erreurs. Suivre les registres PCL, PCLATH et la variable mavariable. Déterminer la valeur maximale que mavariable peut atteindre et expliquer pourquoi.
FAQ
1. Pourquoi les lignes vides de la mémoire programme affichent-elles 3FF ?
La valeur 3FF est utilisée par défaut pour les emplacements non programmés dans la mémoire du PIC. Cela permet d’éviter des comportements imprévisibles.
2. Comment suivre le contenu du registre PC dans MPLAB ?
Utiliser View → Watch, puis sélectionner les registres PCL et PCLATH pour observer l’adresse de la prochaine instruction.
3. Que faire si une erreur de compilation apparaît ?
Vérifier le code source pour identifier la cause de l’erreur et la corriger. Les erreurs courantes incluent des syntaxes incorrectes ou des références à des adresses non valides.