microcontroleurs pic introduction a...

13
ISET GABES 1/13 I. Objectifs : Lobjectif de cette manipulation est de se familiariser avec l’environnement de développement (IDE) MPLAB et comprendre la structure dun programme écrit en assembleur. Dans La première partie du TP, on va présenter la structure d’un programme écrit en assembleur et on décortiquera ses différentes parties. La deuxième partie du TP consiste à : Compiler le programme, Chercher les erreurs et les corriger, Suivre les registres et les différentes variables, Vérifier le contenu des différentes mémoires. II. Environnement logiciel Pour réaliser cette manipulation on va utiliser l’environnement de développement (IDE) de MICROCHIP « MPLAB ». MPLAB est un environnement de développement qui contient tous les outils nécessaires à la mise au point d'une application avec un cœur de microcontrôleur PIC. Il contient un : Editeur de texte interactif, Compilateur assembleur (et C), Simulateur. TP 4 MICROCONTROLEURS PIC INTRODUCTION A MPLAB A.U 2015/2016 Sem 1 ISET DE GABES CRIEI ENSEIGNANT : M. TAYARI LASSAAD CLASSE : CRIEI

Upload: tranliem

Post on 12-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

1/13

I. Objectifs :

L’objectif de cette manipulation est de se familiariser avec l’environnement de développement (IDE)

MPLAB et comprendre la structure d’un programme écrit en assembleur.

Dans La première partie du TP, on va présenter la structure d’un programme écrit en assembleur et

on décortiquera ses différentes parties.

La deuxième partie du TP consiste à :

• Compiler le programme,

• Chercher les erreurs et les corriger,

• Suivre les registres et les différentes variables,

• Vérifier le contenu des différentes mémoires.

II. Environnement logiciel

Pour réaliser cette manipulation on va utiliser l’environnement de développement (IDE) de MICROCHIP

« MPLAB ».

MPLAB est un environnement de développement qui contient tous les outils nécessaires à la mise au point

d'une application avec un cœur de microcontrôleur PIC.

Il contient un :

• Editeur de texte interactif,

• Compilateur assembleur (et C),

• Simulateur.

TP 4 MICROCONTROLEURS PIC

INTRODUCTION A MPLAB

A.U 2015/2016 Sem 1

ISET DE GABES

CRIEI

ENSEIGNANT : M. TAYARI LASSAAD

CLASSE : CRIEI

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

2/13

Partie A : Structure d’un programme Assembleur

I. Démarrer un nouveau projet

1. Ouvrir MPLAB

2. Project Project Wizard

Rien de particulier dans cette phase, cliquez sur suivant.

3. Choisissez le microcontrôleur que vous aller utiliser. Dans notre cas choisissez le PIC 16F84

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

3/13

4. Choisissez le langage de programmation que vous aller utiliser. Dans notre cas on va

programmer en assembleur donc choisissez le MPASM Assembler.

5. Choisissez le Nom et l’emplacement du projet. De préférence, créez un nouveau dossier qui va

contenir tout vos projets.

Le nom du projet peut être différent du nom du dossier.

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

4/13

6. Ajoutez les fichiers que vous allez utiliser dans votre projet

Dans notre cas ne rien choisir, on va ajouter les fichiers manuellement.

7. Terminez la création du projet

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

5/13

8. Ajoutez un fichier Bouton droit sur Source File, puis choisissez le fichier « TP1.asm »

II. Organisation d’un fichier .ASM

Ouvrir Le fichier TP1 et cliquez n’importe où à l’intérieur de ce fichier. Vous êtes à l’intérieur

d’un simple traitement de texte. En bas, vous verrez un numéro de ligne et de colonne. C’est la

position actuelle de votre curseur.

1. Les commentaires

Un commentaire commence toujours par un « ; ».

Prenez l’habitude de toujours commenter vos programmes. Soyez sûr que dans 6 mois, vous

ne vous rappellerez plus ce que vous avez voulu faire, les commentaires vous seront alors d’une

grande utilité si vous décidez de modifier votre programme.

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

6/13

2. Les directives

A la ligne 42, nous trouvons une DIRECTIVE destinée à MPASM® pour lui indiquer quel type de processeur est utilisé dans ce programme.

Les DIRECTIVES ne font pas partie du programme, elles ne sont pas traduites en OPCODE,

elles servent à indiquer à l’assembleur de quelle manière il doit travailler. Ce sont donc des COMMANDES destinées à l’assembleur en lui-même.

Au contraire, les INSTRUCTIONS seront traduites en OPCODE et chargées dans le PIC. Il est

donc impératif de bien faire la distinction.

3. Les fichiers « include »

La ligne 43 signale à l’assembleur que les ASSIGNATIONS sont dans le fichier P16F84.inc. Ce

fichier contient la valeur de toutes les CONSTANTES que nous allons utiliser.

Ce fichier se trouve dans C:\Program Files\Microchip\MPASM Suite

Ouvrez ce fichier, une fois dépassée la zone de commentaires, vous verrez des lignes du

style :

FSR EQU H'04'

Cette ligne signifie tout simplement que FSR est EGAL à 0x04. Autrement dit, lorsque vous utiliserez FSR dans une instruction, MPASM® interprétera FSR comme étant 0x04.

0x04 étant tout simplement l’adresse de FSR dans la mémoire du PIC®. H’04’ est une autre méthode autorisée pour exprimer un nombre hexadécimal, tout comme

04h.

Remarque 1 : Si vous ne mettez rien devant le nombre (04 par exemple), le compilateur le

prend comme étant un nombre en décimal, mais il faut vérifier la configuration.

Pour modifier la configuration choisissez EDIT puis PROPERTIES et ensuite Tooltips et

choisissez le type de format par défaut.

4. La directive Config

La directive de configuration commence par « CONFIG ». Cette partie contient les fameux

« fusibles » qui fixent le fonctionnement du PIC.

Les valeurs écrites dans cette zone seront intégrées dans le fichier «TP1.hex » pour signaler

au programmateur les valeurs à encoder aux adresses spécifiques du PIC.

Si le programme contient les informations relatives à ces fusibles de configuration, aucun problème ne va se poser car lors du chargement du fichier dans votre programme de pilotage du programmateur, ces informations seront automatiquement prises en compte et le programmateur se configurera correctement.

Lorsque ces informations sont absentes du fichier « .hex », il faut alors définir « à la main »

l’état de ces fusibles au niveau de votre logiciel de pilotage du programmateur.

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

7/13

Voici les valeurs et leurs définitions :

• CP_ON Code protection ON : protection de la mémoire de

programme contre une lecture non autorisée

• CP_OFF Code protection OFF

• PWRTE_ON Timer reset sur power on en service(72 ms)

• PWRTE_OFF Timer reset hors-service

• WDT_ON Watch-dog en service

• WDT_OFF Watch-dog hors service

• LP_OSC Oscillateur quartz basse vitesse

• XT_OSC Oscillateur quartz moyenne vitesse

• HS_OSC Oscillateur quartz grande vitesse

• RC_OSC Oscillateur à réseau RC

5. Les assignations

Les assignations se comportent comme une simple substitution. Au moment de l’assemblage,

chaque fois que l’assembleur va trouver une assignation, il la remplacera automatiquement par sa

valeur.

Un autre avantage est que si vous remplacez la valeur d’une assignation, le changement sera

effectif pour tout le programme.

6. Les définitions

Les « define » fonctionnent comme les assignations mais ces derniers sont réservés pour les

valeurs et les « define » pour remplacer un texte plus complexe.

Une définition est construite de la manière suivante : La directive #DEFINE, suivie par le

nom que l’on désire utiliser, puis la chaîne à substituer. Par exemple :

#DEFINE monbit PORTA,1

7. Les macros

La macro se compose d’un nom écrit en première colonne, suivi par la directive «macro» et

commence à la ligne suivant la portion de code qui constitue la macro. La fin de la macro est définie

par la directive « endm ») (end of macro).

8. La zone des variables

Toute zone définie par l’utilisateur commence avec la DIRECTIVE CBLOCK, suivie par

l’adresse du début de la zone.

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

8/13

La zone RAM librement utilisée commence a l’adresse 0X0C.

CBLOCK 0x00C ; début de la zone variables

On peut utiliser 68 emplacements mémoire en suivant la syntaxe suivante :

Nom de la variable suivi du signe « : » suivi de la taille utilisée

9. Les étiquettes

Ce sont des noms qu’on choisi et qui sont des REPERES pour le programme.

L’assembleur les remplacera par l’adresse du programme à l’endroit où elles sont

positionnées.

10. La directive ORG

La directive ORG, suivie de l’adresse, précise à quelle adresse les instructions qui suivent

seront placées dans le PIC.

Il est important de savoir qu’après un reset ou une mise sous tension, le PIC démarre

toujours à l’adresse 0X00 : Le début du programme doit se situer a partir de cette adresse.

Remarque 2: L’adresse 0X04 est réservée pour les interruptions donc il nous reste pas

beaucoup de place pour mettre notre programme. La solution est de faire un saut vers

l’emplacement qui va contenir le programme principal.

Exemple

org 0x000 ; Adresse de départ après reset

goto init ; Adresse 0: initialiser

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

9/13

Partie B: Compiler un programme en assembleur et le tester

Maintenant on va faire l’assemblage de notre programme. Pour faire l’assemblage uniquement

pour le document sélectionné on appuie sur <F10> et si on veut assembler tout le projet on appuie

sur <CTRL> + <F10>. Puisqu’on a un seul document donc on appuie sur <F10>.

S’il n’ya pas des erreurs de compilation, on obtient le message « BUILD SUCCEEDED » et on aura

la génération du fichier « TP1.hex ».

Si vous avez rencontré des erreurs dans votre code essayez de trouver la cause et les corriger.

On vous rappel que la taille d’une instruction est de 14 bits et que le registre PC (program

Counter) contient l’adresse de la prochaine instruction à exécuter.

Le registre PC est obtenu de la façon suivante

Pour suivre le contenu de PC, View Watch, choisissez les 2 registres PCL et PCLATH

comme le montre la figure suivante.

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

10/13

Executez le programme en mode pas a pas en appuiant sur la touche suivante et verifiez le

contenue des registres PCL et PCLTAH. En deduire le rôle de PC.

Refaire l’exécution pas a pas du programme et suivez l’etat de la mémoire programme.

Pour voir le contenu de la mémoire programme VIEW Program Memory.

Que remarquez-vous ? Pourquoi les lignes vides contiennent une valeur égale à 3FF ?

A la fin du programme ecrivez les lignes suivantes

Start

clrf mavariable ; effacer mavariable

boucle

END

incf mavariable,f ; incrémenter mavariable

goto boucle ; boucler

Compilez le programme. Y’a-t-il des erreurs ? Corrigez les erruers et suivez les registres

PCL et PCLTAH et la variable « mavariable ».

Qu’elle est la valeur maximale que « mavariable » peut attendre ? Expliquez pourquoi.

Bon travail

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

11/13

ANNEXE (Fichier tp1.asm)

;********************************************************************** ; Ce fichier est la base de départ pour une programmation avec * ; le PIC 16F84. Il contient les informations de base pour * ; démarrer. * ; * ; Vous n'etes pas appelé a comprendre les instructions. * ; * ; Le but de cette manip est de comprendre la structure d'un * ; programme ecrit sous MPLAB * ; * ;********************************************************************** ; * ; NOM: TP1 * ; Date: 23/02/2015 * ; Version: 1.0 * ; Circuit: Pas de cicuit, fonctionnement sur émulateur * ; * ; * ; * ;********************************************************************** ; * ; Fichier requis: P16F84.inc * ; * ; * ; * ;********************************************************************** ; * ; Notes: Ceci est un petit programme qui ne sert à rien mais * ; qui permet de mettre en oeuvre MPLAB * ; * ; * ; * ;********************************************************************** ; ***** ****** ***** ***** ; * * * * ; * ****** ***** * ; * * * * ; ***** ****** ***** * LIST p=16F84 ; D?finition de processeur #include <p16F84.inc> ; D?finitions de variables _CONFIG _CP_ON & _WDT_ON & _PWRTE_ON & _HS_OSC ;********************************************************************* ; ASSIGNATIONS * ;********************************************************************* OPTIONVAL EQU H'0040' ; Valeur registre option ; Résistance pull-up ON ; Interrupt flanc montant RB0

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

12/13

; Préscaler timer2 (exemple) INTERMASK EQU H'0090' ; Masque d'interruption ; Interruptions sur RB0 (exemple) ;********************************************************************* ; DEFINE * ;********************************************************************* ; exemples ; --------- #DEFINE LED1 PORTB,1 ; LED de sortie 1 #DEFINE LEDR PORTB,2 ; LED de témoin de réception #DEFINE INPUT PORTB,0 ; entrée RS485 ;********************************************************************* ; MACRO * ;********************************************************************* ;Exemple ;------- LIREIN macro comf PORTB,0 andlw 1 endm ;********************************************************************* ; DECLARATIONS DE VARIABLES * ;********************************************************************* ;exemples ;--------- CBLOCK 0x00C ; début de la zone variables w_temp :1 ; Zone de 1 byte status_temp : 1 ; zone de 1 byte ENDC ; Fin de la zone ;********************************************************************** ; DEMARRAGE SUR RESET * ;********************************************************************** ORG 0x000 ; Adresse de d?part apr?s reset goto debut ; Adresse 0: initialiser ;********************************************************************** ; ROUTINE INTERRUPTION * ;********************************************************************** ;sauvegarder registres ;--------------------- ORG 0x004 ; adresse d'interruption movwf w_temp ; sauver registre W swapf STATUS,w ; swap status avec résultat dans w movwf status_temp ; sauver status swapp? ;code d'erreur

TP4: Introduction à MPLAB et programmation assembleur CRIEI AU:2015/2016

ISET GABES

13/13

;********************************************************************* ; INITIALISATIONS * ;********************************************************************* init clrf PORTA ; Sorties portA à 0 clrf PORTB ; sorties portB à 0 clrf EEADR ; permet de diminuer la consommation bsf STATUS,RP0 ; s?lectionner banque 1 movlw OPTIONVAL ; charger masque movwf OPTION_REG ; initialiser registre option ; Effacer RAM ; ------------ movlw 0x0c ; initialisation pointeur movwf FSR ; pointeur d'adressage indirec init1 clrf INDF ; effacer ram incf FSR,f ; pointer sur suivant btfss FSR,6 ; tester si fin zone atteinte (>=40) goto init1 ; non, boucler btfss FSR,4 ; tester si fin zone atteinte (>=50) goto init1 ; non, boucler bcf TRISA,0 ; Bit PORTA.0 en sortie (exemple) bcf STATUS,RP0 ; Sélectionner banque 0 movlw INTERMASK ; masque interruption movwf INTCON ; charger interrupt control ;********************************************************************* ; PROGRAMME PRINCIPAL * ;********************************************************************* debut goto init END ; directive fin de programme