Spécialité : InfoTronique
V.TOURTCHINE
BOUMERDES - 2009
-0-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
I. LES MICROCONTROLEURS
Le processeur est le cœur du système puisqu’il est chargé d’interpréter les
instructions du programme en cours d’exécution et de réaliser les opérations
qu’elles contiennent .Au sein du processeur, l’unité arithmétique et logique
ALU interprète, traduit et exécute les instructions de calcul.
Les PICs sont des composants RISC (Reduce Instructions Construction Set),
ou encore composant à jeu d’instructions réduit. L'avantage est que plus on réduit le
nombre d’instructions, plus facile et plus rapide en est le décodage, et plus vite le
composant fonctionne.
La famille des PICs est subdivisée en 3 grandes familles : La famille Base-
Line, qui utilise des mots d’instructions de 12 bits, la famille Mid-Range, qui utilise
des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la famille High-End,
qui utilise des mots de 16 bits (18FXXX).
Pour identifier un PIC, on utilise simplement son numéro :
Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique un PIC Mid-
Range.
Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner
avec une plage de tension beaucoup plus tolérante.
Vient en suite une ou deux lettres pour indiquer le type de mémoire programme :
- C indique que la mémoire programme est une EPROM ou plus rarement une
EEPROM
-1-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
-2-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.1
-3-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.2
L’alimentation du circuit est assurée par les pattes VDD et VSS. Elles
permettent à l’ensemble des composants électroniques du PIC de fonctionner.
Pour cela on relie VSS (patte 5) à la masse (0 Volt ) et VDD (patte 14) à la
borne positive de l’alimentation qui doit délivrer une tension continue comprise
entre 3 et 6 Volts.
-4-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.3
-5-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
l’UAL et le registre de travail W (World). Nous allons étudier à présent plus en détail
le fonctionnement du PIC.
Fig.4
On pourrait donc croire qu’un cycle instruction dure 8 cycles d’horloge mais
l’architecture particulière du PIC lui permet de réduire ce temps par deux.
En effet, comme les instructions issues de la mémoire de programme circulent
sur un bus différent de celui sur lequel circulent les données, ainsi le processeur peut
effectuer la phase de recherche d’une instruction pendant qu’il exécute l’instruction
précédente (voir les figure 5 et 6).
Fig.5
-6-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.6
3.4 Déroulement d’un programme
Le déroulement d’un programme s’effectue de façon très simple.
A la mise sous tension, le processeur va chercher la première instruction qui
se trouve à l’adresse 0000 de la mémoire de programme, l’exécute puis va chercher
la deuxième instruction à l’adresse 0001 et ainsi de suite (sauf cas de saut ou
d’appel de sous programme que nous allons voir plus loin). On parle de
fonctionnement séquentiel.
La figure 7 va nous permettre de mieux comprendre le fonctionnement :
Fig. 7
-7-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
-8-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig. 8
On constate en effet que cette mémoire est séparée en deux pages (page 0 et
page 1). De plus, on remarque que tant pour la page 0 que pour la page 1, les
premiers octets sont réservés pour SFR (Special File Registre). Ces emplacements
sont en effet utilisés par le microcontrôleur pour configurer l’ensemble de son
fonctionnement. On les appelle registres spécifiques et nous verrons au chapitre
suivant leurs rôles.
Le bus d’adresse qui permet d’adresser la RAM est composé de 7 fils ce qui
veut dire qu’il est capable d’adresser 128 emplacements différents. Or, chaque page
de la RAM est composée de 128 octets, le bus d’adresse ne peut donc pas accéder
aux deux pages, c’est pourquoi on utilise une astuce de programmation qui permet
de diriger le bus d’adresse soit sur la page 0, soit sur la page 1. Cela est réalisé
grâce à un bit d’un registre spécifique (le bit RP0 du registre STATUS) dont nous
verrons le fonctionnement plus loin.
La RAM de données proprement dite se réduit donc à la zone notée GPR
(Registre à usage générale ) qui s’étend de l’adresse 0Ch (12 en décimale jusqu’à
-9-
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
4Fh (79 en décimale soit au total 68 registres en page 0 et autant en page 1, mais
on constate que les données écrites en page 1 sont redirigées en page 0 cela
signifie qu’au final l’utilisateur dispose uniquement de 68 registres (donc 68 octets de
mémoire vive) dans lesquels il peut écrire et lire à volonté en sachant qu’à la mise
hors tension, ces données seront perdues.
Au reset, seul le bit RP0 de sélection de page est fixé (RP0=0 : page 0)
TO/ (Time Out) : débordement du timer WDT
PD/ : (Power Down) caractérise l’activité du chien de garde WDT
- 10 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
adresse 0B et 8B , INTCON .
Contrôle des 4 interruptions
Masques :
Drapeaux :
adresse 81 , OPTION
8 bits (tous à 1 au RESET) affectant le comportement des E/S et de TIMER.
RBPU/ (RB Pull-Up) Résistances de tirage à Vdd des entrées du port B (voir
le détail du fonctionnement au chapitre port). Si RBPU=0 les résistances de
Pull-Up sont connectées en interne sur l'ensemble du port B.
- 11 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
RTE (Real Timer Edge) sélection du front actif du signal timer (0 pour front
montant).
- 12 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Si l’on veut placer une ligne en sortie il suffit de mettre le bit correspond dans
TRISA ou TRISB à 0 (à retenir : 0 comme Output = sortie).
Si l’on veut placer une ligne en entrée, il suffit de placer le bit correspondant
dans TRISA ou TRISB à 1 (à retenir : 1 comme Input = entrée).
Les bits des deux registres PORTA et PORTB permettent soit de lire l’état
d’une ligne si celle-ci est en entrée, soit de définir le niveau logique d’une ligne si
celle-ci est en sortie.
Lors d’un RESET, toutes les lignes sont configurées en entrées.
Important :
Particularité du PORTA :
les bits b7 à b5 des registres TRISA et PORTA ne correspondent à rien car il n’y
a que 5 lignes (b0 à b4). RA4 est une ligne à collecteur ouvert, cela veut dire
que configurée en sortie cette broche assure 0 Volt à l’état bas, mais qu’à l’état
haut, il est nécessaire de fixer la valeur de la tension grâce à une résistance de
tirage (pull up en anglais)
Particularité du PORTB :
il est possible de connecter de façon interne sur chaque ligne une résistance de
tirage (pull up) dont le rôle consiste à fixer la tension de la patte (configuré en
entrée) à un niveau haut lorsque qu’aucun signal n’est appliqué sur la patte en
question. Pour connecter ces résistances, il suffit de placer le bit RBPU/ du
registre OPTION à 0.
3.8 Le Timer
Dans la majeure partie des applications, il est nécessaire de contrôler le
temps; afin de ne pas occuper le microcontrôleur qu'à cette tâche (boucle de
comptage qui monopolise le micro), on le décharge en utilisant un timer. Le pic
16F84 dispose de deux timers, un à usage général (le TMR0) et un autre utilisé pour
le chien de garde (watch dog WDG).
Le TMR0 est un compteur ascendant (qui compte) de 8 bits qui peur être
chargé avec une valeur initiale quelconque. Il est ensuite incrémenté à chaque coup
d'horloge jusqu'à ce que le débordement ait lieu (passage de FF à 00).
Le principe est représenté figure 9 :
Fig.9
- 13 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.10
Suivant que le prédiviseur est assigné au chien de garde ou au TMR0, la
valeur de la prédivision n'est pas la même, il faut donc être vigilant lors de la
programmation comme le montre la figure 11.
Fig.11
- 14 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.12 Fig.13
Il suffit ensuite d’écrire le programme en langage assembleur sur un
ordinateur grâce au logiciel MPLAB de MICROCHIP (logiciel gratuit) puis de le
compiler pour le transformer en langage machine et le transférer dans le PIC grâce à
un programmateur.
Lors de la mise sous tension, tous les registres spécifiques sont placés dans
un état déterminé comme le montre la figure 14
Fig.14
- 15 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
BTFSC f, b Qui va vouloir dire (Bit Test File Skip if Clare) qui signifie que l’on
va tester le bit b du registre f (b peut prendre une valeur de 0 à 7
pour un registre 8 bits) .Il peut alors y avoir deux solutions :
-Soit le bit testé est à 1, donc la condition testée n’est pas
réalisée, le programme continue alors son déroulement
normalement en séquence avec l’instruction juste en dessous.
-Soit le bit testé vaut 0, donc la condition testée est réalisée et le
programme saute l’instruction qui suit le BTFSC dans le
programme.
BITS
d’état durée
INSTRUCTION SYNTAXE OPERATION du registre CYCLE
STATUS
affectées
W+kW
- 16 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
BITS
d’état durée
INSTRUCTION SYNTAXE OPERATION du registre CYCLE
STATUS
affectées
W+ff si d=1 ou
W+fW si d=0
W ET k fW
W ET ff si d=1 ou W
ET fW si d=0
0b (f)
BCF BCF f, b aucuns 1
(Bit Clear F) On met à 0 le bit b du
registre f
1b (f)
BSF BSF f, b aucuns 1
(Bit Set F) On met à 1 le bit b du
registre f
Si le bit b de f est à 1,
l’instruction qui suit celle-
BTFSS ci est ignorée et traitée aucuns 1 ou 2
BTFSS f, b comme un NOP. Dans ce
(Bit Test, Skip if Set) cas et dans ce cas
- 17 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
seulement, l’instruction
BTFSS demande deux
cycles pour s’exécuter.
BITS
d’état durée
INSTRUCTION SYNTAXE OPERATION du registre CYCLE
STATUS
affectées
appeler un sou
programme (label)
0W
CLRW CLRW On met le contenu du Z 1
(Clear W) registre W à 0 et on
positionne Z
0WDT et 0pré
diviseur du Timer
CLRWDT Z 1
CLRWDT On met le contenu du
(Clear Watch Dog registre du timer chien de
Timer) garde à 0 ainsi que le pré
diviseur
/ff si d=1 ou /fW si
d=0
On diminue le contenu du
registre f d’une unité, le
DECFSZ DECFSZ f, d résultat est placé dans f si aucun 1 ou 2
- 18 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
BITS
d’état durée
INSTRUCTION SYNTAXE OPERATION du registre CYCLE
STATUS
affectées
f+1f si d=1 ou
f+1W si d=0
On augment le contenu
INCF INCF f, d du registre f d’une unité, Z 1
(Increment F) le résultat est placé dans f
si d=1, dans W si d=0
(dans ce cas f reste
inchangé).
f+1f si d=1 ou
f+1W si d=0 et saut
si f-1=0
On augmente le contenu
du registre f d’une unité,
INCFSZ INCFSZ f, d le résultat est placé dans f aucun 1 ou 2
(Increment F, Skip if si d=1, dans W si d=0
(dans ce cas f reste
Zero ) inchangé).Si le résultat
est nul, l’instruction
suivante est ignorée et
dans ce cas, cette
instruction dure deux
cycles.
W OU k W
IORLW k On effectue un OU Z 1
IORLW logique entre le contenu
(Inclusive Or literal de W et le littéral k, le
with W ) résultat est placé dans W.
W OU ff si d=1 ou W
OU fW si d=0
- 19 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
BITS
d’état durée
INSTRUCTION SYNTAXE OPERATION du registre CYCLE
STATUS
affectées
kW
Wf
MOVWF MOVWF f aucun 1
(Move W to F ) On charge le contenu de f
avec le contenu de W
néant
On charge le compteur
RETFIE RETFIE ordinal avec la valeur qui aucun 2
(Return From se trouve au sommet de
Interrupt ) la pile pour revenir au
programme principal
lorsque l’exécution du
sous programme est
terminée.
kW, PilePC
On charge le contenu de
W avec le littéral k puis on
RETLW RETLW k charge le compteur aucun 2
(Return Literal to W) ordinal PC avec la valeur
qui se trouve au sommet
de la pile effectuent ainsi
un retour de sous
programme.
PilePC
On charge le compteur
ordinal PC avec la valeur
RETURN RETURN qui se trouve au sommet aucun 2
(Return de la pile effectuent ainsi
- 20 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
On place le circuit en
mode sommeil avec arrêt
de l’oscillateur. Cette
commande est à utiliser
avec précaution, elle
nécessite la connaissance
du mode sommeil.
BITS
d’état durée
INSTRUCTION SYNTAXE OPERATION du registre CYCLE
STATUS
affectées
k-WW
On soustrait le contenu du
SUBLW SUBLW k registre W du littéral k et C, DC, Z 1
(Substract W from on place le résultat dans
Literal) W (soustraction par la
méthode du complément
à 2).
f-WW si d=0 ou f-
Wf si d=1
On soustrait le contenu du
SUBWF SUBWF f, d registre W du contenu du C, DC, Z 1
(Substract W from F ) registre f et on place le
résultat dans W si d=0, ou
dans f si d=1 (soustraction
par la méthode du
complément à 2).
f(0-3)f(4-7) et f(4-
7)f(0-3) résultat dans
W ou f selon d
- 21 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
XORWF XORWF f, d Z 1
(Exclusive Or W with On effectue un OU
F) Exclusif entre W et le
contenu de f, le résultat
est placé dans W si d=0,
sinon il est placé dans f.
7 6 5 4 3 2 1 0
C
Opération : Registre f
Durée : 1 cycle
Syntaxe : RRF f, d
Opération :
7 6 5 4 3 2 1 0
C
Registre f
Durée : 1 cycle
- 22 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
_ _CONFIG H'3FF9'
si le fichier p16f84.inc a été inséré, on peut utiliser les constantes prédéfinies :
_ _CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF
- 23 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
• DE : pour déclarer des donnés qui seront stockée dans l'EEPROM de donnée au
moment de
l'implantation du programme sur le PIC
ORG 0x2100
DE "Programmer un PIC, rien de plus simple", 70, 'Z'
• tout ce qui suit un point virgule est considéré comme un commentaire non
interprété par le compilateur
- 24 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
2) Configuration, exemple :
LIST p=16f84
INCLUDE "p16f84.inc"
_ _CONFIG H'3FF9'
Pour ce qui nous concerne, nous utiliseront MPLAB pour écrire, compiler et
éventuellement simuler nos programmes, ensuite nous utiliserons un programmateur
PICSTART Plus@ pour implanter les programmes dans la mémoire flash du PIC.
Led equ 0
X equ 0x0C
cblock 0x0D
y,z
u,v,w
endc
6) Ecrire les sous programmes (s'il y en a). Chaque procédure commence par
une étiquette qui représente son nom, et se termine par l'instruction RETURN
- 25 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
5.5 Références
[1] PIC16F8X, document DS30430C, www.microchip.com
- 26 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Présentation de MPLAB:
Il contient
un éditeur
un assembleur
un simulateur
Il permet
1.1 Préparation
Créez dans votre espace disque dur (par exemple le disque C) un répertoire où vous rangez tous
vos projets et y tappelez, à titre d’exemple : « Projets MPLAB ». Il est recommandé de créez aussi un
sous répertoire, par exemple : « manip_1 », « LED_clinot », « manip_2 » etc...
Après quelques instants, vous vous retrouvez avec un écran vide avec menu et
barres d’outil. Si certaine fichiers ou projets s’ouvrent lors du démarrage, fermez-les.
Fig.1
- 27 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
L’assistant de création
de projet s’affiche.
(Fig.2)
Cliquez sur « Suivant »
Fig.2
La première étape
(Fig.3) consiste à indiquer
la référence du
microcontrôleur qui sera
utilisé (dans notre cas
c’est le PIC 16F84A).
Cliquez ensuite sur
« Suivant »
Fig.3
- 28 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.4
Indiquer le nom
souhaité pour le projet
Spécifier le répertoire
(Projets MPLAB) et
sous répertoire
(manip_1)
Cliquer pour
sélectionner
Fig.5
- 29 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
La troisième étape (voir la figure 5) consiste à indiquer le nom du projet ainsi que son emplacement.
Indiquez dans la case « Project Name » le nom souhaité pour le projet (par exemple : manip_1)
Spécifiez le répertoire dans la case « Project Directory » en utilisant le bouton « Browse » pour
parcourir l’arborescence des répertoires. Dans notre cas c’est le répertoire « Projet MPLAB » et sous -
répertoire « manip_1 » (voir la figure 5). Cliquer « Select »
Cliquez ensuite sur « Suivant »
La dernière étape 4
permet d’ajouter au projet un
fichier source existant (fig.6).
Dans le cas où aucun fichier
source n’est à incorporer au
projet, cliquez directement
sur « Suivant ».
Pour ajouter un fichier
source existant, parcourir
l’arborescence dans la
fenêtre de gauche,
sélectionner le fichier désiré
puis cliquer sur bouton
« Add ». Cocher ensuite la
case située à gauche du
nom du fichier pour qu’il
soit copié à partir de son
emplacement d’origine
dans le répertoire du
projet.
Cliquez ensuite sur
« Suivant ».
Fig.6
L’assistant de création de
projet (fig.7) affiche un résumé
de celui-ci : contrôler les
différentes informations
présentées :
a) Référence du
microcontrôleur ;
c) Répertoire du projet.
Fig.7
- 30 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Incorporer ce nouveau
fichier au projet en
choisissant l’option « Add
Files… » dans le menu
contextuel (obtenu par un clic
du bouton droit de la souris)
de la rubrique « Source
Files ». Rechercher puis
sélectionner le fichier
sauvegardé précédemment.
MPLAB affiche, en plus de la fenêtre du projet, une fenêtre d’édition dans laquelle on peut aisément
modifier le programme source grâce à la coloration syntaxique.
- 31 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.8
- 32 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Les différentes icônes disponibles dans la barre d’outils de MPLAB sont définiées sur la figure 8.
Fig.9
Certaines fenêtres qu’il est utile d’afficher dans certains cas (voir la figure 10) :
- « Watch » : permet d’afficher le contenu de registres du microcontrôleur ou de variables (choisir dans
le menu « View » l’option « Watch »).
- « Special Fonction Registers » : permet d’afficher le contenu des registres particuliers du
microcontrôleur (choisir dans le menu « View » l’option « Special Fonction Registers »).
- « File Registers » : permet d’afficher le contenu des registres particuliers du microcontrôleur (choisir
dans le menu « View » l’option « File Registers »).
- « Disassembly listing » : permet d’afficher le listing du programme en assembleur à la suite de la
compilation, associé au code objet généré (choisir dans le menu « View » l’option « Disassembly
listing »).
- 33 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.10
L’éditeur de texte de MPLAB permet, grâce à la coloration syntaxique, d’écrire le programme source
en assembleur.
La traduction du programme source en code objet s’effectue grâce à l’icône « Build» (voir fig. 11).
Il est impératif d’observer le résultat de la compilation dans l’onglet « Build » de la fenêtre « Output »
(fig.9) :
Un message d’erreur (« Error ») nécessite obligatoirement une modification du programme source,
la compilation n’étant pas complète. Pour corriger l’erreur, un double clic sur le message d’erreur de la
fenêtre « Output » permet d’arriver directement sur la ligne du programme source comportant l’erreur.
Un message d’avertissement (« Warning », « Message ») doit être examiné avec soin : dans
certains cas, il s’agit d’un oubli ou d’une erreur dans le programme source. Cependant, un programme
- 34 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
destiné à être exécuté par un microcontrôleur comporte systématiquement une boucle infinie qui sera
signalée par un message d’avertissement.
Le Message « BUILD SUCCEEDED » indique une compilation réussie (comportant éventuellement
des avertissements).
Les principales icônes utilisées pour le « débuggage » apparaissent dans la partie droite de la barre
d’outils de MPLAB :
Fig.11
- 35 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Exécuter le programme soit en continu (icône « Run (Lance le programme) » soit en modes pas à
pas (icônes «Step Into», « Step Over » ou « Step Out »);
Après un lancement en continu du programme, l’arrêt de celui-ci s’effectue grâce à l’icône « Halt »,
suivi éventuellement d’un « Reset ».
- 36 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
4. Exercice
4.1 Créez votre source
Une fois le projet entièrement défini, vous pouvez commencer à développer le code de votre
application.
Sélectionnez File ->New. Vous obtenez une fenêtre de l’éditeur. Saisir le fichier ci-dessous
(fig.12) en exemple (joint sous le nom de votre projet).
1. Dans la fenêtre nom du projet.mcw sélectionnez Source Files puis avec le bouton
droit faire Add. File
2. Sélectionnez le fichier que vous venez de créer et de sauvegarder.
3. Cliquez sur Ouvrir.
Le nom du fichier doit apparaître dans la fenêtre projet au dessous de « Source Files ».
- 37 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
- 38 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
S’il y a eu un problème de compilation celui-ci est indiqué dans la fenêtre pour permettre de
retrouver les erreurs. Un double cloc sur l’erreur pointe directement la ligne du programme sur laquelle
se situe l’erreur.
Une fois la compilation terminée le fichier debug (*.cod ou *.cof) généré par MPLAB sera
chargé. Ce fichier permet de débouguer le code source et de visualiser les variables symboliques
dans les fenêtres d’observation.
4.4.3 Lancez l’exécution de votre programme ; faites Debugger -> Run ou F9.
L’information « Running » apparaît à la gauche de la barre d’état.
4.4.5 Vous pouvez aussi exécuter le programme pas à pas : faites Debugger -> Step
Info ou touche F7. A ce moment la flèche verte pointe l’instruction qui va être
exécutée. A tout instant vous pouvez voir le contenu d’une variable en plaçant le
pointeur de la souris sur le nom de la variable.
- 39 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Faite View -> Watch pour ouvrir une fenetre d’observation (Watch Windows).
4.6.3 Faite avancer le programme d’un pas de plus et observez le changement d’état du bit 0 du
PORTB.
4.6.5 La temporisation est réalisée par décrémentation de deux variables ; pour raccourcir la durée
vous pouvez modifier directement les valeurs de retard_1 et retard_2 en cliquent deux fois sur
la valeur et en saisissant la nouvelle valeur (par exemple : 0x02).
4.6.7 Pour continuer utilisez le bouton 5 Step Over (fig.11) ceci permet d’exécuter tout le sous-
programme en mode Run et de pointer l’instruction suivante.
- 40 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.13
4.7.1.3 Dans le menu contextuel qui apparaît choisissez Set Breakpoint. Un signal stop doit
apparaître en face de la ligne indiquée (fig.14).
Fig.14
- 41 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Fig.15
Deux cases à cocher contrôlent la manière dont s’effectue la collecte des données. Si seule le
première case est cochée (Trace Enable) le simulateur enregistre les données en mode Run jusqu’à
ce qu’il rencontre un point d’arrêt ou qu’il soit arrêté manuellement. Il permettra ensuit de visualiser les
8192 dernières cycles. Si la deuxième case est aussi cochée (Break Trace Buffer Full) le simulateur
enregistre les 8192 cycles d’exécution et arrête la mémorisation et l’exécution du code.
- 42 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
4.7.2.2 Faites View -> Simulator Trace. La trace du simulateur montre pour chaque cycle
machine l’instruction exécute plus les données qui ont été lues ou écrites dans les
registres. Pour chaque instruction la trace donne l’adresse du Compteur de
Programme, le code opération (Op) en hexadécimal, l’étiquette s’il y a lieu et
l’instruction désassemblée. Les quatre colonnes suivantes montrent les données lues
ou écrites (fig.16):
SA Adresse Source adresse du registre où a été lue la donnée
SD Source Data donnée lue
DA Destination Adresse adresse du registre où a été écrite la donnée
DD Data Destination donnée écrite
Fig.16
Après avoir sélectionné MPLAB SIM comme outil de debogage, sélectionnez Debugger ->
Settrings ; vous obtenez la fenêtre ci-dessous.
- 43 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Les stimuli sont des pseudo signaux appliqué aux entrées du processeur. Ils permettent de
simuler l’influence de l’environnement sur le déroulement du programme.
Choisissez Debugger -> Stimulus Controller pour ouvrir la fenêtre de la figure 17.
Fig.17
L’onglet « Pin Stimulus » permet de définir les pseudo signaux que l’on veut créer ; ils peuvent
être de type :
Soit synchrones et ils sont définis comme des horloges dont on donne la durée à l’état haut et
bas
Soit comme des signaux asynchrone actionnés par clic sur le bouton « Fire », ce clic
produisant l’effet indiqué dans la colonne « Action »
L’onglet « File Stimulus » permet de créer des fichiers de simulus qui peuvent être
mémorisées et rejoués.
- 44 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Cet exemple de programmation est destiné pour apprendre les différentes étapes de
programmation en assembleur. Le fichier assembleur proposé pour cet exemple permet de faire
allumer les LEDs connectés sur le microcontrôleur de la famille PIC.
La figure 1 représente le schéma de principe du telerupteur.
Le circuit doit réaliser la fonction suivante. Un appui sur un des boutons-poussoirs (B_P)
branchés sur le portA allume les 8 LEDs branchés sur le port B, une seconde l’appui fait les éteindre.
Remarque : pour simplifier le schéma, on a représenté un sel B_P (branché en parallèle avec les
autres B_P qui peuvent être installés éventuellement dans les différents endroits) et une LED.
VDD
5V
VDD
5V 1kΩ 10uF
R2 C4
B_P 0.1%
U1
17 RA0 VDD 14
18 RA1 RB0INT 6
1 RA2 RB1 7
2 RA3 RB2 8
3 RA4T0CKI RB3 9
R3 RB4 10
4 MCLR RB5 11
16 OSC1CLKIN RB6 12
1kΩ RB7 13
5 VSS OSC2CLKOUT 15
0.1% 220Ω
PIC16F84A R1 0.1%
1uF LED
5V C1
VDD
U2
C3 15pF C2 15pF
Fig.1
Remarque important :
Pour programmer en langage ASSEMBLEUR il faut non seulement connaître le fonctionnement de chaque
instruction, mais aussi l’architecture interne du microcontrôleur, la structure de sa mémoire, les adresses des
registre spéciaux, le fonctionnement de chacune de ses ressources internes, etc..
La programmation en langage ASSEMBLEUR s’appuie sur des organigrammes plus travaillés, et requiert plus de
rigueur et de minutie.
- 45 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Toujours Il faut tenir en compte les régimes transitoires des périphériques (bouton_poussoir, clavier etc..)
branchés sur le microcontrôleur
3.1 Organigramme
Avant la construction d’un programme il est préférable de réaliser un organigramme qui
représente le cheminement d’un programme à écrire. Cela va faciliter la programmation en
assembleur.
L’organigramme de réalisation de notre programme en question est proposé sur la figure 2.
Ici chaque action est symbolisée par un rectangle, un choix est symbolisé par un losange.
3.2 Organisation d’un fichier « .asm ». Quelques étapes pour la construction d’un programme.
De la ligne 1 à la ligne 13 vous voyez un cadre. Le premier caractère de chaque ligne, vous
verrez le symbole « ; ». Tout ce qui suit étant considéré comme zone de commentaire, vous pouvez y
mettre ce que vous voudrez. Ce commentaire vous aiderais de vous rappellerez ce que vous voulu
faire. Les commentaires vous seront alors d’une grande utilité si vous décidez de modifier votre
programme.
A la ligne 19, nous trouverons une DIRECTIVE destinée à MPASM pour 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 serrent à indiquer à l’assembleur de quelle manière il doit travailler. Ce sont donc des
COMMANDES destinées à l’assembleur en lui-même.
- 46 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
EXPLICATION
On vérifie que le
Bouton_Poussoir est appuyé
pour lancer le programme
On appelle du sous-programme
de temporisation
On appelle du sous-programme
de gestion des LEDs
On vérifie que le
Bouton_Poussoir est relâché
pour revenir au début du
programme.
1) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2) ; Ce programme assure la gestion des LEDs en mode
3) ; de télécommande :un appui sur un des
4) ; Boutons-Poussoirs allume les LEDs tendis que
5) ; l’appui suivante fait éteindre ces LEDs
6) ;
7) ; Nom du projet : TELERUPTEUR
8) ; Auteur : V.Tourtchine
9) ; Date : 09/2009
10) ; Microcontrôleur : Microchip PIC 16F84A
11) ; Langage : Assembleur
12) ; IDE : Microchip MPLAB
13) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
14)
15) ;xxxxxxxxxxxxxxxx
16) ; Processeur
17) ;xxxxxxxxxxxxxxxx
18)
19) List p=16F84A
20) #include <p16F84A.inc>
- 47 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
21) ;xxxxxxxxxxxxxxxxxxxxxx
22) ; Bits de configuration
23) ;xxxxxxxxxxxxxxxxxxxxxx
24)
25) __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
26)
27) ;code protect OFF
28) ;watchdog timer OFF
29) ;power up timer ON
30) ;xxxxxxxxxx
31) ; Macro
32) ;xxxxxxxxxx
33)
34) bank1 macro ; passage en banque 1
35) bsf STATUS,RP0
36) endm
37)
38) bank0 macro ; passage en banque 0
39) bcf STATUS,RP0
40) endm
41)
42) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
43) ; Définition des constantes
44) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
45)
46) #DEFINE B_P PORTA,0 ; B_P est branché sur le PORTA,0
47)
48) #DEFINE LEDs PORTB ; LEDs sont branchées sur le PORTB
49)
50)
51) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
52) ; Déclaration des registres temporaires
53) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
54) CBLOC 0x00c
55) retard_ms : 1 ; « retard_ms » à l'adresse 0x0c
56) mémo : 1 ; « mémo » à l'adresse 0x0d
57) compte_1 : 1
58) compte_2 : 1
59) ;xxxxxxxxxxxxxxxxxxxxxxx
60) ; Démarrage sur reset
61) ;xxxxxxxxxxxxxxxxxxxxxxx
62)
63) org 0x0000 ;adresse de départ après reset
64) goto start ;adresse 0: start
65)
66) ;xxxxxxxxxxxxxxxxxxxx
67) ; Initialisation
68) ;xxxxxxxxxxxxxxxxxxxx
69) start
70) bank1
71) movlw B'00000001'
72) movwf TRISA ; bit 0 du PORTA configuré en entrée
73) movlw B'00000000'
74) movwf TRISB ; PORTB configuré en sortie
75) bank0
76) clrf PORTA ; initialisation du portA
77) clrf PORTB ; initialisation du portB
78) clrf mémo ; initialisation du registre "mémo"
79) movlw D’10’ ; 10 -> w
80) movwf retard_ms,f ; initialisatio du"retard_ms" avec 10
81) goto début ; -> début du programme principal
82)
83) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
84) ; Programme principal
85) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
86) début
87) btfss B_P ; tester si B_P est appuyé?
88) goto début ; non -> début
- 48 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
La ligne 25, commence par « __ CONFIG ». Cette ligne contient les « fameux fusibles » qui
fixent le fonctionnement du PIC.
Les valeurs écrites ici seront intégrées dans le fichier « .hex » pour signaler au
programmateur les valeurs à encoder aux adresses spécifiques du PIC.
La macro se compose d’un nom écrit en première colonne, suivi par la directive « macro ».
Commence alors à la ligne suivante la portion de code qui constitue la macro. La fin de la macro est
définie par la directive « endm ».
Une macro remplace donc un morceau de code que nous utilisons souvent. La macro
fonctionne également uniquement comme un simple traitement de texte. Chaque fois que la macro
sera rencontrée, elle sera remplacée au moment de l’assemblage par la ligne (dans notre cas) :
bsf STATUS,RP0
La macro simplifie donc l’écriture, mais ne raccourci pas la taille du fichier .hex obtenu,
puisque la ligne sera écrites dans le PIC.
- 49 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
Toute zone définie par l’utilisateur commence avec la directive CBLOCK, suivie par l’adresse
du début de la zone. Ensuit, nous pouvons utiliser 68 emplacements mémoire, qui répondront à la
syntaxe suivant : nom de la variable suivi du signe « : » suivi de la telle utilisée. Dans notre exemple
on peut défini des registres temporaire comme suit :
Vous trouverez dans les programmes en 1ère colonne ce qu’on a l’appelé des ETIQUETTES.
Ce sont des noms que vous choisissez et qui sont des REPERES pour le programme.
L’assembleur les remplacera par l’adresse du programme à, l’endroit où elles sont
positionnées. Ceci vous évite de devoir calculer les emplacements programme.
La directive ORG, suivie de l’adresse, précise à quelle adresse les instructions qui suivent
seront placées dans le PIC.
Après un reset ou mise sous tension, le PIC démarre toujours à l’adresse 0x00. Le début du
programme doit donc se situer là.
L’adresse 0x04 est l’adresse utilisée par les interruptions (nous verrons dans le prochain
séance de TD). Il ne vous reste donc pas grande place pour placer votre programme. Nous
commencerons donc par un saut vers l’emplacement du programme principal où nous aurons plus de
place. Allons donc voir ligne 68 comment tout ceci fonctionne :
- 50 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
La première ligne est une DIRECTIVE qui indique que la ligne suivante sera placée à
l’adresse 0x00.
La seconde ligne est une INSTRUCTION qui indique au PIC que le programme doit sauter à
l’adresse « start » . « start » est une ETIQUETTE.
Après le reset, le PIC exécute donc l’instruction goto start qui se trouve à l’adresse 0x00,
suivie par l’instruction qui se trouve à l’adresse start plus bas dans le programme (donc juste en
dessous de l’étiquette start).
Les instructions contenues à partir de l’étiquette « start » (de la ligne 70 à la ligne 81) vous
devriez avoir comprise.
A partir de la ligne 86 à la ligne 123 c’est le programme principal. Dans notre cas ce
programme peut être représenté sans utiliser l’appelle des sous-programmes et de macro. Le choix
dépend de la fréquence d’utilisation dans le programme des sous-programmes et des macro. Vous
pouvez choisir la méthode que vous préférez. Très important, c’est d’avoir compris les deux
méthodes.
Cette directive précise l’endroit où doit cesser l’assemblage de votre programme. Elle est
obligatoire dans tout programme.
Toutes les instructions situées après la directive END seront tout simplement ignorées.
Grâce aux caractéristiques sur le jeu (set) d’instructions des PIC, on peut connaître le
nombre de cycles nécessaires pour l’exécution d’une instruction. Sachant que l’horloge interne divise
par 4 le fréquence issue du quartz, cella donne, pour un quartz de 4 MHz, un temps de 1 µs par cycle
machine (f = 4 MHz /4 = 1 MHz, d’où T = 1/f = 1 µs).
A chaque fois qu’on a besoin d’introduire dans le programme une temporisation, il faut
calculer le temps machine nécessaire pour exécuter cette temporisation afin de déterminer la valeur
exacte de la temporisation.
Prenons l’exemple d’une temporisation (de la ligne 96 à 110 dans notre programme) avec un
quartz de 4 MHz.
L’instruction goto et return dure 2 cycles machines, l’instruction decfsz dure 1 cycle ainsi
que l’instruction nop. Le registre « compte_1 » est initialisé à 250.
Le PIC fera 250 fois la boucle_1 de temporisation : la temporisation est donc de :
(ligne 102 + ligne 103 + ligne 104) x compte_1 – ligne104
= (nop + decfsz + goto) x compe_1 – goto = (1+1+2) x 250 – 2 = 1 000 – 2 (cycles)
Maintenant avec la boucle_2 = retard_ms on a:
(1 000 – 2) x compte_2 + (ligne105 + ligne106)compte_2 – ligne109 soit :
(1 000 – 2) x retard_ms + (movlw + movwf) x retard_ms – goto soit:
(1 000 – 2) x retard_ms +(1+1)x retard_ms – 2 (cycles) plus :
(ligne89 + ligne97 + ligne98 + ligne99 + ligne 100 + ligne 110) soit :
(call + movlw + movwf + movf + movwf + return) = (2 + 1 + 1 +1 + 1 + 2) = 8 (cycles)
Finalement le nombre de cycles NbCycles est égale à :
NbCycles = 1 000 x retard_ms – 2 x retard_ms + 2 x retard_ms – 2 + 8 = 1 000 x retard_ms + 4
Alors on peut déterminer le temps totale de temporisation :
3
NbSycles x 1 µs = 1 000 x retard_ms x 1 µs + 4 x 1 µs = 10 x retard_ms x 1 µs + 4 x 1 µs
3
Si on néglige les 4 µs par rapport à 10 x retard_ms x 1 µs, on a pour le temps de
temporisation: tempo = 103 x retard_ms x 1 µs = 103 x retard_ms (µs).
Supposons que le régime transitoire du B_P n’est dépasse pas 10 ms = 10 x 103 µs.
Alors on peur calculer le contenu maximal du registre « retard_ms » :
3 3
retard_ms = 10 x 10 / 10 = 10 (cycles)
Dans notre programme le registre « retard_ms » a été initialisé avec le contenu à 10.
- 51 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
IV. Exercices
Exercice 2. Le clignotant
- 52 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
+5 v
Alimentation
stabilisée 5 V
2
Inter 1 Inter 0
R1 1k
1
R6 R5 R4 3 X 470
+ R2 R3
C1 1k 1k U1
1uF
17 6
18 RA0 RB0/INT 7
1 RA1 RB1 8
2 RA2 RB2 9
0 0 0 0 3 RA3 RB3 10
RA4/T0CLK RB4 11 LV LJ LR
16 RB5 12
15 OSC1/CLK RB6 13
OSC2/CLKOUT RB7
4
MCLR
Q1 14
VDD 0
PIC16F84
R7
4 MHz
+ C2
C3 15pF C4 15pF 10uF
R8 LR
0 0 0
R9 LJ
0
LV
3 X 470
Fig.5
- 53 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
COMMENTAIRES
Etat initial
On utilise les registres :
Déclaration des variables utilisées retard_1, retard_2, retard_3.
Initialisation des feux au signal rouge On impose un signal rouge aux deux feux
tricolores.
Le bouton
marche-arrêt NON On vérifie que l’interrupteur «Marche» est
est appuiyé ? appuyé pour lancer le programme.
OUI
NON
Fonctionnement normal
Appel de la temporisation longue
Fig. 6
- 54 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Nom du projet : tricolor
;
; Auteur : V.TOURTCHINE
; Date : 09/2009
; Microcontrôleur : Microchip PIC 16F84A
; Langage : Assembleur
; IDE : Microchip MPLAB
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxx
; Processeur
;xxxxxxxxxxx
List p=16F84A
#include <p16F84A.inc>
;xxxxxxxxxxxxxxxxxxxxxx
; Bits de configuration
;xxxxxxxxxxxxxxxxxxxxxx
;xxxxxx
; Macro
;xxxxxx
LRon_1 macro
bsf LR_1
endm
LJon_1 macro
bsf LJ_1
endm
LVon_1 macro
bsf LV_1
endm
LRon_2 macro
bsf LR_2
endm
LJon_2 macro
bsf LJ_2
endm
LVon_2 macro
bsf LV_2
endm
;xxxxxxxxxxxxxxxxxxxxxxxxxxx
; Déclaration des variables
;xxxxxxxxxxxxxxxxxxxxxxxxxxx
CBLOCK 0x0C
retard_ct : 1
retard_lg : 1
compte_1 : 1
compte_2 : 1
ENDC
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Définition des consrantes
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#DEFINE LR_1 PORTB,0
- 55 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
;xxxxxxxxxxxxxxxxxxxx
; Démarrage sur reset
;xxxxxxxxxxxxxxxxxxxx
org 0x0000
goto start
;xxxxxxxxxxxxxxx
; Initialisation
;xxxxxxxxxxxxxxx
start
bank0
clrf PORTA
clrf PORTB
bank1
movlw B'00000011'
movwf TRISA
movlw B'00000000'
movwf TRISB
bank0
clrf PORTA
clrf PORTB
movlw d'6'
movwf retard_lg
movlw d'2'
movwf retard_ct
clrf compte_1
clrf compte_2
goto début
;xxxxxxxxxxxxxxxxxxxx
; Programme principal
;xxxxxxxxxxxxxxxxxxxx
début
btfss Inter0
goto début
btfsc Inter1
goto clignote
call STOP
call route_1avert
call route_1
call J_1
call STOP
call route_2avert
call route_2
call J_2
goto début
- 56 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
boucle_2lg
decfsz compte_2,f
goto boucle_1lg
return
tempo_ct
movlw d'100'
movwf compte_1
movf retard_ct,w
movwf compte_2
boucle_1ct
nop
decfsz compte_1,f
goto boucle_1ct
movlw d'100'
movwf compte_1
boucle_2ct
decfsz compte_2,f
goto boucle_1ct
return
- 57 -
V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB
--------------------------------------------------------------------------------------------------------------------------------------
clrf PORTB
LRon_1
LRon_2
LJon_2
call tempo_ct
return
END
- 58 -