You are on page 1of 59

V.Tourtchine. Microcontrleur de la famille PIC.

Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------MINISTERE DE LENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE

UNIVERSITE MHAMED BOUGARA DE BOUMERDES


FACULTE DES SCIENCES
Dpartement de Physique

Spcialit : InfoTronique

V.TOURTCHINE

MICROCONTROLEUR DE LA FAMILLE PIC


Support de cours & Prise en main du logiciel MPLAB

Manuscrit labor selon le programme officiellement agre et confirm par le Conseil


Scientifique de la Facult des Sciences

BOUMERDES - 2009

-0-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

I. LES MICROCONTROLEURS
1.1 Quest ce quun microcontrleur (C):
Cest un ordinateur mont dans un circuit intgr. Les avances
technologiques en matire dintgration, ont permis dimplanter sur une puce de
silicium de quelques millimtres carrs la totalit des composants qui forment la
structure de base dun ordinateur.
Comme tout ordinateur, on peut dcomposer la structure interne dun
microprocesseur en trois parties :
-Les mmoires
-Le processeur
-Les priphriques
Les mmoires sont charges de stocker le programme qui sera excut
ainsi que les donnes ncessaires et les rsultats obtenus.
Le processeur est le cur du systme puisquil est charg dinterprter les
instructions du programme en cours dexcution et de raliser les oprations
quelles contiennent .Au sein du processeur, lunit arithmtique et logique
ALU interprte, traduit et excute les instructions de calcul.
Les priphriques ont pour tche de connecter le processeur avec le
monde extrieur dans les deux sens. Soit le processeur fournit des
informations vers lextrieur (priphrique de sortie), soit il en reoit
(priphrique dentre).
Les PICs sont des composants RISC (Reduce Instructions Construction Set),
ou encore composant jeu dinstructions rduit. L'avantage est que plus on rduit le
nombre dinstructions, plus facile et plus rapide en est le dcodage, et plus vite le
composant fonctionne.
La famille des PICs est subdivise en 3 grandes familles : La famille BaseLine, qui utilise des mots dinstructions 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 numro :
Les 2 premiers chiffres indiquent la catgorie du PIC, 16 indique un PIC MidRange.
Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner
avec une plage de tension beaucoup plus tolrante.
Vient en suite une ou deux lettres pour indiquer le type de mmoire programme :
- C indique que la mmoire programme est une EPROM ou plus rarement une
EEPROM
- CR pour indiquer une mmoire de type ROM
- F pour indiquer une mmoire de type FLASH.

On trouve ensuite un nombre qui constitue la rfrence du PIC.

-1-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

On trouve ensuite un tiret suivi de deux chiffres indiquant la frquence dhorloge


maximale que le PIC peut recevoir.

1.2 Intrt des microcontrleurs :


Les microcontrleurs sont de taille tellement rduite quils peuvent tre sans
difficult implants sur lapplication mme quils sont censs piloter. Leur prix et leurs
performances simplifient normment la conception de systme lectronique et
informatique.
On peut encore prciser :
Les performances sont identiques voir suprieurs ses concurrents.
Trs utilis donc trs disponible.
Les outils de dveloppement sont gratuits et tlchargeables sur le WEB.
Le jeu d'instruction rduit est souple, puissant et facile matriser.
Les versions avec mmoire flash prsentent une souplesse d'utilisation et des
avantages pratiques indniables.
La communaut des utilisateurs des PICs est trs prsente sur le WEB. On
trouve sur le Internet quasiment tout ce dont on a besoin, tutoriaux pour
dmarrer, documents plus approfondis, schmas de programmeurs avec les
logiciels qui vont avec, librairies de routines, forums de discussion . . .
Lutilisation des microcontrleurs ne connat de limite que lingniosit des
concepteurs, on les trouve dans nos cafetires, les magntoscopes, les radios

II. PRESENTATION GENERALE DU PIC 16F84


Nous nous limiterons dans ce support de cours la famille Mid-Range et
particulirement au PIC 16F84, sachant que si on a tout assimil, on pourra
facilement passer une autre famille, et mme un autre microcontrleur.
Donc, un 16F84-04 est un PIC Mid-Range dont la mmoire programme est de
type FLASH de rfrence 84 et capable daccepter une frquence dhorloge de
4MHz.
Notez que les PICs sont des composants STATIQUES, cest dire que la
frquence dhorloge peut tre abaisse jusque larrt complet sans perte de donnes
et sans dysfonctionnement. Une version 10 peut donc toujours tre employe sans
problme en lieu et place dune 04. Pas linverse, naturellement.
Le PIC 16F84 est un microcontrleur 8 bits. Il dispose donc d'un bus de
donnes de huit bits. Puisquil traite des donnes de huit bits, il dispose dune
mmoire de donne dans laquelle chaque emplacement (dfini par une adresse)
possde huit cases pouvant contenir chacune un bit.
Lorganisation gnrale du PIC 16F84 est compose par 4 blocs principaux
comme le montre la figure 1 :
-Mmoire de programme
-Mmoire de donnes
-Processeur
-Ressources auxiliaires (priphriques)
La mmoire de programme contient les instructions pilotant lapplication
laquelle le microcontrleur est ddi. Il sagit dune mmoire non volatile ( elle garde
son contenu, mme en labsence de tension ), elle est de type FLASH cest dire
-2-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

quelle peut tre programme et efface par lutilisateur via un programmateur et un


PC. La technologie utilise permet plus de 1000 cycles deffacement et de
programmation. Pour le PIC 16F84 cette mmoire est dune taille de 1024*14 bits,
cest dire quelle dispose de 1024 emplacements (de 000h 3FFh) contenant
chacun 14 cases car dans le cas du PIC, les instructions sont codes sur 14 bits. On
peut donc stocker 1024 instructions.

Fig.1
La mmoire de donne est spare en deux parties :
-une mmoire RAM de 68 octets puisque le bus de donne est de huit bits.
Cette RAM est volatile (les donnes sont perdues chaque coupure de courant). On
peut y lire et crire des donnes.
-une mmoire EEPROM de 64 octets dans laquelle on peut lire et crire des
donnes (de huit bits soit un octet) et qui possde lavantage dtre non volatile (les
donnes sont conserves mme en labsence de tension). La lecture et lcriture
dans cette mmoire de donnes sont beaucoup plus lentes que dans la mmoire de
donnes RAM.
Le processeur est form de deux parties :
-une unit arithmtique et logique (ALU) charge de faire des calculs.
-un registre de travail not W sur lequel travail lALU.
Les ressources auxiliaires qui sont dans le cas du PIC16F84
- ports dentres et de sorties.
- temporisateur.
- interruptions
- chien de garde
- mode sommeil
Ces ressources seront analyses dans la suite du cours.

-3-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

III. ARCHITECTURE DU PIC 16F84


3.1 Brochage et caractristiques principales
Le PIC16F84 est un circuit intgr de 18 broches (Fig. 2) :

Fig.2
Lalimentation du circuit est assure par les pattes VDD et VSS. Elles
permettent lensemble 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 lalimentation qui doit dlivrer une tension continue comprise
entre 3 et 6 Volts.
Le microcontrleur est un systme qui excute des instructions les
unes aprs les autres une vitesse (frquence) qui est fixe par une horloge
interne au circuit. Cette horloge doit tre stabilise de manire externe au
moyen dun cristal de quartz connect aux pattes OSC1/CLKIN (patte 16) et
OSC2/CLKOUT (patte 15).
La patte 4 est appele MCLR. Elle permet lorsque la tension
applique est gale 0V de rinitialiser le microcontrleur. Cest dire que si
un niveau bas (0 Volt) est appliqu sur MCLR le microcontrleur sarrte,
place tout ses registres dans un tat connu et se redirige vers le dbut de la
mmoire de programme pour recommencer le programme au dbut (adresse
dans la mmoire de programme : 0000).
A la mise sous tension, la patte MCLR tant zro, le programme dmarre
donc ladresse 0000,( MCLR=Master CLear Reset ).
V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

Les broches RB0 RB7 et RA0 RA4 sont les lignes


dentres/sorties numriques. Elles sont au nombre de 13 et peuvent tre
-4-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

configures en entre ou en sortie. Ce sont elles qui permettent au


microcontrleur de dialoguer avec le monde extrieur (priphriques).
Lensemble des lignes RB0 RB7 forme le port B et les lignes RA0 RA4
forment le port A. Certaines de ces broches ont aussi dautres fonctions
(interruption, timer).

3.2 Structure interne


La structure interne du PIC16F84 est donne figure 3 : (structure HARVARD :
la mmoire de programme et la mmoire de donnes sont spares contrairement
l'architecture Von Neuman qui caractrise d'autres fabricants de microcontrleurs).

Fig.3

On retrouve sur ce schma la mmoire de programme, la mmoire RAM de


donnes, la mmoire EEPROM, les ports A et B, ainsi que la partie processeur avec

-5-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

lUAL et le registre de travail W (World). Nous allons tudier prsent plus en dtail
le fonctionnement du PIC.

3.2 Principe de fonctionnement du PIC


Un microcontrleur excute des instructions. On dfinit le cycle instruction
comme le temps ncessaire lexcution dune instruction. Attention de ne pas
confondre cette notion avec le cycle dhorloge qui correspond au temps ncessaire
lexcution dune opration lmentaire (soit un coup d'horloge).
Une instruction est excute en deux phases :
la phase de recherche du code binaire de linstruction stock dans la
mmoire de programme
la phase dexcution ou le code de linstruction est interprt par le
processeur et excut.
Chaque cycle instruction dure 4 coup dhorloge comme le montre la figure 4 :

Fig.4
On pourrait donc croire quun cycle instruction dure 8 cycles dhorloge mais
larchitecture particulire du PIC lui permet de rduire ce temps par deux.
En effet, comme les instructions issues de la mmoire de programme circulent
sur un bus diffrent de celui sur lequel circulent les donnes, ainsi le processeur peut
effectuer la phase de recherche dune instruction pendant quil excute linstruction
prcdente (voir les figure 5 et 6).

Fig.5

-6-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Fig.6

3.4 Droulement dun programme


Le droulement dun programme seffectue de faon trs simple.
A la mise sous tension, le processeur va chercher la premire instruction qui
se trouve ladresse 0000 de la mmoire de programme, lexcute puis va chercher
la deuxime instruction ladresse 0001 et ainsi de suite (sauf cas de saut ou
dappel de sous programme que nous allons voir plus loin). On parle de
fonctionnement squentiel.
La figure 7 va nous permettre de mieux comprendre le fonctionnement :

Fig. 7

-7-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

On constate sur cette figure que la mmoire de programme contient


1024 emplacements (3FF en hexadcimale) contenant 14 bits (de 0 13).
Une instruction occupe un emplacement qui est dfini par une adresse. Le
processeur peut alors slectionner l'emplacement souhait grce au bus
dadresse et il peut lire son contenu (ici linstruction) grce son bus
dinstruction (voir figure 6). Cet adressage seffectue laide dun compteur
ordinal appel PC qui lors de la mise sous tension dmarre zro puis
sincrmente de 1 tous les quatre coups dhorloge, on excute bien ainsi les
instructions les unes la suite des autres.
Mais il arrive que dans un programme on fasse appel un sous
programme dont ladresse de linstruction ne se trouve pas juste aprs celle
qui est en train dtre excute. Cest le rle de la pile qui sert emmagasiner
de manire temporaire ladresse dune instruction. Elle est automatiquement
utilise chaque fois que lon appelle un sous programme et elle permet une
fois que lexcution du sous programme est termine de retourner dans le
programme principal juste aprs lendroit o lon a appel le sous programme.
On constate que cette pile possde huit niveaux, cela signifie quil nest pas
possible dimbriquer plus de huit sous programmes, car au-del de huit, le
processeur ne sera plus capable de retourner ladresse de base du
programme principal.
Ladresse 0000 est rserve au vecteur RESET, cela signifie que
cest cette position que lon accde chaque fois quil se produit une
rinitialisation (0 volts sur la patte MCLR). Cest pour cette raison que le
programme de fonctionnement du microcontrleur doit toujours dmarrer
cette adresse.
Ladresse 0004 est assigne au vecteur dinterruption et fonctionne
de manire similaire celle du vecteur de Reset. Quand une interruption est
produite et valide, le compteur ordinal PC se charge avec 0004 et
linstruction stocke cet emplacement est excute.

3.5 La mmoire de donnes RAM


Si lon regarde la mmoire de donne RAM, on saperoit que celle-ci est un
peu particulire comme le montre la figure 8 :

-8-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Fig. 8

On constate en effet que cette mmoire est spare 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 rservs pour SFR (Special File Registre). Ces emplacements
sont en effet utiliss par le microcontrleur pour configurer lensemble de son
fonctionnement. On les appelle registres spcifiques et nous verrons au chapitre
suivant leurs rles.
Le bus dadresse qui permet dadresser la RAM est compos de 7 fils ce qui
veut dire quil est capable dadresser 128 emplacements diffrents. Or, chaque page
de la RAM est compose de 128 octets, le bus dadresse ne peut donc pas accder
aux deux pages, cest pourquoi on utilise une astuce de programmation qui permet
de diriger le bus dadresse soit sur la page 0, soit sur la page 1. Cela est ralis
grce un bit dun registre spcifique (le bit RP0 du registre STATUS) dont nous
verrons le fonctionnement plus loin.
La RAM de donnes proprement dite se rduit donc la zone note GPR
(Registre usage gnrale ) qui stend de ladresse 0Ch (12 en dcimale jusqu
-9-

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

4Fh (79 en dcimale soit au total 68 registres en page 0 et autant en page 1, mais
on constate que les donnes crites en page 1 sont rediriges en page 0 cela
signifie quau final lutilisateur dispose uniquement de 68 registres (donc 68 octets de
mmoire vive) dans lesquels il peut crire et lire volont en sachant qu la mise
hors tension, ces donnes seront perdues.

3.6 Les registres


Nous avons vu au chapitre prcdent que la mmoire de donnes RAM
contenait des registres spcifiques qui permettent de configurer le PIC, nous allons
les dtailler un un et voir comment on peut accder la page 0 ou la page 1. Afin
de faciliter la comprhension, les registres les plus utiliss sont encadrs et
enfoncs.
adresse 00 et 80 ,INDF . Cette adresse ne contient pas de registre
physique, elle sert pour ladressage indirect.
adresse 01 , TMR0 . Contenu du Timer (8 bits). Il peut tre incrment par
lhorloge (tous les 4 coups d'horloge) ou par la broche RA4.
adresse 02 et 82 , PCL .8 bits de poids faibles du compteur ordinal PC. Les
5 (13-8) bits de poids forts sont dans PCLATH.
adresse 03 et 83 , STATUS Registre dtat .
Les cinq bits de poids faible de ce registre sont en lecture seule, ce sont des
tmoins (drapeaux ou flag en anglais) caractrisant le rsultat de lopration
ralise par lUAL. Le bit RP0 est lui en lecture /criture et cest lui qui permet
de slectionner la page dans la mmoire RAM.
Si RP0=0 on accde la page 0 et si RP0=1 on accde la page 1 .
RP0

TO/

PD/

DC

Au reset, seul le bit RP0 de slection de page est fix (RP0=0 : page 0)
TO/ (Time Out) : dbordement du timer WDT
PD/ : (Power Down) caractrise lactivit du chien de garde WDT
Z

(Zro) rsultat nul pour une opration arithmtique et logique.

DC
C

(Digit Carry) retenue sur un quartet (4 bits)


(Carry) retenue sur un octet (8 bits).

adresse 04 et 84 , FSR . Registre de slection de registre : contient


ladresse dun autre registre (adressage indirect)
adresse 05 , PORTA . Ce registre contient ltat des lignes du port A (voir
chapitre sur les ports).
adresse 06 , PORTB . Ce registre contient ltat des lignes du port B (voir
chapitre sur les ports).
- 10 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

adresse 08 , EEDATA .Contient un octet lu ou crire dans lEEPROM de


donnes.
adresse 09 , EEADR . Contient ladresse de la donne lue ou crite dans
lEEPROM de donnes.
adresse 0A et 8A, PCLATH . Voir ladresse 02 PCL.
adresse 0B et 8B , INTCON .
Contrle des 4 interruptions
GIE

EEIE T0IE INTE RBIE

T0IF INTF

RBIF

Masques :
GIE : (Global Interrupt Enable) : masque global dinter.
EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM.
T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoque par le
dbordement du TIMER0
INTE: (Interrupt Enable) autorise linterruption provoque par un changement
d'tat sur broche RB0/INT
RBIE: (RB Interrupt Enable) autorise les interruptions provoques par un
changement d'tats sur l'une des broches RB4 RB7. Si ces bits sont mis 1,
ils autorisent les interruptions pour lesquels ils sont ddis.
Drapeaux :
T0IF : (Timer 0 Interrupt Flag) dbordement du TIMER
INTF ( Interrupt Flag) interruption provoque par la broche RB0/INT
RBIF ( RB Interrupt Flag) interruption provoque par les broches RB4-RB7.
adresse 81 , OPTION
8 bits (tous 1 au RESET) affectant le comportement des E/S et de TIMER.
RBPU INTEDG RTS RTE PSA PS PS1
2
1

PS
0

RBPU/ (RB Pull-Up) Rsistances de tirage Vdd des entres du port B (voir
le dtail du fonctionnement au chapitre port). Si RBPU=0 les rsistances de
Pull-Up sont connectes en interne sur l'ensemble du port B.

- 11 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

INTEDG (Interrupt Edge) slection du front actif de linterruption sur RB0/INT


(1 pour front montant et 0 pour front descendant).
RTS (Real Timer Source) slection du signal alimentant le timer 0 : 0 pour
horloge interne, 1 pour RA4/T0CLK
RTE (Real Timer Edge) slection du front actif du signal timer (0 pour front
montant).
PSA (Prescaler Assignment) 0 pour Timer 0 et 1 pour chien de garde WDT.
PS20 (PreScaler 210) slection de la valeur du diviseur de frquence pour
les timers.
adresse 85 , TRISA . Direction des donnes pour le port A : 0 pour sortir et
1 pour entrer (voir chapitre sur les ports).
adresse 86 , TRISB . Direction des donnes pour le port B : 0 pour sortir et
1 pour entrer (voir chapitre sur les ports).
adresse 88 , EECON1 Contrle le comportement de lEEPROM de
donnes.
EEIF

WRERR WREN WR

RD

EEIF (EEProm Interrupt Flag) passe 1 quand lcriture est termine.


WRERR (WRite Error) 1 si erreur dcriture.
WREN (WRite Enable) : 0 pour interdire lcriture en EEPROM de donnes.
WR (WRite) 1 pour crire une donne. Bit remis automatiquement 0
RD (ReaD) : 1 pour lire une donne. Bit remis automatiquement 0
adresse 89 , EECON2 . Registre de scurit dcriture en EEPROM de
donnes.
Une donne ne peut tre crite quaprs avoir crit successivement 0x55 et
0xAA dans ce registre.

3.7 Les ports dentres/sorties


Le PIC16F84 est quip de 13 lignes dentres/sorties rparties en deux ports :
-le port A : RA0 RA4
-le port B : RB0 RB7
Chaque ligne peut tre configure soit en entre, soit en sortie, et ceci
indpendamment lune de lautre. Pour cela on utilise les registres TRISA et TRISB.
Le bit de poids faible (b0) du registre TRISA correspond la ligne RA0, le bit
b1 de TRISA correspond RA1 et ainsi de suite. Il en est de mme pour le port B et
le registre TRISB (b0 de TRISB correspond RB0 b7 correspond RB7).
- 12 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Si lon veut placer une ligne en sortie il suffit de mettre le bit correspond dans
TRISA ou TRISB 0 ( retenir : 0 comme Output = sortie).
Si lon veut placer une ligne en entre, il suffit de placer le bit correspondant
dans TRISA ou TRISB 1 ( retenir : 1 comme Input = entre).
Les bits des deux registres PORTA et PORTB permettent soit de lire ltat
dune ligne si celle-ci est en entre, soit de dfinir le niveau logique dune ligne si
celle-ci est en sortie.
Lors dun RESET, toutes les lignes sont configures en entres.

Important :
Particularit du PORTA :
les bits b7 b5 des registres TRISA et PORTA ne correspondent rien car il ny
a que 5 lignes (b0 b4). RA4 est une ligne collecteur ouvert, cela veut dire
que configure en sortie cette broche assure 0 Volt ltat bas, mais qu ltat
haut, il est ncessaire de fixer la valeur de la tension grce une rsistance de
tirage (pull up en anglais)
Particularit du PORTB :
il est possible de connecter de faon interne sur chaque ligne une rsistance de
tirage (pull up) dont le rle consiste fixer la tension de la patte (configur en
entre) un niveau haut lorsque quaucun signal nest appliqu sur la patte en
question. Pour connecter ces rsistances, il suffit de placer le bit RBPU/ du
registre OPTION 0.

3.8 Le Timer
Dans la majeure partie des applications, il est ncessaire de contrler le
temps; afin de ne pas occuper le microcontrleur qu' cette tche (boucle de
comptage qui monopolise le micro), on le dcharge en utilisant un timer. Le pic
16F84 dispose de deux timers, un usage gnral (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 incrment chaque coup
d'horloge jusqu' ce que le dbordement ait lieu (passage de FF 00).
Le principe est reprsent figure 9 :

Fig.9
Le TMR0 peut remplir deux fonctions:
-Temporisateur ou contrle du temps. Son entre d'incrmentation est
alors l'horloge qui correspond au cycle instruction (Fosc/4). Il est
possible d'utiliser un prdiviseur de frquence que nous verrons plus
loin.

- 13 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

-Compteur d'vnements. Dans ce cas les d'impulsions d'entres du


timer sont fournies par la patte RA4/TOCK1 le choix s'effectue grce au
bit RTS du registre OPTION.
Le pic 16F84 dispose d'un diviseur de frquence qui peut tre assign soit au
chien de garde WDG, soit au TMR0 (uniquement un la fois). L'assignation du
prdiviseur se fait grce au bit PSA du registre OPTION.
La structure interne du TMR0 est donc la suivante (figure 10)

Fig.10
Suivant que le prdiviseur est assign au chien de garde ou au TMR0, la
valeur de la prdivision n'est pas la mme, il faut donc tre vigilant lors de la
programmation comme le montre la figure 11.

Fig.11

- 14 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

3.9 Mise en oeuvre


Lutilisation et la mise en uvre trs simple des PICs les a rendus
extrmement populaire au point que la socit qui les fabrique (MICROCHIP) est en
passe de devenir le leader mondial dans le domaine des microcontrleurs devant
MOTOROLA et INTEL.
Il suffit dalimenter le circuit par ses deux broches VDD et VSS, de fixer sa
vitesse de fonctionnement laide dun quartz (figure12) et dlaborer un petit
systme pour permettre de rinitialiser le microcontrleur sans avoir couper
lalimentation (figure 13).

Fig.12
Fig.13
Il suffit ensuite dcrire le programme en langage assembleur sur un
ordinateur grce au logiciel MPLAB de MICROCHIP (logiciel gratuit) puis de le
compiler pour le transformer en langage machine et le transfrer dans le PIC grce
un programmateur.
Lors de la mise sous tension, tous les registres spcifiques sont placs dans
un tat dtermin comme le montre la figure 14

u = unchanged ; x = unknown ; - =unimplemented (read as 0);


q = value depends on condition

Fig.14
- 15 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Il ne nous reste plus qu voir le jeu dinstruction de programmation en


assembleur du PIC et cest l que rside tout lintrt puisquil ne dispose que de 35
instructions qui lui permettent de raliser toutes les tches.

IV. JEU DINSTRUCTIONS DU PIC 16F84


Afin de comprendre la fonction de chaque instruction, la notation adopte pour
les donnes et adresses manipules par les instructions est fort simple et est la
suivante :
-f
reprsente un registre
-b

reprsente un numro de bit en sachant que 0 correspond toujours au


bit de poids faible (le plus droite dans le registre)

-k
reprsente une donne aussi appele littrale
Un certain nombre dinstructions (ADDWF, ANDWF, etc..) utilise une notation
spciale prsente sous la forme :
ADDWF

f, d

O f indique le registre et o d peut prendre deux valeurs (0 ou


1), ce qui change le comportement de linstruction. Si d est 0, le
rsultat est plac dans le registre de travail W, la valeur dans le
registre f est alors inchange, alors que si d est 1, le rsultat
est plac dans le registre f.

Un autre type dinstruction mrite quelques claircissements, ce sont les


instructions de branchement conditionnel. Prenons comme exemple :
BTFSC

f, b

Qui va vouloir dire (Bit Test File Skip if Clare) qui signifie que lon
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 teste nest pas
ralise, le programme continue alors son droulement
normalement en squence avec linstruction juste en dessous.
-Soit le bit test vaut 0, donc la condition teste est ralise et le
programme saute linstruction qui suit le BTFSC dans le
programme.

Les 35 instructions sont donc les suivantes :


BITS
INSTRUCTION

SYNTAXE

OPERATION

dtat
du registre
STATUS
affectes

dure

CYCLE

W+kW
ADDLW
(Add Literal to W)

ADDLW

On ajoute au registre de
travail la valeur k et on
place le rsultat dans le
registre de travail W

- 16 -

C, DC, Z

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

BITS
INSTRUCTION

SYNTAXE

OPERATION

W+ff si d=1
W+fW si d=0
ADDWF
(Add W to F)

ADDWF

f, d

dtat
du registre
STATUS
affectes

dure

CYCLE

ou

On ajoute le contenu de
W et le contenu de f et on
place le rsultat dans f si
d=1 ou dans W si d=0

C, DC, Z

C, DC, Z

aucuns

aucuns

W ET k fW
ANDLW
(And Literal and W)

ANDLW

On effectue un ET logique
entre k et et le contenu de
W, et on place le rsultat
dans le registre de travail
W

W ET ff si d=1 ou W
ET fW si d=0
ANDWF
( And W with F )

ANDWF

f, d

BCF
(Bit Clear F)

BCF

f, b

BSF
(Bit Set F)

BSF

On effectue un ET logique
entre le contenu de W et
le contenu de f , on place
le rsultat dans W si d=0
ou dans f si d=1

0b (f)
On met 0 le bit b du
registre f

1b (f)
f, b
On met 1 le bit b du
registre f

saut de linstruction qui


suit si b (f)=0
BTFSC
(Bit Test,
Clear)

BTFSC
Skip

f, b

if

Si le bit b de f est nul,


linstruction qui suit celleci est ignore et traite
comme un NOP. Dans ce
cas et dans ce cas
seulement,
linstruction
BTFSC demande deux
cycles pour sexcuter.

aucuns

1 ou 2

aucuns

1 ou 2

saut de linstruction qui


suit si b (f)=1

BTFSS
(Bit Test, Skip if Set)

BTFSS

f, b

Si le bit b de f est 1,
linstruction qui suit celleci est ignore et traite
comme un NOP. Dans ce
cas et dans ce cas

- 17 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------seulement,
linstruction
BTFSS demande deux
cycles pour sexcuter.

BITS
INSTRUCTION

SYNTAXE

OPERATION

dtat
du registre
STATUS
affectes

dure

CYCLE

appeler
un
sou
programme (label)
CALL
(subroutine Call)

CLRF
(Clear F)

CALL

label

CLRF

On sauvegarde ladresse
de retour dans la pile puis
on appelle le sous
programme dfinit avec
ltiquette label

aucuns

aucun

1 ou 2

0F
On met le contenu du
registre f 0 et on
positionne Z

0W
CLRW
(Clear W)

On met le contenu du
registre W 0 et on
positionne Z

CLRW

0WDT et 0pr
diviseur du Timer
CLRWDT
(Clear Watch Dog
Timer)

On met le contenu du
registre du timer chien de
garde 0 ainsi que le pr
diviseur

CLRWDT

/ff si d=1 ou /fW si


d=0
COMF
(Complement F)

COMF

f, d

On
complmente
le
contenu du registre f bit
bit , le rsultat est plac
dans f si d=1 , dans W si
d=0.

f-1f si d=1 ou f-1W


si d=0
DECF
(Decrement F)

DECF

f, d

On diminue le contenu du
registre f dune unit, le
rsultat 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

DECFSZ

DECFSZ

f, d

On diminue le contenu du
registre f dune unit, le
rsultat est plac dans f si

- 18 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------d=1, dans W si d=0 (dans


ce
cas
f
reste
inchang).Si le rsultat
est
nul,
linstruction
suivante est ignore et
dans ce cas, cette
instruction dure deux
cycles.

(Decrement F, Skip if
Zero)

BITS
INSTRUCTION

GOTO
(branchement
inconditionnel)

SYNTAXE

GOTO

label

On effectue un saut dans


le programme pour aller
ladresse point par le
label prcis dans GOTO

f+1f si d=1
f+1W si d=0
INCF
(Increment F)

INCF

f, d

dtat
du registre
STATUS
affectes

OPERATION

dure

CYCLE

aucun

aucun

1 ou 2

ou

On augment le contenu
du registre f dune unit,
le rsultat 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

INCFSZ
(Increment F, Skip if
Zero )

INCFSZ

f, d

On augmente le contenu
du registre f dune unit,
le rsultat est plac dans f
si d=1, dans W si d=0
(dans ce cas f reste
inchang).Si le rsultat
est
nul,
linstruction
suivante est ignore et
dans ce cas, cette
instruction dure deux
cycles.

W OU k W
IORLW

IORLW
(Inclusive
with W )

Or

literal

On effectue un OU
logique entre le contenu
de W et le littral k, le
rsultat est plac dans W.

W OU ff si d=1 ou W
OU fW si d=0
IORWF
(Inclusive Or W with F)

IORWF

f, d

On effectue un OU entre
le contenu de W et le
contenu de f , on place le
rsultat dans f si d=1,
dans W si d=0

- 19 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------ff si d=1 ou fW si
d=0
MOVF ( Move F )

MOVF

f,d

On dplace le contenu de
f dans f si d=1 ou de f
dans W si d=0, a permet
en fait de tester le
contenu de f par rapport
0 et de positionner le bit Z

BITS
INSTRUCTION

SYNTAXE

OPERATION

dtat
du registre
STATUS
affectes

dure

CYCLE

kW
MOVLW
(Move Literal to W )

MOVLW

MOVWF
(Move W to F )

MOVWF

On charge le contenu de
W avec le littral k

aucun

aucun

aucun

aucun

aucun

aucun

Wf
On charge le contenu de f
avec le contenu de W

nant
NOP
(No Operation)

NOP

On
ne
fait
que
consommer du temps
machine (un cycle dans
ce cas)
Pile PC

RETFIE
(Return From
Interrupt )

On charge le compteur
ordinal avec la valeur qui
se trouve au sommet de
la pile pour revenir au
programme
principal
lorsque lexcution du
sous
programme
est
termine.

RETFIE

kW, PilePC

RETLW
(Return Literal to W)

RETLW

On charge le contenu de
W avec le littral k puis on
charge
le
compteur
ordinal PC avec la valeur
qui se trouve au sommet
de la pile effectuent ainsi
un
retour
de
sous
programme.

PilePC

RETURN
(Return

RETURN

On charge le compteur
ordinal PC avec la valeur
qui se trouve au sommet
de la pile effectuent ainsi

- 20 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------un
retour
de
sous
programme. Cest un
RETLW simplifi.

from subroutine)

SLEEP ( Sleep )

0PD,
0WDT,
prdiviseur

SLEEP

1T0,
0

On place le circuit en
mode sommeil avec arrt

de loscillateur. Cette
commande est utiliser
avec
prcaution,
elle
ncessite la connaissance
du mode sommeil.

BITS
INSTRUCTION

SYNTAXE

OPERATION

dtat
du registre
STATUS
affectes

dure

CYCLE

k-WW
SUBLW
(Substract
Literal)

SUBLW
W

On soustrait le contenu du
registre W du littral k et
on place le rsultat dans
W (soustraction par la
mthode du complment
2).

from

C, DC, Z

C, DC, Z

aucun

f-WW si d=0 ou fWf si d=1


SUBWF
(Substract W from F )

SUBWF

f, d

On soustrait le contenu du
registre W du contenu du
registre f et on place le
rsultat dans W si d=0, ou
dans f si d=1 (soustraction
par la mthode du
complment 2).

f(0-3)f(4-7) et f(47)f(0-3) rsultat dans


W ou f selon d
SWAPF
(Swap F)

SWAPF

f, d

On change les quatre


bits de poids forts avec
les quatre bits de poids
faibles et on place le
rsultat dans W si d=0, ou
dans f si d=1

W
OU
kW
XORLW
(Exclusive Or Literal
with W )

XORLW

EXCLUSIF

k
On effectue un OU
Exclusif entre W et le
littral k, le rsultat est
plac dans W

W OU EXCLUSIF fW
si d=0 ou W OU
EXCLUSIF ff si d=1

- 21 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------XORWF
(Exclusive Or W with
F)

XORWF

f, d

On effectue un OU
Exclusif entre W et le
contenu de f, le rsultat
est plac dans W si d=0,
sinon il est plac dans f.

RLF (Rotate Left F through carry)


Syntaxe :

RLF

f,d

C
Opration :

Registre f

On effectue une rotation gauche de un bit du contenu du registre f en passant par


le bit de retenu C. Si d=1 le rsultat est plac dans f, si d=0, le rsultat est plac dans
W
Bit dtat du registre STATUS affect : C
Dure :

1 cycle

RRF (Rotate Right F through carry)


Syntaxe :

RRF

f, d

Opration :
7

C
Registre f

On effectue une rotation droite de un bit du contenu du registre f en passant par le


bit de retenu C. Si d=1 le rsultat est plac dans f, si d=0, le rsultat est plac dans
W
Bit dtat du registre STATUS affect : C
Dure :

1 cycle
- 22 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

V. LES OUTILS DE DEVELOPPEMENT


5.1 Deux mot sur MPLAB
MPLAB peut tre tlcharger directement du site Web http://www.microchip.com

Les tapes ncessaires permettant de voir un programme s'excuter sur un PIC


sont :
Ecrire un programme en langage assembleur dans un fichier texte et le
sauvegarder avec l'extension .asm
Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le
rsultat est un fichier avec l'extension .hex contenant une suite d'instruction
comprhensible par le pic.
Transplanter le fichier .hex dans la mmoire programme du PIC (mmoire flash)
l'aide d'un programmateur adquat. On peut utiliser les programmateurs de
Microchip ou tout autre programmateur achet ou ralis par soit mme.
Mettre le PIC dans son montage final, mettre sous tension et admirer le travail.
Microchip propose gratuitement l'outil de dveloppement MPLAB qui regroupe
l'diteur de texte, le compilateur MPASM, un outil de simulation et le logiciel de
programmation. Le programmateur lui-mme, n'est pas gratuit.
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 mmoire flash du PIC.

5.2 Les directives de MPASM


Les directives de l'assembleur sont des instructions qu'on ajoute dans le
programme et qui seront interprtes par l'assembleur MPASM. Ce ne sont pas des
instructions destines au PIC.
5.2.1 Les directives les plus utilises
LIST : permet de dfinir un certain nombre de paramtres comme le processeur
utilis (p), la base par dfaut pour les nombres (r), le format du fichier hex
produire (f) ainsi que d'autres paramtres. Exemple :
LIST p=16F84A, r=dec, f=inhx8m
INCLUDE : permet d'insrer un fichier source. Par exemple le fichier p16f84A.inc
contient la dfinition d'un certain nombre de constante comme les noms des
registres ainsi que les noms de certain bits;
INCLUDE "p16f84A.inc"
_ _CONFIG : permet de dfinir les 14 fusibles de configuration qui seront copi
dans l'EEPROM de configuration lors de l'implantation du programme dans le PIC
(protection de code, type d'oscillateur, chien de garde et temporisation du dpart)
_ _CONFIG B'11111111111001'
_ _CONFIG H'3FF9'
si le fichier p16f84.inc a t insr, on peut utiliser les constantes prdfinies :
_ _CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF

- 23 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

EQU : permet de dfinir une constante ou une variable :


XX EQU 0x20
Chaque fois que le compilateur rencontrera XX, il la remplacera soit par la
constante 0x20. a peut tre une constante s'il s'agit d'une instruction avec
adressage immdiat, ou d'une adresse s'il s'agit d'une instruction avec adressage
direct.
#DEFINE : dfinit un texte de substitution
#DEFINE pos(x,y,z) (y-2z+x)
Chaque fois que le compilateur rencontrera le texte pos(x,y,z), il le remplacera
par (y-2z+x)
ORG : dfinit la position dans la mmoire programme partir de laquelle seront
inscrites les instructions suivantes.
DE : pour dclarer des donns qui seront stocke dans l'EEPROM de donne au
moment de
l'implantation du programme sur le PIC
ORG
0x2100
DE "Programmer un PIC, rien de plus simple", 70, 'Z'
END : indique la fin du programme
Pour plus de dtail sur les directives de MPASM, voir "MPASM USER'S GUIDE"

5.3 Format des nombres


L'assembleur reconnat les nombres en dcimal, hexadcimal, binaire ou octal. Pour
prciser la base il faut utiliser les prfixes prciss dans le tableau ci-dessous :
On peut l'aide de la directive LIST ou RADIX
dfinir un format par dfaut. Si par exemple on
place une des instructions suivantes au dbut du
programme, tous les nombres sans prfix seront
interprts en dcimal :
LIST r = dec
RADIX dec
(les radix valables sont dec, hex ou oct)

Base
Dcimal

Binaire

Prfixe
D'nnn'
.nnn
H'nn'
0xnn
nnh
B'.'

Octal

O'nnn'

Hexadci
mal

Exemple
D'36'
.36
H'24'
0x24
24h
B'0010010
0'
O'44'

5.4 Structure d'un programme crit en assembleur


Un programme crit en assembleur doit respecter une certaine syntaxe et un
certain nombre de rgles afin qu'il soit facile lire et dbuguer :
Tout ce qui commence la premire colonne est considr comme une
tiquette (label) permettant de faire des renvois et aussi des assignations de
constantes et de variables.
tout ce qui suit un point virgule est considr comme un commentaire non
interprt par le compilateur

- 24 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Un programme apparat donc comme un texte crit sur 3 colonnes :


- la colonne de gauche contient les tiquettes
- la colonne du milieu contient les linstructions
- la colonne de droite contient des commentaires
Il existe diffrentes coles indiquant comment doit tre organis un programme.
Voici un exemple d'organisation :
1) Quelques lignes de commentaire prcisant la fonction du programme.
2) Configuration, exemple :
LIST
INCLUDE
_ _CONFIG

p=16f84
"p16f84.inc"
H'3FF9'

3) Dfinition des constantes et des variables, exemple :


Microchip propose gratuitement l'outil de dveloppement MPLAB qui regroupe l'diteur
de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le
programmateur lui-mme, n'est pas gratuit.
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 mmoire flash du PIC.

Led
X
cblock
y,z
u,v,w
endc

equ
equ
0x0D

0
0x0C

4) Si le programme utilise des interruptions, mettre l'adresse 0000 (adresse


du RESET) une instruction de branchement au dbut du programme principal :
ORG
0x0
GOTO
debut
5) Ecrire la routine d'interruption l'adresse 4
ORG

0X4

crire la routine d'interruption ici


RETFIE
Si le programme est configur pour interdire les interruptions, on peut se
passer des tapes 4) et 5),
6) Ecrire les sous programmes (s'il y en a). Chaque procdure commence par
une tiquette qui reprsente son nom, et se termine par l'instruction RETURN
7) Ecrire le programme principal (commenant par l'tiquette dbut: si les
tapes 4 et 5
END

- 25 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

5.5 Rfrences
[1] PIC16F8X, document DS30430C, www.microchip.com
[2] PIC16F84a, document DS35007A, www.microchip.com
[3] Programmation des PIC, Premire partie-PIC16F84-Rvision 5, par BIGONOFF,
http://www.abcelectronique.com/bigonoff/organisation.php?2654c

- 26 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Prsentation de MPLAB:
MPLAB est un outil de dveloppement pour les PIC 16F84 et autres.
Il contient

un diteur
un assembleur
un simulateur

Il permet

La rdaction du fichier source en langage assembleur (fichier.ASM)


Sa transformation en fichier objet (fichier.HEX) prt tre charg dans la mmoire
programme du microcontrleur
Lensemble des fichiers ncessaires ces oprations est regroup dans un espace " projet "
(fichier.PJT)

1. Cration dun nouveau projet


1.1 Prparation
Crez dans votre espace disque dur (par exemple le disque C) un rpertoire o vous rangez tous
vos projets et y tappelez, titre dexemple : Projets MPLAB . Il est recommand de crez aussi un
sous rpertoire, par exemple : manip_1 , LED_clinot , manip_2 etc...

1.2 Utilisation dun tutorial Wizard pour la cration des projets


Lancez MPLAB IDE v.6.60 partir de licne reprsent ci-contre, qui se trouve
dans votre bureau.
Aprs quelques instants, vous vous retrouvez avec un cran vide avec menu et
barres doutil. Si certaine fichiers ou projets souvrent lors du dmarrage, fermez-les.

Aprs avoir lanc


MPLAB, choisissez dans
le
menu
Project
loption
Project
Wizard
(voir la figure 1).

Fig.1

- 27 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Lassistant de cration
de projet saffiche.
(Fig.2)
Cliquez sur Suivant

Fig.2

La premire tape
(Fig.3) consiste indiquer
la
rfrence
du
microcontrleur qui sera
utilis (dans notre cas
cest le PIC 16F84A).
Cliquez ensuite sur
Suivant

Fig.3

- 28 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

La seconde tape (voir la


figure 4) consiste indiquer
le langage qui sera utilis
pour la programmation.
Pour une programmation en
assembleur,
choisissez
pour la rubrique Active
Toolsuite
le
langage
Microchip
MPASM
Toolsuite
Cliquez ensuite sur
Suivant

Fig.4

Indiquer le nom
souhait pour le projet

Cliquer pour parcourir


larborescence des
rpertoires

Spcifier le rpertoire
(Projets MPLAB) et
sous rpertoire
(manip_1)

Cliquer pour
slectionner

Fig.5

- 29 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------La troisime 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)
Spcifiez le rpertoire dans la case Project Directory en utilisant le bouton Browse pour
parcourir larborescence des rpertoires. Dans notre cas cest le rpertoire Projet MPLAB et sous rpertoire manip_1 (voir la figure 5). Cliquer Select
Cliquez ensuite sur Suivant

La dernire tape 4
permet dajouter au projet un
fichier source existant (fig.6).
Dans le cas o aucun fichier
source nest incorporer au
projet, cliquez directement
sur Suivant .

Pour ajouter un fichier


source existant, parcourir
larborescence
dans
la
fentre
de
gauche,
slectionner le fichier dsir
puis cliquer sur bouton
Add . Cocher ensuite la
case situe gauche du
nom du fichier pour quil
soit copi partir de son
emplacement
dorigine
dans le rpertoire du
projet.

Cliquez ensuite sur


Suivant .

Fig.6

Lassistant de cration de
projet (fig.7) affiche un rsum
de celui-ci : contrler les
diffrentes
informations
prsentes :
a) Rfrence du
microcontrleur ;
b) Outil utilis en fonction du
langage ;
c) Rpertoire du projet.
Cliquez sur Terminer
pour valider la cration du
projet.

Fig.7

- 30 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

MPLAB affiche dans une


fentre le nom du projet
(dextension
.mcp :
MicroChipe Project). Celui-ci
mentionne ventuellement le
nom
du
fichier
source
spcifie

ltape
4
prcdente. Un double clic
sur celui-ci permet de louvrir
en vue de lditer.
Si aucun fichier existant na
t incorpor au projet
ltape 4, choisir dans le
menu
File
loption
New ou cliquer sur licne.
Une
fentre
ddition
apparat. Taper le texte du
programme
source
(en
assembleur) puis enregistrer
le fichier dans le mme
rpertoire que celui du
projet.

Incorporer ce nouveau
fichier
au
projet
en
choisissant loption Add
Files dans le menu
contextuel (obtenu par un clic
du bouton droit de la souris)
de la rubrique Source
Files .
Rechercher
puis
slectionner
le
fichier
sauvegard prcdemment.

MPLAB affiche, en plus de la fentre du projet, une fentre ddition dans laquelle on peut aisment
modifier le programme source grce la coloration syntaxique.

- 31 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

2. Ouverture dun projet existant

Louverture dun projet


existant (dextension .mcp)
peut
se
faire
en
choisissant dans le menu
Project
loption
Open ou en cliquant
sur licne verte Open
Project

3. La mise en uvre du logiciel MPLAB


3.1 La barre doutils de MPLAB

Fig.8

- 32 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------Les diffrentes icnes disponibles dans la barre doutils de MPLAB sont dfinies sur la figure 8.
Remarque : en fonction du mode de fonctionnement choisi (mode simple, mode Dbuggage ,
mode programmation), les icnes de la partie droite ne sont pas les mmes. La barre doutils
reprsente sur la figure 8 correspond au mode Dbuggage .

3.2 Les fentres de MPLAB


En plus de ces diffrentes icnes de la figure 8, plusieurs fentres peuvent tre affiches (voir la
figure 9) :
Les fentres quil est indispensable davoir en permanences ouvertes :
- projet en cours (il est impossible de la fermer)
- fichier(s) source(s) du projet : un double clic sur le nom du fichier source dans le gestionnaire de
projet permet de rouvrir celui-ci.
- Fentre de Sortie ( Output ) : les diffrents onglets permettent dafficher :
Les rsultats de la compilation (onglet Build )
Le rsultat de la recherche dans tous les fichiers source du projet (onglet Find in files )
Dans le cas o cette fentre a t ferme, cocher dans le menu View loption Output

Fig.9
Certaines fentres quil est utile dafficher dans certains cas (voir la figure 10) :
- Watch : permet dafficher le contenu de registres du microcontrleur ou de variables (choisir dans
le menu View loption Watch ).
- Special Fonction Registers : permet dafficher le contenu des registres particuliers du
microcontrleur (choisir dans le menu View loption Special Fonction Registers ).
- File Registers : permet dafficher le contenu des registres particuliers du microcontrleur (choisir
dans le menu View loption File Registers ).
- Disassembly listing : permet dafficher le listing du programme en assembleur la suite de la
compilation, associ au code objet gnr (choisir dans le menu View loption Disassembly
listing ).

- 33 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Fig.10

3.3 Les diffrentes tapes du dveloppement


Pour dvelopper une application destine tre excute par un microcontrleur PIC avec le logiciel
MPLAB seul, les diffrentes tapes sont les suivantes :
- saisie du programme source (en assembleur) grce lditeur de texte de MPLAB ;
- assemblage ou compilation du programme source ;
- dbuggage du programme, cest--dire recherche et correction des erreurs de programmation;
- programmation du microcontrleur cible pour obtenir un fonctionnement autonome de la carte
lectronique en cours de dveloppement.

3.3.1 Saisie du programme source Assemblage / Compilation


Lditeur de texte de MPLAB permet, grce la coloration syntaxique, dcrire le programme source
en assembleur.
La traduction du programme source en code objet seffectue grce licne Build (voir fig. 11).
Il est impratif dobserver le rsultat de la compilation dans longlet Build de la fentre Output
(fig.9) :
Un message derreur ( Error ) ncessite obligatoirement une modification du programme source,
la compilation ntant pas complte. Pour corriger lerreur, un double clic sur le message derreur de la
fentre Output permet darriver directement sur la ligne du programme source comportant lerreur.
Un message davertissement ( Warning , Message ) doit tre examin avec soin : dans
certains cas, il sagit dun oubli ou dune erreur dans le programme source. Cependant, un programme

- 34 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------destin tre excut par un microcontrleur comporte systmatiquement une boucle infinie qui sera
signale par un message davertissement.
Le Message BUILD SUCCEEDED indique une compilation russie (comportant ventuellement
des avertissements).

3.3.2 Mode Dbuggage


Pour dtecter dventuelles erreurs de programmation, il est ncessaire de faire excuter le
programme par le microcontrleur en mode dbuggage . Ce mode permet les diffrentes actions
suivantes :
Excution en pas pas ;
Excution fonction par fonction ;
Excution en continu ;
Excution continue jusqu une certaine ligne du programme source ( point darrt );
Affichage du contenu de registres du microcontrleur et/ou variables (valeurs actualises chaque
arrt du programme).
3.3.2.1 Passage en mode Dbuggage

Pour bnficier du mode de


fonctionnement Dbuggage ,
choisir dans le menu
Debugger loption Select
Tool puis MPLAB SIM .

Les principales icnes utilises pour le dbuggage apparaissent dans la partie droite de la barre
doutils de MPLAB :

Fig.11

- 35 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------3.3.2.2 Etapes du mode Dbuggage


La procdure habituelle est la suivante :
Lancer la compilation (ou lassemblage) du programme source aprs chaque modification de celuici : icne Build (Compile le programme) (voir la figure 11) ;
Excuter le programme soit en continu (icne Run (Lance le programme) soit en modes pas
pas (icnes Step Into, Step Over ou Step Out );
Aprs un lancement en continu du programme, larrt de celui-ci seffectue grce licne Halt ,
suivi ventuellement dun Reset .

La flche verte indique la prochaine instruction qui sera excute.

3.3.2.3 Utilisation de points darrt.


Lexcution du programme en continu ne permet pas toujours de dtecter lorigine dun
fonctionnement incorrect.
Les modes pas pas ou fonction par fonction sont parfois dune mise en oeuvre laborieuse.
Il peut alors tre judicieux dutiliser les points darrts : une ligne du programme source est
affecte dun marqueur qui dclenchera larrt du programme lorsque le microcontrleur excutera
linstruction correspondante.
La dfinition et la suppression des points darrts est ralise par un double clic sur la ligne
souhaite, ou en choisissant lors dun clic droit sur celle-ci loption Set Breakpoint ou Remove
Breakpoint .
La suppression de tous les points darrts seffectue en choisissant lors dun clic droit dans la
fentre ddition loption Breakpoints puis Remove All Breakpoints .
Remarque : un instant donn, un seul point darrt est actif ( Enable ), les ventuels autres points
darrts sont provisoirement dsactivs ( Disable ).

- 36 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Point darrt actif


Point darrt dsactiv
Suppression/Activation des points darrt

4. Exercice
4.1 Crez votre source
Une fois le projet entirement dfini, vous pouvez commencer dvelopper le code de votre
application.
Slectionnez File ->New. Vous obtenez une fentre de lditeur. Saisir le fichier ci-dessous
(fig.12) en exemple (joint sous le nom de votre projet).

4.2 Ajoutez le fichier au projet


1. Dans la fentre nom du projet.mcw slectionnez Source Files puis avec le bouton
droit faire Add. File
2. Slectionnez le fichier que vous venez de crer et de sauvegarder.
3. Cliquez sur Ouvrir.
Le nom du fichier doit apparatre dans la fentre projet au dessous de Source Files .

- 37 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Fig.12 Le fichier source

4.3 Construisez le projet


Aprs avoir configur le projet et saisi le code il est temps de construire le projet. Cela
provoquera la compilation du fichier source en utilisant la suite logicielle choisie.
Slectionnez Project -> Build All pour construire le projet. Votre fichier doit tre assembl
correctement et vous obtenez la fentre ci-dessous.

- 38 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------Sil y a eu un problme de compilation celui-ci est indiqu dans la fentre pour permettre de
retrouver les erreurs. Un double cloc sur lerreur pointe directement la ligne du programme sur laquelle
se situe lerreur.
Une fois la compilation termine le fichier debug (*.cod ou *.cof) gnr par MPLAB sera
charg. Ce fichier permet de dbouguer le code source et de visualiser les variables symboliques
dans les fentres dobservation.

4.4 Simulez le comportement du programme


4.4.1 Slectionnez Debbugger -> Select Tools -> MPLAB SIM.
4.4.2 Faites un Reset du programme; slectionnez Debugger -> Reset ou touche de
fonction F6. Une flche verte apparat gauche de la premire ligne du programme.

4.4.3

Lancez lexcution de votre programme ; faites Debugger -> Run ou F9.


Linformation Running apparat la gauche de la barre dtat.

4.4.4

Pour arrter lexcution faites Debugger -> Halt ou F5.

4.4.5

Vous pouvez aussi excuter le programme pas pas : faites Debugger -> Step
Info ou touche F7. A ce moment la flche verte pointe linstruction qui va tre
excute. A tout instant vous pouvez voir le contenu dune variable en plaant le
pointeur de la souris sur le nom de la variable.

4.5 Visualisez la fentre dobservation


Lorsque lon excute le programme il est intressant de voir voluer le contenu des registre
utiliss dans le programme. Toutes les fentres de debogage sont accessibles par le menu View.

File Rejister
Programme Memory
EEPROM
Sp. Fct. Registers
Watch
Hardware Stack
Disassembly Listing
Simulator Trace

- 39 -

Contenu de la RAM et des FER


Contenu de la mmoire programme
Contenu de la mmoire de sauvegarde en
EEPROM
Tous les registres SFR
Voir ci dessous
Contenu de la pile
Code Hex desassembl
Voir plus loin

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------Faite View -> Watch pour ouvrir une fenetre dobservation (Watch Windows).
Deux menu droulants vous permettent de
slectionner soit le contenu des registres (Add
SFR) soit le contenu des variables utiliss (Add
Symbol).
Slectionnez par exemple PORTB puis cliquez sur
Add SFR.
Faites la mme chose pour slectionner TRISB,
retard_1 et retard_2.
Vous obtenez ainsi une fentre qui vous indique le
nom, ladresse et la valeur des quatre symboles
slectionns. Laffichage de la valeur se fait par
dfaut en hexadcimal, ce mode peut tre modifi
en faisant un clic droit dans la fentre. Vous
pouvez afficher les informations sur 8, 16, 24 ou 32
bits dans les formats hexadcimaux, binaires,
dcimaux ASCII ou en nombre flottant.
Slectionnez Properties en cliquant par bouton
droit de souris sur le registre intress (retard_1).

4.6. Excution et visualisation


4.6.1

Effectuez un Reset du programme.

4.6.2

Faites excuter le programme pas pas jusqu la ligne


bsf

PORTB,0

; on allume la LED

4.6.3

Faite avancer le programme dun pas de plus et observez le changement dtat du bit 0 du
PORTB.

4.6.4

Avancez de deux pas pour voir le contenu retard_1 FF.

4.6.5

La temporisation est ralise par dcrmentation de deux variables ; pour raccourcir la dure
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.6

Excutez le programme de manire revenir la ligne (fig.13)


bcf

4.6.7

PORTB,0

; on teint la LED

Pour continuer utilisez le bouton 5 Step Over (fig.11) ceci permet dexcuter tout le sousprogramme en mode Run et de pointer linstruction suivante.

4.7 Utiliser les points darrt et le mode Trace


Ces deux modes permettent soit darrter lexcution du programme des endroits prcis
(point darrt) soit denregistrer les actions du programme (mode Trace).

- 40 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Fig.13
4.7.1 Utilisation dun point darrt
Il est souvent intressant dexcuter un programme et de larrter un endroit bien
dtermine ; ceci est possible en utilisant les points darrt.
4.7.1.1 Effectuez un Reset de lapplication.
4.7.1.2 Effectuez un clic droit sur la ligne suivante
bcf

PORTB,0

; on teint la LED

4.7.1.3 Dans le menu contextuel qui apparat choisissez Set Breakpoint. Un signal stop doit
apparatre en face de la ligne indique (fig.14).

Fig.14

- 41 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------4.7.1.4 Lancez la simulation en mode Run ; lexcution sarrte lemplacement du point


darrt pr dfini (fig.14).

Fig.15
4.7.1.5 Effectuez un Reset du programme. Selectionnez Debugger -> Stopwatch. La
fentre Stopwatch doit tre apparatre (fig.15).
4.7.1.6 Lancez la simulation en mode Run ; lexcution sarrte lemplacement du point
darrt pr dfini et dans la fentre Stopwatch vous pouvez consulter le nombre de
cycles machines et le temps dexcution en s (fig.15).

4.7.2 Utilisation du mode Trace


Ce mode permet denregistrer les actions du programme en cours dexcution et de suivre
ensuite son comportement.
4.7.2.1 Validez le mode Trace en faisant Debugger -> Setting ; choisissez ensuite longlet
Trace / Pins pour obtenir la fentre ci-dessous.

Deux cases cocher contrlent la manire dont seffectue la collecte des donnes. Si seule le
premire case est coche (Trace Enable) le simulateur enregistre les donnes en mode Run jusqu
ce quil rencontre un point darrt ou quil soit arrt manuellement. Il permettra ensuit de visualiser les
8192 dernires cycles. Si la deuxime case est aussi coche (Break Trace Buffer Full) le simulateur
enregistre les 8192 cycles dexcution et arrte la mmorisation et lexcution du code.

- 42 -

V.Tourtchine. Microcontrleur 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 linstruction excute plus les donnes qui ont t lues ou crites dans les
registres. Pour chaque instruction la trace donne ladresse du Compteur de
Programme, le code opration (Op) en hexadcimal, ltiquette sil y a lieu et
linstruction dsassemble. Les quatre colonnes suivantes montrent les donnes lues
ou crites (fig.16):
SA
Adresse Source
adresse du registre o a t lue la donne
SD
Source Data
donne lue
DA
Destination Adresse adresse du registre o a t crite la donne
DD
Data Destination
donne crite

Fig.16
La dernire colonne donne le nombre de cycles. Cela peut permettre de mesurer la
dure dexcution dune parte du programme. Si vous cliquez avec le bouton droit de
la souris dans la ligne grise du haut vous obtenez un menu qui vous permet de choisir
les colonnes afficher.

4.8 Utiliser les fonctions avances du simulateur


4.8.1 Configurez le simulateur
Aprs avoir slectionn MPLAB SIM comme outil de debogage, slectionnez Debugger ->
Settrings ; vous obtenez la fentre ci-dessous.

- 43 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------Longlet Clock permet de fixer la frquence de lhorloge pour permettre la trace du


simulateur de dfinir les dures dexcution des cycles machines et donc de mesurer des dures
dexcution de partie de programme.
Longlet Break Options donne des informations sur les points darrt. Si la case Global
Break Enable nest pas coche alors les points darrt seront inoprants. Ceci est util quand on a de
nombreux points darrts et que lon veut les invalider sans les supprimer. Remarquez la possibilit
dobserver les dpassements de la pile.
Longlet Trace/Pins a t dj vu au paragraphe 4.7.2.
Longlet Limitations indique les limitations gnrales du simulateur par rapport au
composant qui doit tre simul ; le bouton Dtails ouvre le menu daide et permet de dtaiiller les
limitations lies ,chaque composant.
4.8.2 Cration de stimulus
Les stimuli sont des pseudo signaux appliqu aux entres du processeur. Ils permettent de
simuler linfluence de lenvironnement sur le droulement du programme.
Choisissez Debugger -> Stimulus Controller pour ouvrir la fentre de la figure 17.

Fig.17
Longlet Pin Stimulus permet de dfinir les pseudo signaux que lon veut crer ; ils peuvent
tre de type :
Soit synchrones et ils sont dfinis comme des horloges dont on donne la dure ltat haut et
bas
Soit comme des signaux asynchrone actionns par clic sur le bouton Fire , ce clic
produisant leffet indiqu dans la colonne Action
Longlet File Stimulus permet de crer des fichiers de simulus qui peuvent tre
mmorises et rejous.

- 44 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

Rgle dor de la programmation des PICs : programmer en boucle.


Fonction de temporisation.
Le but de cette partie de manuscrit est de matriser la programmation en assembleur dun
PIC, en utilisant des exemples dapplications trs simples.

I. Exemple dapplication du PIC 16F84: TELERUPTEUR


Cet exemple de programmation est destin pour
apprendre les diffrentes tapes de
programmation en assembleur. Le fichier assembleur propos pour cet exemple permet de faire
allumer les LEDs connects sur le microcontrleur de la famille PIC.
La figure 1 reprsente le schma de principe du telerupteur.
Le circuit doit raliser la fonction suivante. Un appui sur un des boutons-poussoirs (B_P)
branchs sur le portA allume les 8 LEDs branchs sur le port B, une seconde lappui fait les teindre.
Remarque : pour simplifier le schma, on a reprsent un sel B_P (branch en parallle avec les
autres B_P qui peuvent tre installs ventuellement dans les diffrents endroits) et une LED.
VDD
5V
VDD
5V

R2
B_P

1k
0.1%

10uF

C4
U1
17
18
1
2
3

R3

RA0
RA1
RA2
RA3
RA4T0CKI

4
MCLR
16 OSC1CLKIN

1k
0.1%

VSS

VDD
RB0INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
OSC2CLKOUT

14
6
7
8
9
10
11
12
13
15

PIC16F84A

C1

5V

R1

220
0.1%
LED

1uF

VDD
U2

C3

C2

15pF

15pF

Fig.1

Remarque important :
Pour programmer en langage ASSEMBLEUR il faut non seulement connatre le fonctionnement de chaque
instruction, mais aussi larchitecture interne du microcontrleur, la structure de sa mmoire, les adresses des
registre spciaux, le fonctionnement de chacune de ses ressources internes, etc..
La programmation en langage ASSEMBLEUR sappuie sur des organigrammes plus travaills, et requiert plus de
rigueur et de minutie.

- 45 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------II. Approche structurelle et analyse du schma lectrique


Particularit du Bouton-Poussoir (B_P)
Les microcontrleurs sont des composants trs rapides. Ils ne fonctionnent pas la mme chelle de
temps que nous. Imaginons de nous transformer en PIC. Nous voyons alors un norme B_P.
Lorsque ce B_P est appuy, cest alors une norme barre qui vient court-circuiter deux contacts. Cette
barre est lastique. Que voit le PIC ? Il voit une norme barre flexible qui tombe dune norme hauteur sur
deux contacts mtalliques. Une fois la barre est en contact, elle rebondit plusieurs fois (cest le rgime
transitoire). A chaque appui sur le B_P, le PIC voit donc une srie de fermeture et douverture du B_P, au lieu
dune seule notre chelle de temps. Le PIC est donc plus rapide que notre B_P.

Toujours Il faut tenir en compte les rgimes transitoires des priphriques (bouton_poussoir, clavier etc..)
branchs sur le microcontrleur

III. Une des variantes de la programmation de lapplication


3.1 Organigramme
Avant la construction dun programme il est prfrable de raliser un organigramme qui
reprsente le cheminement dun programme crire. Cela va faciliter la programmation en
assembleur.
Lorganigramme de ralisation de notre programme en question est propos sur la figure 2.
Ici chaque action est symbolise par un rectangle, un choix est symbolis par un losange.
3.2 Organisation dun fichier .asm . Quelques tapes pour la construction dun programme.
Le fichier assembleur de lapplication est donn par la figure 3.
Considrons les tapes principales gnralement utiliss et conseills dans la programmation en
assembleur (voir : Programmation des PIC, Premire partie-PIC16F84 par
BIGONOFF, http://www.abcelectronique.com/bigonoff/organisation.php?2654c)
3.2.1 Les commentaires

De la ligne 1 la ligne 13 vous voyez un cadre. Le premier caractre de chaque ligne, vous
verrez le symbole ; . Tout ce qui suit tant considr 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 dune grande utilit si vous dcidez de modifier votre
programme.
A la ligne 19, nous trouverons une DIRECTIVE destine MPASM pour indiquer quel type de
processeur est utilis dans ce programme.
3.2.2 Les directives

Les DIRECTIVES ne font pas partie du programme, elles ne sont pas traduites en OPCODE,
elles serrent indiquer lassembleur de quelle manire il doit travailler. Ce sont donc des
COMMANDES destines lassembleur en lui-mme.

- 46 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------EXPLICATION
Directives pour MPASM
On utilisera les registres :
retard_ms , mmo et les
constantes B_P et LEDs
Le portA et le portB seront
programms daprs le schma
de principe
On
vrifie
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
vrifie
que
le
Bouton_Poussoir est relch
pour revenir au dbut du
programme.

Fig.2 : Lorganigramme de lapplication

Fig.3 : Le programme assembleur de lapplication


1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
19)
20)

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Ce programme assure la gestion des LEDs en mode
; de tlcommande :un appui sur un des
; Boutons-Poussoirs allume les LEDs tendis que
; lappui suivante fait teindre ces LEDs
;
; Nom du projet : TELERUPTEUR
; Auteur : V.Tourtchine
; Date : 09/2009
; Microcontrleur : Microchip PIC 16F84A
; Langage : Assembleur
; IDE : Microchip MPLAB
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxx
; Processeur
;xxxxxxxxxxxxxxxx
List p=16F84A
#include <p16F84A.inc>

- 47 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------21)
22)
23)
24)
25)
26)
27)
28)
29)
30)
31)
32)
33)
34)
35)
36)
37)
38)
39)
40)
41)
42)
43)
44)
45)
46)
47)
48)
49)
50)
51)
52)
53)
54)
55)
56)
57)
58)
59)
60)
61)
62)
63)
64)
65)
66)
67)
68)
69)
70)
71)
72)
73)
74)
75)
76)
77)
78)
79)
80)
81)
82)
83)
84)
85)
86)
87)
88)

;xxxxxxxxxxxxxxxxxxxxxx
; Bits de configuration
;xxxxxxxxxxxxxxxxxxxxxx
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;code protect OFF
;watchdog timer OFF
;power up timer ON
;xxxxxxxxxx
; Macro
;xxxxxxxxxx
bank1 macro
bsf
endm

STATUS,RP0

; passage en banque 1

bank0 macro
bcf
endm

STATUS,RP0

; passage en banque 0

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;
Dfinition des constantes
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#DEFINE

B_P

PORTA,0

#DEFINE

LEDs

PORTB

; B_P est branch sur le PORTA,0


; LEDs sont branches sur le PORTB

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;
Dclaration des registres temporaires
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CBLOC
0x00c
retard_ms : 1
; retard_ms l'adresse 0x0c
mmo : 1
; mmo l'adresse 0x0d
compte_1 : 1
compte_2 : 1
;xxxxxxxxxxxxxxxxxxxxxxx
; Dmarrage sur reset
;xxxxxxxxxxxxxxxxxxxxxxx
org
goto

0x0000
start

;adresse de dpart aprs reset


;adresse 0: start

;xxxxxxxxxxxxxxxxxxxx
; Initialisation
;xxxxxxxxxxxxxxxxxxxx
start
bank1
movlw
B'00000001'
movwf
TRISA
movlw
B'00000000'
movwf
TRISB
bank0
clrf
PORTA
clrf
PORTB
clrf
mmo
movlw
D10
movwf
retard_ms,f
goto
dbut

; bit 0 du PORTA configur en entre


; PORTB configur en sortie
; initialisation du portA
; initialisation du portB
; initialisation du registre "mmo"
; 10 -> w
; initialisatio du"retard_ms" avec 10
; -> dbut du programme principal

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;
Programme principal
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dbut
btfss
B_P
; tester si B_P est appuy?
goto
dbut
; non -> dbut

- 48 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------89)
90)
91)
92)
93)
94)
95)
96)
97)
98)
99)
100)
101)
102)
103)
104)
105)
106)
107)
108)
109)
110)
111)
112)
113)
114)
115)
116)
117)
118)
119)
120)
121)
122)
123)
124)
125)

call
call
call
goto

tempo
gestion
appui
dbut

;
;
;
;

oui -> appeller du s/programme "tempo"


appeller du s/programme "gestion"
appeller s/programme "appui"
retour au dbut du programme

;======== Sous-programme "tempo" de temporisation ===============


tempo
movlw
D250
; le contenu pour le registr compte_1
movwf
compte_1
; 250 -> compte_1
movf
retard_ms,w
; le contenu du retard_ms -> W
movwf
compte_2,f
; W -> compte_2
boucle_1
nop
decfsz compte_1,f
; dcrmenter le compte_1 et sauter:
goto
boucle_1
; -> boucle_1 si compte_1 nest pas 0
movlw
D250
; si compte_1 est 0
movwf
compte_1,f
; on charge le compte_1 avec D250
boucle_2
decfsz compte_2,f
; dcrmenter le compte_2
goto
boucle_1
; si le compte_2 nest pas 0
return
; si le compte_2 est 0
;====== Sous-programme "gestion" des LEDs ==============
gestion
comf
mmo,f
; inverser les bits du registre "mmo"
movf
mmo,w
; sauvegarder mmo dans le registre w
movwf
LEDs
; charger le registre LEDs par w
return
; -> programme principal
;======== Sous-programme"appui" du test de B_P =================
appui
btfsc
B_P
; dtecter si B_P est appuy?
goto
appui
; oui -> appui
return
; non -> programme principal
END

; fin du programme

3.2.4 La directive CONFIG

La ligne 25, commence par __ CONFIG . Cette ligne contient les fameux fusibles qui
fixent le fonctionnement du PIC.
Les valeurs crites ici seront intgres dans le fichier .hex pour signaler au
programmateur les valeurs encoder aux adresses spcifiques du PIC.
3.2.5 Les macros

Plus bas, lignes 34 36, nous trouverons une MACRO :


bank1

macro
bsf
endm

; passage en banque 1
STATUS,RP0

La macro se compose dun nom crit en premire 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
dfinie 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 rencontre, elle sera remplace au moment de lassemblage par la ligne (dans notre cas) :
bsf

STATUS,RP0

La macro simplifie donc lcriture, mais ne raccourci pas la taille du fichier .hex obtenu,
puisque la ligne sera crites dans le PIC.

- 49 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------3.2.6 La dfinitions des constantes

Descendons encore un peu. Dans les lignes 51 et 53 nous trouverons un exemple de


DEFINE. Les define est destin pour remplacer un texte plus complexe.
Par exemple nous pourrons utiliser un PORT suivi dun numro de bit, ou bien carrment une
instruction avec ses paramtres.
Une dfinition est construite de la manire suivante : La directive #DEFINE, suivie par le nom
que lon dsir utiliser, puis la chane substituer. Dans notre exemple :
Les dfinitions servent simplifier une modification ventuelle dans le programme.
Supposons que vous dcidez de connecter le B_P sur le PORTA bit 4 (RA4), titre dexemple. Nul
besoin de rechercher partout dans le programme, il suffira de changer dans la zone DEFINE.
#DEFINE B_P

PORTA,0

soit autrement :

bouton
#DEFINE

equ
B_P

0
PORTA,bouton

puis

#DEFINE B_P

PORTA,4

soit autrement :

bouton
#DEFINE

equ
B_P

4
PORTA,bouton

puis

3.2.7 La dclaration des registres temporaires ou des variables

La zone de mmoire RAM librement utilisable commence ladresse 0x0c.


Donc vous pouvez utiliser 68 emplacements RAM, qui rpondront la syntaxe suivante :
retard_ms
mmo

equ
equ

0x0c
0x0d

; le registre retard_ms ladresse 0x0c


; le registre mmo ladresse 0x0d

3.2.8 La zone des variables

Toute zone dfinie par lutilisateur commence avec la directive CBLOCK, suivie par ladresse
du dbut de la zone. Ensuit, nous pouvons utiliser 68 emplacements mmoire, qui rpondront la
syntaxe suivant : nom de la variable suivi du signe : suivi de la telle utilise. Dans notre exemple
on peut dfini des registres temporaire comme suit :
CBLOCK 0x0c
retard_ms : 1
mmo
: 1

; dbut de la zone variable


; le registre retard_ms ladresse 0x0c
; le registre mmo ladresse 0x0d

3.2.9 Les tiquettes

Vous trouverez dans les programmes en 1re colonne ce quon a lappel des ETIQUETTES.
Ce sont des noms que vous choisissez et qui sont des REPERES pour le programme.
Lassembleur les remplacera par ladresse du programme , lendroit o elles sont
positionnes. Ceci vous vite de devoir calculer les emplacements programme.
3.2.10 La directive ORG

La directive ORG, suivie de ladresse, prcise quelle adresse les instructions qui suivent
seront places dans le PIC.
Aprs un reset ou mise sous tension, le PIC dmarre toujours ladresse 0x00. Le dbut du
programme doit donc se situer l.
Ladresse 0x04 est ladresse utilise par les interruptions (nous verrons dans le prochain
sance de TD). Il ne vous reste donc pas grande place pour placer votre programme. Nous
commencerons donc par un saut vers lemplacement du programme principal o nous aurons plus de
place. Allons donc voir ligne 68 comment tout ceci fonctionne :

org
goto

0x00
start

; adresse de dpart aprs reset


; adresse 0 : start

- 50 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------La premire ligne est une DIRECTIVE qui indique que la ligne suivante sera place
ladresse 0x00.
La seconde ligne est une INSTRUCTION qui indique au PIC que le programme doit sauter
ladresse start . start est une ETIQUETTE.
Aprs le reset, le PIC excute donc linstruction goto start qui se trouve ladresse 0x00,
suivie par linstruction qui se trouve ladresse start plus bas dans le programme (donc juste en
dessous de ltiquette start).
3.2.11 La routine dinitialisation

Les instructions contenues partir de ltiquette start (de la ligne 70 la ligne 81) vous
devriez avoir comprise.
3.2.12 Le programme principal

A partir de la ligne 86 la ligne 123 cest le programme principal. Dans notre cas ce
programme peut tre reprsent sans utiliser lappelle des sous-programmes et de macro. Le choix
dpend de la frquence dutilisation dans le programme des sous-programmes et des macro. Vous
pouvez choisir la mthode que vous prfrez. Trs important, cest davoir compris les deux
mthodes.
3.2.13 La directive END

Cette directive prcise lendroit o doit cesser lassemblage de votre programme. Elle est
obligatoire dans tout programme.
Toutes les instructions situes aprs la directive END seront tout simplement ignores.

3.3 Calcul du temps dexcution dune temporisation


Grce aux caractristiques sur le jeu (set) dinstructions des PIC, on peut connatre le
nombre de cycles ncessaires pour lexcution dune instruction. Sachant que lhorloge interne divise
par 4 le frquence 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, do T = 1/f = 1 s).
A chaque fois quon a besoin dintroduire dans le programme une temporisation, il faut
calculer le temps machine ncessaire pour excuter cette temporisation afin de dterminer la valeur
exacte de la temporisation.
Prenons lexemple dune temporisation (de la ligne 96 110 dans notre programme) avec un
quartz de 4 MHz.
Linstruction goto et return dure 2 cycles machines, linstruction decfsz dure 1 cycle ainsi
que linstruction 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 dterminer 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 nglige 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 rgime transitoire du B_P nest dpasse 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. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

--------------------------------------------------------------------------------------------------------------------------------------

IV. Exercices
Exercice 1. Une minuterie
Le schma dapplication est reprsent sur la figure 1.
Le fonctionnement du circuit est suivant.
De que le montage sera aliment et le bouton-poussoir B_P appuy, la LED devra sallumer et
y restera durant un priode pralablement tabli (180 ms ).
Lorganigramme est reprsent sur la figure 4.
Pour la temporisation on utilisera une fonction tempo de lexemple prcdent.
crire en assembleur le programme pour le PIC 16F84A.

Fig. 4 Lorganigramme dune minuterie

Exercice 2. Le clignotant
Le schma dapplication est reprsent sur la figure 1.
Le fonctionnement du circuit est suivant.
De que le montage sera aliment, et le bouton_poussoir B_P sera constamment appuy la
LED devra clignoter indfiniment (priode de 400 millisecondes)
crire en assembleur le programme pour cette application en utilisant PIC 16F84A.
Exercice 3. Les feux tricolores
Le but de cet exercice est de simuler le fonctionnement de deux feux tricolores.
Le schma de principe est reprsent sur la figure 5.

- 52 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------La partie commentaire de lorganigramme reprsent sur la figure 6 dcrit successivement


ce que doit faire le programme. On dfini une constante, que lon nomme Inter0 , et qui correspond
au bouton marche / arrt de notre montage, et une constante Inter1 qui correspond linterrupteur
qui dclare les faux en mode clignotant. On effectue une temporisation longue tempo_lg environ 4
s et une temporisation courte tempo_ct environ gal 1,5 s.
Ecrire en assembleur le programme correspondant lorganigramme de la figure 6.

+5 v

1k

Inter 0
1

Inter 1
R1

Alimentation
stabilise 5 V

R6
+
C1

R2
1k

R3
1k

1uF

R5

R4

3 X 470

U1
17
18
1
2
3

16
15
4
Q1

14

RA0
RB0/INT
RA1
RB1
RA2
RB2
RA3
RB3
RA4/T0CLK
RB4
RB5
OSC1/CLK
RB6
OSC2/CLKOUT RB7

6
7
8
9
10
11
12
13

LV

LJ

LR

MCLR

VDD
PIC16F84
R7

4 MHz
+
C3

15pF

C4

15pF

C2

10uF

R8

LR

R9

LJ

0
0

3 X 470

Fig.5

- 53 -

LV

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------COMMENTAIRES
Etat initial

On utilise les registres :


retard_1, retard_2, retard_3.

Dclaration des variables utilises

Le porte A est programm en entre et le


porte B en sortie (vers la LED)

Initialisation des ports A et B

On impose un signal rouge aux deux feux


tricolores.

Initialisation des feux au signal rouge

Le bouton
marche-arrt
est appuiy ?

NON

On vrifie que linterrupteur Marche est


appuy pour lancer le programme.

OUI

Si le bouton clignotant est appuy, le


programme se droute vers ltiquette
clignote , les feux clignotent lorange.

OUI
Le bouton
clignotant est
appuiy ?

NON

Fonctionnement normal

Appel de la temporisation longue

Appel de la temporisation longue avant de


passer le feu 1 au vert.

Feu 1 au vert, fue 2 au rouge


Appel de la temporisation longue

Appel de la temporisation longue avant de


passer le feu 1 lorange.

Feu 1 l'orange, fue 2 au rouge


Appel de la temporisation courte

Appel de la temporisation courte avant de


repasser le feu 1 au rouge.

Feu 1 u rouge, fue 2 au rouge


Appel de la temporisation courte

Appel de la temporisation courte.


Feu 1 u rouge, fue 2 au vert

Le feu 2 passe au vert.


Appel de la temporisation longue

Appel de la temporisation longue.


Feu 1au rouge, fue 2 l'orange

Le feu 2 passe lorange.


Appel de la temporisation courte

Appel de la temporisation courte avant de


retourner en dbut de programme.
Feu 1 l'orange, fue 2 l'orange

Fonctionnement en clignotant
Passage des feux 1 et 2 lorange.

Appel de la temporisation courte

Appel de la temporisation courte.

Feu 1 teint, fue 2 teint

On teint les 2 feux.

Appel de la temporisation courte

Appel de la temporisation courte et retour.

Fig. 6
- 54 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Nom du projet : tricolor
;
; Auteur : V.TOURTCHINE
; Date : 09/2009
; Microcontrleur : Microchip PIC 16F84A
; Langage : Assembleur
; IDE : Microchip MPLAB
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxx
; Processeur
;xxxxxxxxxxx
List p=16F84A
#include <p16F84A.inc>
;xxxxxxxxxxxxxxxxxxxxxx
; Bits de configuration
;xxxxxxxxxxxxxxxxxxxxxx
__config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
;xxxxxx
; Macro
;xxxxxx
bank1 macro ; passage en banque 1
bsf STATUS,RP0
endm
bank0 macro ; passage en banque 0
bcf STATUS,RP0
endm
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
; Dclaration des variables
;xxxxxxxxxxxxxxxxxxxxxxxxxxx
CBLOCK 0x0C
retard_ct : 1
retard_lg : 1
compte_1 : 1
compte_2 : 1
ENDC
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Dfinition des consrantes
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#DEFINE
LR_1
PORTB,0

- 55 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE

LJ_1
LV_1
LR_2
LJ_2
LV_2
Inter0
Inter1

PORTB,1
PORTB,2
PORTB,3
PORTB,4
PORTB,5
PORTA,0
PORTA,1

;xxxxxxxxxxxxxxxxxxxx
; Dmarrage sur reset
;xxxxxxxxxxxxxxxxxxxx
org 0x0000
goto start
;xxxxxxxxxxxxxxx
; Initialisation
;xxxxxxxxxxxxxxx
start
bank0
clrf
clrf
bank1
movlw
movwf
movlw
movwf
bank0
clrf
clrf
movlw
movwf
movlw
movwf
clrf
clrf
goto

PORTA
PORTB
B'00000011'
TRISA
B'00000000'
TRISB
PORTA
PORTB
d'6'
retard_lg
d'2'
retard_ct
compte_1
compte_2
dbut

;xxxxxxxxxxxxxxxxxxxx
; Programme principal
;xxxxxxxxxxxxxxxxxxxx
dbut
btfss Inter0
goto
dbut
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
dbut
;=========== s/p tempo_lg ================
tempo_lg
movlw
d'250'
movwf
compte_1
movf
retard_lg,w
movwf
compte_2
boucle_1lg
nop
decfsz
compte_1
goto
boucle_1lg
movlw
d'250'
movwf
compte_1

- 56 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------boucle_2lg
decfsz
goto
return

compte_2,f
boucle_1lg

;========== s/p tempo_ct

=============

tempo_ct
movlw
movwf
movf
movwf

d'100'
compte_1
retard_ct,w
compte_2

nop
decfsz
goto
movlw
movwf

compte_1,f
boucle_1ct
d'100'
compte_1

boucle_1ct

boucle_2ct
decfsz
goto
return

compte_2,f
boucle_1ct

;========== s/p STOP =========


STOP
clrf
PORTB
LRon_1
LRon_2
call
tempo_ct
return

;======== s/p J_1 ============


J_1
clrf
PORTB
LJon_1
LRon_2
call
tempo_ct
return
;========= S/P J_2 ===========
J_2
clrf
PORTB
LJon_2
LRon_1
call
tempo_ct
return
;======== S/P route_1 =========
route_1
clrf
PORTB
LVon_1
LRon_2
call
tempo_lg
return
;======= S/P route_2 =========
route_2
clrf
PORTB
LRon_1
LVon_2
call
tempo_lg
return

- 57 -

V.Tourtchine. Microcontrleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB

-------------------------------------------------------------------------------------------------------------------------------------;====== S/P route_1 avert ========


route_1avert
clrf
PORTB
LRon_1
LJon_1
LRon_2
call
tempo_ct
return

;======= s/p route_2 avert =========


route_2avert
clrf
PORTB
LRon_1
LRon_2
LJon_2
call
tempo_ct
return

;======= s/p clignote =========


clignote
clrf
PORTB
call
tempo_ct
LJon_1
LJon_2
call
tempo_ct
goto
dbut

END

- 58 -

You might also like