Sie sind auf Seite 1von 81

TECHNOLOGIE

Microcontrôleurs
Micr ocontrôleurs PIC
De la théorie
aux applications
MICROCOTRÔLEUR

HORLOGE UNITÉ MÉMOIRE MÉMOIRE ENTRÉES MONDE


CENTRALE MORTE VIVE / EXTÉRIEUR
RESET (CPU) (ROM) (RAM) SORTIES

BUS (ADRESSES, DONNÉES, CONTRÔLE)

Figure 1 : Le contenu minimum de tout microcontrôleur.

Réservés il y a encore quelques années aux seuls industriels, les microcontrôleurs sont au-
jourd’hui à la portée des amateurs et permettent des réalisations aux possibilités étonnantes.
Cette utilisation des microcontrôleurs peut se concevoir de votre part de deux façons diffé-
rentes. Vous pouvez considérer que ce sont des circuits « comme les autres », intégrés à
certaines réalisations que nous vous proposerons dans la revue, et tout ignorer de leur fonc-
tionnement interne. Mais vous pouvez aussi profiter de leurs possibilités de programmation
pour concevoir vos propres réalisations ou bien encore pour modifier le comportement d’ap-
pareils existants. Pour ce faire, il faut évidemment savoir les programmer mais, contraire-
ment à une idée reçue qui a la vie dure, surtout chez les électroniciens, ce n’est pas diffici-
le.

a série d’articles que nous débutons aujourd’hui Un microcontrôleur est donc un circuit intégré qui contient
a bien évidemment pour but, vous l’avez compris, en interne, c’est-à-dire dans un seul et même boîtier, l’équi-
de vous apprendre à programmer ces fameux valent de la structure complète d’un micro-ordinateur. La fi-
microcontrôleurs mais ses ambitions ne s’arrê- gure 1 montre quels sont ces éléments dont voici les fonc-
tent pas là. Nous voulons en effet vous permettre tions :
de développer intégralement vos propres applications et,
pour cela, nous allons faire appel à de nombreuses solu- - l’unité centrale ou CPU (Central Processing Unit) est le
tions innovantes que vous découvrirez au fur et à mesure cœur du microcontrôleur. C’est l’équivalent du micropro-
que nous avancerons dans la connaissance de ces circuits. cesseur que vous trouvez dans votre ordinateur mais avec
Cette série se voulant avant tout concrète et orientée vers une puissance généralement moindre ; la vocation n’étant
les amateurs électroniciens que vous êtes, sachez dès à pas la même. C’est cette unité centrale qui exécute le pro-
présent qu’elle comprendra un minimum de théorie et beau- gramme et pilote ainsi tous les autres éléments. Elle dis-
coup de pratique mais aussi que les investissements à réa- pose généralement de deux connexions avec l’extérieur,
liser pour nous suivre seront dérisoires et se chiffreront à une pour son horloge et une pour sa ré-initialisation ou re-
quelques centaines de francs tout au plus, c’est-à-dire pas set.
plus que ce que vous dépensez habituellement pour réali-
ser des montages « classiques ». - La mémoire morte ou ROM (Read Only Memory) est une
mémoire dont le contenu a été défini une fois pour toutes ;
contenu qui est conservé même en cas de coupure de cou-
Qu’est ce qu’un microcontrôleur ? rant. Elle contient le programme que va exécuter l’unité cen-
trale. C’est donc elle en fait qui personnalise votre circuit,
Peut-être est-il bon de ne pas mettre la charrue avant les puisque c’est elle qui définit sa fonction.
bœufs et, avant de traiter de programmation et d’outils de
développement, vaut-il mieux définir clairement ce dont on - La mémoire vive ou RAM (Random Access Memory) est
va parler. une mémoire dans laquelle l’unité centrale peut lire et écri-

ELECTRONIQUE 76 magazine - n° 1
TECHNOLOGIE

re à tout instant. Elle est utilisée dans - et enfin, les outils développement leur puisse comprendre, et enfin de le
les phases de calcul du programme, (nous verrons dans un instant de quoi mettre dans la fameuse mémoire mor-
pour stocker des résultats intermé- il s’agit) doivent être aussi peu coûteux te contenue dans son boîtier.
diaires par exemple, mais elle sert aus- que possible.
si à stocker les variables de votre ap- Cet équipement minimum doit cepen-
plication. Ainsi, dans un thermostat par A l’heure actuelle, les circuits qui ré- dant, si possible, être complété par un
exemple, c’est dans cette mémoire pondent le mieux à ces critères sont moyen de test du programme car, hé-
RAM que seront stockées les tempé- les microcontrôleurs de la famille PIC las, il est assez rare qu’un programme
ratures de consigne que vous aurez de Microchip. Comble de chance, ces fonctionne du premier coup, sur tout
choisies. circuits connaissent actuellement un s’il est long et complexe. Ce sont les
succès que l’on peut, sans exagérer, fameux « bugs » (bogues si vous pré-
- Les entrées/sorties enfin constituent qualifier de planétaire et sont très lar- férez cet horrible et absurde terme fran-
le dernier élément du microcontrôleur gement utilisés dans l’industrie. En les çais) qu’il faut essayer au maximum
et peuvent revêtir des aspects très di- choisissant nous bénéficions donc des d’éliminer.
vers. Ce qu’il faut retenir c’est que ce retombées que cela implique avec, prin-
sont ces entrées/sorties qui vont per- cipalement, un très large choix de ré- L’ensemble « d’outils » que nous ve-
mettre au microcontrôleur de commu- férences, une excellente disponibilité nons d’évoquer constitue ce que l’on
niquer avec le monde extérieur. C’est et un très faible prix unitaire. appelle un outil de développement ou
donc là que vont être connectés les cla- système de développement. Il y a en-
viers, afficheurs, poussoir, moteurs, core quelques années, un tel système
relais, etc. que va utiliser votre appli- Le matériel coûtait plusieurs dizaines de milliers
cation. indispensable de francs ce qui plaçait tout dévelop-
pement à base de microcontrôleur hors
Tous ces éléments sont reliés entre Pour développer une application à base de portée des amateurs.
eux par ce que l’on appelle un bus, de microcontrôleur il faut disposer d’un
c’est-à-dire un ensemble de liaisons minimum de matériel. En effet, il faut Ce coût élevé est encore de mise
transportant des adresses, des don- tout d’abord être à même d’écrire le aujourd’hui avec certaines familles de
nées et des signaux de contrôle. Dans programme que va exécuter le micro- microcontrôleurs mais ce n’est pas le
de très nombreux microcontrôleurs, contrôleur, puis de le transformer en cas avec les PIC de Microchip que nous
dont ceux que nous utiliserons dans « quelque chose » que le microcontrô- avons choisis.
cette série d’articles, ce bus n’est pas
accessible de l’extérieur du boîtier et
nous n’aurons donc pas à nous en oc-
cuper. OUTIL UTILISÉ

Le choix d’un ÉCRITURE


microcontrôleur ÉDITEUR DE TEXTE DU PROGRAMME
SOURCE
La majorité des grands fabricants de
circuits intégrés dispose aujourd’hui LISTING SOURCE
(SUITE DE MNÉMONIQUES)
de plusieurs gammes de microcontrô-
leurs qui, si l’on en croit leurs publici-
tés, sont toutes plus per formantes
les unes que les autres. On peut donc
légitimement se demander quelle fa- ASSEMBLAGE
ASSEMBLEUR
mille de circuits choisir et c’est DU PROGRAMME
d’ailleurs la question qui taraude gé-
néralement un industriel qui doit dé- LISTING OBJET
velopper une application. (SUITE DE CODES BINAIRES)

En ce qui nous concerne, nous ne


sommes pas des industriels, ce qui
nous simplifie quelque peu le travail. PROGRAMMATION
En effet, les seuls critères principaux PROGRAMMATEUR DANS LA RAM
que nous devons retenir sont les sui- DU MICRO
vants :
CIRCUIT PROGRAMMÉ
- le ou les circuits de la famille doivent
être facilement disponibles sur le mar-
ché amateur ;

- le prix des circuits doit être à la por- MAQUETTE OU


ESSAI
tée de toutes les bourses ; SIMULATEUR OU
SUR L'APPLICATION
ÉMULATEUR

- la programmation de la mémoire mor-


te interne (celle qui contient le pro- Figure 2 : Les différentes phases de développement d’un programme.
gramme) doit être facile ;

ELECTRONIQUE 77 magazine - n° 1
TECHNOLOGIE

faire exécuter à l’unité centrale. Mais


vous concevez bien que, hormis sur
quelques maquettes pédagogiques fort
simples, il n’est pas envisageable de
programmer en binaire car, dès que le
programme dépasserait quelques
lignes, il serait illisible et tout travail
de modification deviendrait impossible.

Les fabricants de microcontrôleurs ont


donc décidé de donner à chaque ins-
truction élémentaire un nom que l’on
appelle un mnémonique. Ainsi, pour
dire au microcontrôleur d’augmenter
d’une unité le contenu de son registre
A, on n’écrira pas 10101001 mais plu-
tôt INCA, INC étant l’abréviation de l’an-
glais « to increment » qui veut juste-
ment dire augmenter. C’est tout de
même plus « parlant » même si, mal-
heureusement, cela parle en anglais !

Un programme va donc devenir, non


Figure 3 : Le programme source prêt à être traduit pas une suite de codes binaires, mais
(on dit assemblé) par l’assembleur. une suite de mnémoniques. Cette sui-
te de mnémoniques peut évidemment
être écrite sur papier et c’est d’ailleurs
En effet, afin d’inciter un maximum de gramme, n’est jamais qu’un assem- ce qui se faisait au début de la micro-
concepteurs à utiliser ses circuits, blage de circuits logiques plus ou moins informatique mais, puisque nous avons
Microchip a eu l’idée originale de don- complexe. Elle ne comprend donc que un micro-ordinateur à portée de mains,
ner son outils de développement com- les signaux électriques logiques, c’est- on l’écrit généralement avec un éditeur
plet à qui voulait bien le lui demander. à-dire encore que des informations bi- de texte. Cet éditeur de texte peut être
Le résultat est à la mesure des espé- naires, qui peuvent être 0 ou 1 com- à peu près n’importe quoi et vous pou-
rances du fabricant vu le succès actuel me dans tout circuit logique qui se vez ainsi utiliser Word ou Write ou tout
de ces circuits ! respecte. autre programme de traitement de
texte existant sur votre PC pour cela.
Cet outil de développement, sur lequel Chaque opération que peut exécuter Ces produits sont cependant surpuis-
nous allons revenir dans un instant, cette unité centrale s’appelle une ins- sants et mal adaptés à l’écriture de
n’est autre qu’un programme. Il doit truction et reçoit un code binaire programmes. Les outils de développe-
donc « tourner » sur un micro-ordina- unique. Pour écrire un programme il ment bien conçus compor tent donc
teur, en l’occurrence un compatible PC. suffit donc théoriquement d’écrire la généralement en interne leur propre
Si donc vous voulez suivre notre série suite de codes binaires que l’on veut éditeur de texte.
d’articles en réalisant nos expérimen-
tations pratiques, il vous faudra dis-
poser d’un tel micro-ordinateur. Ras-
surez-vous tout de suite, point n’est
besoin d’un Pentium III à 400 MHz ni
d’une carte vidéo accélératrice 3D pour
faire fonctionner un tel outil. N’impor-
te quel PC capable de faire tourner Win-
dows 95 ou 98 suffit.

Ce micro-ordinateur et l’outil de
développement Microchip constituent
donc le seul matériel nécessaire à nos
expériences. Le reste, c’est-à-dire
essentiellement le programmateur de
PIC et les différentes maquettes d’ap-
plications, seront réalisés par nos soins
dans le courant de cette série.

Qu’est ce qu’un outil de


développement ?
L’unité centrale d’un microcontrôleur,
c’est-à-dire comme nous l’avons vu, la Figure 4 : L’écran d’accueil de l’assembleur offert par Microchip.
par tie du circuit qui exécute le pro-

ELECTRONIQUE 78 magazine - n° 1
TECHNOLOGIE

il faut faire appel à un programmateur


adapté au type de microcontrôleur uti-
lisé. Ce programmateur est tout à la
fois un montage, qui peut être très
simple selon le circuit choisi (ce sera
notre cas), et un peu de logiciel desti-
né à le faire fonctionner.

Arrivé à ce stade des opérations, votre


microcontrôleur est prêt à être placé
sur votre application afin de l’essayer.
Si tout va bien, tant mieux. Par contre,
si le compor tement du programme
n’est pas conforme à ce que vous aviez
prévu, il faut analyser les problèmes et
apporter les corrections nécessaires.
Ceci impose une nouvelle séance d’édi-
tion de programme, d’assemblage et
de programmation. L’organigramme de
la figure 3, résume l’enchaînement
d’opérations que nous venons de
décrire de façon visuelle.

Figure 5 : Le logiciel de commande du programmateur que nous réaliserons Arrivé au terme de cet exposé, nous
très prochainement. Elégant, n’est ce pas ? savons maintenant que notre outil de
développement doit comprendre au
minimum un éditeur de programme et
un assembleur. Nous verrons que
MPLAB nous offre en fait bien plus que
cela !

Le mois prochain
Nous avons aujourd’hui dégrossi le ter-
rain en vous présentant les notions et
les termes essentiels à connaître pour
travailler avec les microcontrôleurs.
Nous aborderons la notion de pro-
gramme dans notre prochain numéro
et nous verrons de manière un peu plus
détaillée ce que contient cette fameu-
se unité centrale et comment elle fait
pour exécuter un programme.

C. TAVERNIER ◆

ADC-PWM-LCD-Timer-Interruptions-EEPROM
Claviers-Moteurs pas à pas-RS232…en BASIC
Code assembleur produit par le compilateur
Compilateur BASIC AVR. ..........................650 FF
Figure 6 : Le programme a été assemblé, il est prêt à être placé dans la AT90S1200, AT90S2313
mémoire ROM du microcontrôleur. Compilateur BASIC PIC.............................650 FF
PIC16F84 et tout PIC 14 bits largeur d’instruction.
Gère les pages programme et les pages registres.
Opérations en virgule flottante sur PIC en BASIC.
BASIC PIC + Kit PIC16F84.......................1 000 FF
Notre programme, écrit sous forme de programme qui fait partie de l’outil de Atelier 68HC11. ........................................650 FF
mnémoniques, s’appelle le program- développement et que l’on appelle l’as- Compilateur BASIC assembleur débogueur 64 K automatique.
Programmation EEPROM interne et externe (in situ).
me source, ou plus brièvement le sour- sembleur. Supports tous types de IIC11 y compris le 68HC11F1 dans les 3 modes.
ce, et son listing, c’est-à-dire son im- L’atelier + Kit 68HC11E2 ........................1 000 FF
pression sur papier, s’appelle donc ... L’assembleur lit donc en entrée un pro- Compilateur C AVR C simplifié ......................650 FF
Compilateur C PIC C simplifié ......................650 FF
le listing source. gramme sous forme de mnémoniques, PrixTTC. Mise à jour 1 an par Internet + port (Fr) compris.
ou programme source, et le traduit en Logiciels et manuels 100% en Français.
INFO… INFO… INFO… INFO… INFO…
SRC pub 02 99 42 52 73 06/99

Pour que l’unité centrale du microcon- sortie en une suite de codes binaires AT90S2313 DIP 20-15 E/S. RISC AVR. 10 MIPS. 2 Ko. FLASH sur une seule
trôleur puisse comprendre et exécuter correspondants que l’on appelle le pro- page. 128 octets RAM sur une seule page. La pile est limitée uniquement par
ce programme, il faut le traduire en une gramme objet ou plus brièvement l’ob- l’espace RAM. 32 registres. 128 EEPROM. RS232. PWM 8, 9 , 10 Bits.
Comparateur analogique. Watchdog. Timer 8 et 16 Bits… Tension de
suite de codes binaires qui, comme jet. Cette suite de codes constituant programmation 5 V. Logiciel de programmation (compatible BASIC AVR).
nous l’avons vu ci-dessus, correspon- l’objet doit ensuite être placée dans la DISPONIBLE SUR NOTRE SITE : www.digimok.com
dent aux différents mnémoniques uti- mémoire mor te ou mémoire de pro- DIGIMOK - BP 48 - 62170 MONTREUIL SUR MER
TEL: 03 21 86 54 88 - FAX: 03 21 81 03 43
lisés. Cette opération est faite par un gramme du microcontrôleur. Pour cela,

ELECTRONIQUE 79 magazine - n° 1
TECHNOLOGIE

Microcontr
Micr ocontrô
ôleurs PIC
De la thé
théorie
aux applications
2ème partie
par tie
b7 b6 b5 b4 b3 b2 b1 b0

Représentation symbolique d'un registre 8 bits

D Q D Q D Q D Q D Q D Q D Q D Q

C C C C C C C C

horloge
b7 b6 b5 b4 b3 b2 b1 b0

Exemple de réalisation pratique d'un registre 8 bits


Figure 1 : Représentation symbolique et réalisation pratique d’un registre 8 bits.

Avant d’aborder la notion de programme il nous faut d’abord par-


ler des mémoires et de leurs versions allégées que sont les registres
car ces éléments jouent un rôle fondamental dans le fonctionne-
ment d’un microprocesseur ou microcontrôleur. En effet, les don-
nées et les programmes sont toujours stockés en mémoire tandis
que les opérations exécutées par l’unité centrale le sont au moyen
de registres. Voyons donc ce qu’il en est avec une approche tout
à la fois électronique et informatique.

i nous commençons par la notion de registre, microcontrôleurs car c’est la taille standard des mots qu’ils
c’est qu’en fait une mémoire est une accumula- savent manipuler.
tion de registres, mieux vaut donc ne pas mettre
la charrue avant les bœufs. Lorsque l’on a besoin de représenter un registre, on le des-
sine tout simplement comme une suite de petites cases
comme indiqué figure 1 ; chacune d’entre elles figurant un
Qu’est ce qu’un registre ? bit. Cette représentation ne doit cependant pas vous sem-
bler être une vue de l’esprit. Elle correspond en effet à la
Un registre est tout simplement un circuit logique capable structure physique du registre qui peut être réalisé, comme
de contenir un certain nombre de données, logiques elles indiqué dans le bas de la figure 1, par des bascules D tout
aussi bien sûr. S’il ne contient qu’un bit, c’est tout sim- à fait classiques ; des 4013 CMOS ou des 7474 TTL par
plement une bascule, comme une bascule D par exemple. exemple.
S’il contient plusieurs bits, cela devient un « vrai » registre
et le groupe de bits qu’il contient s’appelle alors un mot. Dans un tel registre, le mot binaire à mémoriser est appliqué
Si ce nombre de bits est égal à huit, cela constitue un octet, sur les entrées D des bascules et, après un coup d’horloge,
notion très largement utilisée avec nombre de « petits » il se retrouve disponible sur les sorties Q. Si plus aucun coup

ELECTRONIQUE 72 magazine - n° 2
TECHNOLOGIE

d’horloge n’est appliqué à nos bascules, beaucoup moins précise pour l’utilisa- Comme ces bits sont groupés par mots
l’état présent sur les sor ties Q est teur que celle consistant à dire que et que le binaire n’est pas vraiment
conservé indéfiniment, même si l’état c’est une mémoire de 4 mots de 8 bits pratique à manipuler dès que le nombre
des entrées D vient à changer. Notre car cette dernière façon de faire indique de bits devient important, une notation
registre a donc bien un effet mémoire. aussi l’organisation de la mémoire. particulière est utilisée et a pour nom
l’hexadécimal. Comme il est extrême-
Nous verrons que les registres sont Par principe, les mots contenus dans ment utile de connaître cette base de
nombreux dans un microcontrôleur. Cer- une mémoire constituent ce que l’on numération (puisque c’est comme cela
tains servent à définir le mode de fonc- appelle les données de la mémoire, que ça s’appelle) nous allons en dire
tionnement de ses entrées/sorties ou même si, vu de l’extérieur, ces don- quelques mots en essayant de rester
à paramétrer certaines de ses possi- nées ont une toute autre signification. accessible à tous.
bilités, d’autres sont utilisés dans les
calculs ; d’autres enfin indiquent l’état Afin d’identifier et de pouvoir accéder Lorsque nous comptons, dans notre
de cer taines par ties ou fonctions du à chaque mot contenu dans la vie de tous les jours, nous utilisons la
microcontrôleur. mémoire, ceux-ci se voient affecter ce base de numération décimale c’est-à-
que l’on appelle une adresse qui cor- dire que tous les nombres que nous
Même si nous avons vu une méthode respond en fait à leur position physique manipulons peuvent être décomposés
de réalisation d’un registre avec des dans la mémoire. Ainsi, notre mémoire comme des sommes de puissances de
bascules D ; il n’est pas important que exemple de la figure 2 comporte-t-elle 10 successives.
vous sachiez comment est fait chaque quatre adresses qui sont 0, 1, 2 et 3.
registre d’un microcontrôleur pour l’uti- Notez dès à présent que toutes les énu- Ainsi, lorsque nous utilisons le nombre
liser. Seuls comptent, en effet, les bits mérations en programmation com- 248 cela veut dire en réalité :
qu’il contient et leur signification éven- mencent à zéro sauf de très rares - 2 centaines + 4 dizaines + 8 unités.
tuelle. exceptions. Ainsi le premier bit d’un Si vous avez des enfants à l’école pri-
mot est-il toujours le bit zéro et non le maire ils ne seront pas surpris d’une
bit un. De même que la première telle décomposition puisque c’est
Du registre adresse est toujours l’adresse zéro. comme cela qu’on leur apprend à
à la mémoire C’est une simple question d’habitude. compter !

Lorsque l’on a besoin de mémoriser Même s’il existe des mémoires avec Si l’on adopte une notation faisant
plusieurs mots binaires, on n’a, pour des organisations très diverses, depuis appel aux puissances de 10, cette
l’instant, pas trouvé de meilleure solu- des mots de un bit jusqu’à des mots décomposition devient :
tion que celle consistant à les placer de 16 bits ; la majorité des mémoires - 2 x 102 + 4 x 101 + 8 x 100
dans autant de registres que néces- que nous rencontrerons dans les micro- (rappelons que n’importe quel nombre
saire, cette association de registres contrôleurs seront organisées en mots à la puissance 0 est égal à 1).
s’appelant alors une mémoire. de 8 bits car c’est la taille standard
des données que ces derniers mani- Notre nombre est donc décomposé
Une mémoire est caractérisée par deux pulent. Il est donc logique de stocker selon les puissances décroissantes de
paramètres principaux : sa taille, expri- les mots en mémoire sans devoir les la base de numération qui est, ici, 10.
mée en nombre de mots, et sa « lar- couper en morceaux ou les accoler à
geur » exprimée en nombre de bits. plusieurs à la même adresse. Et bien en binaire c’est exactement
Cette « largeur » définit en fait la taille pareil mais la base de numération est
des mots stockés dans la mémoire. La 2, ce qui conduit à des décompositions
figure 2 montre ainsi le contenu d’une Un peu d’arithmétique un peu moins naturelles et, sur tout,
mémoire for t simple de 4 mots de 8 un peu moins faciles à faire de tête.
bits. On peut évidemment exprimer Les microcontrôleurs étant des circuits Ainsi, le nombre binaire 1101 est-il tout
aussi la capacité de la mémoire en logiques, ils ne manipulent que du simplement :
nombre total de bits. Dans le cas de la binaire, c’est-à-dire des zéros et des - 1 x 23+ 1 x 22 + 1 x 21 + 1 x 20
figure 2 nous avons ainsi une mémoire uns qui correspondent respectivement soit encore :
de 32 bits, mais c’est là une définition aux niveaux logiques bas et hauts. - 1 x 8 + 1 x 4 + 1 x 2 + 1 x 1 (tout
nombre à la puissance 0 vaut 1 rap-
pelez-vous) soit encore 13 en décimal.
D7 D6 D5 D4 D3 D2 D1 D0
Si, pour les nombres binaires de petite
Adresse 3 taille, cette décomposition reste fai-
sable (même de tête quand on a l’ha-
bitude) elle devient vite pénible, pour
Adresse 2 ne pas dire plus, pour les nombres plus
importants. A titre d’exercice, essayez
donc de convertir en décimal le nombre
binaire 1110 0101 0110 1001 qui ne
Adresse 1 comporte pourtant que 16 bits.

C’est pour cela que l’hexadécimal


Adresse 0 trouve tout son intérêt, d’autant qu’il
repose sur une constatation simple.
Figure 2 : Une mémoire très simple de 4 mots de 8 bits. Un nombre binaire de quatre bits peut
représenter les nombres décimaux de

ELECTRONIQUE 73 magazine - n° 2
TECHNOLOGIE

DÉCIMAL BINAIRE DÉCIMAL BINAIRE HEXADÉCIMAL «K»


0 0000 0 0000 0 –
1 0001 1 0001 1 –
2 0010 2 0010 2 –
3 0011 3 0011 3 –
4 0100
4 0100 4 –
5 0101
5 0101 5 –
6 0110
6 0110 6 –
7 0111
7 0111 7 –
8 1000
8 1000 8 –
9 1001
9 1001 9 –
Tableau 1 : Du binaire au décimal
c’est très facile. 10 1010 A –
11 1011 B –
0 à 15 comme le montre le tableau 1
12 1100 C –
ci-dessus. Dès lors, il est intéressant
d’utiliser comme base de numération, 13 1101 D –
non plus 2 comme en binaire ni 10
comme en décimal, mais 16 (de 0 à 14 1110 E –
15 cela fait 16 valeurs !). On crée ainsi 15 1111 F –
la notation hexadécimale.
128 1000 0000 80 –
Un nombre exprimé en hexadécimal 100 –
256 1 0000 0000
doit donc être décomposé suivant les
puissances décroissantes de 16. C’est 512 10 0000 0000 200 –
encore moins naturel que le binaire
1 024 100 0000 0000 400 1
mais, lorsque vous aurez compris le
truc, vous verrez que cela simplifie bien 2 048 – 800 2
des choses…
Par exemple, le nombre 284 exprimé 4 096 – 1 000 4
en hexadécimal est-il égal à : 8 192 – 2 000 8
- 2 x 162 + 8 x 161 + 4 x 160
soit encore : 16 384 – 4 000 16
- 2 x 256 + 8 x 16 + 4 soit 644. 32 768 – 8 000 32

C’est indigeste, certes, mais ce n’est 65 536 – 10 000 64


pas difficile puisque ce n’est que de
1 048 576 – 100 000 1 024 (1 M)
la banale arithmétique. Le seul petit
problème qui se pose concerne la Tableau 2 : Conversion binaire, décimal, hexadécimal.
représentation des chiffres hexadéci- Les chiffres et nombres les plus courants.
maux supérieurs à 9. En effet, comme
on travaille en arithmétique décimale,
on ne dispose que des symboles - 2 x 162 + 10 x 161 + 11 x 160 puisque des mémoires et l’on ne rencontre donc
capables d’aller jusqu’à 10 que sont A correspond à 10 et B à 11. Cela nous jamais de mémoire dont la taille soit un
nos chiffres arabes de 0 à 9. Il a donc donne donc en décimal : 683. multiple entier de 10. C’est toujours un
fallu « inventer » des symboles pour multiple entier de 16. Une mémoire sera
représenter en hexadécimal les chiffres Cette notation en hexadécimal permet ainsi une 32 mots de 8 bits ou bien une
10, 11, 12, 13, 14 et 15. Plutôt que de travailler très facilement avec nos 256 mots de 8 bits mais jamais une
de créer des symboles nouveaux, on a mots de 8 bits et, plus généralement, 10 ou une 100 mots de N bits !
tout simplement choisi les lettres avec tous les mots de largeur multiple
majuscules de l’alphabet et 10 est de 4 bits. Ainsi, un mot de 8 bits peut- Pourtant, si vous lisez un peu les publi-
ainsi représenté par A, 11 par B et ainsi il évoluer de 00 à FF soit en décimal cations électroniques orientées infor-
de suite jusqu’à 15 par F. C’est tout de 00 à 255. matique, vous avez cer tainement vu
simplement pour cela que vous voyez des termes tels que kilo-octets (Ko) ou
régulièrement des lettres « au milieu » méga-octets (Mo) pour mesurer la taille
des chiffres dès que vous tentez de Revenons des mémoires. Un kilo fait pour tant
lire un programme en langage machine ! à nos mémoires bien 1 000 et un méga 1 000 000 jus-
qu’à preuve du contraire…
Ceci ne change rien à ce que nous avons Puisque les mots de données sont
vu jusqu’à présent; ainsi le nombre hexa- exprimés en hexadécimal, il en est évi- Et bien en micro-informatique la preuve
décimal 2AB est-il tout simplement : demment de même pour les adresses du contraire se réalise puisque les kilos

ELECTRONIQUE 74 magazine - n° 2
TECHNOLOGIE

ne font pas 1 000 et les mégas ne font


pas 1 000 000 ! En effet, afin de faci- Mémoire de programme Mémoire de programme
liter les notations, on a conser vé les
multiples auxquels nous ont habitués
des siècles de numération décimale
mais, pour que cela « colle » avec les
tailles réelles des circuits, ces mul-
tiples ont été ajustés à la puissance INSTRUCTION N INSTRUCTION N
de 2 la plus proche. Ainsi, le kilo ne
fait pas 1 000 mais 1 024 (qui est 2 à
la puissance 10) et le méga ne fait pas
1 000 000 mais 1 048 576 (qui est 2 PC INSTRUCTION N + 1 INSTRUCTION N + 1
à la puissance 20).

Certains auteurs préconisent ainsi de INSTRUCTION N + 2 PC INSTRUCTION N + 2


noter le k de ce kilo qui ne fait pas
1 000 avec un K majuscule afin de le
distinguer du k minuscule du « vrai »
kilo. Pour méga on reste au M majus-
cule puisqu’il n’y a pas le choix.

Ainsi, une mémoire de 4 K mots de 8 Exécution de l'instruction N Exécution de l'instruction N + 1


bits est-elle en réalité une mémoire de Figure 3 : Le PC indique quelle va être la prochaine instruction à exécuter.
4 096 (4 x 1 024) mots de 8 bits. Ça
fait drôle au début mais on s’y habitue
très vite. un ordre bien établi. Ces instructions quoi le microcontrôleur n’exécuterait
peuvent être très diverses selon la pas les instructions dans leur ordre
Pour vous aider et vous mettre en tête fonction du programme et les possibi- d’apparition en mémoire. Il suffit en
quelques valeurs classiques, le tableau lités du microcontrôleur utilisé. On peut effet de lire la mémoire dans le sens
2 vous présente les équivalences ainsi rencontrer des instructions pure- des adresses croissantes pour accé-
binaires, décimales, hexadécimales et ment logiques, qui vont réaliser par der aux instructions qui y sont rangées,
K que vous rencontrerez le plus sou- exemple l’inversion d’un bit ; ou bien les unes à la suite des autres.
vent. Il est inutile de les apprendre « par encore des instructions arithmétiques
cœur » aujourd’hui. Vous verrez en effet qui vont ajouter deux mots de 8 bits. Cette lecture de la mémoire correspond
que vous vous y habituerez très faci- Mais il existe aussi des instructions au deuxième facteur qui conditionne
lement et sans effort à l’usage. de prise de décision qui, en fonction l’exécution d’un programme et qui s’ap-
de l’état d’un bit de tel ou tel registre, pelle en français le compteur ordinal
vont décider de faire continuer le pro- et en anglais le PC (mais non pas
Notions de programme gramme à un endroit ou à un autre ; ce celui-là !) ou Program Counter. Ce PC
sont les instructions de branchement n’est autre qu’un registre un peu par-
Après ces préliminaires, que vous aurez conditionnel. ticulier de l’unité centrale dont le
peut-être trouvé un peu longs mais qui contenu augmente au fur et à mesure
étaient indispensables pour que nous L’ordre dans lequel les instructions de l’exécution des instructions, ce qui
parlions tous le même langage, nous s’exécutent est déterminé par deux fac- lui permet d’adresser à chaque fois
pouvons maintenant aborder la notion teurs. Le premier, qui découle du l’instruction suivante contenue en
de programme. simple bon sens, est tout simplement mémoire. La figure 3 montre ainsi de
leur ordre de rangement en mémoire. façon très imagée la progression du PC
Un programme n’est rien d’autre qu’une Sauf cas particuliers tels que les ins- lors de l’exécution d’un programme qui,
suite d’instructions que l’unité centrale tructions de branchement évoquées ci- dans cet exemple, ne compor te pas
du microcontrôleur va exécuter dans dessus par exemple, on voit mal pour- d’instruction de branchement.

Au cœur de
MÉMOIRE MÉMOIRE l’unité centrale : l’ALU
PC DE DE ÉTAT
PROGRAMME DONNÉES A ce stade de cette étude, vous en
contrôle

savez assez pour pouvoir examiner la


état

figure 4 qui représente l’architecture


très simplifiée de l’unité centrale d’un
ALU microcontrôleur (plus précisément de
DÉCODEUR celui que nous utiliserons pour nos
données

D'INSTRUCTIONS données applications pratiques).

Nous y reconnaissons bien évidemment


ACCUMULATEUR notre mémoire de programme avec sa
suite d’instructions et le PC qui sert à
Figure 4 : Organisation interne des principaux éléments de l’unité centrale. l’adresser. Ces instructions « sortent »
de la mémoire pour aboutir dans le

ELECTRONIQUE 75 magazine - n° 2
TECHNOLOGIE

décodeur d’instructions. Cet organe Ainsi, pour ajouter deux mots binaires conditionnel comme nous le verrons
logique très complexe analyse le code contenus en mémoire, il va falloir dans la suite de cette étude. Nous
binaire de chaque instruction et agit en envoyer le premier mot dans l’ALU et allons en effet en rester là pour aujour-
conséquence sur les éléments internes le second dans W. Ce n’est qu’à cette d’hui ; l’exposé que nous venons de
de l’unité centrale. Quoi que vous fas- condition qu’ils pourront s’ajouter, le vous faire ingurgiter étant assez indi-
siez, vous n’aurez jamais accès direc- résultat se retrouvant ensuite dans W geste pour un numéro d’été que vous
tement à cet organe. à la place du mot initial. êtes peut-être en train de lire sur les
plages ou en respirant l’air pur de nos
Les données manipulées par vos ins- Comme cette ALU réalise des opéra- campagnes… ◆
tructions sont, quant à elles, stockées tions arithmétiques et logiques, elle
dans la mémoire de données d’où elles peut être amenée à rencontrer des
sortent lorsque c’est nécessaire sous situations particulières : résultat trop
ADC-PWM-LCD-Timer-Interruptions-EEPROM
l’action du fameux décodeur d’instruc- grand pour sa taille, résultat nul, résul- Claviers-Moteurs pas à pas-RS232…en BASIC
tions. Elles peuvent alors aller vers deux tat négatif, etc. Et comme ces situa- IF... THEN... ELSE, variables, tableaux...
Compilateur BASIC AVR. .......................... 650 FF
destinations distinctes : l’accumulateur tions particulières peuvent nous inté- AT90S1200, AT90S2313...
appelé aussi registre de travail ou l’ALU resser au plus haut point pour prendre Compilateur BASIC PIC. ............................ 650 FF
PIC16F84 et tout PIC 14 bits largeur d’instructions.
pour unité arithmétique et logique (Arith- des décisions quant à la suite de l’exé- Gère les pages programme et les pages registres.
metic and Logic Unit). En effet, toutes cution du programme, l’ALU est inti- Opérations en virgule flottante sur PIC en BASIC.
les « opérations » que peuvent exécu- mement associée à un autre registre BASIC PIC + Kit PIC16F84. .................... 1 000 FF
Atelier 68HC11. ........................................ 650 FF
ter les instructions, que ce soient des qui est le registre d’état ou Status en Compilateur BASIC assembleur débogueur 64 K automatique.
opérations arithmétiques proprement bon anglais. Programmation EEPROM interne et externe (in situ).
Supports tous types de IIC11 y compris le 68HC11F1 dans les 3 modes.
dites ou purement logiques, ne peuvent L’atelier + Kit 68HC11E2 ........................ 1 000 FF
l’être que dans un élément particulier Ce registre contient un certain nombre Compilateur C AVR C simplifié ...................... 650 FF
qui est justement cette ALU. de bits indépendants qui ont tous une Compilateur C PIC C simplifié ...................... 650 FF
PrixTTC. Mise à jour 1 an par Internet + port (Fr) compris.
signification particulière. On trouve ainsi Logiciels et manuels 100% en Français.

SRC pub 02 99 42 52 73 07/99


Pour qu’elle puisse travailler sur plus un bit Z ou bit de zéro qui indique un INFO… INFO… INFO… INFO… INFO…
AT90S2313 DIP 20-15 E/S. RISC AVR. 10 MIPS. 2 Ko. FLASH sur une seule page.
d’une donnée à la fois, ce qui est un résultat nul, un bit C (comme Carry) ou 128 octets RAM sur une seule page. La pile est limitée uniquement par l’espace
minimum, vous en conviendrez, cette bit de retenue qui signale la présence RAM. 32 registres. 128 EEPROM. RS232. PWM 8, 9 , 10 Bits.
Comparateur analogique. Watchdog. Timer 8 et 16 Bits… Tension de program-
ALU est intimement liée à un registre d’une retenue lors d’une opération arith- mation 5 V. Logiciel de programmation (compatible BASIC AVR).
par ticulier appelé accumulateur ou, métique, etc. Ces bits peuvent ainsi DISPONIBLE SUR NOTRE SITE : www.digimok.com
dans le cas des PIC, registre de travail être testés par le programme et déclen- DIGIMOK - BP 48 - 62170 MONTREUIL SUR MER
W (W comme Working register !). cher des opérations de branchement TEL : 03 21 86 54 88 - FAX : 03 21 81 03 43

PROTEK 506
PROTEK 3200 MULTIMÈTRE DIGITAL
ANALYSEUR DE SPECTRE, MESUREUR DE CHAMPS 3-3/4 digit, 4000 points
RÉCEPTEUR LARGE BANDE de 100 kHz à 2 GHz - Mode RMS
- FM bande étroite, FM bande large, AM et BLU - Double affichage pour
- Précision de fréquence assurée par PLL fréquence, CC et T° GENERALE
- Sensibilité environ 0-6 dB µV EMF - Interface RS232 ELECTRONIQUE
- Impédance 50 Ω - Décibelmètre SERVICES
- Toutes les fonctions sélectionnables par menu - Capacimètre 205, RUE DE L’INDUSTRIE
- HP intégré - Inductancemètre Zone Industrielle – B.P. 46
77542 SAVIGNY-LE-TEMPLE Cedex
- Interfaçable RS232 pour connexion PC ... - Thermomètre (C°/F°) Tél. : 01.64.41.78.88
- Continuité et diodes Télécopie : 01.60.63.24.85
- Test des circuits logiques Minitel : 3617 code GES
- Protection contre les G.E.S. – MAGASIN DE PARIS
212, AVENUE DAUMESNIL - 75012 PARIS
surtensions ... TEL. : 01.43.41.23.15
FAX : 01.43.45.40.04

G.E.S. OUEST : 1, rue du Coin, 49300 Cholet,


tél. : 02.41.75.91.37
G.E.S. LYON : 22, rue Tronchet, 69006 LYON,
tél. : 04.78.93.99.55
G.E.S. COTE D’AZUR : 454, rue Jean Monet
B.P. 87 - 06212 Mandelieu Cedex,
Documentation sur demande tél. : 04.93.49.35.00
G.E.S. NORD : 9, rue de l’Alouette,
62690 Estrée-Cauchy, tél. : 03.21.48.09.30 &
OSCILLOSCOPE 3502C 03.21.22.05.82
G.E.S. PYRENEES: 5, place Philippe Olombel,
81200 Mazamet, tél. 05.63.61.31.41
OSCILLOSCOPE ANALOGIQUE 20 MHz
SRC pub 02 99 41 78 78 07/99

- 2 canaux, double trace Prix revendeurs et exportation. Garantie et service


après-vente assurés par nos soins. Vente directe
ou par correspondance aux particuliers et aux
- Loupe x 5 revendeurs. Nos prix peuvent varier sans préavis
en fonction des cours monétaires internationaux.
Les spécifications techniques peuvent être
- Fonctions X et Y modifiées sans préavis des constructeurs.

- Testeur de composants ...


Catalogue général
contre 2O F + 10 F de port

ELECTRONIQUE 76 magazine - n° 2
TECHNOLOGIE

Microcontrôleurs
Micr ocontrôleurs PIC
De la théorie
aux applications
3ème partie
par tie

Le PIC 16F84

Figure 1 : Brochage du PIC 16F84.

Même s’il nous reste encore beaucoup de notions théoriques à


découvrir, nous allons aujourd’hui prendre contact avec « notre »
microcontrôleur, c’est-à-dire avec celui que nous avons décidé
d’utiliser comme support pratique à cette série d’articles. Ceci
nous permettra de découvrir tout à la fois les aspects matériels
et logiciels de sa mise en œuvre.

e circuit n’est certes pas le plus complet ni le miner tout à tour le rôle afin de comprendre son schéma
plus performant de la famille mais il permet déjà de mise en œuvre.
de réaliser de nombreuses applications et, sur-
tout, il dispose d’une mémoire de programme de
type EEPROM c’est-à-dire programmable et effa- L’alimentation
çable électriquement jusqu’à mille fois. C’est
donc le circuit idéal pour faire des exercices car toutes les Comme tout circuit intégré qui se respecte, un microcon-
erreurs sont permises sans coûter un sou ! trôleur a besoin d’être alimenté et c’est le rôle dévolu à VSS,
qui est la patte de masse, et à VDD qui est l’alimentation
Précisons sans plus attendre que, pour ce qui nous occupe positive. Pour les 16F84 en versions XT, RC et LP (voir ci-
ici, ce circuit est équivalent au célèbre PIC 16C84 que l’on dessous) cette alimentation peut varier de 4 volts à 6 volts
peut considérer comme étant son prédécesseur. Il va alors que pour les versions HS (idem) elle doit rester com-
d’ailleurs bientôt disparaître du catalogue Microchip au pro- prise entre 4,5 et 5,5 volts. Il existe aussi des versions L
fit du seul 16F84. Toutes les manipulations que nous vous (16LF84) qui peuvent fonctionner de 2 volts à 6 volts mais
présenterons pourront donc être réalisées indifféremment elles sont moins répandues que les versions classiques.
avec l’un ou avec l’autre de ces circuits.
Les circuits PIC étant réalisés en technologie CMOS, ils
Le PIC 16F84, dont le brochage est indiqué figure 1, est consomment fort peu et les valeurs typiques auxquelles il
présenté en boîtier 18 pattes ; pattes dont nous allons exa- faut s’attendre pour notre 16F84 sont ainsi les suivantes :

ELECTRONIQUE 77 magazine - n° 4
TECHNOLOGIE

C R Fréquence Variation typique


entre circuits +V
20 pF 5 kΩ 4,61 MHz ± 25 % VDD
20 pF 10 kΩ 2,66 MHz ± 24 %
20 pF 100 kΩ 311 kHz ± 39 %
100 pF 5 kΩ 1,34 MHz ± 21 % 10 nF 16F84
100 pF 10 kΩ 756 kHz ± 18 %
100 pF 100 kΩ 82,8 kHz ± 28 %
300 pF 5 kΩ 428 kHz ± 13 % VSS
300 pF 10 kΩ 243 kHz ± 13 %
300 pF 100 kΩ 26,2 kHz ± 23 %
Tableau 1 : Fréquence de fonctionnement de l’horloge Figure 2 : L’alimentation doit être
en fonction des éléments passifs externes. correctement découplée.

- moins de 2 mA alimenté sous 5 volts peuvent parfois demander jusqu’à dix Lorsque le programme exécuté ne
avec une horloge (voir ci-dessous) à cycles d’horloge pour s’exécuter. nécessite aucune notion de temps pré-
4 MHz ; cise, on peut aussi utiliser avec le
- moins de 15 µA alimenté sous 2 volts Pour ce qui est des circuits PIC, nous 16F84 un oscillateur à circuit R-C, qui
avec une horloge à 32 kHz. sommes en présence de microcontrô- présente l’intérêt d’être très écono-
leurs à architecture dite RISC, ce qui, mique. Son schéma est alors celui de
Lorsqu’il est alimenté sous 5 volts, les entre autres choses, signifie qu’ils exé- la figure 4 sur lequel sont indiquées
lignes d’entrées/sorties du PIC peuvent cutent une instruction par cycle d’hor- les valeurs limites des composants
être considérées comme compatibles loge. La fréquence de l’horloge externe passifs à utiliser.
TTL alors qu’elles sont compatibles des étant divisée par quatre pour générer
circuits logiques CMOS sur toute leur l’horloge interne ; un PIC utilisant une Le tableau 1 précise, quant à lui, les
plage de tension d’alimentation. Concrè- horloge à 10 MHz exécute donc une ins- fréquences obtenues pour diverses
tement, cela signifie que vous pouvez truction en 400 ns (nanoseconde) ce valeurs des composants passifs ainsi
raccorder directement à ces lignes des qui est une vitesse assez remarquable que la variation de fréquence typique
circuits logiques de la série CMOS 4000 pour un circuit en technologie CMOS. que l’on peut rencontrer d’un boîtier à
sans aucun problème.
Cette horloge utilise les pattes OSC1
L’alimentation d’un PIC 16F84 ne et OSC2 du boîtier (voir figure 1) et peut C1
nécessite pas de précaution particu- être réalisée de diverses façons. La Osc1
lière, surtout vue la faible consomma- plus classique fait appel à un quartz
tion du circuit mais, comme pour tout ou à un résonateur céramique, ce qui
circuit logique rapide, il faut tout de est un peu moins coûteux et à peine Quartz ou
même veiller à la découpler. Cela doit moins stable. Le schéma à utiliser est résonateur 16F84
céramique
être fait au plus près du boîtier, avec alors celui de la figure 3, sachant que
un condensateur céramique de bonne l’horloge interne fonctionne à une fré-
qualité de 10 nF environ, comme cela quence égale au quar t de celle du Osc2
est rappelé figure 2. quartz ou du résonateur.
C2
En fait, les PIC 16F84 comme la majo-
L’horloge rité des autres circuits de cette famille, Mode Fréquence C1 et C2
considèrent trois modes de fonction- XT 455 kHz 47 à 100 pF
L’horloge est un élément essentiel nement différents de cet oscillateur à XT 2 MHz 15 à 33 pF
dans un microcontrôleur ou micropro- quartz : XT 4 MHz 15 à 33 pF
cesseur car c’est elle qui r ythme le HS 8 MHz 15 à 33 pF
fonctionnement de toute la logique - le mode LP pour Low Power qui est uti- HS 10 MHz 15 à 33 pF
interne et qui cadence donc l’exécution lisable avec des fréquences allant de
des instructions du programme. 32 kHz à 200 kHz environ ; C1 et C2 en fonction de la fré-
- le mode XT pour XTal qui est le mode quence pour les résonateurs céra-
Selon les circuits, leur type ou leur tech- standard lorsque l’on fonctionne avec miques
nologie, la fréquence de l’horloge visible un quartz et qui correspond à des fré-
de l’extérieur, sous forme d’un quartz quences de 100 kHz à 4 MHz environ ; Mode Fréquence C1 et C2
par exemple, n’a parfois qu’un lointain - le mode HS pour High Speed qui est LP 32 kHz 68 à 100 pF
rapport avec celle réellement utilisée destiné aux quartz de fréquences les LP 200 kHz 15 à 33 pF
en interne. Ainsi, un microprocesseur plus élevées ; typiquement de 4 MHz à XT 100 kHz 100 à 150 pF
muni d’un quartz à 10 MHz n’est pas 10 MHz. XT 2 MHz 15 à 33 pF
nécessairement plus rapide qu’un cir-
XT 4 MHz 15 à 33 pF
cuit d’un autre type muni d’un quartz Le choix entre ces différents modes
à 4 MHz. Il suffit en effet que les fac- est évidemment réalisé en partie par HS 4 MHz 15 à 33 pF
teurs de division internes diffèrent. la fréquence du quartz ou du résona- HS 10 MHz 15 à 33 pF
teur utilisé mais aussi au moyen de C1 et C2 en fonction de la fré-
Un autre paramètre affecte la vitesse deux bits d’un registre interne qu’il faut quence pour les quartz
d’un microcontrôleur, c’est le nombre de positionner correctement lors de la pro-
cycles d’horloge nécessaires pour exé- grammation du circuit. Ce sont les bits Figure 3 : Utilisation d’un quartz
cuter une instruction. Dans certains cir- FOSC1 et FOSC2 dont nous reparlerons pour piloter l’oscillateur d’horloge.
cuits, les instructions les plus complexes au moment opportun.

ELECTRONIQUE 78 magazine - n° 4
TECHNOLOGIE

un autre. Cette variation est sans impor-


tance lorsque le programme n’utilise VDD VDD
pas la vitesse d’exécution des ins-
tructions pour mesurer un temps de
façon précise.
R
D’autres schémas sont utilisables avec
des oscillateurs d’horloge externes
Osc1 MCLR
mais ils ne présentent aucun intérêt à
ce stade de notre étude et nous les
passerons donc sous silence. C
16F84 16F84

Le circuit de reset
Fosc/4 Osc2
Le « reset », ou la réinitialisation en bon
français, est une opération essentielle
dans un microcontrôleur ou micropro- Figure 4 : Une horloge économique Figure 5 : Utilisation du circuit de
cesseur. Ce reset a pour effet de posi- avec une simple cellule R - C. reset interne à la mise sous tension.
tionner dans un état déterminé et
connu un certain nombre de registres
et d’éléments internes mais aussi et 0,05 volt par ms. C’est tout de même boîtier dans lequel il est contenu. Notre
surtout, il a pour fonction principale de le cas dans la majorité des situations. PIC 16F84, avec son boîtier 18 pattes,
charger le contenu du PC (voir notre n’offre ainsi que 13 pattes pour les
précédent numéro si nécessaire) avec Lorsque ce reset interne ne suffit pas ; entrées/sorties une fois enlevées les
l’adresse de la première instruction le schéma à adopter est alors celui de pattes utilisées par l’alimentation, l’hor-
exécutable du programme, déclenchant la figure 6. La résistance R doit être loge et le reset.
ainsi l’exécution de ce dernier. inférieure à 40 kΩ afin que le courant
entrant par la patte MCLR barre ne Ces entrées/sorties sont organisées
C’est pour cela que, lorsque votre PC génère pas une trop forte chute de ten- de la façon suivante :
(celui qui est sur votre bureau, pas celui sion. La résistance R1, quant à elle,
qui est dans un PIC !) est vraiment doit être comprise entre 100 Ω et 1 - 5 lignes constituent ce que l’on appelle
« planté », l’action sur le poussoir de kΩ afin de limiter le courant de le Port A et sont repérées RA0 à RA4 ;
reset de la face avant lui permet tou- décharge de C dans la patte MCLR - 8 lignes constituent ce que l’on appelle
jours de redémarrer correctement. barre lors d’un claquage électrosta- le Port B et sont repérées RB0 à RB7.
tique. La diode D enfin (1N 914, 1N
Sur une application à microcontrôleur 4148 ou similaire) permet au conden- Toutes les lignes de ces ports sont des
« normale », le reset ne doit en prin- sateur C de se décharger ailleurs que entrées/sorties dont le sens de fonc-
cipe être réalisé qu’une seule fois, lors dans la patte MCLR barre lorsque l’ali- tionnement (entrée ou sortie) est défini
de la mise sous tension de l’applica- mentation est coupée. individuellement par logiciel en posi-
tion. En ef fet, si son programme ne tionnant des bits dans un registre
comporte pas d’erreur ou « bug », il n’y La valeur de C dépend évidemment de approprié. Cela signifie qu’à un instant
a ensuite aucune raison valable de faire la vitesse de reset désirée. Hormis dans donné, dans un programme, vous pou-
à nouveau un reset. quelques cas particuliers, une valeur vez très bien programmer RA2 en
de 0,1 µF à 1 µF convient généralement. entrée et RB6 en sortie et, quelques
De ce fait, la majorité des circuits PIC instructions plus tard, faire le contraire.
- et le 16F84 est dans ce cas - dispose
d’une circuiterie interne de reset auto- Les entrées/sorties L’intérêt d’une telle manœuvre ne vous
matique à la mise sous tension ; ce semble peut-être pas évident et pour-
que l’on appelle en anglais POR pour Même si cela vous semble peu ; ce que tant il l’est, comme nous le verrons
Power On Reset. Si ce seul reset vous nous venons de voir permet de faire ultérieurement dans cette série, pour
suf fit, le schéma à utiliser pour le fonctionner un microcontrôleur PIC s’inter facer avec un clavier ou bien
mettre en œuvre est indiqué figure 5. auquel il ne reste plus qu’à ajouter un encore pour connecter un clavier et des
La patte MCLR barre est reliée à l’ali- programme bien sûr, mais aussi ce que afficheurs sur les mêmes pattes par
mentation, directement ou via une l’on désigne plus généralement sous exemple.
résistance de quelques kΩ. Il est dif- le terme d’entrées/sorties.
ficile d’imaginer un schéma plus Remarquez également, en examinant
simple. L’intérêt d’un microcontrôleur réside le brochage de la figure 1, que la ligne
tout à la fois dans le nombre d’en- RA4 est partagée avec une ligne appe-
Il existe cependant deux situations trées/sorties disponibles mais aussi lée T0CKI. Cette patte peut en effet éga-
dans lesquelles ce schéma est insuf- dans leur souplesse de programma- lement ser vir d’entrée d’horloge au
fisant : lorsque la vitesse de croissance tion. Ainsi, cer taines lignes peuvent timer interne dans certaines applica-
de la tension d’alimentation est trop n’être que des entrées, d’autres que tions. Ici aussi, c’est à un bit à posi-
faible ou lorsque l’on souhaite dispo- des sorties et d’autres encore, les plus tionner dans un registre interne
ser d’une possibilité de reset manuel, intéressantes, être des entrées ou des qu’échoit la tâche de faire la sélection.
avec un bouton poussoir par exemple. sorties au rythme du bon vouloir d’un
programme interne. Lorsque le moment sera venu, nous
Il faut en effet garder présent à l’esprit verrons en détail tous les modes de
que, pour que le circuit de reset interne Le nombre d’entrées/sorties, quant à fonctionnement de ces entrées/sorties
à la mise sous tension fonctionne cor- lui, dépend, bien sûr, de la puce du dont cer taines disposent de résis-
rectement, la tension d’alimentation microcontrôleur elle-même mais aussi, tances de rappel internes au niveau
VDD doit progresser plus vite que et dans une large mesure, du type de haut programmables, d’autres de trig-

ELECTRONIQUE 79 magazine - n° 4
TECHNOLOGIE

Les mémoires de 14 bits. Elle est réalisée en tech-


nologie EEPROM Flash, c’est-à-dire
VDD Bien qu’elles ne soient ni qu’elle peut être programmée et effa-
visibles ni accessibles directe- cée électriquement.
D
1N914 R ment via les pattes externes du
boîtier, on ne peut pas présen- La mémoire de données classique a
1N4148 une taille de 68 mots de 8 bits réelle-
R1 ter un microcontrôleur sans par-
MCLR ler de ses mémoires internes. ment disponibles pour l’utilisateur. Elle
est complétée par des registres aux
RESET C En général, elles sont au fonctions bien précises que nous pré-
nombre de deux, la mémoire senterons le mois prochain.
16F84
mor te (ROM ou PROM) ou
mémoire de programme et la La mémoire EEPROM de données,
mémoire vive (RAM) ou mémoire quant à elle, contient 64 mots de 8 bits
de données. et se trouve dans un espace d’adres-
sage différent de celui des deux autres
Dans le cas du 16F84, une mémoires du circuit.
Figure 6 : Un circuit de reset manuel qui mémoire de données supplé-
reste fort simple. mentaire est présente sous
forme d’EEPROM afin de stoc- L’architecture interne
ker de manière permanente des
gers de Schmitt, etc. Retenez pour le informations lorsque l’alimentation du Nous savons maintenant ce que
moment que ce sont des pattes d’en- circuit est coupée. contient le circuit vu de l’extérieur ;
trée ou de sortie comme celles que l’on reste à voir comment tout cela s’orga-
trouve sur n’importe quel circuit logique, Une telle mémoire est utile, lorsque nise en interne. Cette organisation est
avec un petit « plus » toutefois. En effet, l’on emploie le microcontrôleur dans ce que l’on désigne habituellement
afin de simplifier la mise en œuvre du un téléviseur ou un magnétoscope par sous le vocable d’architecture interne
16F84, ces sorties sont à fort courant exemple, car elle conserve les para- et constitue un paramètre fondamen-
afin de pouvoir piloter directement des mètres des canaux reçus, des réglages tal des caractéristiques d’un micro-
LED sans nécessiter de transistor préférentiels, etc. contrôleur.
amplificateur. Chaque sortie peut ainsi
débiter 20 mA lorsqu’elle est au niveau Dans le cas du 16F84 la mémoire de C’est donc à ce passionnant sujet que
logique haut et absorber 25 mA lors- programme a une taille de 1 K mots de sera consacrée l’intégralité de notre
qu’elle est au niveau logique bas. 14 bits c’est-à-dire de… 1 024 mots prochain article. ◆

PROTEK 506
PROTEK 3200 MULTIMÈTRE DIGITAL
ANALYSEUR DE SPECTRE, MESUREUR DE CHAMPS 3-3/4 digit, 4000 points
RÉCEPTEUR LARGE BANDE de 100 kHz à 2 GHz - Mode RMS
- FM bande étroite, FM bande large, AM et BLU - Double affichage pour
- Précision de fréquence assurée par PLL fréquence, CC et T° GENERALE
- Sensibilité environ 0-6 dB µV EMF - Interface RS232 ELECTRONIQUE
- Impédance 50 Ω - Décibelmètre SERVICES
- Toutes les fonctions sélectionnables par menu - Capacimètre 205, RUE DE L’INDUSTRIE
- HP intégré - Inductancemètre Zone Industrielle – B.P. 46
77542 SAVIGNY-LE-TEMPLE Cedex
- Interfaçable RS232 pour connexion PC ... - Thermomètre (C°/F°) Tél. : 01.64.41.78.88
- Continuité et diodes Télécopie : 01.60.63.24.85
- Test des circuits logiques Minitel : 3617 code GES
- Protection contre les G.E.S. – MAGASIN DE PARIS
212, AVENUE DAUMESNIL - 75012 PARIS
surtensions ... TEL. : 01.43.41.23.15
FAX : 01.43.45.40.04

G.E.S. OUEST : 1, rue du Coin, 49300 Cholet,


tél. : 02.41.75.91.37
G.E.S. LYON : 22, rue Tronchet, 69006 LYON,
tél. : 04.78.93.99.55
G.E.S. COTE D’AZUR : 454, rue Jean Monet
B.P. 87 - 06212 Mandelieu Cedex,
Documentation sur demande tél. : 04.93.49.35.00
G.E.S. NORD : 9, rue de l’Alouette,
62690 Estrée-Cauchy, tél. : 03.21.48.09.30 &
OSCILLOSCOPE 3502C 03.21.22.05.82
G.E.S. PYRENEES: 5, place Philippe Olombel,
81200 Mazamet, tél. 05.63.61.31.41
OSCILLOSCOPE ANALOGIQUE 20 MHz
SRC pub 02 99 41 78 78 07/99

- 2 canaux, double trace Prix revendeurs et exportation. Garantie et service


après-vente assurés par nos soins. Vente directe
ou par correspondance aux particuliers et aux
- Loupe x 5 revendeurs. Nos prix peuvent varier sans préavis
en fonction des cours monétaires internationaux.
Les spécifications techniques peuvent être
- Fonctions X et Y modifiées sans préavis des constructeurs.

- Testeur de composants ...


Catalogue général
contre 2O F + 10 F de port

ELECTRONIQUE 80 magazine - n° 4
TECHNOLOGIE

Microcontrôleurs
Micr ocontrôleurs PIC
De la théorie
aux applications
4ème partie
par tie

L'architectur
L'ar chitecture
e interne
interne
du PIC 16F84

Figure 1 : Architecture interne du PIC 16F84.

Le mois dernier nous avons décrit l’extérieur du PIC 16F84 et notamment comment
réaliser le circuit d’alimentation, d’horloge et de reset. Vous possédez donc maintenant
toutes les informations « hard » pour faire fonctionner ce microcontrôleur. Nous allons,
ce mois-ci, visiter l’intérieur de ce composant de façon à comprendre son mécanisme
de fonctionnement. Ainsi, nous pourrons, au fur et à mesure, découvrir par quel moyen
générer ou lire un état logique sur les ports d’entrées/sorties, faire du calcul, créer
des temporisations et beaucoup d’autres choses.

première vue, le schéma de la figure 1 peut sem- Mémoire programme et PC


bler complexe. L’explication du rôle des blocs
principaux vous permettra de démystifier cette En haut à gauche de la figure 1 se trouve le bloc où est
structure que l’on retrouve dans la plupart des stocké votre programme. Cette mémoire contient toutes
microcontrôleurs actuels. les « instructions » que doit effectuer le microcontrôleur.

ELECTRONIQUE 75 magazine - n° 5
TECHNOLOGIE

Pour le PIC 16F84, chaque instruction truction. Généralement ces actions - Le bloc nommé « 8 Level Stack » ou
est codée sur 14 bits et la taille sont ef fectuées physiquement par « Pile » : il est utilisé par le microcon-
mémoire est de 1 Ko x 14 bits (soit l’ALU, en relation étroite avec le trôleur pour gérer le retour des sous-
1 024 instructions à la file ; 1 Ko = registre de travail W. programmes et des interruptions.
1 024 en informatique !). Cette taille - Le bloc « TMR0 » : il ser t au fonc-
reste suffisante pour les petites appli- tionnement du TIMER.
cations qui nous intéressent. Le Pro- Mémoire RAM - Le bloc I/O ports : il permet d’écrire
gram Counter ou « PC » (à droite de la ou de lire sur les ports A et B.
mémoire programme sur la figure 1) Pour fonctionner, un programme doit - Le bloc Timing Génération associé au
est un registre qui pointe l’instruction généralement pouvoir stocker tempo- bloc présent juste sur sa droite gère
à exécuter et permet donc au pro- rairement des données. Une zone est tous les signaux d’horloges du sys-
grammeur de ce déplacer à volonté spécialement prévue à cet effet : c’est tème.
dans cette mémoire. A la mise sous la RAM (Ramdom Acces Memor y). - Le registre FSR : utilisé pour l’adres-
tension, ce registre est mis à 0 et Contrairement à la Mémoire Pro- sage indirect de la mémoire RAM.
pointe donc la première case mémoire. gramme, cette dernière s’ef face - Le bus de donnée : il met en liaison
Durant l’exécution du programme, lorsque l’on coupe l’alimentation. Vous les blocs utilisant des données.
chaque instruction pointée transite trouverez ce bloc en haut, au centre de
dans le « registre d’instruction » afin la figure 1. On s’aperçoit que la taille Cette description interne nous a per-
qu’elle puisse être traitée par le de cette mémoire est de 68 x 8 bits. mis d’identifier les blocs principaux de
« contrôleur et décodeur d’instruc- Comme chaque donnée est codée sur ce microcontrôleur et de mieux com-
tions » (ces deux blocs se trouvent à 8 bits, il est donc possible de mémo- prendre le déroulement d’un pro-
gauche dans la figure 1). C’est ce der- riser 68 données à la file. De plus, la gramme. Nous allons maintenant nous
nier qui gère la suite d’actions internes mémoire RAM contient deux autres intéresser plus par ticulièrement aux
nécessaires à la bonne exécution de zones (appelées Bank 0 et Bank 1) différentes mémoires afin de savoir où
cette instruction. réservées aux registres de configura- et comment stocker un programme,
tion du système. Nous détaillerons la configurer les ports d’entrée/sortie et
La mémoire programme peut être de fonction de ces registres à la fin de cet utiliser la mémoire de données.
différente nature selon le microcon- article.
trôleur utilisé. Dans notre cas, la
mémoire est de type FLASH/ROM,
L’organisation
c’est-à-dire réinscriptible à volonté. Mémoire de données de la Mémoire
Mais il existe aussi des mémoires EEPROM Programme
EPROM qui sont ef façables par UV
ainsi que des mémoires OTP qui ne Une par ticularité (et aussi un grand Sur la figure 2, nous voyons que l’es-
peuvent être programmées qu’une avantage) du PIC16F84 est de possé- pace Mémoire Programme commence
seule fois. der une mémoire de 64 x 8 bits où l’on à l’adresse 0000h et finit à l’adresse
peut stocker des données qui ne dis- 3FFh. Le « h » indique que le nombre
paraissent pas lors d’une coupure d’ali- qui précède est écrit en base hexadé-
Unité de calcul – ALU mentation : c’est la mémoire EEPROM cimale. Cela permet de loger 1 024
(en haut à droite de la figure 1). Géné- instructions. Enfin, pas tout à fait, la
En bas et au centre, se trouve le cœur ralement cette zone sert à mémoriser case mémoire 0000h est réservée au
du système appelé « ALU » (Unité Arith- des paramètres d’étalonnage ou de
métique et Logique). C’est cette partie configuration. Mais attention, elle pos-
qui effectue physiquement toutes les sède un inconvénient : le temps d’ac-
actions internes dictées par le Contrô- cès est relativement long. Elle ne
leur de Décodeur d’Instructions. Par convient donc pas pour une utilisation
exemple, l’ALU peut effectuer une addi- qui demande de la rapidité (calcul,
tion, une soustraction ainsi que les opé- asservissement, etc.).
rations logiques telles que « ET »,
« OU », etc.
Rapidement,
Pour effectuer toutes ces opérations, il reste encore…
l’ALU utilise les données en prove-
nance d’un registre de travail appelé Pour finir cette description générale,
« W » (Work Register). Vous découvri- nous allons présenter succinctement
rez que ce registre est largement uti- les blocs restants.
lisé par les instructions du pro-
gramme. - Le Status Register ou Registre d’état :
ce registre donne plusieurs indications :
le résultat d’une opération effectuée
En résumé… par l’ALU (résultat égal zéro par
exemple), l’état de l’initialisation du
Le PC indique quelle instruction doit microcontrôleur (reset), etc. Il permet
être effectuée. Cette instruction est aussi de définir la zone d’accès en
transférée dans le Contrôleur de Déco- mémoire RAM Bank 0 et Bank 1 pour
deur d’Instructions qui assure l’en- accéder aux registres de configuration Figure 2 : Plan de la Mémoire
chaînement des actions internes (pas d’inquiétude nous verrons cela Programme et de la pile.
nécessaires pour accomplir cette ins- plus tard).

ELECTRONIQUE 76 magazine - n° 5
TECHNOLOGIE

vecteur de Reset (dans cette case est Les cases mémoires comprises entre niveaux de tension présents sur les
logée l’adresse du début du pro- les adresses 00h et 0Bh sont réser- pattes.
gramme) et la case mémoire 0004h vées aux registres de configuration du - TRISA et TRISB sont les registres
au Vecteur d’Interruption des péri- système (zone SFRs). Partitionnée en de configuration des por ts A et B. Ils
phériques (utilisée lorsque l’on active deux parties distinctes Bank 0 et Bank définissent quels bits seront utilisés
les interruptions). Le registre PC, qui 1, cette zone possède un double en entrée ou en sortie. Un « 1 » confi-
pointe en permanence l’instruction à accès. Si l’on active la Bank 0, les gure le bit en entrée et un « 0 » en sor-
exécuter, se compose de deux registres représentés à gauche sur la tie.
registres : l’un, de huit bits, est appelé figure 3 sont accessibles. Si par contre - EEDATA, EEADR, EECON1 et
le PCL (Program Counter Low) et la Bank 1 est activée, les registres EECON2 sont les registres à utiliser
l’autre, de 5 bits, le PCH (Program actifs seront ceux de droite. La sélec- pour la mémoire de données
Counter High), le tout formant 13 bits. tion de la Bank s’effectue à travers les EEPROM.
Le PCL est directement accessible en bits de contrôle RP0 et RP1 du registre - PCLATH permet d’écrire dans le
lecture comme en écriture. Par contre, STATUS (03h). PCH.
le PCH peut être uniquement acces- - INTCON est le registre de contrôle
sible en écriture à travers un registre La zone de mémoire comprise entre des interruptions. Il indique l’appari-
appelé PCLATH. les adresses 0Ch et 4Fh (68 cases tion d’un événement externe (par
mémoires) est utilisée pour stocker les exemple le passage d’un niveau haut
Le bloc Pile (Stack), à huit niveaux, per- données de notre programme. La zone à un niveau bas sur l’une des broches
met, d’une par t, de mémoriser partant de 8Ch allant jusqu’à CFh de d’entrée) ou interne (par exemple la
l’adresse en cours lors d’un « saut » à la Bank 1 est une zone « image » de la fin de contage du TIMER interne). Il
un sous-programme ou à un pro- zone précédente : les données y sont permet aussi de valider les interrup-
gramme d’interruption et, d’autre part, strictement identiques. Par exemple, tions : lors d’un événement le pro-
de recharger le PC avec cette adresse la valeur inscrite dans la case mémoire gramme en cours peut être arrêté pour
pour le retour (avec les instructions 0Ch sera toujours égale à celle de la laisser la place au programme d’in-
CALL, RETURN, RETFIE et RETLW). Les case mémoire 8Ch. terruption. Une fois ce dernier terminé,
huit niveaux de la pile autorisent donc le programme principal reprend son
huit sous-programmes imbriqués. Maintenant que nous savons accéder déroulement.
à la mémoire de données, voyons le
rôle de chacun des registres de confi-
L’organisation guration. Le registre d’état
de la Mémoire ou « STATUS »
de Données RAM - TMR0 et OPTION permettent de
contrôler le fonctionnement du TIMER Dans cet article, à plusieurs reprises
La mémoire RAM est organisée en un interne. nous avons parlé du registre d’état ou
bloc de 128 cases mémoires de 8 bits - PCL constitue, comme nous l’avons « STATUS ». Nous allons maintenant le
(8 bits étant le format d’une donnée). déjà vu, la partie basse du PC. décrire en détail. Situés à l’adresse
L’adresse de début étant 00h et - STATUS est un registre (contenant 03h, les 8 bits qui le composent por-
l’adresse de fin 7Fh. certains bits pouvant être lus et écrits tent les noms suivants : C, DC, Z, PD,
et d’autres pouvant seulement être RP0, RP1 et IRP. Analysons-les sépa-
lus) qui permet de contrôler certaines rément.
fonctions du microcontrôleur comme,
par exemple, la sélection de la Bank - Le bit CARRY (C) indique une retenue
de la mémoire RAM, l’indication sur lors d’une opération arithmétique. Il est
une opération ef fectuée par l’ALU, aussi utilisé lors d’une opération de
etc. rotation.
- FSR est le File Select Register. Il per- - Le bit DIGIT CARRY (DC) indique une
met de sélectionner et d’accéder aux retenue sur les quatre premiers bits du
données en RAM quand on utilise résultat d’une opération arithmétique.
l’adressage indirect. Ce bit est généralement utilisé pour la
- PORTA et PORTB sont deux registres conversion « binaire-BCD ».
permettant d’accéder aux deux por ts - Le bit ZERO (Z) passe à 1 si le résul-
du PIC. Lorsqu’un por t est utilisé tat d’une opération est nul.
comme sor tie, une écriture dans le - Le bit POWER DOWN (PD) est posi-
registre correspondant activera direc- tionné à 0 lorsque le microcontrôleur
tement les broches de sortie. Inverse- exécute l’instruction SLEEP qui permet
ment, si un por t est configuré en de mettre le PIC en « veille » en arrê-
entrée, la lecture du registre corres- tant l’horloge. Au reset, ce bit est posi-
pondant donnera l’image binaire des tionné à 1.

Figure 3 : Plan de la Mémoire


de Données RAM. Figure 4 : Positionnement des bits qui constituent le registre STATUS.

ELECTRONIQUE 77 magazine - n° 5
TECHNOLOGIE

- Le bit TIME OUT (TO) passe à 0 lorsque le Watch Dog Le Watch Dog, brièvement…
atteint la fin de son comptage. Au reset, ce bit est posi-
tionné à 1. Ce « chien de garde » est une sécurité pour votre programme.
- Les bits RP0 et RP1 sélectionnent la Bank RAM. Si RP0 En effet, il a pour fonction d’effectuer un Reset du micro-
= 0 et RP1 = 0 la Bank 0 est sélectionnée. Pour accéder à contrôleur si on ne le réarme pas à temps. Ainsi, son utili-
la Bank 1 il faudra RP0 = 1 et RP1 = 0. sation prévient la présence de boucles infinies et facilite la
- Le bit IRP doit être maintenu à zéro pour le PIC 16F84. mise au point des programmes.

Après avoir passé en revue l’essentiel des blocs internes Le Watch Dog est constitué d’un oscillateur interne auto-
et des registres, il nous reste à décrire les différents modes nome qui ne nécessite aucun composant externe. Le WDT,
d’adressages ainsi que les différentes sources de démar- nom donné au Watch Dog, peut être activé ou désactivé en
rage d’un programme. phase de programmation. Son cycle de comptage est de
18 ms, mais il peut être augmenté pour atteindre jusqu’à
2,3 secondes. En effet, la programmation du prédiviseur
Adressage Direct (Prescaler) permet de diviser la fréquence de l’oscillateur
et Adressage Indirect qui pilote le WDT. Le facteur de division est compris entre
1 et 128. Si une impulsion de fin de comptage (Overflow)
Les microcontrôleurs fonctionnent suivant deux modes est générée durant le fonctionnement normal du micro-
d’adressage. contrôleur, un processus de Reset est activé et le programme
recommence du début (vecteur de Reset). Il convient donc
Le premier (et le plus simple) est l’adressage direct : il uti- de réarmer le WDT de façon régulière par l’instruction
lise l’opérande de l’instruction pour désigner la case mémoire CLEARWDT.
voulue. Par exemple : MOVWF PORTA transfère directement
le contenu du registre W dans le registre de configuration Tout au long de cet article, nous avons étudié l’architec-
PORTA. ture interne de notre microcontrôleur ainsi que les prin-
cipes de fonctionnement et d’adressage, le mois prochain
L’adressage indirect, lui, est un peu plus compliqué. Il uti- nous expliquerons comment utiliser les ports A et B à tra-
lise le registre INDF (adresse 00h) et le registre FSR. Pour vers de petits exemples. Nous décrirons également la struc-
accéder à la case mémoire voulue, il faut tout d’abord char- ture interne du TIMER ainsi que les différentes sources
ger son adresse dans le FSR puis utiliser le registre INDF d’interruptions.
pour échanger les données. Pour y voir plus clair, prenons ◆ M.A.
un exemple :

Movlw 0020 : Charge le registre de travail W avec la


valeur 20.
Movf FSR : Charge le registre FSR avec le contenu
de W. (On remarquera l’adressage direct !)
ABONNEZ-VOUS
NEXT clrf INDF : On met à zéro la case mémoire pointée POUR 2 ANS À
par FSR en écrivant dans INDF.
Incf FSR : On incrémente FSR.
Btfss FSR,4 : Si le bit 4 du registre FSR est égal à 1
saute la prochaine instruction sinon
effectue l’instruction suivante.
Goto NEXT : retourne à NEXT.

Ce programme permet de mettre à zéro les cases mémoires


allant de 20h à 2Fh. L’instruction clr f INDF met à zéro la
case mémoire pointée par FSR. INDF est utilisé comme un
et choisissez votre cadeau!
registre normal qui viendrait, en quelque sorte, se substi-
tuer à la case mémoire pointée par FSR.

Fonctions relatives au RESET


Le RESET est l’action qui permet de commencer le dérou-
lement de votre programme. Pour cela, après un RESET, la
donnée contenue à l’adresse 0000h de la Mémoire Pro-
gramme est transférée dans le PC. Cette donnée est appe-
lée « vecteur » de RESET : elle désigne l’adresse de la pre-
mière instruction de votre programme.
SRC pub 02 99 42 52 73 10/99

Plusieurs sources de RESET sont possibles :


- POR (Power On Reset) : cette condition de Reset est obte-
nue lorsque le microcontrôleur est mis sous tension.
- MCLR (patte 4) : si la patte MCLR passe d’un état bas à
un état haut, un Reset est généré. …Pour en savoir plus,
- WATCH DOG : si le Watch Dog atteint la fin de son comp- rendez-vous en page 66 de ce magazine…
tage, un Reset est généré.

ELECTRONIQUE 78 magazine - n° 5
TECHNOLOGIE

Microcontr
Micr ocontrô
ôleurs
PIC
5ème partie
par tie

Le mois dernier nous avons commencé à analyser la structure interne


d’un microcontrôleur de la famille PIC, et notamment du modèle
TARO dont nous avons décrit certaines ressources disponibles comme
la mémoire de données, le registre d’état STATUS et les différents
signaux de RESET. Nous allons maintenant poursuivre la description
de ce composant en analysant en détail le fonctionnement des deux
ports d’entrée/sortie (I/O) qui se trouvent à l’intérieur.

e PIC 16F84 La zone des registres


est caractérisé spéciaux est une zone
par 13 lignes d’en- particulière de la mémoire
trées/sor ties qui du microcontrôleur où cer-
lui permettent de taines positions ou
communiquer avec le monde exté- registres ont des fonctions
rieur. par ticulières comme, par
exemple, celle de configurer
Ces lignes sont organisées en deux les ports du microcontrôleur,
ports : d’initialiser et de gérer le
“timer” (horloge) intégré, etc.
- le port A dispose de cinq lignes, auxquelles
font référence les sigles RA0, RA1, RA2, RA3 Supposons maintenant que vous vou-
et RA4 ; liez configurer le port A de telle sorte
- le port B comprend, quant à lui, huit lignes que l’on dis- que les lignes RA0 et RA1 soient des entrées alors que les
tingue grâce aux sigles RB0 à RB7. autres lignes du port seront des sorties. Pour ce faire, vous
devrez charger, dans le registre TRISA, l’octet 00000011.
Chacune de ces lignes, qu’elle appartienne au port A ou au En positionnant ainsi les deux bits de poids faible à “1”,
port B, peut être configurée comme entrée ou comme sor- vous configurerez les bits correspondants du port A, c’est-
tie, indépendamment des autres. Pour sélectionner le mode à-dire RA0 et RA1 en entrées, alors que les “0” configure-
de fonctionnement d’une ligne I/O, il faut agir sur les ront les bits restants en sorties.
registres TRISA et TRISB. En mettant un bit à 1, la patte
correspondante sera configurée comme entrée, alors qu’avec Le code à écrire sera le suivant :
un 0 elle sera configurée comme sortie.
Port_a equ 5 ;Port A = registre 5h
En ce qui concerne les positionnements de mémoire rela- Port_b equ 6 ;Port B = registre 6h
tifs aux lignes I/O, il convient de rappeler que le port A cor- Tris_a equ 85 ;Tris A = registre 85h
respond au registre à l’adresse 5h de la zone des registres Tris_b equ 86 ;Tris B = registre 86h
spéciaux, le port B au registre à l’adresse 6h, alors que les CLRF Port_a ;mise à zéro du registre Port_a
deux registres d’initialisation, TRISA et TRISB, correspon- MOVLW b’00000011’ ;Bit de configuration
dent respectivement aux registres dont les adresses sont MOVWF Tris_a ;Charge dans Tris_a l’octet
85h et 86h. ;de configuration

ELECTRONIQUE 75 magazine - n° 6
TECHNOLOGIE

Les quatre premières lignes de pro-


gramme ne sont pas des instructions Type
du microcontrôleur mais des direc- Nom Bit0 de buffer Fonction
tives qui donnent aux étiquettes
Port_a, Port_b, etc. leurs valeurs res- RA0 bit 0 TTL entrée/sortie
pectives. Nous en reparlerons RA1 bit 1 TTL entrée/sortie
lorsque nous aborderons l’assem- RA2 bit 2 TTL entrée/sortie
bleur. RA3 bit 3 TTL entrée/sortie
RA4 bit 4 ST entrée/sortie
L’instruction CLRF sert à mettre à zéro Trigger de Schmitt entrée clock*
(clear) tous les bits du registre Port_a.
L’instruction MOVLW permet de char- * Entrée/sortie mais également entrée pour clock externe TMR0. La sor tie
ger, dans le registre W (registre de tra- est de type à collecteur ouvert.
vail utilisé par le microcontrôleur dans Tableau 1 : Résumé des fonctions de la porte A.
les opérations mathématiques), le bit
00000011. La lettre b, positionnée
devant le chiffre, informe l’assembleur L’instruction BSF permet donc de L’instruction BTFSC vous permet de
que celui-ci est exprimé sous forme mettre à 1 la valeur d’un bit d’un tester la valeur logique du bit D1 du
binaire. La dernière instruction du lis- registre. Dans notre cas, elle met à 1 registre Port_a. Si ce bit est à 1, l’ins-
ting, MOVWF, ser t à transférer le le bit D2 du registre Por t A. Si, au truction suivante est alors exécutée et
contenu du registre W dans le registre contraire, vous voulez donner à cette elle permettra de continuer le pro-
Tris_a. même sortie une valeur logique basse, gramme à partir de la position “Saut”.
vous devrez alors utiliser l’instruction : Si, au contraire, le bit est à 0, cette
Par conséquent, pour communiquer instruction n’est pas exécutée et le pro-
avec le monde extérieur à travers les BCF Port_a,2 gramme continue avec l’instruction sui-
lignes I/O, il vous suffira de procéder vante.
comme nous allons l’expliquer. qui por te alors à zéro le bit D2 du
registre Port A. Les ports
Pour obtenir un niveau logique 0 ou 1
sur une patte de sortie, vous écrirez Supposons maintenant que vous vou- du microcontrôleur
ce niveau dans le bit correspondant du liez lire l’état logique présent sur une
registre du port intéressé. Par exemple, patte configurée en entrée, vous devrez Ces deux ports contiennent une bas-
pour porter à un niveau logique haut la alors lire d’abord le contenu du registre cule flip-flop en entrée, alors que leurs
sortie RA2, il suffira de mettre un 1 sur qui représente le port, puis aller tes- sorties sont constituées d’un latch et
le bit D2 du registre 5 que nous avons ter le bit qui vous intéresse. Par d’un driver.
défini Port A lors de l’initialisation vue exemple, pour acquérir l’état d’un bit
précédemment. et exécuter une partie du programme Lorsqu’une patte est configurée en
(dans le cas où ce bit se trouverait au sor tie, la bascule d’entrée corres-
L’instruction qui permet de réaliser niveau logique 1), vous pouvez écrire : pondante est désactivée, alors que
cette fonction est la suivante : lorsque l’on initialise une ligne en
BTFSC Port_a,1 entrée, on désactive le driver de sor-
BSF Port_a,2 GOTO Saut tie, en le mettant en état de haute
impédance.

Data
bus
Nous vous recommandons de faire
D Q
Data
bus
attention lorsque vous utiliserez la
VDD D Q
WR
Port WR
patte RA4 car sa sor tie n’est pas du
CK Q
P Port
CK Q
RA4 pin
type push-pull (comme pour les autres
N
Data Latch
Data Latch pattes), mais du type collecteur
N I/O pin
D Q
ouvert. Ce qui veut dire que pour avoir
D Q VSS
WR
en sor tie un niveau logique compa-
WR VSS
TRIS
CK Q
TRIS
CK Q tible TTL ou CMOS, il vous faudra pré-
Schmitt
TRIS Latch Trigger voir une résistance de pull-up. Une
TRIS Latch Input
TTL
Input
buffer autre particularité de la patte RA4 est
buffer
qu’elle peut être utilisée comme
RD TRIS
RD TRIS entrée d’horloge pour “alimenter” le
D Q timer TMR0 intégré dans le PIC
Q D
CK
16F84.
RD PORT
CK
En ce qui concerne le Por t B, il est
TMR0 clock input
RD PORT constitué de huit lignes que vous pou-
vez configurer indépendamment en
entrée ou en sortie à travers l’initiali-
Figure 1 : Cette illustration représente le schéma synoptique des lignes d’entrées sation du registre TRISB. Les quatre
RA0 - RA3 (figure 1a) et RA4 (figue 1b) du port A. Les portes RA0 - RA3 sont
protégées par des diodes situées entre Vdd et Vss, tandis que RA4 est protégée bits RB4 à RB7 peuvent aussi être uti-
uniquement par une diode à Vss. Comme RA4 est utilisée pour l’entrée “clock” lisés comme sources d’interruption.
externe, elle présente un buffer interne de type “trigger”. Dans ce cas, un changement d’état
sur une de ces pattes peut interrompre

ELECTRONIQUE 76 magazine - n° 6
TECHNOLOGIE

bit est mis à 0, le prescaler est relié


Type au TMR0, s’il est mis à 1, il sera relié
Nom Bit0 de buffer Fonction au watchdog. Le rapport de division du
prescaler est déterminé à travers trois
RB0/INT bit 0 TTL entrée/sortie ou entrée d’interruption bits, nommés PS0, PS1 et PS2 du
externe sur les fronts (avec pull-up) registre OPTION, suivant le tableau 3.
RB1 bit 1 TTL entrée/sortie (avec pull-up) Rappelez-vous qu’il n’est pas possible
RB2 bit 2 TTL entrée/sortie (avec pull-up) de lire ni d’écrire la valeur du presca-
RB3 bit 3 TTL entrée/sortie (avec pull-up) ler (c’est-à-dire du comptage qu’il est
RB4 bit 4 TTL entrée/sortie (avec interruption) (avec pull-up) en train d’effectuer) et que ce registre
RB5 bit 5 TTL entrée/sortie (avec interruption) (avec pull-up) est remis à 0 à chaque fois que vous
RB6 bit 6 TTL/ST entrée/sortie (avec interruption) (avec pull-up) effectuez une opération d’écriture dans
RB7 bit 7 TTL/ST entrée/sortie (avec interruption) (avec pull-up) le registre TMR0.
Tableau 2 : Résumé des fonctions de la porte B.
L’interruption
temporairement le programme pour sur le front positif ou sur le négatif, il générée par le TMR0
exécuter dif férentes opérations. La faut agir sur le bit D4, toujours dans le
ligne RB0 peut également donner ori- registre OPTION, bit que l’on appelle Le timer TMR0 est donc un compteur
gine, en présence d’un front montant également T0SE. Si ce bit est mis à 0, qui incrémente sa propre valeur. Il est
ou descendant, à une interruption exté- l’incrémentation est effectuée sur le piloté par l’horloge, qui commande éga-
rieure. front positif, et vice versa, s’il est à 1, lement le microcontrôleur, ou par des
l’incrémentation est opérée sur le front fronts montant ou descendant présents
Les interruptions sont activées et négatif. sur l’entrée RA4.
désactivées à travers un registre spé-
cial dénommé INITCON, que nous ana- Le timer peut être lu et modifié à tout Le timer est très souvent utilisé pour
lyserons en détail plus tard. moment. Il est en ef fet situé à générer des intervalles de temps pré-
l’adresse 1 parmi les registres d’utili- cis, en jouant justement sur la fré-
Enfin, nous vous rappelons que les sation spéciale. quence de l’horloge et sur le rapport
deux lignes RB6 et RB7 sont utilisées de division introduit par le prescaler.
en phase de programmation du dispo- Pour utiliser le timer de cette façon,
sitif. C’est, en effet, à travers ces deux Le prescaler nous vous conseillons de travailler avec
lignes que se produit le transfer t, en le signal que le timer génère lui-même
forme série, de l’ensemble des don- Le prescaler est un dispositif qui sert quand la valeur du registre TMR0 passe
nées que le microcontrôleur insère à diviser la fréquence qui va piloter le de FFh à 00h.
dans sa mémoire programme. véritable compteur et permet donc
d’obtenir des intervalles de temps rela- En fait, quand le timer arrive à la fin de
tivement longs. son comptage, c’est-à-dire à FFh, dans
Le Timer l’incrémentation suivante, le registre
Le prescaler peut être connecté, aussi TMR0 est mis à 00h et le bit D2 du
Le timer (l’horloge) intégré dans le bien au timer TM0, qu’au watchdog registre INITCON, nommé T0IF, est mis
PIC16F84 (dénommé TMR0), est consti- (circuit de surveillance). Pour relier le à 1. Ceci détermine également une
tué d’un prescaler (prédiviseur) de 8 prescaler à l’un ou à l’autre, il vous demande d’interruption au microcon-
bits et du timer lui-même, caractérisé suffira d’agir sur le bit D3 du registre trôleur, qui ira exécuter une routine don-
également par 8 bits. Le timer peut OPTION, que l’on nomme PSA. Si ce née en réponse à un tel événement.
fonctionner en deux modes distincts,
qui sont déterminés par la valeur du VDD
bit D5 dans le registre OPTION, bit que RBPU
weak
P pull-up
VDD
RBPU
l’on appelle T0CS. Data bus
Data Latch weak
P pull-up
D Q Data Latch
Data bus
I/O pin D Q
WR Port
CK
WR Port I/O pin
TRIS Latch CK
Etudions ces deux modes D Q
TTL
Input D Q
WR TRIS TTL
CK buffer
Mode TIMER : WR TRIS
CK
Input
buffer
On le sélectionne en mettant à 0 le bit
RD TRIS
T0CS. Dans ce type de fonctionnement, Latch
RD TRIS
Q D Latch
le timer est alimenté par son horloge Q D
RD Port
interne dont la fréquence est égale à Set RBIF
EN
RD Port
EN
celle de l’horloge du microcontrôleur
From other
divisée par 4. RB7:RB4 pins Q D
RB0/INT
EN RD Port

Mode COUNTER : RD Port

On le sélectionne en mettant à 1 le bit


T0CS. Dans ce mode, le timer incré- Figure 2 : Cette illustration représente le schéma synoptique des lignes d’entrées
RB4 - RB7 (figure 1a) et RB0 - RB3 (figure 1b) du port B. Toutes les portes
mente son propre comptage à chaque présentent un pull-up interne sélectionnable par software à travers “RBPU” (bit
front (de montée ou de descente) pré- 0 du registre “OPTION”). Les portes RB4 - RB7 peuvent être aussi utilisées
sent sur la patte RA4. Pour déterminer comme source d’interruption, déclenchable sur front externe.
si cette incrémentation doit se produire

ELECTRONIQUE 77 magazine - n° 6
TECHNOLOGIE

opérations en réponse à cette


Data Bus
demande.
Fosc/4 0 PSout 8
1 A la fin de ces opérations, ou plus
Sync with
internal TMR0 exactement à la fin du sous-pro-
1
RA4/T0CKI Programmable clocks gramme d’interruption, il est néces-
0 PSout
pin Prescaler
T0SE (2 cycle delay) saire de faire revenir le microcontrô-
3 Set T0IF
interrupt
leur à l’exécution abandonnée à cause
PS2, PS1, PS0 PSA
T0CS
on overflow de l’interruption. Pour permettre cela,
avant de sauter à la position 0004h,
Schéma synoptique du timer TMRO. la valeur du Program Counter, c’est-à-
dire du registre qui mémorise
Supposons, par exemple, que vous Les interruptions l’adresse du positionnement de
vouliez allumer ou éteindre une LED Une interruption est un événement qui mémoire de l’instruction qui est en
à inter valles réguliers. Vous devrez détermine l’abandon de l’instruction cours d’exécution, est sauvegardée
charger le prescaler de façon à obte- que le microcontrôleur est en train dans une zone par ticulière de la
nir l’inter valle de clignotement d’exécuter pour aller entreprendre une mémoire nommée “Stack”. Au terme
demandé et faire en sor te qu’à routine dénommée routine d’inter- de la routine qui “répond” à la
chaque fois qu’une interruption est ruption. En fait, chaque fois qu’une demande d’interruption, on récupère
générée par la fin du comptage effec- demande d’interruption est générée dans le Stack, avec l’instruction RET-
tué par le timer, la routine qui répond par une des quatre sources possibles, FIE, la valeur du Program Counter et
à cette interruption aille inverser l’état le microcontrôleur abandonne tempo- l’on rétablit le flux normal d’exécution
logique présent sur la patte à laquelle rairement le programme qu’il était en du programme.
la LED est reliée. train d’exécuter et saute à une posi-
tion définie au préalable à l’adresse Le PIC 16F84 a quatre dif férentes
Nous allons voir maintenant, grâce à 0004h de la mémoire programme. De “sources” susceptibles de déterminer
l’analyse détaillée de toutes les autres plus, il est possible de lire l’état du une interruption :
sources possibles d’interruption, com- registre INITCON afin de déterminer
ment le microcontrôleur répond aux quelle a été l’origine de l’interruption - interruption externe sur la patte
demandes d’interruption. et d’exécuter en conséquence des RB0 ;
- interruption générée par le timer
PS2 PS1 PS0 Division de fréquence TMR0 ;
- interruption générée par un change-
0 0 0 2 ment de valeur logique sur une des
0 0 1 4 pattes RB4 à RB7 ;
0 1 0 8 - interruption générée par un signal
0 1 1 16 d’écriture de la mémoire EEPROM.
1 0 0 32
1 0 1 64 Analyse
1 1 0 128 des sources d’interruption
1 1 1 256 En ce qui concerne l’interruption géné-
rée par la patte RB0, elle est causée
Tableau 3 : Détermination du rapport de division du prescaler. par une transition de l’entrée RB0
d’un état logique à un autre. Il est
possible de faire agir cette interrup-
tion soit sur un front montant (pas-
CLKOUT (= Fosc/4) Data Bus sage de 0 à 1), soit sur un front des-
0 cendant (passage de 1 à 0). L’un ou
8
M 1 l’autre de ces modes est sélectionné
RA4/T0CKI U M SYNC
pin
1 X U 2 TMR0
à travers le bit D6 du registre OPTION.
0 X Cycles Si se bit est mis à 1, l’interruption
T0SE est générée par un front montant, s’il
T0CS
PSA Set T0IF est mis à 0, l’interruption se produit
interrupt
on overflow en correspondance avec un front des-
cendant.
0
M 8 bit Prescaler
U L’interruption du timer TMR0 est géné-
WDT X 8 rée, comme nous l’avons déjà vu,
1
timer
lorsque l’opération de fin de comptage
8 - to 1MUX PS2:PS0
PSA effectuée par le compteur du timer se
produit.
WDT enable bit 0 1
MUX PSA L’interruption générée par les entrées
RB4 à RB7 se produit lorsque l’on
WDT relève, sur au moins une de ces
time-out
pattes, un changement d’état par rap-
Schéma synoptique du prescaler. por t à la dernière opération de lec-
ture du por t qui a été effectuée. Si

ELECTRONIQUE 78 magazine - n° 6
TECHNOLOGIE

l’une des pattes RB4 à RB7 est configurée en sortie plu- D7 GIE ; Autorise toutes les interruptions
tôt qu’en entrée, automatiquement, elle ne peut plus ;1 autorise les interruptions autorisées sur D3,
générer d’interruption. L’interruption des pattes RB4 à
RB7 permet également de “réveiller” le microcontrôleur D4, D5 et D6.
lorsqu’il se trouve dans le mode de fonctionnement ;0 désactive toutes les interruptions
“basse consommation”, que l’on obtient grâce à l’ins-
truction “Sleep” (sommeil). On utilise habituellement ce Nous vous conseillons la plus grande attention, lorsque
mode de fonctionnement dans des applications qui n’exi- vous travaillez avec les interruptions, afin d’éviter des com-
gent l’exécution d’opérations que lorsque se produit un portements imprévus par le programme. Par exemple, lors-
événement extérieur par ticulier, comme par exemple qu’une demande d’interruption se produit, le bit GIE, bit
lorsque l’on tape sur une touche du clavier. Dans ce cas, d’activation globale des interruptions, est tout de suite mis
il est intéressant de laisser le microcontrôleur en mode à 0 par le hardware du microcontrôleur, dans le but de désac-
Sleep de façon permanente, car cela réduit de façon tiver d’éventuelles interruptions successives et donc d’évi-
impor tante sa consommation de courant, et de lier son ter que se produisent des interruptions “à l’intérieur” d’autres
réveil à une demande d’interruption générée par les ports interruptions. N’oubliez cependant pas, au terme de la rou-
de I/O. tine qui répond à une interruption, de réactiver, via software,
les sources d’interruption qui vous intéressent.
Dans le PIC 16F84, il existe un registre qui permet de contrô-
ler la gestion des interruptions : le registre INITCON. Les Rappelez-vous également que lorsque l’une des sources
bits D0, D1 et D2 de ce registre permettent de constater possibles effectue une demande d’interruption, le bit cor-
si une des quatre sources d’interruption, dont nous avons respondant du registre INITCON est mis à 1. Il vous faut
parlé, a été activée. Les bits D3 à D6 permettent d’activer donc remettre ce bit à 0 une fois la routine de service de
ou de désactiver les différentes interruptions. Le bit D7 sert l’interruption terminée, afin d’éviter un cycle continu de
à activer ou désactiver toutes les sources d’interruption en demande d’interruption.
même temps. ◆ R. N.

Le registre INITCOM en détail


Les bits de flag : Les bits D0 à D2 indiquent par leur état ABONNEZ-VOUS A
si une source a généré une demande d’interruption. En tes-
tant ces bits, il est possible d’identifier ensuite l’origine de
l’interruption. N’oubliez pas que les bits sont mis à 1, même
si la source correspondante d’interruption a été désacti-
vée.

D0 RBIF ;Changement d’état sur RB4-RB7


;1 indique qu’un changement a eu lieu
;0 indique qu’il n’y a pas eu de changement.

D1 INTF ;Interruption externe sur RB0


;1 si une interruption sur RB0 et arrivée
;0 s’il n’y a pas d’interruption

D2 T0IF ;Interruption générée par le timer TRM0.


;1 si le temps est terminé
;0 si le temps n’est pas terminé.

Les bits D3 à D6 permettent d’activer ou de désactiver indi-


viduellement chacune des quatre origines d’interruption
possibles. Le bit D7 permet de désactiver globalement
toutes les interruptions, ou d’activer celles qui sont acti-
vées individuellement par les bits D3 à D6.

D3 RBIE ;Autorisation de l’interruption RBIF


;1 autorise les interruptions de RB4 à RB7
;0 désactive les interruptions

D4 INTE ;Autorisation de l’interruption INTF


;1 autorise les interruptions de RB0
;0 désactive les interruptions

D5 T0IE ;Autorisation de l’interruption T0IF


;1 autorise les interruptions générées par le timer
;0 désactive les interruptions

D6 EEIE ; Autorisation de l’interruption de fin d’écriture.


;1 autorise les interruptions générées en fin
;d’écriture de l’EEPROM 0 désactive les
;interruptions

ELECTRONIQUE 79 magazine - n° 6
TECHNOLOGIE

Microcontr
Micr ocontrô
ôleurs
PIC
6ème partie
par tie

Nous allons continuer la description des ressources internes des


microcontrôleurs PIC, en nous intéressant aujourd’hui à une
ressource à la fois particulière et très utile : la mémoire EEPROM.
C’est dans cette mémoire que vous allez pouvoir stocker des données
qui seront protégées contre l’effacement, même lorsque le dispositif
ne sera plus alimenté. Une utilisation type de cette zone de mémoire
pourrait être le stockage de paramètres de calibrage d’une machine-
outil, paramètres qui devraient, évidemment, être disponibles à
chaque mise sous tension de ladite machine-outil. Vous pourrez
également utiliser cette zone mémoire lorsque vous voudrez effectuer
des comptages dont les résultats devront être conservés, même
lorsque la machine-outil sera hors tension.

urant le fonc- l’octet qui doit être écrit


tionnement ou qui a été lu, tandis
normal du micro- que le registre EEDR
contrôleur (sous contient l’adresse de la
tension), vous pou- case mémoire qui doit être
vez lire et écrire ce type de écrite ou lue. Le PIC 16F84
mémoire grâce à des instructions dispose de 64 cases
par ticulières. Parmi toutes les mémoires EEPROM qui se
mémoires disponibles, les EEPROM situent aux adresses com-
sont cer tainement les plus mal- prises entre OOh et 3Fh. Ce
léables, puisqu’elles sont complète- qui signifie que seuls les six
ment gérées par voie électrique et peuvent premiers huit bits constituant le registre
donc être contrôlées directement par le micro- EEDR sont utilisés. Le registre EECON1
contrôleur ou par l’opérateur/programmateur. est le registre de contrôle ; dans ce
registre on n’utilise que les cinq bits
Pour accéder à cette zone de mémoire par ticulière vous de poids faibles :
devrez obligatoirement vous servir de quatre registres d’uti-
lisation spéciale qui correspondent aux adresses suivantes : DO RD commence une opération de lecture ;
D1 WR commence une opération d’écriture ;
EECON1 88h Les deux derniers registres de la liste D2 WREN autorise une opération d’écriture ;
EECON2 89h sont ceux qui contiennent réellement D3 WRERR indique qu’une opération d’écriture
EEDATA 08h les données et les adresses des a échoué par reset ou par Watchdog ;
EEDR 09h valeurs qui doivent être mémorisées D4 EEIF ce bit génère une interruption quand
et lues : le registre EEDATA contient une opération d’écriture a été accomplie.

Dans la précédente parution (n° 6), la lecture du texte d’introduction le modèle TARO ? Impossible de vous donnez une réponse. Le texte
de ce cours a dû vous laisser dans la plus totale perplexité ! En effet, d’origine est bien orthographié 16F84 alors qu’à l’impression nous
vous avez pu lire “Le mois dernier nous avons commencé à analyser avons obtenu TARO ! Probablement l’affaire d’un voyant. Nous n’avons
la structure interne d’un microcontrôleur de la famille PIC, et notam- aucune explication sérieuse à vous donner, nous pouvons seulement
ment du modèle TARO dont nous avons décrit certaines ressources vous présenter nos excuses. Merci aux très nombreux passionnés
disponibles comme…”. Il s’agit en fait du modèle 16F84 ! Pourquoi de ce cours qui nous ont signalé cette “coquille” !

ELECTRONIQUE 76 magazine - n° 7
TECHNOLOGIE

Comme le montre la description du rôle


des différents bits, le registre EECON1
permet de travailler avec la mémoire
EEPROM contenue dans les microcon-
trôleurs de Microchip. Voyons donc en
détail les opérations à effectuer pour
lire ou écrire une case de la mémoire
non volatile.

Lecture d’une case


de la mémoire
EEPROM
Pour lire une case mémoire, il suffit
de transférer l’adresse de cette
mémoire dans le registre EEADR et de
mettre ensuite le bit de lecture (RD)
du registre EECON1 à 1. Le contenu
de la case mémoire sera présent dans
le registre EEDATA à partir du cycle sui-
vant.
Figure 1 : Registre EECON1 de contrôle de la mémoire EEPROM.
Voyons donc une séquence possible
d’instructions pour lire par exemple le
contenu de la case mémoire EEPROM truction du listing met 05 dans le Il faudra en effet :
d’adresse 5 : registre W (le registre de travail utilisé
par le micro) pour ensuite le transfé- - mettre l’adresse de la case mémoire
EEADR equ 09 rer, grâce à “MOVWF”, dans le registre dans laquelle vous voulez écrire en
EEDATA equ 08 d’adresse EEADR. L’instruction “BSF” EEADR ;
EECON1 equ 88 met alors à 1 le bit D0 du registre - mettre la donnée que vous voulez
EECON1 qui représente le bit de démar- écrire en EEDATA ;
MOVLW 05 rage de l’opération de lecture de la don- - écrire 55h dans le registre
MOVWF EEADR ;met en EEADR née. EECON2 ;
;l’adresse de la - écrire AAh dans le registre
;case mémoire A partir de l’instruction suivante, il vous EECON2 ;
BSF EECON1,0 ;active la lecture sera possible de lire et d’utiliser le - mettre le bit d’écriture (WR) du registre
contenu du registre EEDATA, dans EECON1 à 1 ;
Même si nous n’avons pas encore ana- lequel est justement placé le contenu
lysé en détail le jeu d’instructions des de la case mémoire en question. Pendant la durée de ces opérations,
PIC, vous pouvez essayer de comprendre nous vous conseillons de désactiver
le sens du listing que nous venons toutes les interruptions, en agissant
d’illustrer. Dans la suite de ce cours,
Ecriture d’une case sur le registre INTCON. Une fois
nous consacrerons plusieurs pages à de la mémoire toutes les instructions énumérées ter-
l’explication approfondie de chacune des EEPROM minées, la donnée est écrite en
instructions. mémoire. Cette opération prend envi-
L’écriture d’une case mémoire requiert ron 10 ms.
Voyons donc ce qui se passe lorsque une procédure plus complexe que sa
l’on tape les instructions énoncées ci- lecture. Il vous faudra donc redoubler Lorsque la case mémoire est correc-
dessus. Les directives “equ” permet- d’attention et disposer évidemment de tement écrite, le micro met le bit WR
tent d’attribuer aux registres EEADR, davantage d’instructions afin d’éviter à 0 et effectue automatiquement une
EEDATA et EECON1 leurs adresses d’écrire en mémoire des informations demande d’interruption à travers le bit
mémoires respectives. La première ins- erronées. EEIF.

Figure 2 : Tableau des registres associés à la mémoire EEPROM avec leurs bits correspondants.
Légende : x = inconnu ; u = inchangé ; – = non implémenté, lu comme “0” ;
? = valeur dépendant des conditions.

ELECTRONIQUE 77 magazine - n° 7
TECHNOLOGIE

ne bloque le programme. bits PS0, PS1 et PS2 du registre


Dans la famille des PIC, le OPTION. Pour remettre à zéro le WDT,
Watchdog (WDT) est il vous suffira d’utiliser l’instruction
constitué d’un oscillateur CLRWDT qui permet de remettre à 0
RC intégré au microcon- aussi bien le Watchdog que le Pres-
trôleur et indépendant de caler. Rappelez-vous, enfin, qu’à
l’horloge. Ce qui veut dire chaque fois qu’un signal de fin de
que le WDT est en mesure comptage est généré, le bit TO du
de fonctionner même si registre STATUS est mis à zéro, alors
l’horloge est bloquée, par qu’il se trouve normalement à un
exemple quand le circuit niveau logique haut. Vous pouvez
est mis en mode Sleep désactiver complètement le Watchdog,
(veille) pour limiter la en phase de programmation, en met-
consommation d’électri- tant le bit WDTE du registre de confi-
cité. guration à 0 logique.
Figure 3 : Schéma synoptique du circuit timer
Watchdog. En fait, le WDT est un
compteur qui, passé un L’oscillateur externe
certain intervalle de temps
Voyons, dans ce cas également, com- et s’il n’a pas été remis à zéro, génère Comme tous les microcontrôleurs, les
ment vous pouvez écrire une donnée un Reset (réinitialisation) du micro- PIC ont également besoin d’une hor-
dans la case mémoire d’adresse 5 : contrôleur, forçant ainsi le système à loge externe qui leur permette de syn-
recommencer le programme depuis le chroniser toutes les opérations qu’ils
EEADR equ 09 début. Il faudra donc prévoir d’insérer, doivent exécuter. Le PIC 16F84 peut
EEDATA equ 08 à l’intérieur du programme, des ins- travailler avec quatre configurations
EECON1 equ 88 tructions assurant la remise à zéro du différentes d’oscillateur, qui sont sélec-
EECON2 equ 89 WDT avant que cet intervalle de temps tionnées lors de la phase de pro-
INTCON equ 0B ne soit écoulé. grammation du micro, en initialisant
certains bits contenus dans le registre
BCF INTCON, 7 ;désactive toutes les interruptions
de configuration. Ce registre permet
MOVLW 05
également d’autoriser d’autres fonc-
MOVWF EEADR ;charge l’adresse de la case mémoire
tions particulières. En ce qui concerne
MOVLW 12h
l’oscillateur, les bits à utiliser sont les
MOVWF EEDATA ;charge en EEDATA la donnée à écrire, par exemple 12h
deux premiers. Trois des quatre modes
MOVLW 55h
de fonctionnement de l’oscillateur exi-
MOVWF EECON2 ;met 55h en EECON2
gent l’utilisation d’un quar tz ou d’un
MOVLW AAh
résonateur céramique tandis que le
MOVWF EECON2 ;met Aah en EECON2
quatrième mode prévoit l’utilisation
BSF EECON1, 1 ;met à 1 le bit d’écriture de EECON1
d’un simple réseau RC (Résistance-
BSF INTCON, 7 ;réactive les interruptions
Condensateur).

Nous abandonnons, pour l’instant, la Si le dispositif se trouve en mode Sleep, Fonctionnement


description de la mémoire EEPROM, le WDT permet de faire sortir le micro-
que nous reprendrons plus tard en vous contrôleur de ce mode. Quand le Wat- avec quartz ou
proposant des exemples pratiques chdog est utilisé sans le Prescaler (qui, résonateur céramique
d’utilisation de cette ressource impor- comme nous l’avons déjà vu, peut être
tante du microcontrôleur. branché soit au Timer intégré soit, alter- Pour faire fonctionner l’oscillateur, il
nativement, au WDT), il a une période suf fit d’intercaler, entre les pattes
de 18 ms environ. Si vous utilisez le OSC1 et OSC2 du microcontrôleur, un
Le watchdog Prescaler, en mettant à 1 le bit PSA du quar tz (ou un résonateur céramique)
registre OPTION (de cette façon vous et deux condensateurs comme le
Le Watchdog pourrait se traduire “chien connectez le Prescaler au Watchdog), montre le schéma de la figure 7.
de garde” ou plus simplement “sur- il est possible d’augmenter jusqu’à 128
veillant”. Le Watchdog est un Timer fois la durée de cet inter valle : vous La valeur des condensateurs varie en
(compteur) qui est normalement uti- obtiendrez alors, au maximum, une fonction du quar tz utilisé. Elle est
lisé dans les systèmes à microcon- durée d’environ 2,3 secondes. cependant toujours comprise entre 10
trôleurs comme système de sécurité et 100 pF. Les trois modes de fonc-
afin d’éviter qu’une cause accidentelle Pour établir le temps d’intervention du tionnement prévoyant justement l’uti-
et non prévue par le programmateur WDT, il vous faudra agir sur les trois lisation d’un quartz ou d’un résonateur

Figure 4 : Tableau des registres associés au timer Watchdog.


NOTE : les cases mémoire colorées ne sont pas utilisées par le timer Watchdog.

ELECTRONIQUE 78 magazine - n° 7
TECHNOLOGIE

ont pour différence la gamme de fré-


Mode fréq. OSC1/C1 OSC2/C2 Mode fréq. OSC1/C1 OSC2/C2
quence dans laquelle ils peuvent être
utilisés et l’absorption de courant qu’ils XT 455 kHz 47 - 100 pF 47 - 100 pF LP 32 kHz 68 - 100 pF 68 - 100 pF
2 MHz 15 - 68 pF 15 - 68 pF 200 kHz 15 - 30 pF 15 - 30 pF
déterminent.
4 MHz 15 - 68 pF 15 - 68 pF XT 100 kHz 68 - 150 pF 150 - 200 pF
HS 8 MHz 15 - 68 pF 15 - 68 pF 2 MHz 15 - 33 pF 15 - 33 pF
Voyons ces trois configurations : 4 MHz 15 - 33 pF 15 - 33 pF
10 MHz 10 - 47 pF 10 - 47 pF
HS 4 MHz 15 - 33 pF 15 - 33 pF
LP (Low Power) Figure 5a : Valeur de capacité avec 10 MHz 15 - 47 pF 15 - 47 pF
Dans ce mode vous ne pouvez utiliser les résonateurs céramiques.
que des quar tz ayant des valeurs de Figure 5b : Valeur de capacité avec
fréquence allant jusqu’à environ Les tableaux ci-dessus mettent en les résonateurs à quartz.
200 kHz. Dans cette gamme de fré- évidence les valeurs conseillées par
quence, on réduit la consommation à le fabricant, avec les différents types de résonateurs céramiques aux différentes
quelques dizaines de microampères. fréquences. On note que pour le type de résonateur utilisé, tous les modes de
travail ne sont pas disponibles.
XT (Crystal)
Dans ce mode vous pouvez aussi bien
utiliser des quartz que des résonateurs
céramiques. La fréquence à laquelle on
“monte” est de 4 MHz et la consom-
mation “tourne” autour de 5 mA.

HS (High Speed)
Il est possible d’arriver jusqu’à 10 MHz
– si vous utilisez le 16F84-10 – ou jus-
qu’à 4 MHz – si vous utilisez le PIC
16F84-04 – en employant, soit des
quar tz, soit des résonateurs céra-
miques. La consommation, à 10 MHz,
est d’environ 10 mA.

Fonctionnement avec réseau RC


Figure 6 : Le registre de configuration.
Il est possible de faire fonctionner l’os- Parmi les bits de configuration disponibles à l’intérieur du registre, ceux concernés
cillateur simplement en connectant à par le type d’oscillateur utilisé sont les deux premiers : FOSC0 et FOSC1.
la patte OSC1 un réseau constitué
d’une résistance et d’un condensa-
teur comme indiqué sur la figure 8. quences maximales de 10 MHz. Si tionner les microcontrôleurs, vous pou-
Avec ce mode de fonctionnement, il vous souhaitez vous ser vir du micro- vez utiliser le tableau suivant :
est possible d’atteindre des fré- contrôleur dans des applications qui
ne nécessitent pas de temporisations Cext Rext Freq. osc
extrêmement précises, nous vous
conseillons d’avoir recours à cette 20 pF 3,3 K 4,68 MHz
solution, nettement plus économique 5,1 K 3,94 MHz
que la précédente. 10 K 2,34 MHz
100 K 250,16 KHz
Evidemment la fréquence d’oscillation 100 pF 3,3 K 1,49 MHz
dépend des valeurs de R, de C et de 5,1 K 1,12 MHz
Figure 7. la tension d’alimentation Vdd. En règle 10 K 620,31 KHz
générale, il faut utiliser des valeurs de 100 K 90,25 KHz
résistance comprises entre 3,3 kΩ et 300 pF 3,3 K 524,24 KHz
100 kΩ et de condensateur comprises 5,1 K 415,52 KHz
entre 20 pF et 300 pF. 10 K 270,33 KHz
100 K 25,37 KHz
Pour connaître la fréquence de l’hor-
loge, vous pouvez utiliser des tableaux
fournis par Microchip grâce auxquels Utilisation d’un oscillateur externe
vous pourrez déterminer, dans ses Les microcontrôleurs de chez Micro-
Figure 8. grandes lignes, la fréquence de fonc- chip peuvent également fonctionner en
tionnement. Il ne faut toutefois pas étant pilotés par un oscillateur externe,
oublier que celle-ci est également en reliant simplement la sortie de l’os-
influencée par la température et bien cillateur à la patte OSC1 du micro et
évidemment par la tolérance des com- en laissant la patte OSC2 ouver te.
posants utilisés. Dans ce cas, le micro doit être pro-
grammé pour un des modes LP, XT ou
Pour trouver la fréquence de fonction- HS.
Figure 9. nement à 5 V, qui est la tension à
laquelle on fait habituellement fonc- ◆ R. N.

ELECTRONIQUE 79 magazine - n° 7
TECHNOLOGIE

Microcontr
Micr ocontrô
ôleurs
PIC
7ème partie
par tie (1/2)

Dans les précédents numéros, nous avons étudié la structure


hardware des microcontrôleurs PIC, en faisant tout particulièrement
référence au modèle PIC 16F84 qui présente, parmi ses nombreuses
caractéristiques, une mémoire de programme de type EEPROM
Flash. Nous allons aujourd’hui analyser en détail les instructions
dont nous disposons pour écrire un programme en assembleur pour
les PIC. Nous examinerons, à travers un simple exemple pratique,
quels sont les pas nécessaires pour la rédaction d’un programme,
et verrons de quelle façon le microcontrôleur se comporte face aux
diverses instructions. Cette partie étant très longue, elle sera publiée
sur 2 numéros.

omme nous - des commentaires,


l’avons déjà c’est-à-dire des indica-
dit dans les par- tions qui ne sont pas
ties précédentes exécutées par le micro-
de ce cours, le lan- contrôleur mais qui aident
gage qui est normalement uti- la personne qui lit le pro-
lisé pour les microcontrôleurs est gramme à en interpréter le
l’assembleur. sens.

Rappelons que tous les dispositifs Afin de mieux comprendre ce


digitaux interprètent et travaillent en que l’on vient d’exposer, nous
utilisant un langage particulier qui est défini vous proposons de prendre en consi-
par le standard binaire. Ce dernier reconnaît dération un programme simple (voir
seulement deux états : “1”, c’est-à-dire pré- tableau 1) qui nous permet d’allumer
sence de tension, et “0”, absence de ten- deux LED alternativement. Les deux
sion. Si vous deviez écrire un programme au moyen de ce LED sont reliées aux deux lignes RBO
type de langage, nous vous laissons imaginer les difficul- et RB1 du PIC 16F84, lignes qui par tent des pattes 6 et 7.
tés que vous rencontreriez pour le rédiger et l’interpréter. Un schéma possible de cette application est donné dans
C’est pour venir à votre secours qu’une interface a été ima- la figure 1.
ginée. Cette interface est le langage assembleur, qui vous
simplifiera énormément le travail de programmation. Voyons maintenant le listing complet du programme en
mesure de réaliser cette fonction. Pour l’instant nous nous
Un programme écrit en assembleur, (variant selon le type limiterons à en comprendre le fonctionnement dans ses
de microcontrôleur), est composé d’une série de phrases, grandes lignes, puis nous verrons en détail chaque ins-
appelées “statement” (déclarations) qui peuvent chacune truction. Quoi qu’il en soit, ce listing est un programme com-
représenter une série d’informations : plet et opérationnel, vous pouvez donc vous essayer à la
réalisation de ce dispositif.
- des “labels” (étiquettes),
- un code opératoire (souvent appelé aussi mnémonique) qui Nous rappelons à ceux qui disposent déjà d’un program-
représente en fait les instructions que le PIC doit exécuter, mateur pour PIC 16F84, qu’au moment de la program-
- des opérandes, c’est-à-dire les éléments (registres, posi- mation des paramètres, le microcontrôleur doit être confi-
tions de mémoire) sur lesquels les instructions doivent guré avec l’oscillateur RC et le “watchdog” (WDT)
aller agir, désactivé.

ELECTRONIQUE 78 magazine - n° 8
TECHNOLOGIE

;************************************************************ MAIN MOVLW B’00000001’ ;Led A allumé


;***** FILE : LEDBLINK.XXX - DATE 22.11.99 ***** MOVWF PORT_B ;Led B éteint
;***** EXEMPLE POUR COURS PIC ***** CALL DELAY ;Routine de retard
;************************************************************ MOVLW B’00000010’ ;Led B allumé
MOVWF PORT_B ;Led A éteint
PORT_B EQU 06 ;Port B = registre 06h CALL DELAY
TMR0 EQU 01 ;Registre du timer = 01h GOTO MAIN
COUNT_1 EQU 0C ;Compteur
COUNT_2 EQU 0D ;Compteur
PIC84 EQU 0000 ;Vecteur de reset pour PIC 84 ;***** Routine de retard *****************************

;***** Initialisation ***************************** DELAY DECFSZ COUNT_1,1 ;Décrémente count_1


GOTO DELAY ;Si ce n’est pas 0
ORG PIC84 ;aller à delay
GOTO INIT MOVLW 050
MOVWF COUNT_1 ;Recharge count_1
ORG 0005H DECFSZ COUNT_2,1 ;Décrémente count_2
INIT MOVLW 00 ;Mets en W le nombre 0 GOTO DELAY ;Si ce n’est pas 0
TRIS PORT_B ;Port B configuré en sortie ;aller à delay
MOVLW 050 ;Mets en W le nombre 50h MOVLW 050
MOVWF COUNT_1 ;Mets W en Count_1 MOVWF COUNT_1 ;Recharge count_1
MOVLW 050 MOVLW 050
MOVWF COUNT_2 MOVWF COUNT_2 ;Recharge count_2

;***** Programme principal***************************** RETURN ;Reviens au programme principal

Tableau 1 : Listing complet du programme.

d’en écrire directement la valeur à l’in- les étiquettes doivent toujours être
Le programme : térieur du programme présente deux écrites en partant de la première ligne.
commentaires avantages essentiels :
instruction Les commentaires constituent une par-
par instruction - il sera beaucoup plus facile d’écrire tie impor tante du programme. Pour
un programme, dans la mesure où il ajouter des commentaires, il vous suf-
On insère généralement, au début de est plus simple d’utiliser un “label” fira de mettre un point-virgule avant le
chaque listing, une présentation des- qui rappelle la signification d’une cer- commentaire lui-même. Le compilateur
criptive contenant certaines informa- taine constante, plutôt que sa valeur ignorera alors automatiquement tout
tions telles que le nom du fichier, la numérique. ce qui est écrit après le point-virgule.
date de réalisation, une description Même s’ils ne servent pas directement
sommaire du contenu, l’auteur, etc. - il sera plus facile et plus rapide d’ef- au programme, les commentaires sont
fectuer des modifications au pro- cependant d’une extrême importance
Les “labels” sont des mots qui sont gramme. Dans notre cas, par exemple, pour la compréhension même de ce
utilisés comme des “renvois” dans le les deux “labels” COUNT_1 et dernier. Il est de règle d’insérer fré-
programme ou bien des constantes COUNT_2 déterminent par leur valeur quemment des commentaires, par
qui seront remplacées par le compi- la fréquence à laquelle s’allument et exemple pour les constantes utilisées
lateur dans la production du code s’éteignent alternativement les deux dans le programme, pour les routines,
machine. Généralement, la première LED. etc.
partie d’un programme écrit en assem-
bler contient différents “labels” qui Si vous devez modifier cette fréquence, Après la première partie concernant la
ser viront pour simplifier l’écriture du il suffit d’aller modifier leur valeur asso- déclaration des constantes, on trouve
programme même. Dans notre cas, ciée par la EQU, et toutes les valeurs le véritable programme, qui commence
les cinq premières lignes associent qui leur sont associées à l’intérieur du au label INIT. La première instruction
aux “labels” PORT_B, TMRO, programme seront automatiquement que vous rencontrez est ORG 0005h.
COUNT_1, COUNT_2 et PIC84, les changées. Si l’on n’avait pas utilisé Celle-ci, comme la EQU que nous avons
valeurs 06, 01, 0C, 0D et 0000, qui de tels “labels”, il aurait fallu changer déjà vue, n’est pas une instruction du
sont bien évidemment exprimées en différentes lignes du programme afin PIC, mais une directive de l’assem-
hexadécimal. Le mot EQU n’est pas d’obtenir le même résultat. bleur. En fait, elle “dit” à l’assembleur
une instruction du PIC mais une direc- que la par tie du programme qui suit
tive du compilateur, qui dit justement Les autres “labels” présents dans le devra être compilée en mémoire à par-
d’associer à un “label” une cer taine programme sont : INIT, MAIN et DELAY. tir de la position hexadécimale 0005h.
valeur. Pour générer le code final en Vous trouverez une autre directive ORG
langage machine, quand le programme Si vous parcourez le programme, vous au début du programme. Celle-ci fait
est rédigé en assembleur, le compi- découvrirez dif férentes instructions insérer l’instruction GOTO INIT, c’est-
lateur, à chaque fois qu’il rencontrera du type GOTO INIT, GOTO MAIN, CALL à-dire allez à l’étiquette INIT, qui repré-
par exemple le mot PORT_B, le rem- DELAY, etc. Ces instructions ser vent sente le début du programme, à
placera par sa valeur effective, c’est- à faire avancer le programme jusqu’au l’adresse 0000. En effet, lorsque le
à-dire O6. “label” associé. Ainsi, lorsque vous PIC est mis sous tension ou lorsqu’il
arriverez à GOTO MAIN, le programme sort d’une situation de reset, le “pro-
Dans la pratique, le fait de déclarer ira exécuter les instructions à par tir gram counter” part de la première posi-
des constantes de cette façon au lieu du “label” MAIN. Rappelez-vous que tion mémoire, qui, dans le 16F84, est

ELECTRONIQUE 79 magazine - n° 8
TECHNOLOGIE

représentée par la position à l’adresse devant le nombre informe l’assembleur


0000. Il est donc nécessaire d’insérer que le nombre que l’on est en train
à cette position un renvoi au début véri- d’écrire est exprimé en notation binaire. PRG
table du programme. On fait par fois Il est également possible d’utiliser des
référence à ce renvoi en parlant de vec- nombres en base décimale ou octale,
teur de reset du microcontrôleur. du moment que vous utilisez les lettres Configure PortB
D ou O devant le nombre mis entre en sortie
Après la ORG, le programme véritable guillemets.
commence, avec différentes instruc- Initialise Count_1
tions. Presque toutes ces instructions et Count_2
sont constituées de deux parties : l’ins- Fonctionnement
truction véritable, qui dit au micro- du programme
contrôleur le type d’opération à exé- Allume LED A
cuter et les opérandes, c’est-à-dire ce Avant de nous plonger dans la des- et éteint LED B
sur quoi l’instruction doit aller agir. cription détaillée de toutes les ins-
Considérons par exemple la première tructions que le PIC 84 est en mesure Appelle
instruction : d’exécuter, nous allons essayer de la Routine Delay
comprendre comment fonctionne notre
MOVLW 00 ;Mets en W le nombre 0 programme destiné à allumer et à
Allume LED B
éteindre alternativement deux LED. et éteint LED A
Cette instruction sert à transférer une Normalement, avant d’écrire la
donnée dans le registre W, qui est, séquence d’instructions qui compose
nous le rappelons, un registre de tra- un programme, on décrit le programme Appelle
vail par ticulier utilisé par beaucoup la routine Delay
que le microcontrôleur devra exécuter
d’instructions. Il faut bien sûr spécifier à travers un organigramme, pour expri-
la donnée qui doit être mise dans ce mer le type d’opérations que le micro-
registre, dans notre cas 00, ce dont contrôleur devra exécuter. Dans notre Figure 2 : Organigramme du
s’occupe l’opérande. Le résultat de cas, l’organigramme pourrait être celui programme de pilotage du module
cette instruction est donc d’avoir chargé de la figure 2. d’essai à LED.
le nombre 00 dans le registre W.
Comme vous le voyez, le microcontrô-
Vous trouverez une autre instruction du leur, après avoir exécuté une première
même type quelques lignes plus loin : partie dite d’initialisation, dans laquelle Routine
il configurera le port B comme port de Tempo.
MOVLW B’00000001’ sortie (c’est à lui que sont reliées les
LED), effectue indéfiniment une boucle
Décrémente Cont_1
Elle sert à nouveau à charger une don- dans lequel il allume et éteint alterna-
née dans le registre W, mais cette fois- tivement les deux LED : le programme
ci, la donnée est inscrite en nombre pourrait sembler fini ainsi. Si cepen- NON
binaire. En effet, si rien n’est spécifié, Count_1 = 0
dant nous faisions tourner ce pro-
comme dans le cas de la “MOVLW 00”, gramme, nous nous apercevrions qu’en OUI
on comprend que la donnée soit expri- réalité les deux LED ne s’allument pas
mée en hexadécimal (qui est le mode Recharge Count_1
alternativement, mais nous les verrions
standard d’écriture, et qui peut de toute toutes les deux toujours allumées. Ceci
façon être reformulé différemment). Si, s’explique parce que nous n’avons pas
pour des raisons pratiques, vous dési- tenu compte de la vitesse avec laquelle Décrémente Count_2
rez écrire un nombre dans une base un microcontrôleur effectue ces opé-
autre que l’hexadécimale, il vous fau- rations. Sans entrer maintenant dans NON
dra utiliser une notation du type de celle un calcul précis que nous étudierons Count_2 = 0
que nous venons de voir. Le B placé plus tard, on peut cependant déjà ima- OUI
giner que si l’on alterne
Recharge
l’allumage et l’extinction Count_1 et Count_2
des milliers de fois par
seconde, le résultat sera
Reviens au
que l’on verra les LED tou- programme principal
jours allumées. C’est jus-
tement pour éviter cela
qu’il est nécessaire d’in- Figure 3 : Organigramme du sous-
troduire quelque chose qui programme de temporisation
(DELAY).
ralentisse le cycle d’exé-
cution du programme.
C’est à cela que ser t la fois que cela est nécessaire. Dans
routine que nous avons notre programme, cette routine est rap-
appelé DELAY, c’est-à-dire pelée à chaque fois qu’une LED est
temporisation (figure 3). allumée ou éteinte. Pour appeler cette
Une routine est une partie routine, on utilise l’instruction CALL.
Figure 1 : Schéma du module d’essai à LED. de programme qui peut
être rappelée à chaque A suivre… ◆ R. N.

ELECTRONIQUE 80 magazine - n° 8
TECHNOLOGIE

Microcontrôleurs
PIC
7ème partie (2/2)

Le mois dernier, nous avons vu les premières instructions destinées


à faire tourner notre module d’essai à LED. Nous continuons par la
routine CALL et nous passons ensuite au jeu d’instruction des PIC.

Voyons qu’il est donc possible


d’écrire dans un pro-
comment gramme assembleur. Ce
fonctionne jeu varie entre les micro-
la routine CALL contrôleurs de la série
16CXX (ou 16F84) et ceux
Lors de la phase d’initialisation, de la série 17CXX. Etant
une certaine valeur (dans notre cas donné que nous utilisons
50h) est chargée dans les mémoires comme exemple le PIC
COUNT_1 et COUNT_2. Après quoi, 16F84, nous ferons réfé-
lorsque la routine est sollicitée, le rence, pour l’instant, au jeu
microcontrôleur exécute une boucle dans de la série 16C (ou 16F), en laissant
lequel ces deux compteurs sont décrémentés de côté l’analyse détaillée de la série
à chaque cycle. C’est seulement lorsque ceux- 17C, qui n’est autre que l’élargisse-
ci seront mis à zéro que la routine s’arrêtera, ment des instructions de la série 16C
et que le programme, à travers l’instruction RETURN, revien- (ou 16F).
dra à son programme normal, là où il avait été interrompu.
Etant donné que les deux cycles relatifs à la décrémenta- Le jeu d’instructions du 16F84 est constitué de 35 ins-
tion de COUNT_1 et COUNT_2 sont “imbriqués” entre eux, tructions qui peuvent être regroupées ainsi : instructions
en fait le microcontrôleur doit exécuter un total de cycles littérales et de contrôle, instructions “byte (octet) orien-
égal au produit des deux : 50 hexadécimal étant égal au ted”, instructions “bit oriented”.
décimal 80, on obtient donc que le microcontrôleur exécute
un total de 6 400 boucles (80 x 80) avant de revenir au pro- Voyons maintenant en détail la signification de ces trois
gramme principal. Même si cela peut sembler un nombre groupes et les instructions qu’ils contiennent.
très grand, il convient de se rappeler que le microcontrôleur
est capable d’exécuter une instruction en un temps de l’ordre
de la microseconde. Instructions
littérales et de contrôle
Maintenant que nous avons vu dans ses grandes lignes
comment structurer un programme en assembleur, et com- Ce sont 13 instructions qui permettent d’exécuter des
ment le représenter à l’aide d’un organigramme, nous allons opérations en utilisant des constantes et des étiquettes,
analyser le jeu d’instructions des PIC. par exemple, pour charger une valeur numérique dans le
registre W.

Le jeu ADDLW k
d’instructions des PIC Cette instruction additionne le contenu du registre de tra-
vail W et k et met le résultat de l’opération en W. k peut
Le jeu d’instructions représente l’ensemble des instruc- être un nombre ou bien une étiquette. Elle est effectuée en
tions que le microcontrôleur est en mesure d’exécuter et un cycle machine. Mettons, par exemple, que l’on ait W qui

ELECTRONIQUE 75 magazine - n° 9
TECHNOLOGIE

contiennent le nombre 20. En exécu- A première vue, cette instruction pour- SLEEP
tant l’instruction “ADDLW 10”, on rait sembler similaire à l’instruction Met le processeur en mode SLEEP, en
obtiendra que le registre W contienne CALL, mais il y a une différence essen- fermant l’oscillateur et en bloquant
le nombre 30. Imaginons maintenant tielle : l’instruction CALL prévoit tou- ainsi le déroulement du programme.
que l’on ait écrit la directive suivante : jours, à travers l’instruction RETURN, Comme nous l’avons déjà vu, pour sor-
le retour au point où le programme a tir de cette situation, il faut un signal
COUNT EQU 05 été abandonné. Dans l’exemple de du “watchdog” ou une interruption
ADDLW COUNT notre programme, la routine DELAY ser- extérieure. Elle dure un cycle machine.
vait seulement à introduire un certain
Dans la première ligne, comme nous retard, mais une fois son but atteint, SUBLW k
l’avons vu, on associe à l’étiquette le programme devait continuer dans Cette instruction exécute la soustrac-
COUNT le nombre 05. Dans la son cycle d’alternance d’allumage et tion entre le registre W et k, et met le
deuxième ligne, le résultat obtenu sera d’extinction. Par contre, l’instruction résultat en W. Elle dure un cycle
que l’on trouvera en W la somme de GOTO prévoit un abandon complet machine.
la valeur que W avait précédemment sans retour. Elle est normalement uti-
et le nombre 05. lisée avec d’autres instructions pour XORLW k
effectuer ce que l’on appelle les sauts Cette instruction exécute une opéra-
ANDLW k conditionnels. En réalité, il faut par- tion de OU exclusif (EXOR) entre le
Cette instruction exécute une opéra- fois faire exécuter des opérations dif- registre W et k. Elle met le résultat en
tion de ET logique entre le contenu de férentes selon qu’un événement se W. Elle nécessite un cycle machine.
W et k, et met le résultat en W. Elle vérifie ou non. Toujours en nous réfé-
est effectuée en un cycle machine. rant à l’exemple précédent, dans la
routine DELAY on doit décrémenter des Instructions
CALL k registres pour obtenir le retard. Quand “byte oriented”
Cette instruction sert à aller exécuter cette décrémentation a complètement
une sous-routine et s’effectue en deux mis les registres à zéro, il faut donc Ce sont 18 instructions qui permet-
cycles machine. Si nous faisons réfé- revenir au programme. Il faut, par tent d’agir avec les octets des registres
rence à l’exemple du programme pour conséquent, faire suivre deux “che- “file” : ceux d’utilisation spéciale et
allumer les deux LED, on y trouve une mins” différents au programme selon ceux d’utilisation générale.
sous-routine qui commence à l’éti- que la décrémentation a produit ou
quette DELAY. Ainsi, quand l’instruc- non un résultat égal à zéro. ADDWF f,d
tion “CALL DELAY” est exécutée le Cette instruction permet d’additionner
microcontrôleur charge dans le “pro- IORLW k le contenu du registre W avec un
gram counter” (le compteur des posi- Cette instruction réalise une opération registre identifié par son adresse f. Le
tions de mémoire) l’adresse du “label” de OU logique entre le registre W et k résultat sera mis en W ou dans le
DELAY, faisant ainsi continuer le pro- et met, comme toujours, le résultat registre f, selon la valeur de d, qui peut
gramme à partir de l’étiquette DELAY. dans W. Il lui faut un cycle machine. être ou 1 ou 0. Si d vaut 0, le résultat
A la fin de chaque sous-routine, il est sera mis dans le registre W, s’il vaut
nécessaire d’introduire une instruction MOVLW k 1, il sera mis dans le registre f. Si d
RETURN pour faire revenir le pro- Cette instruction charge la valeur de est omis, la valeur que l’on utilisera
gramme au point où il avait été aban- k dans le registre W. La valeur précé- sera 1 et donc le registre utilisé
donné. dente de W est donc évidemment per- comme destination du résultat sera f
due. L’instruction est effectuée en un (un cycle machine). Mettons par
CLRWDT cycle machine. Ainsi, par exemple, exemple que l’on veuille ajouter au
Cette instruction, sert à mettre à zéro l’instruction “MOVLW 14” charge dans registre d’adresse 0C, qui est un des
le “watchdog”, de telle sorte qu’il ne le registre W le nombre 14. Le contenu registres d’utilisation générale, le
puisse pas effectuer un reset du micro- précédent de W est perdu. nombre 10 et mettre le résultat dans
contrôleur. Elle nécessite un cycle ce même registre. La séquence d’ins-
machine. RETFIE tructions à écrire sera :
Sert à effectuer le retour depuis une
GOTO k interruption. Il faut deux cycles MOVLW 10 ;cette instruction
Cette instruction, en deux cycles machine. Nous parlerons de cette ins- ;met le nombre 10
machine, ser t à faire avancer le pro- truction lorsque nous analyserons en ;dans le registre W
ADDWF 0C,1 ;cette instruction
gramme jusqu’à un point différent. Si, détail le mode de gestion via software ;additionne le contenu
par exemple, on écrit l’instruction sui- des interruptions. ;du registre d’adresse
vante : ;0C avec le registre W
RETLW k ;et met le résultat
...... Cette instruction ressemble beaucoup ;dans le registre
GOTO SALTO à RETURN, et sert donc à fermer une ;d’adresse 0C.
...... sous-routine et à revenir au programme
au point où il avait été abandonné. De ANDWF f,d
SALTO ......
...... plus, cette instruction charge la valeur Cette instruction exécute une opéra-
de k dans le registre W. Il faut deux tion de ET entre le registre W et le
cycles machine. registre d’adresse f. Comme ci-des-
Arrivée à l’instruction GOTO, l’adresse
de l’étiquette SALTO est chargée dans sus, si d vaut 1, le résultat est mis
le “program counter”, ce qui force le RETURN dans ce registre, si d vaut 0, le résul-
programme à continuer depuis ce Sert justement pour fermer une sous- tat est mis dans le registre W (un cycle
point. routine. Il faut deux cycles machine. machine).

ELECTRONIQUE 76 magazine - n° 9
TECHNOLOGIE

CLRF f DECF et DECFSZ, à la différence près valeur précédente de la “Carry” (nous


Cette instruction sert à mettre à zéro qu’au lieu d’être décrémenté, le vous rappelons que la “Carry” est un
le contenu du registre d’adresse f (un registre f est incrémenté d’une unité des bits du registre STATUS, qui est
cycle machine). (de un à deux cycles machine). mis à 1 lorsqu’il se produit un report).
La signification de d est la même que
CLRW IORWF f,d pour les autres instructions (un cycle
Cette instruction met à zéro le contenu XORWF f,d machine).
du registre W (un cycle machine) Les deux instructions IORWF et XORWF
effectuent respectivement l’opération Admettons, par exemple, que le
COMF f,d de OU logique entre le registre W et le registre COUNT contienne le nombre
L’instruction COMF ser t à ef fectuer registre d’adresse f (IORWF) et l’opé- 11100110 et que la “Carry” contienne
l’opération de complément, c’est-à-dire ration de OU exclusif entre les mêmes 0.
que les 0 sont remplacés par des 1 et opérandes (XORWF). Il faut deux cycles
vice-versa. Par exemple, le complément machine. Si nous suivons l’instruction “RLF
du nombre binaire 00101011 est COUNT”, le registre COUNT contien-
11010100. Bien sûr, cette opération MOVF f,d dra le nombre binaire 11001100,
est exécutée sur le registre d’adresse Cette instruction permet de déplacer ayant été tourné d’un bit à gauche, la
f, et le résultat sera mis dans ce le contenu du registre de valeur f sur “Carr y”, après l’instruction, contien-
registre ou dans le registre W selon la lui-même ou bien sur le registre W, dra 1 puisque le bit à l’extrême gauche
valeur de d, comme pour les instruc- selon la valeur de d. Même, si à pre- est mis dans la “Carr y”. Le bit à l’ex-
tions précédentes (un cycle machine). mière vue, la copie d’un “file” sur lui- trême droite contient, par contre, 0,
même peut sembler une opération c’est-à-dire la valeur que la “Carr y”
DECF f,d inutile, il faut rappeler que cette opé- avait avant l’exécution de l’instruction.
Cette instruction ser t à décrémenter ration va modifier le bit de zéro du L’instruction “RRF COUNT”, par tant
le contenu du registre d’adresse f (un registre d’état, qui peut donc être testé de la même situation que précédem-
cycle machine). pour vérifier le contenu du “file” (un ment, verra, par contre, le registre
cycle machine). COUNT contenir le nombre binaire
DECFSZ f,d 01110011, alors que la “Carry” sera
Cette instruction exécute la même opé- MOVWF f mise à 0.
ration que la DEFC mais si l’opération Cette instruction ser t à transférer le
de décrémentation a donné pour résul- contenu du registre W dans le registre SUBWF f,d
tat 0, alors, l’instruction qui suit immé- d’adresse f (un cycle machine). Cette instruction exécute la soustrac-
diatement n’est pas exécutée (en effet, tion entre le registre W et le registre
SZ veut dire “Skip of Zero”, c’est-à- NOP d’adresse f, puis met le résultat en f
dire “éviter si le résultat est 0”). Cette Cette instruction n’exécute aucun type ou en W selon la valeur de d (un cycle
instruction est normalement utilisée d’opération. On l’utilise habituellement machine).
conjointement avec les instructions pour introduire des retards (un cycle
GOTO (de un à deux cycles machine). machine). SWAPF f,d
Reprenons le programme de l’exemple L’instruction SWAPF ser t à échanger
et voyons les premières instructions RLF f,d entre eux les quatre bits de poids fort
de la routine DELAY : RRF f,d avec les quatre bits de poids faible
Les deux instructions de “Rotate Left d’un registre d’adresse f (un cycle
DELAY DECFSZ COUNT_1,1 through Carry” (RLF) et “Rotate Right machine). Si, par exemple, le registre
GOTO DELAY through Carry” (RRF) exécutent la rota- COUNT contient le nombre binaire
tion des registres d’adresse f à gauche 01101010, en exécutant l’instruction
La première instruction DECFSZ (voir figure 4a) “SWAPF COUNT,1” nous obtiendrons
COUNT_1,1 décrémente le registre que le registre COUNT contienne le
d’adresse COUNT_1 qui avait été défini nombre binaire 10100110.
par un EQU comme registre d’adresse
0C. C registre f
Instructions
Si cette opération de décrémentation “bit oriented”
n’a pas porté à 0 le contenu du registre
Figure 4a : Rotation à gauche.
COUNT_1, l’instruction suivante sera Ce sont quatre instructions qui per-
exécutée normalement. Il s’agit de mettent d’aller modifier ou tester la
GOTO DELAY qui, comme nous l’avons ou à droite (voir figure 4b), valeur d’un bit d’un registre.
vu, reporte le programme à l’étiquette
DELAY. Cependant, quand COUNT_1 BCF f,b
atteint la valeur 0, l’instruction suivante Avec cette instruction vous pouvez
est sautée, et donc le programme peut C registre f mettre à zéro (Clear) un bit d’un
continuer à l’instruction qui suit immé- registre. L’adresse du registre se
diatement le GOTO DELAY, sortant ainsi trouve, comme d’habitude, en f, alors
de la boucle. que b, qui peut prendre une valeur
Figure 4b : Rotation à droite. entre 0 et 7, représente le bit à mettre
INCF f,d à zéro (un cycle machine). Admettons,
INCFSZ f,d en mettant le bit qui “sort” du registre par exemple, que le registre COUNT
Ces deux instructions se comportent dans la “Carry” et en plaçant, dans le contienne le nombre binaire
exactement comme les instructions bit resté pour ainsi dire “libre”, la 01110101.

ELECTRONIQUE 77 magazine - n° 9
TECHNOLOGIE

L’instruction “BCF COUNT,5” fera suit (BTFSC veut dire “Bit Test File, Skip OPTION qui, comme nous l’avons vu,
qu’après l’exécution le registre COUNT if Clear”, c’est-à-dire “tester le bit du est un registre spécial pour la confi-
vaudra 01010101, étant donné qu’elle registre et s’il est égal à 0, sauter l’ins- guration du timer et du prescaler (un
met à zéro le bit D5 qui représente le truction suivante”). cycle machine).
sixième bit en par tant de la droite,
c’est-à-dire le bit le moins significatif. L’instruction BTFSS fonctionne de la TRISf
même façon, sauf que l’instruction qui L’instruction TRIS sert à transférer le
BSF f,b suit immédiatement est sautée si la contenu du registre W dans un des
Cette instruction fonctionne exacte- valeur du bit est 1 (un ou deux cycles registres TRIS qui, nous vous le rap-
ment comme la précédente, mais au machine). pelons, sont des registres qui per-
lieu de mettre le bit à 0, elle le met à mettent de configurer les por ts du
1 (Set). Elle a besoin d’un cycle microcontrôleur en entrée ou sortie. f
machine. Avec la même valeur de Instructions spéciales ne peut prendre que les valeurs 5, 6
COUNT, c’est-à-dire 01110101, après ou 7, pour accéder aux trois registres
l’instruction “BSF COUNT,3”, le registre Outre les instructions que nous avons des por ts A, B et C dans le cas où
COUNT vaudra 01111101. vues jusqu’à présent, il existe deux ceux-ci sont tous les trois présents (un
instructions qui sont spécifiques à cer- cycle machine). Dans l’exemple de
BTFSC f,b tains PIC de la série 16. Si vous dési- notre programme, parmi les instruc-
BTFSS f,b rez écrire un programme qui soit com- tions d’initialisation, on trouvait ces
Ces deux instructions sont particuliè- patible avec d’éventuels autres deux instructions :
rement importantes, puisqu’elles per- microcontrôleurs de la famille, nous
mettent, après avoir testé la valeur vous conseillons de ne pas utiliser ces MOVLW 00 ;Mets en W le nombre 0
d’un bit, identifié par b, dans le registre instructions. Si, toutefois, vous écri- TRIS PORT_B ;Le port B est configuré
d’adresse f et en fonction de la valeur vez le code qui sera utilisé toujours et ;en sortie
de celui-ci, d’exécuter ou non l’ins- seulement sur un microcontrôleur spé-
truction suivante. cifique (par exemple le 16F84), vous Ces instructions sont utilisées pour ini-
pourrez utiliser normalement ces deux tialiser le port B du microcontrôleur en
En particulier, avec l’instruction BTFSC, instructions. Etudions-les. sortie (nous vous rappelons, en effet,
si la valeur du bit est 1, l’instruction sui- qu’un 0 dans le registre configure le
vante sera normalement exécutée alors OPTION bit correspondant du por t en sor tie
que s’il est à 0, l’instruction suivante Cette instruction ser t à transférer le alors qu’un 1 le configure en entrée).
sera sautée, pour exécuter celle qui la contenu du registre W dans le registre ◆ R. N.

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


* Offre promotionnelle valable jusqu’à fin février 2000
PROGRAMMATEUR UNIVERSEL POUR PIC.
Permet de programmer tous Développé par MICROCHIP, le PICSTARTPLUS vous permet
les microcontrôleurs d’éditer et d’assembler le programme source des PIC 12c5xx,
MICROCHIP, à l’exception PIC 14000, PIC 16Cxx, PIC 17Cxx. Le starter kit comprend, en
des PIC16C5x et des plus du programmateur proprement dit, un CD de programmes
PIC17Cxx. (MPLAB, MPASM, MPLAP-SIM) avec toute la documentation
FT284 (Kit complet + câble PC + SFW 284) ......455 F technique nécessaire, un câble RS232 pour le raccordement à
un PC, une alimentation secteur et un échantillon de
390 F* microcontrôleur PIC.
MF284 (PIC 12C508 programmé seul) ..............82 F PICSTARTPLUS ...... 1 690,00 F .......... 1 590 F*
Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 02/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PBC PRO ........ 2 070,00 F ........ 1 870 F*
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 78 magazine - n° 9
TECHNOLOGIE

Microcontrôleurs
PIC
8ème partie (1/2)

Dans la précédente partie du cours, nous avons analysé en détail


le jeu d’instructions des microcontrôleurs PIC. Une fois la syntaxe
de chaque instruction comprise, il faut étudier “l’assembleur”, c’est-
à-dire le programme en mesure de transformer le listing d’instructions
écrites en assembleur en un listing d’instructions en langage machine.
Pour exécuter cette transformation, il faut utiliser un logiciel
spécifique qui, pour les microcontrôleurs PIC, s’appelle MPASM. Ce
logiciel fait partie d’un plus grand système appelé MPLAB.

l’on appelle le “Project


Qu’est-ce que Manager”, c’est-à-dire
le MPLAB ? le gestionnaire de pro-
jet, se met en route. Un
Le MPLAB est un système projet est constitué par
intégré, mis au point par Micro- l’ensemble de plusieurs
chip, à travers lequel il est pos- fichiers nécessaires à la
sible : réalisation d’un pro-
gramme donné. Souvent,
- d’écrire un programme en assem- en ef fet, on préfère écrire
bleur en utilisant l’éditeur de texte ; dif férentes par ties du pro-
- d’assembler ce programme à travers le gramme séparément de façon à pou-
MPASM (c’est-à-dire l’assembleur pour les voir les tester individuellement pour
microcontrôleurs PIC) ; les assembler ensuite, après avoir
- de simuler le fonctionnement du programme vérifié le caractère fonctionnel de
et de trouver les éventuelles erreurs ; chaque par tie.
- de programmer le microcontrôleur en utilisant un pro-
grammateur comme le PIC START PLUS de Microchip ou La première opération à effectuer pour travailler avec MPLAB
celui que nous avons décrit dans le numéro 5 pages 67 et est de créer un nouveau projet, ou d’en ouvrir éventuelle-
suivantes, par exemple. ment un déjà réalisé.

Comme vous le voyez, en utilisant ce seul logiciel, le MPLAB, Pour créer un nouveau projet, il suffit d’exécuter la com-
vous pourrez développer toutes les phases qui mènent à la mande “New Project” du menu “Project”. Lorsque vous aurez
réalisation complète d’un programme. réalisé cette opération, il apparaîtra une fenêtre (figure 1)
qui permet de :
Ce logiciel est disponible gratuitement sur internet à
l’adresse http://www.microchip.com/10/Tools/PICmi- - définir le nom du projet et sa position dans le disque dur
cro/DevEnv/MPLABi/Software/V41212/index.htm. (“Project Path” and “Name”) ;
- définir la position des barres d’outils et du clavier (“Default
Voyons donc en détail comment fonctionne ce système. Toolbar” et “Default Key Mapping”) ;
Lorsqu’on lance le logiciel MPLAB par Windows, ce que - définir le mode du système, qui peut être : avec émulateur

ELECTRONIQUE 77 magazine - n° 10
TECHNOLOGIE

Figure 2 : La fenêtre “Edit Project”.

Figure 1 : La fenêtre “New Project”. (dans notre cas, laquelle il est possible de définir le nom
le PIC16C84 et le et la position du nouveau projet – le
format à utiliser nom proposé est toujours “NEW-
PICMASTER (dans le cas où l’on dis- pour le fichier .HEX qui sera généré par PROJ.PJT” (PJT étant l’extension qui
poserait de cet outil), avec simulateur l’assembleur). Une fois le programme est toujours donnée aux projets) – ainsi
software (appelé MPSIM) ou bien seu- écrit, vous pouvez le sauver grâce à la que le type de système, qui peut être
lement avec l’éditeur de texte. commande “Save” du menu “File”, en l’émulateur PICMASTER, l’émulateur
lui donnant, bien sûr, un nom et l’ex- software MPSIM ou encore le seul
Une fois le projet défini, vous pouvez tension .ASM. Dans le cas présent, mode d’éditeur de texte. Dans le cas
spécifier quels fichiers sont associés vous pourrez appeler ce fichier “PRO- qui nous intéresse, après avoir donné
à ce projet. En effet, en cliquant sur VALED.ASM” par exemple. un nom au projet, vous choisirez,
“OK” vous entrez dans une deuxième comme système, le simulateur soft-
fenêtre qui vous permet d’ajouter au Pour continuer, il faut maintenant créer ware.
projet des fichiers qui peuvent être un nouveau projet, grâce à l’utilisation
des fichiers avec extension .ASM de la commande “New Project” du Maintenant, en cliquant sur “OK”, vous
(fichier assembleur) ou avec exten- menu “Project”. Cette commande entrez dans une seconde fenêtre (figure
sion .C (fichiers pour compilateur C). active, comme nous l’avons vu, une 2), dénommée “Edit Project”, dans
Si vous souhaitez, par la suite, ajou- fenêtre de dialogue (figure 1) dans laquelle sont définis les dif férents
ter d’autres fichiers au projet, il vous
suffira d’utiliser la commande “Edit list p=16c84,f=inhx8m
Project” du menu “Project” pour acti-
ver cette même fenêtre de dialogue PORT_B EQU 06 ;Port B = registre 06h
TMR0 EQU 01 ;Registre du timer = 01h
(figure 2). COUNT_1 EQU 0C ;Compteur
COUNT_2 EQU 0D ;Compteur
Afin de rendre plus compréhensible et PIC84 EQU 0000 ;Vecteur de reset pour PIC 84
immédiate l’utilisation de MPLAB, nous
analyserons les trois phases indis- ;*** Initialisation ****************************************
INIT ORG PIC84
pensables à la réalisation d’un pro- MOVLW 00 ;Mets en W le nombre 0
gramme : TRIS PORT_B ;Port B configuré en sortie
MOVLW 050 ;Mets in W le nombre 50h
- écriture d’un programme, MOVWF COUNT_1 ;Mets W en COUNT_1
- assemblage, MOVLW 050
MOVWF COUNT_2
- simulation.
;*** Programme principal ********************************
Utilisons, comme programme d’essai, MAIN MOVLW B’00000001’ ;Led A allumée,
le listing en assembleur de la figure 1, ;Led B éteinte
MOVWF PORT_B
que nous avons déjà analysé lors de CALL DELAY ;Routine de retard
la précédente partie du cours. Ce pro- MOVLW B’00000010’ ;Led B allumée,
gramme simple permet d’allumer alter- ;Led A éteinte
nativement deux LED. Après avoir
chargé MPLAB, on active la commande MOVWF PORT_B
CALL DELAY
“New Source” du menu “File”. Une GOTO MAIN
fenêtre de dialogue (appelée “UNTIT-
LED”, puisque vous n’avez pas encore ;*** Routine de retard **************************************
donné de nom à ce fichier) est alors DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1
ouverte et vous pouvez y écrire le pro- GOTO DELAY ;Si ce n’est pas 0, aller à DELAY
MOVLW 050
gramme. Vous pouvez maintenant taper MOVWF COUNT_1 ;Recharge COUNT_1
le listing dans cette fenêtre, exacte- DECFSZ COUNT_2,1 ;Décrémente
ment tel qu’il est donné sur le listing ;COUNT_2
1, sans oublier d’écrire au début du GOTO DELAY ;Si ce n’est pas 0, aller à DELAY
programme l’instruction suivante :
MOVLW 050
MOVWF COUNT_1 ;Recharge COUNT_1
MOVLW 050
list p=16c84,f=inhx8m MOVWF COUNT_2 ;Recharge COUNT_2
RETURN ;Reviens au programme principal
qui est nécessaire pour “dire” au com- END
pilateur le type de processeur utilisé Listing 1 : Ce programme simple permet d’allumer alternativement deux LED.

ELECTRONIQUE 78 magazine - n° 10
TECHNOLOGIE

fichiers qui font partie de ce projet. En MPASM 01.40 Released


cliquant sur “Copy File”, vous pouvez PROVALED.LST
aller chercher les fichiers dans les dif- 27-01-2000 17:38:29 PAGE 1
férents dossiers.
00001
Une fois qu’un fichier est sélectionné Warning[217]: Hex file format specified on command line.
dans la fenêtre “Non-project files”, 00002 list p=16c84, f=inhx8m
vous pouvez l’ajouter au projet en cli- 00003
00004
quant sur “Add”. Après cette opéra- 00000006 00005 PORT_B EQU 06 ;Port B = registre 06h
tion, le fichier est mis dans la fenêtre 00000001 00006 TMR0 EQU 01 ;Registre du timer = 01h
“Project Files” et il pourra justement 0000000C 00007 COUNT_1 EQU 0C ;Compteur
être utilisé pour la compilation et la 0000000D 00008 COUNT_2 EQU 0D ;Compteur
simulation. Si vous voulez ensuite insé- 00000000 00009 PIC84 EQU 0000 ;Vecteur de reset
;pour PIC 84
rer ou retirer des fichiers, il vous suf- 00010
fira d’utiliser la commande “Edit” du 00011 ;Initialisation
menu “Project” pour rappeler cette 00012
même fenêtre. 0000 00013 INIT ORG 0000H
0000 3000 00014 MOVLW 00 ;Mets en W le nombre 0
Warning[224]: Use of this instruction is not recommended.
Nous avons donc créé un nouveau pro- 0001 0066 00015 TRIS PORT_B ;Port B configuré en sortie
jet et ajouté, parmi la liste, le fichier 0002 3050 00016 MOVLW 050 ;Mets en W le nombre 50h
assembleur que nous avons écrit pré- 0003 008C 00017 MOVWF COUNT_1 ;Mets W en COUNT_1
cédemment. Lorsqu’un fichier assem- 0004 3050 00018 MOVLW 050
0005 008D 00019 MOVWF COUNT_2
bleur est inséré parmi les programmes 00020
à utiliser dans le projet, vous pouvez 00021
utiliser la commande “Make Project” 00022 ;Programme principal
du menu “Project” pour assembler ce 00023
fichier. En plus de la commande “Make 0006 3001 00024 MAIN MOVLW B’00000001’ ;Led A allumée, Led B éteinte
0007 0086 00025 MOVWF PORT_B
Project”, il existe deux autres com- 0008 200D 00026 CALL DELAY ;Routine de retard
mandes qui permettent de compiler 0009 3002 00027 MOVLW B’00000010’ ;Led B allumée, Led A éteinte
des fichiers : “Build All” et “Compile 000A 0086 00028 MOVWF PORT_B
Single File”. 000B 200D 00029 CALL DELAY
000C 2806 00030 GOTO MAIN
00031
La différence entre “Make Project” et 00032 ;Routine de retard
“Build All” réside dans le fait que la 00033
première commande va vérifier si un 000D 0B8C 00034 DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1
fichier a déjà été assemblé et, au cas 000E 280D 00035 GOTO DELAY ;Si ce n’est pas 0
;aller à DELAY
où il serait inutile de remettre en route 000F 3050 00036 MOVLW 050
la phase d’assemblage, il informe, avec 0010 008C 00037 MOVWF COUNT_1 ;Recharge COUNT_1
une fenêtre de dialogue, que cette opé- 0011 0B8D 00038 DECFSZ COUNT_2,1 ;Décrémente COUNT_2
ration ne sera pas effectuée. La com- 0012 280D 00039 GOTO DELAY ;Si ce n’est pas 0
mande “Build All” continue dans tous ;aller à DELAY
0013 3050 00040 MOVLW 050
les cas toutes les opérations d’as- 0014 008C 00041 MOVWF COUNT_1 ;Recharge COUNT_1
semblage. Ces deux commandes pro- 0015 3050 00042 MOVLW 050
cèdent à l’assemblage de tous les 0016 008D 00043 MOVWF COUNT_2 ;Recharge COUNT_2
fichiers insérés dans le projet. 0017 0008 00044 RETURN ;Retourne au
;programme principal
00045
00049 END
SYMBOL TABLE
LABEL VALUE LABEL VALUE
COUNT_1 0000000C PIC84 000003FF
COUNT_2 0000000D PORT_B 00000006
DELAY 0000000D TMR0 00000001
INIT 00000000 __16C84 00000001
MAIN 00000006
MEMORY USAGE MAP (‘X’ = Used, ‘-’ = Unused)
0000 : XXXXXXXXXXXXXXXX XXXXXXXX ———————
03C0 : —————————————————————————————————X
All other memory blocks unused.
Program Memory Words Used: 25
Program Memory Words Free: 999
Errors : 0
Warnings : 2 reported, 0 suppressed
Figure 3 : La fenêtre de Messages : 0 reported, 0 suppressed
progression de l’assemblage.
Listing 2 : Listing résultant de la fonction .LST.

ELECTRONIQUE 79 magazine - n° 10
TECHNOLOGIE

Si, par contre, vous souhaitez assem- tions. Par exemple, pour notre fichier, “MAIN” et “DELAY” correspondent res-
bler un seul fichier, il faudra utiliser que nous avons appelé “PROVA- pectivement aux adresses 0000h,
la commande “Compile Single File”, LED.ASM”, le fichier “PROVALED.LST”, 0006h et 000Dh. Le fichier .LST
puisqu’elle procède seulement à la que vous retrouverez sur le listing 2, reproduit également le “SYMBOL
compilation du fichier de la fenêtre est généré. TABLE”, c’est-à-dire le tableau dans
active. lequel sont indiqués les variables et
Ce fichier est par ticulièrement utile les labels.
Une fois la phase de compilation mise puisqu’il donne également, en plus des
en route, une barre apparaît pour vous instructions originales, beaucoup Une fois l’opération de compilation
informer sur la progression de ce pro- d’autres informations, que nous allons du fichier effectuée, vous pouvez pas-
cédé de 0 à 100 %. S’il n’y a pas d’er- détailler : ser à la phase de simulation qui
reur, le programme informe que la consiste à faire exécuter le pro-
compilation a été ef fectuée correc- La première colonne indique l’adresse gramme écrit pour le microcontrôleur
tement et que le fichier .HEX a donc de la case mémoire. En fait, notre pro- à travers le PC. La simulation est une
été créé. Dans le cas où il y aurait eu gramme n’occupe que 25 cases des opérations les plus impor tantes
des erreurs, une fenêtre qui liste mémoire, laissant donc 999 cases car elle permet de mettre au point un
toutes les erreurs rencontrées est libres (en effet, le PIC16F84 dispose programme avant de le “télécharger”
automatiquement ouver te (figure 3). d’une mémoire de programme de dans la mémoire du microcontrôleur.
Dans ce dernier cas, l’assembleur 1 024 mots). Les cases occupées Pour simuler l’exécution d’un pro-
crée lui-même un fichier caractérisé sont celles qui vont de l’adresse gramme, vous devrez utiliser princi-
par l’extension .ERR qui donnera la 0000h à 0017h. La deuxième colonne palement les commandes qui se trou-
liste et la typologie des erreurs ren- contient, quant à elle, le code hexa- vent dans les deux menus “Debug”
contrées. Vous pouvez donc consul- décimal relatif à l’instruction mémo- et “Window”.
ter et éventuellement imprimer ce risée dans la case mémoire corres-
fichier. pondante. Ainsi par exemple, nous A suivre… ◆ R. N.
découvrons que l’instruction “MOVLW
La phase de compilation du pro- 00”, qui est assemblée dans la case
gramme prévoit, outre la création du 0000h (puisqu’elle est la première ABONNEZ-VOUS A
fichier .HEX, la production d’un fichier instruction du programme), corres-
.LST qui contient le listing avec l’in- pond à l’hexadécimal 3000h. Toujours
dication de la position de mémoire grâce à ce fichier, nous découvrons
occupée par les différentes instruc- également que les labels “INIT”,

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


* Offre promotionnelle valable jusqu’à fin mars 2000
PROGRAMMATEUR UNIVERSEL POUR PIC.
Permet de programmer tous les Développé par MICROCHIP, le PICSTARTPLUS vous permet
microcontrôleurs MICROCHIP, d’éditer et d’assembler le programme source des PIC 12c5xx,
à l’exception des PIC16C5x et PIC 14000, PIC 16Cxx, PIC 17Cxx. Le starter kit comprend, en
des PIC17Cxx. Livré avec son plus du programmateur proprement dit, un CD de programmes
programme : éditeur (exa) + (MPLAB, MPASM, MPLAP-SIM) avec toute la documentation
assembleur + programmateur. technique nécessaire, un câble RS232 pour le raccordement à
un PC, une alimentation secteur et un échantillon de
FT284 (Kit complet + câble PC + SFW 284) ......455 F microcontrôleur PIC.
390 F* PICSTARTPLUS ...... 1 690,00 F .......... 1 590 F*
Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 03/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PBC PRO ........ 2 070,00 F ........ 1 870 F*
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 80 magazine - n° 10
TECHNOLOGIE

Microcontr
Micr ocontrô
ôleurs
PIC
8ème partie
par tie (2/2)

Le mois dernier, nous avons introduit MPLAB puis nous avons


développé la manière de mettre en œuvre notre projet.
Dans la fin de cette 8ème partie, nous allons voir comment simuler
un programme avec MPSIM.
Si la lecture de ce cours peut paraître ardue, tout redevient simple
lorsque l’on se trouve devant son ordinateur en disposant du
programme.

Simuler un - La fenêtre “File Regis-


programme ter” qui visualise le
avec “MPSIM” contenu des registres.

Une fois le fichier compilé, il - La fenêtre “Special Func-


sera “téléchargé” dans la tion Registers” qui visualise
mémoire du microcontrôleur. A tra- le contenu des registres
vers les commandes du menu “Win- d’utilisation spéciale, tels
dow”, vous pouvez ouvrir plusieurs que par exemple “TMRO”,
fenêtres qui permettent de contrôler “PORTA”, “PORTB”, etc.
le fonctionnement du programme
comme s’il tournait effectivement dans le - La fenêtre “Symbol List” qui visua-
microcontrôleur. lise les variables et les étiquettes défi-
nies dans le programme.
Vous trouverez en particulier :
Essayons maintenant d’ouvrir les fenêtres “Program
- la fenêtre “Program Memory” qui donne le contenu de la Memor y”, “Stack” et “File Register”. Vous obtiendrez un
mémoire de programme. Dans notre cas, cette fenêtre ensemble identique à la copie d’écran de la figure 4.
contiendra le programme “PROVALED”. Cette fenêtre est
très pratique pour voir, pendant l’exécution, les différentes Si vous utilisez maintenant la touche de fonction F7, vous
instructions effectuées l’une après l’autre. pourrez mettre en route l’exécution du programme dans le
mode appelé “pas à pas” : à chaque appui sur la touche
- La fenêtre “EEPROM” qui permet, quant à elle, de voir com- F7, on fait exécuter, au simulateur, une simple instruction.
ment le contenu de la zone de mémoire EEPROM varie. Nous Dans la fenêtre “File Register”, il est possible de voir com-
vous rappelons que cette zone est constituée de 64 bytes ment le contenu des différents registres varie. Une fois que
de mémoire. vous arrivez à l’instruction “CALL DELAY”, le programme
saute à l’étiquette “DELAY” et la fenêtre du “Stack” trans-
- La fenêtre “Stack” qui ser t à contrôler le contenu de la crit exactement cette opération.
zone de “stack”. Cette dernière est une zone particulière
de mémoire que l’on utilise lorsque l’on effectue une ins- Ce ne sont cependant pas là les seules capacités du simu-
truction de “CALL”. lateur. Il est en effet possible d’utiliser des fenêtres parti-

ELECTRONIQUE 78 magazine - n° 11
TECHNOLOGIE

culières, appelées “Watch Window”, à


travers lesquelles vous pourrez contrô-
ler les valeurs prises par cer taines
variables. Avec la commande “New
Watch Window” vous activez en effet
une “Watch Window” qui est “remplie”
à travers la fenêtre de dialogue “Edit
Window”, qui apparaît en même temps.
Vous pouvez donc insérer des variables
à visualiser, ou un registre d’utilisation
spéciale, ou une des variables définies
dans le programme, ou bien encore
l’adresse d’une position de mémoire
de la zone registres. Pour ajouter ou
retirer des variables de la “Watch Win-
dow”, une fois qu’elle a été définie, vous
pouvez cliquer sur le bouton en haut à
gauche dans la fenêtre de la “Watch
Window” et rappeler la commande “Edit
Watch”. Par exemple, dans notre pro-
gramme, il pourrait être intéressant d’al-
ler contrôler les valeurs prises par les
Figure 4 : Les trois fenêtres “Programme Memory Window”, “File Register
variables “COUNT_1” et “COUNT_2”. Il Window” et “Stack Window” ouvertes simultanément.
est ainsi facile de voir comment le
registre “COUNT_1” est décrémenté à
chaque instruction “decfsz”. Vous pouvez, en outre, faire exécuter devrez rappeler la commande “Break
le programme en mode pas à pas, c’est- Settings” et écrire dans la case “Start”
à-dire en exécutant une instruction à la l’adresse 7, puis cliquer dans la case
La phase de DEBUG fois, grâce aux deux commandes “Step” à cocher pour insérer ce “Break Point”
et “Step Over”. La différence entre les parmi ceux disponibles. Une fois cette
Lorsque vous avez décidé quelles deux réside dans le fait qu’avec la com- fenêtre fermée, la présence du “Break
variables vous souhaitez contrôler, vous mande “Step” les instructions sont Point” sera indiquée dans la fenêtre du
pouvez passer à la véritable phase de effectivement exécutées à chaque “Program Memory”. Si avec “Run” vous
simulation du programme. Toutes les commande “Step”, alors qu’avec “Step activez l’exécution du programme,
commandes concernant la simulation Over”, lorsque l’on rencontre une ins- après avoir remis à 0 avec la com-
du programme sont contenues dans le truction de “CALL”, c’est-à-dire d’appel mande “Reset”, vous verrez que l’exé-
menu “Debug”. de sous-routine, le simulateur exécute cution du programme s’arrêtera à la
cette sous-routine et ne s’arrête que position 0008h, puisque toutes les ins-
Etudions-les en détail. lorsque cette sous-routine est terminée. tructions de la 0000h à la 0007h com-
Cette différence peut être vérifiée avec prises auront été exécutées.
Commençons par la commande “Run” notre programme lorsque l’on doit exé-
qui permet de mettre en route l’exécu- cuter l’instruction “CALL DELAY”. La “Trace Memor y” est un autre élé-
tion du programme et d’accéder à dif- ment que l’on utilise couramment dans
férentes autres commandes qui gèrent L’un des aspects les plus importants, la phase de mise au point et de test
les différents modes d’exécution. Vous pendant la phase de simulation d’un d’un programme. La mémoire “Trace”
noterez que ces commandes peuvent programme, est la possibilité d’arrêter est constituée d’un buffer de mémoire
être facilement activées, même à l’aide le flux d’exécution en fonction d’évé- (dans notre cas, d’une taille de 8k) qui
des touches de fonctions du clavier des nements déterminés qui se produisent. maintient en mémoire les adresses et
PC. La ligne d’état, qui se trouve en bas Cette situation est définie par le terme les codes opératoires de chaque ins-
de la fenêtre de MPLAB, devient alors “Break” et ce qui est créé sont des truction, au fur et à mesure que celles-
jaune, afin d’indiquer que le programme “Break Points”, c’est-à-dire des points ci sont exécutées. Pour définir quelles
est en phase de simulation. d’arrêt du programme. En pratique, adresses vous voulez utiliser pour la
l’exécution du programme est inter- “Trace”, il suffit d’appeler la commande
Lorsque la simulation est amorcée, rompue à chaque fois que le “PRO- “Trace Settings” du menu “Debug”. En
seules les commandes “Halt” et GRAM CONTER” atteint la valeur posée plus des “Break Points” dont nous
“Reset” restent actives, car elles ser- comme “Break Point”. Ces “Break venons de parler, vous pouvez utiliser
vent toutes deux à arrêter l’exécution Points” sont définis à l’aide de la com- des “Conditional Break”. En fait, ces
du programme. La commande “Halt” mande “Break Settings” du menu arrêts conditionnels permettent de stop-
arrête simplement l’exécution à une cer- “Debug”. Cette commande permet d’ac- per l’exécution du programme à chaque
taine position, alors que la commande céder à une fenêtre (figure 5) dans fois qu’un registre interne atteint une
“Reset” remet le programme au début. laquelle il est possible de poser les valeur bien déterminée.
“points d’arrêt” désirés.
La commande “Animate” met, elle Voyons un exemple pratique de “Condi-
aussi, en route l’exécution simulée du Supposons, par exemple, que vous ne tional Break”, en considérant notre
programme, mais elle le fait à une vouliez faire exécuter que les premières habituel programme pour l’allumage
vitesse très réduite, de façon à pouvoir instructions du programme, avant l’ins- des deux LED. Ce programme prévoit
suivre le flux d’exécution du programme truction de saut à “DELAY”, soit les ins- une routine de retard (appelée “DELAY”)
même. tructions jusqu’à la position 7. Vous basée sur la décrémentation du registre

ELECTRONIQUE 79 magazine - n° 11
TECHNOLOGIE

Figure 6 : La fenêtre “Conditional Break”.

que vous voulez programme. En activant les commandes


Figure 5 : La fenêtre “Break Point Settings”. utiliser pour cette “Simulator Stimulus”, “Asynchronous
condition. Dans Stimulus” du menu “Debug”, on accède
“COUNT_1”. Supposons que vous vou- notre cas, vous taperez dans la case à une fenêtre qui met à disposition 12
liez faire exécuter cette routine un cer- “Reg” notre variable “COUNT_1”, c’est- boutons définissables par l’utilisateur.
tain nombre de fois, jusqu’à ce que, à-dire le nom du registre à utiliser comme Pour configurer ces boutons, ou plutôt
par exemple, la variable “COUNT_1” condition. Dans la case “Conditions” pour leur assigner la patte correspon-
prenne la valeur 10. Pendant l’exécu- vous choisirez “Equals” (=), alors que dante du microcontrôleur et le type de
tion de la routine, vous voulez, en plus, dans la case “Value” vous écrirez “10”. signal qui doit être généré, vous devrez
contrôler la variation de cer tains La condition sélectionnée pour arrêter cliquer avec le bouton droit de la sou-
registres. Pour faire exécuter le pro- le programme est donc associée au ris, après que la fenêtre “Asynchronous
gramme jusqu’à ce que “COUNT_1” moment où le registre “COUNT_1” Stimulus” ait été ouverte.
vaille 10, vous devez lancer les com- deviendra égal à “10”. Maintenant,
mandes “Debug” - “Execute” - “Condi- remettez à zéro avec le bouton “Reset” Cette opération fait apparaître une
tional Break”. La fenêtre “Conditional et mettez en route l’exécution avec autre fenêtre de choix dans laquelle
Break” apparaît donc et vous pouvez y “Start”. Dans la fenêtre “Debug”, les vous pouvez, avec la commande
écrire les paramètres suivants : différentes instructions commenceront “Assign Pin”, assigner un bouton à une
à défiler et le programme s’arrêtera peu certaine patte du microcontrôleur, alors
“Single Cycle” si vous voulez que pour après, vous permettant de parcourir qu’avec les commandes “Pulse”,
chaque instruction exécutée le simu- toutes les instructions exécutées jusque- “High”, “Low” et “Toggle” il est pos-
lateur aille vérifier si effectivement la là. Si, en plus de voir le flux des ins- sible de définir le type de signal que
condition (dans notre cas “COUNT_1” tructions, vous voulez analyser comment l’on génère :
= 10) est remplie. Si l’on choisit l’autre “COUNT_1” change effectivement de
possibilité, c’est-à-dire “Multiple valeur, vous pouvez activer la case “Trace - “Pulse” inverse l’état de la patte sélec-
Cycles”, la condition sera vérifiée seu- Data”, et en cliquant sur “Edit”, entrer tionnée et la fait revenir à son état d’ori-
lement pour les “Break Points” éven- dans une fenêtre de dialogue qui vous gine ;
tuellement définis. permettra de choisir quel registre “Tra- - “High” met l’état de la patte à un
cer”. Sélectionnez donc “COUNT_1” et niveau logique haut ;
“Update Display” permet de visualiser puis “Add”. Fermez cette fenêtre en cli- - “Low” met l’état de la patte à un
immédiatement les variables définies quant sur “OK” et retournez à la fenêtre niveau logique bas ;
par “Trace Data” dans la fenêtre sur la des “Conditional Break”. En activant - “Toggle” inverse l’état de la patte en
droite. Si vous ne désirez pas cette encore le programme avec “Start”, vous la laissant dans cet état.
option, la fenêtre sera visualisée seu- verrez qu’à chaque instruction suit l’in-
lement lorsque le programme s’arrêtera. dication de valeur de “COUNT_1”. Le Une fois la patte et l’action configu-
programme est effectivement terminé rées, vous pouvez lancer l’exécution
La partie “Conditions” est celle qui per- lorsque “COUNT_1” vaut “10”. du programme et, au moment où vous
met d’établir les conditions sur les- cliquez sur un bouton, le type de signal
quelles on fera s’arrêter l’exécution du spécifié est généré par la patte du
programme. Si l’on choisit l’option “User Simulation microcontrôleur.
Halt”, le programme sera terminé lors- d’événements
qu’on cliquera sur “Halt”, qui est rendu
actif après la mise en route du pro- Le simulateur MPSIM permet de géné- Pour conclure
gramme à l’aide de la commande rer via software des niveaux logiques
“Start”. Si, au contraire, on choisit l’op- pour simuler ce qui se passe lorsqu’un Cette partie peut paraître ardue à ceux
tion “Number of Cycles”, on peut déci- événement extérieur se produit. Ce qui la liront sans disposer des logiciels
der d’arrêter le programme après mode est pratique pour tester le fonc- utilisés. Pourtant, tout redevient simple
l’exécution d’un certain nombre d’instruc- tionnement de routines d’interruption, dès lors que l’application est lancée et
tions, qu’il est possible de définir dans par exemple, ou la réponse du pro- que les fenêtres s’affichent. Dans la
la case “Value”. Enfin, vous pouvez choi- gramme à des événements extérieurs, prochaine partie, nous vous propose-
sir une des conditions possibles (égale, comme, toujours par exemple, la pres- rons la réalisation d’une carte de test
différente, inférieure, supérieure, supé- sion d’une touche. Vous pouvez géné- qui vous permettra de mettre en pra-
rieur ou égal à, inférieur ou égal à), en rer quatre différents types de stimula- tique tout ce que vous venez d’ap-
définissant, évidemment, le registre tions asynchrones, qui peuvent donc se prendre.
(c’est-à-dire la position de mémoire RAM) produire à n’importe quel moment du ◆ R. N.

ELECTRONIQUE 80 magazine - n° 11
TECHNOLOGIE

Microcontrôleurs
PIC
9ème partie
Carte de test pour PIC
Afin de mettre en pratique les cours de programmation dispensés
dans la revue, nous avons pensé que la meilleure solution était celle
de réaliser une carte de test et d’associer à cette carte une série
de programmes didactiques, spécialement réalisés à cette intention.
De cette manière, partant d’une base “hardware” fiable et d’un
listing “software” déjà amplement mis au point, l’apprentissage
devient vraiment simple, rapide et, pourquoi pas, divertissant !

ette carte de dédier un programma-


test multi- teur, mais aussi à étu-
usages est dier et proposer une
adaptée à l’étude, carte de test universelle
mais aussi aux qui permettra de vérifier
expériences avec le micro- un programme à peine
contrôleur PIC16C84 et pour se écrit et chargé dans l’EE-
créer une première librairie de rou- PROM.
tines fiables afin de les utiliser
comme point de dépar t pour des Si, par exemple, vous voulez
programmes plus complexes. tester un programme pour lire
un clavier à matrice et piloter
Avant d’entrer dans le vif du sujet, rappelons un afficheur, il ne faut rien faire d’autre
quelques prestations du PIC16C84, micro- que d’insérer le microcontrôleur dans
contrôleur auquel cette carte est dédiée. C’est son suppor t, utiliser un afficheur à
cer tainement un des meilleurs parmi les LED ou LCD suivant votre programme
microcontrôleurs 8 bits, car il a une architecture RISC (avec et le latch (amplificateur de ligne) de la matrice du bus de
un éventail de seulement 35 instructions), il dispose, en pilotage.
interne, en plus de la mémoire RAM (registre 36x8 bits,
outre 15 registres pour des fonctions spéciales) d’une Si votre PIC16C84 doit visualiser des textes et activer un
EEPROM dans laquelle est mémorisé le programme. relais, vous pouvez utiliser l’afficheur LCD alphanumérique
bien adapté à cet usage et l’ampli de bus qui interface les
Chaque composant peut être programmé et reprogrammé relais avec les entrées/sorties du micro.
sans trop de problèmes (le fabricant garanti environ
1 000 000 d’opérations de lecture/écriture). En somme, la carte test que nous vous proposons permet
de simuler pratiquement toutes les situations dans les-
L’importance du PIC16C84 nous a incités, non seulement quelles on peut employer le microcontrôleur PIC16C84.
à l’utiliser dans diverses situations (certaines que vous C’est très utile car cela permet au programmeur de retou-
avez déjà vues, d’autres que vous verrez bientôt) et à lui cher les éventuelles erreurs du logiciel sans avoir recours

ELECTRONIQUE 72 magazine - n° 12
TECHNOLOGIE

à une carte spécifique. Pour cette rai- les microcontrôleurs et par-dessus tout meilleur auxiliaire didactique pour
son nous conseillons ce montage à à nos lecteurs qui voudront suivre mettre en pratique les notions fraî-
ceux qui habituellement travaillent avec notre cours. Cette carte deviendra le chement apprises.

Figure 1 : Schéma électrique de la carte de test pour PIC.

ELECTRONIQUE 73 magazine - n° 12
TECHNOLOGIE

Les éléments
constituants
Voyons dans le détail cette carte de test
par l’analyse du schéma électrique.
Etant donné que le sujet traité n’est pas
d’une grande complexité, sa compré-
hension est plutôt facile. Il s’agit en fait
d’un microcontrôleur (U8) entouré d’une
série d’amplificateurs de lignes à trois
états (74LS244). En fonction de la
sélection (faite manuellement) de ces
amplificateurs nous pouvons appliquer
les I/O du microcontrôleur une fois à
un sous-ensemble, une fois à un autre,
etc. Ces sous-ensembles ne sont autres
que des circuits pouvant être pilotés
par l’intermédiaire du PIC16C84.
Figure 2 : Le prototype de la carte test, montage terminé.
- Un afficheur à cristaux liquides 1 ligne
16 caractères (ou 2 lignes, 16 carac- Cette carte de test a été spécialement réalisée pour apprendre, de façon simple
tères) et rapide, les techniques de programmation des microcontrôleurs PIC. La carte
dispose des ressources suivantes : 8 LED, 1 afficheur LCD alphanumérique, 1
- Deux relais RL1 et RL2 clavier matricé, 1 afficheur 7 segments, 2 boutons poussoirs, 2 relais, 1 buzzer
- Un buzzer piézo BZ piézo.
- Un afficheur 7 segments à led
- Un clavier matricé sur 4 lignes, 4
colonnes alimentées par les résis- directement les bobines des relais, le tionnés et de se placer en état “haute
tances R14, R15, R16, R17, R18, buzzer DZ ainsi que l’éclairage de l’af- impédance” (ils ne transmettent plus
R19, R20, R21 ficheur LCD. Le régulateur U6 abaisse rien) lorsqu’ils ne sont pas sélection-
- Une ligne de 8 leds LD1 à LD8 la tension à 5 volts bien stabilisés pour nés. Les sorties ne passent pas au ”0”
- Deux boutons poussoirs pour simu- alimenter toute la logique, le micro- logique ni au “1” logique, mais elles
ler des entrées et pour vérifier les contrôleur U8, l’afficheur LCD et celui sont laissées fluctuantes comme des
routines anti-rebond, de lecture des à LED, les résistances de tirage des transistors à collecteur ouvert.
fronts montants ou descendants et poussoirs P1/P2, celles des poussoirs
des niveaux logiques TTL. du clavier ainsi que les dip-switchs. Un exemple : En conditions normales
de fonctionnement le signal qui entre
Afin de permettre le fonctionnement du sur la broche 2 est transmis à la broche
Le schéma PIC16C84 tantôt avec une par tie du 18, celui de la 4 à la 16, etc. Ceci
programme, tantôt avec une autre, les lorsque la broche 1 est reliée à la
Nous pouvons dire que notre carte test divers circuits sont séparés des masse (niveau logique 0). Par contre,
est vraiment très complète. Le tout broches I/O (entrées - sorties) par des si la broche 1 est reliée au niveau 1
fonctionne avec une alimentation 12 amplificateurs de ligne trois états, des logique (+5 volts), les buffers 18, 16,
volts reliée entre +V et la masse. La 74LS244. Ces derniers ont la particu- 14, 12, etc. sont mis en état “haute
diode D1 protège le circuit des inver- larité de se compor ter comme de impédance” et se comportent comme
sions de polarité. Le +12 volts alimente simples buffers lorsqu’ils sont sélec- des transistors à collecteurs ouverts.

Il faut noter que chaque ampli de ligne


est composé de deux parties de quatre
amplificateurs chacune. Extérieurement,
il se présente sous la forme d’un cir-
cuit intégré 2 x 10 broches, 16 réser-
vées aux I/O, 2 pour la validation (un
16 1
pour chaque groupe de 4 amplifica-
teurs) et les 2 dernières pour l’ali-
Figure 3 : Brochage de l’afficheur mentation en 5 volts.
LCD intelligent CLOVER CDL4162.
Ce dernier (2 lignes, 16 caractères) Les broches 2, 4, 6 et 8 sont des
est relié au PIC16C84 à travers un
bus de données de 8 bits et 3 lignes entrées et font face respectivement
de contrôle : R/W, E, RS. aux sorties sur les broches 18, 16, 14
RA2 1 18 RA1 et 12. La broche de validation pour ce
RA3 2 17 RA0
bloc de 4 éléments est la broche 1,
PIC16C84

1 = BL+ 9 = DB0 RA4/T0CKI 3 16 OSC1/CLKIN


MCLR 4 15 OSC2/CLKOUT
2 = BL– 10 = DB1 VSS 5 14 VDD activée par un niveau “0”, désactivée
3 = GND 11 = DB2 RB0/INT
RB1
6
7
13
12
RB7
RB6 par un niveau “1”.
4 = +5 V 12 = DB3 RB2 8 11 RB5
RB3 9 10 RB4
5 = Vo 13 = DB4
6 = RS 14 = DB5 Le second groupe, dont les entrées
7 = R/W 15 = DB6 Figure 4 : Brochage sont les broches 11, 13, 15 et 17 et
8 = E 16 = DB7 du PIC 16C84. les sorties respectivement 9, 5, 7 et
3 sont validées par la broche 19.

ELECTRONIQUE 74 magazine - n° 12
TECHNOLOGIE

Dans notre carte test, nous avons uti- des buffers 3 états par l’intermédiaire deux relais RL1 et RL2 activés par les
lisé 5 de ces drivers, parmi lesquels un des cavaliers JP1, JP2, JP3. transistors T1 et T2 avec les lignes RA1
seul (U1) est utilisé entièrement par la et RA2, le buzzer piézo BZ commandé
ligne de LED (LD1 à LD8). Un autre (U2) La fermeture de JP1 active les drivers par le transistor T3 piloté à son tour
et une partie de U4 (U4b) sont desti- de lignes U3a, U3b, U4a, ce qui, en pra- par la ligne RA0 du port A.
nés à l’interconnexion en parallèle de tique, se traduit par la possibilité d’uti-
l’afficheur 1 ligne 16 caractères. Un liser le clavier matricé dont les lignes et Il est à noter que la car te test est
autre encore (U3) est utilisé pour la ges- les colonnes sont à relier aux pastilles conçue de telle façon qu’un seul cava-
tion des lignes et des colonnes du cla- prévues sur le circuit imprimé reliées au lier peut être utilisé à la fois. Notez éga-
vier matricé. Le dernier, (U5) est utilisé por t B du microcontrôleur sur les lement que chaque cavalier est équipé
en partie (U5a) pour les boutons pous- broches RB0 à RB7. Le chiffre décimal d’une résistance (R11, R12, R13) de
soirs indépendants P1 et P2 et l’autre de l’afficheur à LED est géré par les 4 tirage afin de fixer un niveau haut et
partie (U5b) pour le contrôle des tran- bits du port A, RA0 à RA3 qui pilotent commandent directement, ou par une
sistors qui pilotent les deux relais et le le décodeur 7 segments U7 (CD4511). simple logique à diode, les broches de
buzzer piézo. validation des buffers 3 états.
L’autre moitié de U4 (U4a) est employée La fermeture de JP2 permet l’utilisation
comme buffer entre le microcontrôleur de l’afficheur LCD 1 ligne 16 caractères En fermant JP1, on sélectionne entiè-
et le décodeur BCD/7 segments relié au port B (RB0 à RB7) par le bus rement U3 et la première partie de U4
(CD4511), utilisé quant à lui, pour com- de données et la gestion des lignes de (U4a) ; à ce moment U2, U4b, U1 et
mander l’afficheur 7 segments à LED contrôle RS, RW, E est confiée au port U5 sont en sortie haute impédance car
à cathode commune. A (RA0 à RA2). Les boutons poussoir JP2 et JP3 sont ouver ts et donc les
P1 et P2 sont commandés par RA3 et résistances de tirage fixent au niveau
A ce point, nous pouvons immédiate- RA4 configurés en entrée. haut les broches de contrôle. En effet
ment voir comment sont sélectionnées R11 met au niveau “1” la broche 1 de
les différentes I/O du microcontrôleur La fermeture de JP3 permet l’utilisa- U5b et les broches 1 et 19 de U1 et
U8. Il y a trois combinaisons possibles tion de la ligne de 8 LED reliées au port bloquent aussi la diode D4. R12 agit
choisies sur la base des applications B (RB0 à RB7) par l’intermédiaire du de la même façon sur la diode D5 et
les plus courantes du PIC16C84. Elles buffer U1, les deux poussoirs P1 et P2 commande la broche 19 de U4b et les
sont toutes sélectionnées avec l’aide gérés par le por t A RA3 et RA4, les broches 1 et 19 de U5a.

Figure 5 : Plan d’implantation des composants.


Respectez l’ordre habituel de montage c’est-à-dire des composants les plus bas aux composants les plus hauts et votre
carte fonctionnera dès sa mise sous tension.

ELECTRONIQUE 75 magazine - n° 12
TECHNOLOGIE

En fermant uniquement JP2, U5a est


activé par le “0” porté par D5, U4b et
U2 sont également activés par les
broches 1 pour le premier et les
broches 1 et 19 pour le second. Les
autres buffers sont désactivés.

Avec JP3 fermé nous activons U5a,


cette fois à travers un niveau “0”
por té par D4, mais également U1
(broches 1 et 19 mises au niveau bas)
et U5b.

Pour résumer, nous dirons que par la


sélection de JP1 il est possible de tes-
ter, par exemple, un programme per-
mettant de gérer un clavier matricé de
4 lignes et 3 colonnes ou bien 4 lignes
et 4 colonnes, l’affichage d’un chiffre
sur l’afficheur 7 segments en fonction
de la touche du clavier qui est appuyée.
Il est encore possible de tester un pro-
gramme qui doit gérer uniquement le
clavier ou l’afficheur 7 segments.

Avec les fonctions attribuées à JP2,


Figure 6 : La platine de la carte test à la fin du montage des composants. Notez, nous pouvons tester chaque pro-
sur le côté droit, la présence des trois cavaliers (JP1, JP2, JP3) qui permettent gramme de visualisation sur un af fi-
la sélection des ressources disponibles sur la carte. cheur LCD intelligent du type 1 ligne
16 caractères (CDL4162) ou bien 2
La fermeture de JP1 permet la sélection du clavier et de l’afficheur 7 segments lignes 16 caractères activé par l’in-
à LED. JP2 permet la sélection de l’afficheur LCD et des boutons poussoirs P1
et P2. Enfin, JP3 sélectionne les 8 LED, les deux poussoirs, les 2 relais et le termédiaire des deux boutons pous-
buzzer piézo. soirs. En somme, il est possible de
tester le fonctionnement du PIC16C84

Liste des composants


R1 = 100 Ω R30 = 22 kΩ T1 = Transistor NPN BC547B
R2 = 10 kΩ ajustable R31 = 470 Ω T2 = Transistor NPN BC547B
R3 = 10 kΩ R32 = 470 Ω T3 = Transistor NPN BC547B
R4 = 10 kΩ R33 = 470 Ω BZ = Buzzer piézo
R5 = 22 kΩ R34 = 470 Ω RL1 = Relais 12 V 1 RT
R6 = 22 kΩ R35 = 470 Ω RL2 = Relais 12 V 1 RT
R7 = 22 kΩ R36 = 470 Ω JP1 = Cavalier
R8 = 4,7 kΩ R37 = 470 Ω JP2 = Cavalier
R9 = 22 kΩ R38 = 22 kΩ JP3 = Cavalier
R10 = 22 kΩ C1 = 470 µF 25 V électrolytique LD1 = LED rouge 5 mm
R11 = 4,7 kΩ C2 = 470 µF 25 V électrolytique LD2 = LED rouge 5 mm
R12 = 4,7 kΩ C3 = 100 nF multicouche LD3 = LED rouge 5 mm
R13 = 4,7 kΩ C4 = 22 pF céramique LD4 = LED rouge 5 mm
R14 = 100 Ω C5 = 22 pF céramique LD5 = LED rouge 5 mm
R15 = 100 Ω C6 = 100 nF multicouche LD6 = LED rouge 5 mm
R16 = 100 Ω D1 = Diode 1N4004 LD7 = LED rouge 5 mm
R17 = 100 Ω D2 = Diode 1N4148 LD8 = LED rouge 5 mm
R18 = 10 kΩ D3 = Diode 1N4148 P1 = Bouton poussoir
R19 = 10 kΩ D4 = Diode 1N4148 P2 = Bouton poussoir
R20 = 10 kΩ D5 = Diode 1N4148 AF1 = Afficheur 7 segments CC
R21 = 10 kΩ Q1 = Quartz 4 MHz AF2 = Afficheur LCD 2x16
R22 = 470 Ω U1 = Intégré 74LS244
R23 = 470 Ω U2 = Intégré 74LS244 Divers :
R24 = 470 Ω U3 = Intégré 74LS244 1 Support 2x8 broches
R25 = 470 Ω U4 = Intégré 74LS244 1 Support 2x9 broches
R26 = 470 Ω U5 = Intégré 74LS244 5 Supports 2x10 broches
R27 = 470 Ω U6 = Régulateur 7805 2 Borniers 2 plots pour ci
R28 = 470 Ω U7 = Intégré HCF4511 1 Clavier 16 touches
R29 = 470 Ω U8 = µcontrôleur PIC16C84-04P 1 Connecteur 16 broches en ligne

ELECTRONIQUE 76 magazine - n° 12
TECHNOLOGIE

Les boutons poussoirs seront montés


directement sur le circuit imprimé.

L’afficheur LCD sera positionné avec


son côté lecture vers l’extérieur de la
carte et perpendiculairement à celle-ci
(voir photo du prototype). Pour son mon-
tage il est possible d’utiliser un mor-
ceau de barrette sécable mâle-mâle au
pas de 2,54 mm à insérer sur le
connecteur soudé sur le circuit imprimé.
Les deux relais sont des modèles FEME
MPZ-001 à un contact repos-travail sou-
dés directement à leurs emplacements
sur le circuit imprimé. Le régulateur U6
(LM7805) sera soudé de telle sor te
C2 R1 C1 R4 C3 R3 R2 C4 que la partie plastique de son boîtier
comme il est indiqué sur le plan d’im- soit orientée du côté de C2.
Figure 7 : Les sorties du clavier plantation.
matricé, 4 lignes, 4 colonnes à relier L’afficheur 7 segments à LED peut être
à la carte test. Soudez ensuite les condensateurs en monté sur support ou soudé directement
commençant par les non polarisés, à sur le circuit imprimé. Dans tous les cas,
comme temporisateur, horloge ou réveil savoir les céramiques et les polyesters. il est positionné de telle sorte que le
programmable, comme compteur, Ensuite, soudez les condensateurs élec- point décimal soit situé près du plus
simple afficheur, etc. trolytiques en prenant soins de res- proche trou de fixation de la carte. Son
pecter leur polarité, les transistors, les positionnement est toutefois clairement
Enfin, avec JP3, nous avons la possi- LED, le buzzer piézo, chacun dans le indiqué sur le plan d’implantation.
bilité de vérifier des programmes divers sens indiqué sur le plan d’implantation.
et variés, qui doivent allumer des LED, Rappelons que pour les LED, la cathode Les cavaliers de sélection JP1, JP2,
commander des relais, lire la position est repérée par un méplat sur le boîtier. JP3, peuvent êtres réalisés chacun
de boutons poussoirs ou générer des
sons avec un buzzer ou une sirène.
A
RA0

RA1

RA2

RA3

La réalisation 8 2 4 6 F B
G
Pour ce qui concerne la partie pratique, U4A
il faut réaliser le circuit imprimé suivant E C
le dessin du cuivre proposé à l’échelle
1/1. La complexité du circuit impose 12 18 16 14
l’utilisation de la méthode photogra- D DP
phique par les moyens habituels. Après
7 1 2 6 Figure 8b : Les segments
gravure et perçage, il est prêt pour le
A B C D de l’afficheur.
câblage.
U7
Commencer comme à l’accoutumé par a b c d e f g 3, 8
insérer et souder les résistances et les 13 12 11 10 9 15 14
diodes (attention au sens, la bague
indique la cathode). Réalisez les straps R R R R R R R A B C D E F G DP
(ponts) pour les interconnexions avec 31 32 33 34 35 36 37
des fils rigides. Montez et soudez le 7 6 4 2 1 9 10 5
potentiomètre ajustable, les supports
de circuits intégrés en les positionnant Figure 8c : Correspondance des
segments et des sorties.

DISPLAY
10 9 8 7 6

1 2 3 4 5
Figure 8a : Notre carte de test
utilise également un afficheur 7
segments à cathode commune géré
par les lignes du port A (RA0, RA1, Figure 8d : Brochage de
RA2 et RA3) du PIC. l’afficheur vu de dessus.

ELECTRONIQUE 77 magazine - n° 12
TECHNOLOGIE

Figure 9 : Dessin du circuit imprimé.

Abstraction faite de l’apparente complexité du circuit imprimé, la réalisation de la carte test ne présente pas de difficultés
particulières. Nous vous conseillons toutefois de réaliser le circuit imprimé en suivant uniquement la méthode photographique,
la seule permettant d’éviter les erreurs dues à la réalisation d’un nouveau typon à la main. Il suffit, pour cela, de réaliser
une photocopie sur du calque ou sur une feuille d’acétate translucide et d’insoler la plaque présensibilisée avec ce film. Le
dessin étant à l’échelle 1 cela ne présente aucune difficulté. Graver ensuite la plaque révélée dans un bain de perchlorure
de fer. Nettoyez-la et étamez-la avec de l’étain liquide à froid.

avec un couple de picots au pas de 2,54 mm, qui seront, pant le bloc secteur qui sera utilisé pour alimenter le mon-
par la suite, coiffés ou non par un petit cavalier suivant la tage. Le pôle positif est au centre. L’alimentation devra pou-
sélection souhaitée. Pour les sorties relatives aux contacts voir fournir 12 volts sous 800 mA. Un modèle genre bloc
des relais, il faut utiliser des borniers au pas de 5 mm à secteur pourra être utilisé sans problème.
vis à deux pôles pour circuit imprimé.
Si vous utilisez un autre système d’alimentation dépourvu
Pour ce qui concerne l’alimentation, nous avons monté une de prise de sortie, il vous faudra tout simplement souder
prise pour circuit imprimé du même modèle que celui équi- les fils plus et moins aux endroits indiqués sur le circuit
imprimé.

Coût de la réalisation
Tous les composants visibles sur le schéma d’implantation
de la figure 5 pour réaliser la carte de test pour PIC, avec
l’afficheur LCD, le clavier et le programme sur disquette
3,5’’ : env. 468 F.
◆ R. N.

ABONNEZ-VOUS A

ELECTRONIQUE 78 magazine - n° 12
TECHNOLOGIE

Microcontrôleurs
PIC
10ème partie
La pratique :
l'écriture de programmes
Après la théorie, indispensable mais comme toute théorie barbante,
nous allons, à partir de maintenant, commencer à voir comment
s’écrivent des programmes pour les microcontrôleurs PIC. Pour ce
faire, nous utiliserons comme support hardware, pour en vérifier le
caractère fonctionnel, la carte de test spécifique réalisée dans ce
but et qui a été largement décrite dans le précédent numéro.

vant de com- “.ERR” contenant la


mencer, résu- description des erreurs
mons rapidement relevées par l’assem-
les dif férentes bleur sera également
phases qui permet- créé. On peut lire ce
tent la création d’un programme. fichier avec n’importe quel
Il faut tout d’abord écrire le pro- éditeur de texte (même
gramme source en assembleur, ou sous DOS), corriger le pro-
bien disposer d’un PC quelconque gramme et répéter la procé-
et d’un éditeur de texte qui travaille dure d’assemblage.
en ASCII, et utiliser celui-ci pour insé-
rer les lignes d’instructions en assembleur Si la phase de compilation s’est bien
dans un fichier. passée, un fichier avec l’extension
“.HEX” contenant le programme en
Une fois le fichier sauvé avec l’extension langage machine, est automatiquement
“.ASM”, il faut activer le programme d’assemblage que l’on créé. Il est donc prêt à être déchargé dans la mémoire du
appelle pour les PIC le “MPASMWIN”. L’assembleur “tourne” microcontrôleur.
sous Windows et peut être activé de façon autonome
(puisque c’est un fichier exécutable normal) ou bien de l’in- Pour réaliser cette opération, vous aurez besoin d’un pro-
térieur du système software “MPLAB”, que nous avons déjà grammateur, qui pourrait être, par exemple, le “PIC START
décrit dans une précédente partie du cours, et qui permet PLUS”, produit par Microchip, contrôlable lui aussi depuis
non seulement l’assemblage mais aussi le débugage des l’intérieur de “MPLAB”.
programmes.

Une fois mis en route, l’assembleur génère toute une série Les programmes didactiques
de fichiers, por tant tous le même nom, mais avec des
extensions différentes. Si des erreurs se produisent lors Passons maintenant à l’analyse des premiers programmes
de la phase de compilation, un fichier avec l’extension didactiques écrits pour la carte de test.

ELECTRONIQUE 70 magazine - n° 13
TECHNOLOGIE

;- Cours PIC ;- DEMO1 RLF USCITA ;Rotation à gauche de USCITA


BTFSS STATUS,CARRY ;Carry =1 ?
list p=16f84, f=inhx8m GOTO MAIN ;si carry =0
;retourne à MAIN
PORT_B EQU 06 ;Port B = registre 06h MOVLW 01
COUNT_1 EQU 0C ;Compteur MOVWF USCITA ;recharge 1
COUNT_2 EQU 0D ;Compteur ;dans USCITA
USCITA EQU 0E GOTO MAIN
STATUS EQU 03 ;Registre STATUS
CARRY EQU 00 ;Bit de Carry ;Routine de retard ******************************************

;Initialisation ********************************************* DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1


GOTO DELAY ;Si différent de 0, retourne à
INIT ORG 0000H DELAY
MOVLW 00 ;Mets 0 dans W MOVLW 0FF
TRIS PORT_B ;Port B configuré en sortie MOVWF COUNT_1 ;Recharge COUNT_1
MOVLW 0FF ;Mets 50h dans W DECFSZ COUNT_2,1 ;Décrémente COUNT_2
MOVWF COUNT_1 ;Mets W dans COUNT_1 GOTO DELAY ;Si différent de 0,
MOVLW 0FF ;retourne à DELAY
MOVWF COUNT_2 ;Initialise COUNT_2 MOVLW 0FF
MOVLW 01 ;Mets 1 dans W MOVWF COUNT_1 ;Recharge COUNT_1
MOVWF USCITA MOVLW 0FF
;Programme principal **************************************** MOVWF COUNT_2 ;Recharge COUNT_2
RETURN ;Retourne au programme
MAIN: MOVF USCITA,0 ;Mets USCITA dans W ;principal
MOVWF PORT_B ;Mets W dans PORT_B
CALL DELAY ;Routine de retard END
BCF STATUS,CARRY ;Mets à 0 le bit de carry

Figure 1 : Programme DEMO1 pour allumer les LED séquentiellement.

Cette fois-ci, nous étudierons plus par- gramme pour le PIC 16F84 et nous l’in- justement le port B du PIC. Dans le pro-
ticulièrement les programmes qui formons que le format de sor tie du gramme nous définissons ensuite le
exploitent comme ressources de la fichier doit être à 8 bits. registre “STATUS”, dont l’adresse est
carte de test les huit LED connectées “03h”, et le “CARRY” qui représente
au port B, les deux boutons connectés Puis vient une partie d’initialisation, le bit de CARRY de ce registre (en effet,
au port A et les deux relais et le buz- dans laquelle sont donnés les labels le bit de carr y occupe le bit “D0” du
zer, eux aussi reliés au port A. (étiquettes) qui permettent d’associer registre STATUS).
un mot à une valeur de sor te qu’ils
La première opération à effectuer sera soient plus facilement mémorisables Il y a également “COUNT_1” et
donc de fermer avec un cavalier le pour le programmateur. “COUNT_2” que nous utiliserons dans
connecteur “JP3”, de façon à préparer la routine de retard, et “OUTPUT” (sor-
la carte de test pour travailler avec ces Ainsi, par exemple, nous avons utilisé tie) qui servira pour contrôler l’allumage
périphériques, c’est-à-dire avec les LED le label “PORT_B” pour identifier le des différentes LED.
LD1 à LD8, le buzzer BZ et les deux registre d’adresse “06h” qui représente
boutons P1 et P2. L’étiquette “PIC84” ser t,
quant à elle, à donner
Programme l’adresse de dépar t du
PIC16F84. En ef fet, lors-
pour allumer Delay
qu’on alimente le micro-
les LED PRG contrôleur, celui-ci par t de
séquentiellement Décrémente
la première position de
Initialise Count_1 mémoire.
Avec ce simple programme, Port_A et Port_B
on provoque l’allumage d’une NON Le programme véritable
Count_1 = 0 ?
seule LED à la fois, en créant Allume 1ère LED OUI commence donc au label
un ef fet de glissement de Recharge Count_1
“INIT”. Il est constitué, dans
droite à gauche. Voyons tout sa première par tie, d’une
de suite comment le pro- Appelle la routine DELAY Décrémente
série d’initialisations : on
gramme est structuré en étu- Count_2 configure le PORT_ B en sor-
diant le listing correspondant Tourne à gauche tie, en mettant dans le
NON
reproduit sur la figure 1. L’or- Count_2 = 0 ? registre “TRIS B” la valeur
ganigramme de la figure 2 NON “00”. Puis les deux
Dernière LED ? OUI
aidera également à la com- OUI Recharge registres “COUNT_1” et
préhension. Allume 1ère LED Count_1 et Count_2 “COUNT_2” sont initialisés
avec la valeur hexadécimale
La première ligne donne la “FFh” et le registre “OUT-
RET
directive “list” grâce à PUT” est initialisé à “1”.
laquelle nous communiquons
à l’assembleur notre inten- Figure 2 : Organigramme du programme DEMO1. Il convient de noter que
tion de compiler un pro- comme il est impossible

ELECTRONIQUE 71 magazine - n° 13
TECHNOLOGIE

pour conséquence d’allumer la pre- L’instruction suivante, “RLF OUTPUT”


mière LED. fait tourner le contenu du registre
C registre f “OUPUT” d’une position vers la gauche
A ce moment-là, la routine de retard (ROTATE LEFT).
est appelée (instruction “CALL DELAY”)
pour ralentir la fréquence d’allumage En analysant cette instruction, nous
Figure 3.
des LED. Si vous omettiez cette rou- pouvons constater qu’elle utilise aussi
tine, toutes les LED sembleraient allu- le bit de CARRY. Dans le cas présent,
d’écrire directement un nombre dans mées en permanence puisque le défi- lorsque l’on tourne vers la gauche, le
un registre, il faut d’abord transférer lement serait tellement rapide qu’il ne contenu actuel de la CARRY est déplacé
ce nombre dans le registre “W”, à tra- pourrait être perçu par nos yeux. Nous vers le bit de droite et le bit le plus à
vers l’instruction “MOVLW” (qui charge étudierons en détail cette routine plus gauche est mis dans la CARRY.
un nombre dans le registre W), puis tard.
copier le contenu de “W” dans le Pour mieux comprendre l’instruction
registre désiré, à travers l’instruction Maintenant, le bit de “CARRY” est mis “ROTATE LEFT”, observons la figure 3,
“MOVWF” (déplace de W à un autre à “0”. Nous vous rappelons, à ce pro- tout en gardant à l’esprit que nous
registre). pos, que ce bit représente le repor t avions dans le registre “OUTPUT” cette
éventuel d’une opération. L’instruction combinaison : “00000001”. En tour-
Nous arrivons donc au programme prin- “BCF” (BIT CLEAR) permet de mettre à nant cette donnée vers la gauche nous
cipal, qui commence au label “MAIN” “0” (CLEAR) le bit d’un registre. La syn- aurons : “00000010”.
où le contenu du registre “OUTPUT” est taxe de cette instruction est en effet :
d’abord transféré dans “W” (instruc- “BCF f,b” et permet de mettre à “0” le Il est donc clair que la remise à “0” du
tion MOVF OUTPUT, 0 qui transfère bit de position b dans le registre “f”. Carr y est indispensable afin d’éviter
donc depuis une variable dans le de charger un “1”, qui donnerait ainsi
registre W), puis le contenu de “W” est Dans notre cas : “BCF STATUS,CARRY” la combinaison : “00000011”. Mais
mis dans le registre du “PORT_B”. met à “0” le bit spécifié par “CARRY”, comme nous voulons allumer séquen-
Etant donné que nous avions chargé qui valait “0” et qui correspondait jus- tiellement une LED à la fois, cette com-
en sor tie la valeur “1”, cette valeur tement au bit de CARRY, du registre binaison se révèle être inadaptée à
sera mise sur le “PORT_B”, ce qui aura STATUS. notre application.

;- Cours PIC ;- DEMO2 CALL DELAY


GOTO MAIN
list p=16f84, f=inhx8m
;Routine UP *************************************************
PORT_A EQU 05 ;Port A = registre 05 UP BCF STATUS,CARRY ;Mets à 0 le bit de Carry
PORT_B EQU 06 ;Port B = registre 06h RLF PORT_B ;Rotation à gauche
COUNT_1 EQU 0C ;Compteur BTFSS STATUS,CARRY ;Carry =1?
COUNT_2 EQU 0D ;Compteur RETURN ;Si non, fin de routine
STATUS EQU 03 RRF PORT_B ;Si oui, rétablis la
CARRY EQU 00 ;condition initiale
USCITA EQU 0E RETURN ;Retourne au programme principal

;Initialisation ********************************************* ;Routine DOWN ***********************************************


DOWN BCF STATUS,CARRY ;Mets à 0 le bit de Carry
INIT ORG 0000H RRF PORT_B ;Rotation à droite
MOVLW 00 ;Mets 0 dans W BTFSS STATUS,CARRY ;Carry =1?
TRIS PORT_B ;Port B configuré RETURN ;Si non, fin de routine
;en sortie RLF PORT_B ;Si oui, rétablis la
MOVLW 0FF ;condition initiale
TRIS PORT_A ;Port A configuré RETURN ;Retourne au programme principal
;en entrée
MOVLW 0FF ;Mets 50h dans W
MOVWF COUNT_1 ;Mets W dans COUNT_1 ;Routine de retard ******************************************
MOVLW 0FF
MOVWF COUNT_2 DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1
MOVLW 01
MOVWF USCITA ;USICTA = 1 GOTO DELAY ;Si différent de 0, retourne à
DELAY
;Programme principal **************************************** MOVLW 0FF
MOVWF COUNT_1 ;Recharge COUNT_1
MOVF USCITA,1 ;Charge dans W uscita DECFSZ COUNT_2,1 ;Décrémente COUNT_2
MOVWF PORT_B ;Mets USCITA GOTO DELAY ;Si différent de 0,
;sur le PORT_B ;retourne à DELAY
CALL DELAY ;Routine de retard MOVLW 0FF
MAIN BTFSS PORT_A,3 ;Poussoir P1 appuyé ? MOVWF COUNT_1 ;Recharge COUNT_1
CALL UP ;Si oui, va à MOVLW 0FF
;la routine UP MOVWF COUNT_2 ;Recharge COUNT_2
BTFSS PORT_A,4 ;Poussoir P2 appuyé ? RETURN ;Retourne au programme principal
CALL DOWN ;Si oui, va à
;la routine DOWN END

Figure 4 : Programme DEMO2 pour allumer les LED à l’aide des boutons.

ELECTRONIQUE 72 magazine - n° 13
TECHNOLOGIE

Arrivés à la dernière rotation, l’on appuie sur les deux


nous aurions la combinaison boutons présents sur la
suivante : “10000000”. A la UP carte de test.
rotation suivante cependant,
nous perdrions le “1” dans Ces deux boutons sont
Tourne à gauche
la CARRY, et donc toutes les reliés aux lignes “RA3” et
LED s’éteindraient. “RA4”, c’est-à-dire à deux
Dernière LED ?
PRG lignes du “PORT_ A” du PIC.
C’est pour cette raison En fait, à chaque fois que
Tourne à droite
qu’après la commande de Initialise les ports l’on appuie sur l’un ou sur
rotation, le contenu de la l’autre bouton, le pro-
CARRY est testé à travers Allume 1ère LED gramme doit pour voir à
l’instruction “BTFSS STA- RET déplacer la LED allumée à
TUS,CARRY” qui exécute la gauche ou à droite d’une
comparaison suivante : s’il Bouton P1 enclenché ?
OUI
Routine UP
position. Mais il faut aussi
n’y a pas une valeur logique NON prévoir le cas où la LED allu-
1 dans la CARRY (c’est-à-dire mée se trouve déjà à l’ex-
que nous ne sommes pas OUI trême gauche ou droite, cas
Bouton P2 enclenché ? Routine DOWN
arrivés à la dernière rotation), NON
pour lequel il ne faudra évi-
on continue normalement, demment effectuer aucun
sinon on saute l’instruction déplacement. Voyons donc
qui suit immédiatement et on Figure 5 : Organigramme du programme DEMO2. quelle est la structure du
continue. programme en étudiant le
listing de la figure 4.
Donc, si nous ne sommes pas arrivés “DECFSZ” a besoin d’un cycle machine
à la dernière rotation, le programme pour être ef fectuée, alors que la L’organigramme est donné en figure 5.
exécute l’instruction suivante, qui ren- “GOTO” en a besoin de deux (ces
voie à l’étiquette “MAIN” (dans ce cas, valeurs se trouvent sur le manuel du Comme vous pouvez le constater, cer-
le programme exécute une autre rota- microcontrôleur). taines sections du programme ont déjà
tion), sinon, il saute cette instruction été utilisées dans le software précé-
et continue. Dans ce cas-là, la valeur Si nous faisons fonctionner le micro- dent. En particulier, la partie d’initiali-
initiale “00000001” est de nouveau contrôleur à 4 MHz, chaque cycle sation et la routine “DELAY” sont sen-
rechargée dans le registre “OUTPUT”, machine demande un temps égal à siblement identiques. Nous ne nous
pour ensuite faire recommencer le pro- 1 µs (en effet, la fréquence est divisée attarderons donc pas encore une fois
gramme depuis le label “MAIN”. par 4, ce qui donne 1 MHz, auquel cor- sur leur description !
respond justement une période de
Essayons maintenant de comprendre 1 µs). Par contre, le programme principal est
le fonctionnement de la routine différent : depuis l’étiquette “MAIN”. Il
“DELAY” qui est rappelée après chaque Etant donné qu’il faut 256 décrémen- teste d’abord si le bouton P2 est
rotation, et qui ser t, comme nous tations de “COUNT_1” et 256 décré- enclenché (instruction “BTFSS
l’avons déjà dit, à ralentir le glissement mentations de “COUNT_2” pour réali- PORT_A,3”) et, si c’est le cas, il exé-
des LED. ser la routine entière, nous pouvons cute la sous-routine “UP” (instruction
affirmer dans une première approxi- “CALL UP”). Puis il teste si le bouton
En pratique, cette routine fonctionne mation qu’il faudra un total de 256 x P1 est poussé (instruction “BTFSS
en allant décrémenter d’abord le 256 = 65 536 cycles pour sortir de la PORT_A,4”) et il exécute éventuelle-
registre “COUNT_1”, de la valeur “FFh” routine. Comme chaque cycle occupe ment la routine “DOWN”. Si aucun des
jusqu’à “0”, puis elle recharge 3 cycles machine, il faudra 65 536 x deux boutons n’est enclenché, le pro-
“COUNT_1” et décrémente “COUNT_2”. 3 = 196 608 cycles machine. gramme ne fait que tourner continuel-
Chaque décrémentation de “COUNT_2” lement entre l’étiquette “MAIN” et l’ins-
correspond donc à “256” (la valeur Si chaque cycle machine emploie 1 µs, truction “GOTO MAIN”.
décimale de FFh) décrémentations de nous pouvons dire qu’il faudra environ
“COUNT_1”. 200 000 x 1 µs = 200 000 µs = 0,2 s Voyons maintenant plus en détail le
pour exécuter la routine (en réalité, fonctionnement de l’instruction
Une fois les 256 décrémentations de cette valeur est légèrement plus haute, “BTFSS” qui permet de vérifier l’état
COUNT_2 également terminées, toutes puisque nous n’avons pas pris en logique d’un bit d’un registre. Dans
les valeurs sont rétablies et l’on revient considération le temps employé par les notre cas, l’instruction “BTFSS
à l’exécution du programme principal. instructions “MOVLW 0FF” et “MOVWF PORT_A,3” s’occupe de tester le niveau
COUNT_1” nécessaires pour recharger logique du troisième bit du registre
Pour quantifier le retard introduit par la “COUNT_1”). “PORT_A”, c’est-à-dire, en fait, l’état
routine “DELAY”, il faut calculer les dif- de l’entrée “RA3”.
férents cycles machine concernés par Programme
cette même routine. Nous avons dit De par le type de liaison entre les deux
que pour chaque décrémentation de pour allumer les LED boutons, les entrées “RA3” et “RA4” se
“COUNT_2”, 256 décrémentations de à l’aide des boutons trouvent normalement au niveau logique
“COUNT_1” sont exécutées. haut, et descendent à “0” quand on
Voyons maintenant un programme qui appuie sur les boutons. L’instruction
Les instructions qui sont exécutées nous permet de faire glisser les LED “BTFSS” teste donc une entrée et, si
sont “DECFSZ” et “GOTO”. La de gauche à droite et vice-versa lorsque elle la trouve haute, saute l’instruction

ELECTRONIQUE 73 magazine - n° 13
TECHNOLOGIE

;Cours PIC ;- DEMO3 CALL DELAY ;Routine de retard

list p=16f84, f=inhx8m MAIN BTFSS PORT_A,P2 ;Poussoir P2 appuyé ?


CALL relè1 ;Si oui, va à relè1
PORT_A EQU 05 ;Port A = registre 05 BTFSS PORT_A,P1 ;Poussoir P1 appuyé ?
PORT_B EQU 06 ;Port B = registre 06h CALL relè2 ;Si oui, va à relè2
COUNT_1 EQU 0C ;Compteur MOVF RLSTATUS,0
COUNT_2 EQU 0D ;Compteur MOVWF PORT_A ;Mets RLSTATUS
STATUS EQU 03 ;sur le port a
CARRY EQU 00 CALL DELAY
USCITA EQU 0E GOTO MAIN
P1 EQU 04
P2 EQU 03 relè1 MOVF RLSTATUS,0 ;RLSTATUS dans W
RL1 EQU 01 XORLW B’00000010’ ;inverse RL1
RL2 EQU 02 MOVWF RLSTATUS ;Recharge RLSTATUS
RLSTATUS EQU 0F ;Registre de mémorisation RETURN
;de l’état es relais
relè2 MOVF RLSTATUS,0 ;RLSATUS dans W
;Inizializzazione ******************************************* XORLW B’00000100’ ;inverse RL2
MOVWF RLSTATUS ;inverse RL2
INIT ORG 0000H RETURN
MOVLW 00 ;Mets 0 dans W
TRIS PORT_B ;Port B configuré ;Routine de retard ******************************************
;en sortie
MOVLW B’11111000’ DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1
TRIS PORT_A ;Port A configuré partiellement GOTO DELAY ;Si différent de 0, retourne à
;en entrée et partiellement en DELAY
sortie MOVLW 0FF
MOVWF COUNT_1 ;Recharge COUNT_1
MOVLW 0FF ;Mets 50h dans W DECFSZ COUNT_2,1 ;Décrémente COUNT_2
MOVWF COUNT_1 ;Mets W dans COUNT_1 GOTO DELAY ;Si différent de 0,
MOVLW 0FF ;retourne à DELAY
MOVWF COUNT_2 MOVLW 0FF
MOVLW 00 MOVWF COUNT_1 ;Recharge COUNT_1
MOVWF RLSTATUS ;RLSTATUS = 0 MOVLW 0FF
MOVWF COUNT_2 ;Recharge COUNT_2
;Programme principal **************************************** RETURN ;Retourne au programme
;principal
MOVF RLSTATUS,0 ;Charge uscita dans W
MOVWF PORT_A ;Mets USCITA sur PORT_B END
Figure 6 : Programme DEMO3 pour allumer et éteindre deux relais en appuyant sur deux boutons.

suivante. Par conséquent, si l’instruc- Les deux instructions “BCF Après ces deux instructions, on teste
tion “BTFSS PORT_A,3” trouve “RA3” STATUS,CARRY” et “RLF PORT_B” ser- si, par hasard, le “1” qui allume la LED
haut, c’est-à-dire que le bouton n’est vent, comme nous l’avons déjà vu dans est “sorti” du registre pour être entré
pas poussé, elle saute l’instruction le programme précédent, à faire dépla- dans la CARRY, ce qui voudrait dire que
“CALL UP” et exécute l’instruction sui- cer la LED. l’on serait déjà dans la dernière posi-
vante, “BTFSS PORT_A,4” tion. Si ce n’est pas le cas, l’instruc-
qui va tester l’état du bou- tion “RETURN” est exécutée et permet
ton P1. Si celui-ci non plus de reprendre le programme principal
n’est pas poussé, elle au point où on l’avait interrompu. Si,
RL1
saute l’instruction “CALL au contraire, on était déjà dans la situa-
DOWN” et va donc à la tion de la dernière LED allumée, on
“GOTO MAIN”. Complémente le bit rétablit la situation précédente en fai-
de RLSTATUS sant tourner à droite d’une position.
Si, au contraire, l’un des correspondant
PRG au premier relais
deux boutons a été poussé, Routine pour allumer
une des deux sous-routine
“UP” ou “DOWN” sera Initialise les ports
RET
et éteindre deux relais
effectuée et, comme nous en appuyant sur deux
le verrons, elle s’occupera OUI boutons
de faire tourner les LED Bouton P1 enclenché ? Routine RL1
NON
d’une position. Deux relais ont été prévus sur la carte
OUI de test. Ceux-ci ne sont évidemment
Obser vons, par exemple, Bouton P2 enclenché ? Routine RL2 pas reliés directement aux sorties du
le fonctionnement de la NON PIC, qui ne pourraient pas fournir suf-
routine “UP”, en tenant fisamment de courant pour les déclen-
compte du fait que la rou- Mets RLSTATUS en sortie cher, mais par l’intermédiaire de tran-
tine “DOWN” est plus ou sistors utilisés comme interrupteurs.
moins similaire, si ce n’est
qu’elle fait tourner les LED Figure 7 : Organigramme du programme DEMO3. Un premier programme pour apprendre
dans un sens opposé. à gérer ces deux relais consiste en

ELECTRONIQUE 74 magazine - n° 13
TECHNOLOGIE

l’utilisation des deux boutons pour activer et désactiver les


relais. En fait, à chaque bouton correspond un relais : en
appuyant sur un bouton une première fois, on active le
relais correspondant, en agissant sur le même bouton une
seconde fois on désactive le relais.

Observons le listing de ce programme en figure 6 et analy-


sons-le en détail. L’organigramme est donné en figure 7.

En plus des labels précédents, nous avons également uti-


lisé ces nouvelles étiquettes : “P1”, “P2”, “RL1”, “RL2”,
qui nous servent à rendre le programme encore plus lisible
et “RLSTATUS” dans laquelle nous mémorisons l’état des
deux relais (“0” si le relais doit être désactivé, “1” s’il doit
être activé).

Les deux relais et le buzzer sont reliés respectivement aux


lignes RA1, RA2 et RA0 qui doivent être configurées en sor-
ties. Dans ce but, on charge le registre de configuration du
“PORT_A” (TRISA) avec la combinaison “11111000” (nous
vous rappelons que un “1” configure la patte en entrée,
alors qu’un “0” la configure en sortie).

Le corps principal du programme est totalement similaire


à l’exemple précédent, mis à part le fait que l’on implé-
mente deux routines qui ne s’appellent plus “UP” et “DOWN”,
mais “relais1” et “relais2”. En outre, à chaque cycle du pro-
gramme principal, on met en sortie le contenu du registre
“RLSTATUS”.

Les deux routines “relais1” et “relais2” sont absolument


identiques, si ce n’est qu’elles modifient le bit du registre
“RLSTATUS” relatif au premier et deuxième relais.

En pratique, dans la routine “relais1”, le registre “RLSTA-


TUS” est transféré dans le registre “W” (instruction “MOVF instruction exécute en effet une opération de “OU exclu-
RLSTATUS,0”) et ensuite, on complémente le bit de contrôle sif” entre le registre “W” et un nombre, dans notre cas, le
du relais à travers l’instruction “XORLW”. Cette dernière binaire “00000010”. Cependant, la fonction logique de

;- Cours PIC ;- DEMO4 RETFIE ;Retour

list p=16f84, f=inhx8m ;Programme principal ****************************************

PORT_A EQU 05 ;Port A = registre 05 ;Initialisation *********************************************


PORT_B EQU 06 ;Port B = registre 06h
TMR0 EQU 01 ;Registre du timer = 01h INIT ORG 0050H
COUNT_1 EQU 0C ;Compteur BSF STATUS,5
COUNT_2 EQU 0D ;Compteur BCF OPT,5 ;Configuration du timer
PIC84 EQU 0000H ;Vecteur de reset pour PIC 84 BCF OPT,3 ;Activation du prédiviseur
STATUS EQU 03 BSF OPT,0
INTCON EQU 0BH BSF OPT,1
TMR0 EQU 01H BCF OPT,2 ;division par 16
OPT EQU 01 BCF STATUS,5
#define SUONO 0B9 BSF INTCON,5 ;Activation du timer
MOVLW SUONO
ORG PIC84 MOVWF TMR0 ;Configure le timer en chargeant
GOTO INIT ;la constante SUONO
MOVLW 00
;Routine d’interruption *********************************** TRIS PORT_B ;Configuration du port B
MOVLW 018H
INT ORG 04 TRIS PORT_A ;Configuration du port A
MOVF PORT_A,0 ;Lecture du port A BSF INTCON,7 ;Autorise les interruptions
XORLW 01 ;Inverse le bit du buzzer
;Boucle principale *****************************************
MOVWF PORT_A ;Mets sur le port a
MOVLW SUONO MAIN NOP
MOVWF TMR0 ;Charge le timer avec la NOP
;constante SUONO GOTO MAIN
BCF INTCON,2 ;Autorise l’interruption de TMR0
BSF INTCON,7 ;Autorise toutes les interruptions END
Figure 8 : Programme DEMO4 pour générer un son avec le buzzer.

ELECTRONIQUE 75 magazine - n° 13
TECHNOLOGIE

“OU exclusif” travaille de se produit et ne fait que recharger le


telle sorte que si on l’ef- registre “TMRO” avec la valeur définie
fectue avec un “0”, la PRG par le label “SOUND”, et rétablir les
valeur logique ne change conditions initiales afin que l’interrup-
pas, alors que si on l’ef- interrupt tion suivante puisse se produire. La
Initialise les ports
fectue avec une valeur routine d’interruption termine avec l’ins-
“1”, l’état s’inverse. truction “RETFIE” pour permettre au
Initialise TMRO Complémente le bit programme de recommencer à “tour-
correspondant
C’est-à-dire que si, par au buzzer
ner” normalement.
exemple, le relais 1 est Initialise l'interruption
éteint, le deuxième bit Le programme véritable commence à
Habilite l'interruption Habilite l'interruption
de “RLSTATUS” se l’étiquette “INIT”, avec la configuration
trouve à un niveau de tous les registres. Analysons en détail
logique “0”. Lorsque RET ces instructions.
l’opération de “OU NOP
exclusif” avec L’instruction “BSF STATUS,5” met à
“00000010” est exé- “1” le cinquième bit du registre “STA-
cutée, le bit en ques- Figure 9 : Organigramme du programme DEMO4. TUS” qui permet, dans notre cas, de
tion est complémenté, se diriger vers la deuxième case de
c’est-à-dire mis à “1”, mémoire du “file register”. Une fois ce
alors que les autres bits ne seront L’horloge de contrôle du Timer peut bit mis à “1”, nous pouvons, avec l’ins-
pas modifiés. De cette façon, lorsque être obtenue intérieurement (la fré- truction suivante “BCF OPT,5”, porter
le registre “RLSTATUS” est chargé quence sera égale à la fréquence du le cinquième bit du registre “OPTION”
dans le registre qui représente le quartz divisée par 4) ou extérieurement à la valeur logique “0”. Ce bit-ci, (appelé
“PORT_A”, le relais correspondant est en appliquant un signal à la patte “TOCS”) nous permet de sélectionner
activé. La routine “relais2” travaille “RA4”. la source de l’horloge : externe (si ce
de la même façon, si ce n’est que bit est à “1”), ou interne (si ce bit est
l’opération de “OU exclusif” est effec- Le fonctionnement de ce Timer est à “0”). Dans notre cas, nous voulons
tuée avec le bit correspondant au simple : à chaque cycle d’horloge en utiliser l’horloge interne du microcon-
second relais (instruction “XORLW entrée (obtenu par le quar tz ou par trôleur, et nous mettrons donc “TOCS”
00000100”). l’entrée “RA4”), la valeur de “TMRO” à “0”.
est incrémentée d’une unité. Quand
“TMRO” arrive à “FFh”, à l’incrémen- Le troisième bit de ce registre est éga-
Programme tation suivante, il passe de “FFh” à lement mis à “0” (“BCF OPT,3”) pour
pour générer “00h”, générant alors une interrup- permettre de connecter le Prescaler au
un son avec le buzzer tion. Cette dernière provoque un saut Timer et non au Watchdog.
du programme à la position d’adresse
Sur la car te de test, un petit buzzer, “0004”. Dans notre programme, à Les trois instructions suivantes per-
c’est-à-dire un dispositif capable de chaque fois qu’une interruption est mettent de configurer le Prescaler.
générer un son lorsqu’il est piloté avec générée, on veille à inverser le niveau Dans le cas présent, nous sélection-
un signal carré opportun, a été relié à logique sur la sor tie qui contrôle le nons la configuration des bits “0”, “1”
la patte correspondant à la ligne buzzer, en générant ainsi un signal et “2” mis à “011” afin de faire fonc-
“RA0”. carré. tionner le Prescaler comme diviseur par
16.
Nous avons donc voulu réaliser un En analysant le programme de la
petit programme de démonstration figure 8 en détail, on constate que la Nous avons alors terminé l’initialisa-
relatif au buzzer qui permette de géné- première partie s’occupe de définir les tion du périphérique Timer. En résumé,
rer des signaux carrés en utilisant le étiquettes. Dans cette section du pro- le Timer utilise comme source l’horloge
Timer intégré au microcontrôleur. De gramme, nous trouvons également la interne qui est divisée par 16 par le
cette façon nous pouvons apprendre définition des registres “INTCON”, Prescaler.
le fonctionnement et le système de “TMRO” et “OPT” qui correspondent
gestion du Timer. Nous pourrons aux registres nécessaires au contrôle Il faut maintenant préparer le micro-
ensuite transposer les notions des interruptions et du fonctionnement contrôleur pour qu’il soit en mesure
acquises dans des situations autres du Timer “TMRO”. Il y a ensuite une d’accepter et de gérer les interruptions
que le contrôle d’un simple buzzer ! directive que nous ne connaissons pas générées par le Timer.
Le programme est donné dans la encore, “#define” qui permet d’asso-
figure 8 et l’organigramme dans la cier à l’étiquette “SOUND” (son) la Nous retournons pour cela à la pre-
figure 9. valeur numérique “0B9h”. Nous ver- mière banque de registres (avec l’ins-
rons plus tard que cette valeur servira truction “BCF STATUS,5”) pour aller
Essayons maintenant de résumer rapi- à déterminer la fréquence du son émis mettre à “1”, avec l’instruction “BSF
dement le principe de fonctionnement par le buzzer. INTCON,5”, le cinquième bit du registre
du périphérique Timer. Celui-ci est “INTCON”. Ce bit (appelé “TOIE”) nous
constitué d’un véritable temporisateur La première partie du programme est permet, lorsqu’il est mis à “1”, d’acti-
(timer) qui coïncide avec le registre située à par tir de la position “04h” ver l’interruption générée par le Timer
“TMRO” et d’un prédiviseur (prescaler) (c’est en effet ce que veut dire “ORG “TMRO”. On charge ensuite dans le
de 8 bits. Ce dernier permet de diviser 04”). Cette routine est donc celle qui registre “TMRO” la valeur définitive de
la fréquence du signal qui pilote le est effectuée à chaque fois que l’in- l’étiquette “SOUND” (instructions
Timer par un nombre à la puissance 2. terruption générée par le Timer “TMRO” “MOVLW SOUND” qui mettent la valeur

ELECTRONIQUE 76 magazine - n° 13
TECHNOLOGIE

du son, c’est-à-dire “0B9h” en “W”, ruptions en mettant à “0” le bit “2” 62 500 Hz, une interruption est géné-
puis “MOVWF” qui transfère le contenu de “INTCON” (celui qui identifie l’in- rée à la fréquence de :
de “W” en “TMRO”). terruption du Timer, qui est mis à “1”
quand l’interruption est demandée) 62 500 : 71 = 880 Hz
Il ne reste plus qu’à configurer les et en réhabilitant les interruptions en
“PORT_A” et “PORT_B” du PIC et à mettant à “1” le bit “7” de ce même Mais il ne s’agit pas encore de la fré-
habiliter les interruptions en mettant registre. quence du signal généré car, à chaque
le bit “7” du registre “INTCON” à “1” interruption, le niveau logique en sor-
(instruction “BSF INTCON,7”). Vous vous demandez maintenant tie change, ce qui signifie que la fré-
quelle sera la fréquence du son généré quence du signal généré sera effecti-
Le microcontrôleur est désormais prêt par le buzzer. Pour la connaître, il suf- vement de :
à travailler. Il entre, en effet, dans le fit de faire une simple opération
cycle compris entre l’étiquette “MAIN” mathématique en par tant de la fré- 880 : 2 = 440 Hz
et l’instruction “GOTO MAIN”. En réa- quence qui alimente le Timer et qui
lité, dans ce cycle le microcontrôleur coïncide avec celle du quar tz divisée Les amateurs de musique auront pro-
n’ef fectue aucune opération (ins- par 4. Par conséquent, si le quartz est bablement associé tout de suite cette
tructions “NOP”) si ce n’est celle d’at- de 4 MHz, la fréquence interne sera fréquence à la note “LA”. En effet, nous
tendre l’arrivée de l’interruption, de 1 MHz. avons tout simplement réalisé un dia-
quand le Timer a terminé le comp- pason électronique !
tage. Cette fréquence est ensuite divisée
par 16 par le Prescaler, descendant Rendez-vous le mois prochain. Nous
Lorsque l’interruption arrive, le pro- ainsi à : vous proposerons les listings software
gramme saute à la position “04”, où relatifs aux différentes ressources dis-
se trouve le programme qui par t de 1 000 000 : 16 = 62 500 Hz ponibles sur la carte de test.
l’étiquette “INT”. Cette routine s’oc-
cupe d’inverser le bit “0” du Le compteur est chargé avec “0B9h” ◆ R. N.
“PORT_A” grâce à l’instruction “MOVF (qui correspond à 185 en décimal) et
PORT_A”, de recharger le Timer à tra- compte à partir de ce nombre jusqu’à ABONNEZ-VOUS A
vers les deux instructions “MOVLW 255 (“FFh”) avant de générer l’inter-
SOUND” et “MOVWF TMRO”, et de ruption. L’interruption est donc géné-
préparer à nouveau le microcontrô- rée chaque 256 – 185 = 71 cycles. Si
leur à accepter les prochaines inter- la fréquence en entrée est de

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


PROGRAMMATEUR UNIVERSEL POUR PIC. MICROCONTRÔLEURS PIC : CARTE DE TEST POUR PIC
Pour apprendre de manière simple la technique de programmation des
Permet de programmer tous les microcontrôleurs PIC. Interfaçable avec le programmateur pour PIC16C84,
microcontrôleurs MICROCHIP, (Réf. : FT201K). Le demoboard possède les options suivantes : 8 LED, 1
display LCD, 1 clavier matriciel, 1 display 7 segments, 2 poussoirs, 2 relais,
à l’exception des PIC16C5x et 1 buzzer piézo ; toutes ces options vous permettent de contrôler
des PIC17Cxx. Livré avec son immédiatement votre programme. Le kit
programme : éditeur (exa) + comprend tous les composants, un micro
assembleur + programmateur. PIC16C84, un afficheur LCD, le clavier
matriciel et une disquette contenant des
programmes de démonstrations.
FT284 (Kit complet + câble PC + SFW 284) ......455 F FT215/K (Kit complet) ....468 F FT215/M (Livré monté)..668 F

Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 06/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PBC PRO .................................... 2 070,00 F
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 77 magazine - n° 13
TECHNOLOGIE

Microcontrôleurs
PIC
10ème partie - Chapitre 2
La pratique :
l'écriture de programmes

Nous continuons, avec ce deuxième chapitre de la 10ème partie,


l’apprentissage de l’écriture des programmes pour les
microcontrôleurs PIC.

oici encore à l’adresse “04h” où se


trois programmes trouvait la routine défi-
qui vous permet- nie par le label “INT”.
tront de mieux com- Cette routine ne faisait
prendre et de com- que complémenter, c’est-
mencer à bien maîtriser les à-dire inverser le niveau
possibilités de la carte de test et logique présent sur la patte
par conséquent, la programmation. du micro auquel le buzzer
est relié. Dans cette nouvelle
application, par contre, la
Programme même routine s’occupe de recharger
pour générer deux tons le timer avec la variable “SON”.
avec le buzzer
La première par tie du programme
Dans le premier chapitre de cette dixième partie, nous avons (label “INIT”) ser t à initialiser le timer
vu comment utiliser l’interruption générée par le timer et le prescaler avec un rapport de division permettant d’ob-
“TMR0” pour produire un son ou une fréquence sur le buz- tenir un son à la fréquence désirée. La logique des inter-
zer de la carte de test. Afin de mieux comprendre les tech- ruptions est aussi initialisée et l’interruption d’over flow du
niques d’utilisation du timer et de l’interruption associée, timer est activée. A ce moment-là, le programme s’occupe
nous allons analyser maintenant un autre programme simple de générer alternativement deux notes de fréquences
qui permettra, cette fois, de faire générer au buzzer un son diverses en utilisant deux constantes définies par “SON1”
très similaire à celui d’une sirène bitonale. Le programme et “SON2”. Etant donné que la routine d’interruption recharge
en question a été appelé DEMO5. Son listing est donné en le timer avec la variable “SON”, les constantes “SON1” et
figure 1 et l’organigramme correspondant en figure 2. “SON2” sont transférées alternativement dans celle-ci. Cette
opération doit évidemment être faite à des inter valles de
Comme vous pouvez l’obser ver, une grande par tie de ce temps réguliers.
programme est identique que celle qui générait un son à
fréquence fixe. Rappelons, en par ticulier, que le “TMR0” Le programme principal, qui commence à l’étiquette “MAIN”,
était utilisé pour générer une interruption à chaque fois que charge d’abord “SON1” dans “SON”, rappelant ensuite deux
le compteur du timer allait en “overflow” (dépassement). fois la routine “DELAY”. Cette dernière, que nous avons déjà
Lorsque l’interruption était générée, le programme sautait analysée lors des parties précédentes du cours, est utilisée

ELECTRONIQUE 60 magazine - n° 14
TECHNOLOGIE

minée par la valeur de “SON1”, est réa-


lisée. Une fois l’exécution des deux rou-
tines “DELAY” terminée, le programme
“recharge” la variable de “SON” avec
la constante “SON2” et exécute deux
autres routines “DELAY” pendant les-
quelles est générée une note de fré-
quence différente de la première, les
valeurs de “SON1” et de SON2 étant
différentes l’une de l’autre.

Le programme revient alors à l’étiquette


“MAIN”. Le résultat final est que l’on
a généré pendant une demi-seconde
un son d’une certaine fréquence et pen-
dant une autre demi-seconde un son
d’une fréquence différente.
La carte de test a été réalisée afin de pouvoir apprendre de façon simple et
rapide les techniques de programmation du microcontrôleur PIC. La carte dispose
des ressources suivantes : 8 LED, 1 afficheur LCD alphanumérique, 1 clavier Programme
matriciel, 1 afficheur 7 segments, 2 boutons poussoirs, 2 relais, 1 buzzer piézo. pour gérer le clavier
La réalisation complète de la carte de test a été décrite dans ELM numéro 12,
pages 72 à 78. Analysons maintenant le programme
DEMO6 réalisé dans le but de gérer le
pour introduire des retards dans les pro- des intervalles de temps beaucoup plus clavier matriciel connecté à la carte test.
grammes (environ une demi-seconde serrés, la routine d’interruption géné- Pour cette application, nous devons
avec un quartz de 4 MHz). Pendant que rée par le timer, qui s’occupe de pilo- avant tout déplacer le cavalier de JP3
ces deux routines sont exécutées, à ter le buzzer avec la fréquence déter- à JP1 de façon à rendre le clavier à

Cours PIC - DEMO5 BSF INTCON,5 ;Activation du timer


list p=16c84, f=inhx8m MOVLW SON
MOVWF TMR0 ;Configuration du timer
PORT_A EQU 05 ;Port A = registre 05 MOVLW 00
PORT_B EQU 06 ;Port B = registre 06h TRIS PORT_B ;Port B configuré en sortie
TMR0 EQU 01 ;Registre du timer = 01h MOVLW 018H
COUNT_1 EQU 0CH ;Compteur TRIS PORT_A ;Port A configuré en entrée
COUNT_2 EQU 0DH ;Compteur MOVLW 0FF
STATUS EQU 03 MOVWF COUNT_1 ;Initialisation COUNT_1
INTCON EQU 0BH MOVLW 0FF
TMR0 EQU 01H MOVWF COUNT_2 ;Initialisation COUNT_2
OPT EQU 01 BSF INTCON,7 ;Autorise les interruptions
SON EQU 0EH
#define SON1 0B9 ;Programme principal ****************************************
#define SON2 0E0
MAIN MOVLW SON1
ORG 00 ;Vecteur de reset MOVWF SON ;Charge SON1 dans SON
GOTO INIT CALL DELAY
CALL DELAY
;Routine d’interruption ************************************* MOVLW SON2
MOVWF SON ;Charge SON2 dans SON
INT ORG 04 CALL DELAY
MOVF PORT_A,0 ;Port_a en sortie CALL DELAY
XORLW 01 GOTO MAIN ;Retour à MAIN
MOVWF PORT_A ;Complémente RA0
MOVFW SON ;Routine DELAY **********************************************
MOVWF TMR0 ;Charge le timer avec SON
BCF INTCON,2 DELAY
BSF INTCON,7 ;Réinitialisation du timer DECFSZ COUNT_1,1 ;Décrémente COUNT_1
RETFIE GOTO DELAY ;Si COUNT_1<>0, va à DELAY
MOVLW 0FF
;Initialisation ********************************************* MOVWF COUNT_1 ;Recharge COUNT_1
DECFSZ COUNT_2,1 ;Décrémente COUNT_2
INIT ORG 0050H GOTO DELAY ;Si COUNT_2<>0, va à DELAY
BSF STATUS,5 MOVLW 0FF
BCF OPT,5 ;Mode timer MOVWF COUNT_1 ;Recharge COUNT_1
BCF OPT,3 ;Prescaler du timer MOVLW 0FF
BSF OPT,0 MOVWF COUNT_2 ;Recharge COUNT_2
BSF OPT,1 RETURN ;Retourne au programme
BCF OPT,2 ;Rapport de division ;principal
;du prescaler
BCF STATUS,5 END
Figure 1 : Programme DEMO5 pour générer deux tons avec le buzzer.

ELECTRONIQUE 61 magazine - n° 14
TECHNOLOGIE

matrice et l’afficheur sept seg- Notez bien que ces lignes d’en-
ments opérationnels. Le pro- trées sont tenues normalement
gramme est donné en figure 3 DEMO5 à un niveau logique haut par 4
et l’organigramme en figure 4. résistances (R18/R21).
Un extrait du schéma général de Interruption
la car te de test (figure 1, ELM Initialise ports timer La lecture du clavier s’effectue
numéro 12, page 73), corres- et interruptions de la façon suivante: on impose
pondant à la connexion du cla- un “0” sur une colonne, en par-
Complémente
vier au microcontrôleur est donné tant, par exemple, de la pre-
en figure 5. RA0 mière colonne, alors qu’on
SON = SON1 laisse les autres lignes à un
Charge le timer niveau haut, puis on va lire les
Le clavier matriciel Appelle DELAY avec SON 4 lignes d’entrées. Si aucune
2 fois touche n’est pressée, on lira
Le clavier matriciel est réalisé simplement 4 niveaux logiques
Rétablit
avec des boutons poussoirs hauts. S’il se trouve, cepen-
reliés au croisement d’une série SON = SON2 les interruptions dant, qu’un des boutons qui
de conducteurs disposés en croisent la première colonne
lignes et en colonnes. Par Appelle DELAY avec les 4 lignes est appuyé,
exemple, si vous voulez utiliser RET cela court-circuitera la ligne cor-
2 fois
un clavier à 16 touches, ces der- respondante avec la colonne.
nières sont disposées de façon Etant donné que la colonne se
à relier, lorsque l’on tape des- trouve à niveau logique “0”, la
sus, les croisements d’une Figure 2 : Organigramme du programme DEMO5. ligne où est positionné le bou-
matrice conductrice constituée ton sur lequel nous avons
de 4 lignes et de 4 colonnes. Ce appuyé se por tera aussi à
système se révèle être très pratique microcontrôleur sont reliées aux 4 niveau logique “0”. Nous ne lirons donc
puisqu’il limite le nombre de connexions lignes du clavier (en vert). plus sur les entrées 4 niveaux hauts
vers le microcontrôleur. mais 3 niveaux hauts et
Par exemple, si 16 1 bas. En identifiant la
touches séparées s’in- colonne que nous avons
ter facent, il faudra 32 “activée “et la ligne que
lignes d’entrées/sorties nous avons trouvée
(2 pour chaque touche). basse, nous pouvons
Le clavier matriciel n’a identifier de façon cer-
besoin, lui, que de 8 taine la touche pressée.
lignes d’entrées/sorties, Bien sûr, il faudra effec-
qui correspondent aux 4 tuer cette opération
lignes et aux 4 colonnes. pour les 4 colonnes.
En électronique, la
grande majorité des cla- Observons maintenant
viers, y compris ceux des le programme qui effec-
PC, sont réalisés de tue cette opération
cette façon. Le clavier (DEMO6). Le listing
matriciel est géré à tra- semble un peu long,
vers un procédé de scru- mais il est très facile à
tation des lignes et des comprendre. Comme
colonnes. d’habitude, la première
par tie comprend l’ini-
Pour comprendre ce qui tialisation des ports : le
se passe, analysons le port B est configuré moi-
schéma de branchement tié en entrées, moitié en
du clavier connecté à la sorties, pour réaliser la
carte test (figure 5). On lecture du clavier. Le
utilise, en pratique, tout port A est configuré en
le por t B du microcon- sortie, puisque c’est à
trôleur (8 lignes d’en- lui qu’est relié le déco-
trée/sor tie) et on va deur BCD - 7 segments
faire fonctionner 4 lignes qui nous permettra de
en sor ties (de RB0 à visualiser la touche qui
RB3) et 4 en entrées (de est pressée.
RB4 à RB7) donc :
Après cette opération,
- les 4 lignes de sor tie les 4 lignes de sortie du
du microcontrôleur sont port B sont mises à “1”
reliées aux 4 colonnes Figure 5 : Extrait du schéma général de la carte de test à travers 4 instructions
du clavier (en rouge), concernant le clavier matriciel. “BSF”. Le véritable pro-
- les 4 lignes d’entrée du gramme de lecture com-

ELECTRONIQUE 62 magazine - n° 14
TECHNOLOGIE

Cours PIC - DEMO6


list p=16c84, f=inhx8m
DEMO6
PORT_B EQU 06 ;Port B = registre 06h
PORT_A EQU 05 ;Port A
Initialise les ports Mets W sur port_A
ORG 00 ;Vecteur de reset
GOTO INIT

;Initialisation ********************************************* Sélectionne la


première colonne
INIT ORG 0000H
MOVLW b’11110000’
TRIS PORT_B ;Configure le port B

pour 4 colonnes
Lis la première ligne
MOVLW b’00000000’
TRIS PORT_A ;Configure le port A
BSF PORT_B,0 OUI

pour 4 lignes
BSF PORT_B,1 Touche appuyée ? W=7
BSF PORT_B,2 NON
BSF PORT_B,3 ;Met les sorties
;à l’état haut Lis la deuxième ligne
;Programma principale ***************************************
OUI
Touche appuyée ? W=4
MAIN ;——————————————————-
BCF PORT_B,0 ;RB0=0, c’est-à-dire NON
;la première colonne

BTFSS PORT_B,4 ;Touche 7 appuyée ? Sélectionne la


MOVLW d’7’ ;Si appuyée, charge 7 dans W deuxième colonne
BTFSS PORT_B,5 ;Touche 4 appuyée ?
MOVLW d’4’ ;Si appuyée, charge 4 dans W
BTFSS PORT_B,6 Lis la première ligne
MOVLW d’1’
BTFSS PORT_B,7
MOVLW d’15’ OUI
Touche appuyée ? W=8
;———————————————————-
BSF PORT_B,0 ;RB0=1 NON
BCF PORT_B,1 ;RB1=0, c’est la seconde
;colonne

BTFSS PORT_B,4 ;Touche 8 appuyée ? Figure 4 : Organigramme du programme DEMO6.


MOVLW d’8’ ;Si appuyée, charge 8 dans W
BTFSS PORT_B,5
mence à partir de l’étiquette “MAIN”. Tout d’abord, la pre-
MOVLW d’5’ mière colonne est mise à “0” avec l’instruction “BCF
BTFSS PORT_B,6 PORT_B,0”, qui abaisse à niveau “0” la ligne “RB0”. Il ne
MOVLW d’2’ reste plus, alors, qu’à aller tester l’état des 4 lignes.
BTFSS PORT_B,7
MOVLW d’0’
;———————————————————- Pour faire cette opération on utilise l’instruction “BTFSS”
BSF PORT_B,1 ;RB2=0 qui va justement tester un bit du port B (bit qui correspon-
BCF PORT_B,2 ;pour la troisième colonne dra à chaque fois à une ligne différente). Si elle trouve le
bit à l’état haut, elle saute l’instruction suivante, alors que
BTFSS PORT_B,4
MOVLW d’9’ si elle le trouve à l’état bas, elle l’exécute.
BTFSS PORT_B,5
MOVLW d’6’ Si la touche que nous sommes en train de vérifier a été
BTFSS PORT_B,6 pressée, la ligne correspondante se trouvera à l’état bas
MOVLW d’3’ et donc l’instruction qui suit “BTFSS”, et qui sert à charger
BTFSS PORT_B,7
MOVLW d’14’ dans le registre “W” la valeur correspondant à la touche
;———————————————————- pressée, sera exécutée. Si, au contraire, la touche n’a pas
BSF PORT_B,2 ;RB3=0, été pressée, le programme continuera simplement en allant
BCF PORT_B,3 ;pour la quatrième colonne vérifier l’état des autres touches.
BTFSS PORT_B,4
MOVLW d’12’ En pratique, notre programme est constitué de 16 blocs iden-
BTFSS PORT_B,5 tiques, regroupés en 4 sous-programmes. On sélectionne
MOVLW d’11’ une colonne et l’on teste les quatre lignes : si la ligne est
BTFSS PORT_B,6 basse, la valeur correspondante à la touche pressée est char-
MOVLW d’10’
BTFSS PORT_B,7 gée en “W”. A la fin des 16 opérations de lecture, on trou-
MOVLW d’13’ vera dans le registre “W” soit, si aucune touche n’a été pres-
BSF PORT_B,3 sée, la valeur qui s’y trouvait précédemment, soit, si une
;———————————————————- touche a été pressée, la valeur correspondant à celle-ci.
MOVWF PORT_A ;W est mis sur le port A
;pour la visualisation
On procède alors, avec l’instruction “MOVWF PORT_A” au
GOTO MAIN Figure 3 : Programme transfer t, sur le por t A, auquel est relié l’afficheur, de la
DEMO6 pour gérer le clavier. valeur de “W”. On obtient alors une visualisation immé-
END
diate de cette valeur.

ELECTRONIQUE 63 magazine - n° 14
TECHNOLOGIE

Vous noterez que même si la routine Programme vier matriciel (les nombres 0 à 9) et de
prévoit la lecture des touches [ A ], [ B ], mémoriser les touches pressées. Lors-
[ C ], [ # ] et [ * ], celles-ci ne peuvent
de mémorisation qu’on appuie sur la touche [ * ], l’affi-
être visualisées dans la mesure où le et d’affichage des cheur doit visualiser séquentiellement
décodeur utilisé (l’intégré 4511) n’ac- touches clavier les touches acquises précédemment.
cepte en entrée que des nombres BCD
de 0 à 9. Les autres caractères non Nous voulons maintenant vous propo- En observant le listing de la figure 6,
visualisables ont pour résultat ser un programme plus complet qui vous pourrez noter que ce programme
d’éteindre l’afficheur. vous permettra d’apprendre quelques est réellement plus complexe que le
fonctions impor tantes dans la pro- précédent : dans les initialisations,
Le programme que nous venons d’ex- grammation des PIC. Son listing est vous trouverez le registre “CPT-
poser est très utile pour la lecture et donné en figure 6 et l’organigramme en TOUCHE” qui vous permettra de mémo-
la visualisation immédiate de la touche figure 7. Ce nouveau programme, riser le nombre de touches qui aura
appuyée. appelé DEMO7, est chargé de lire le cla- été pressé ainsi que deux autres

Cours PIC - DEMO7 BTFSS PORT_B,7 ;Teste touche 0


list p=16c84, f=inhx8m CALL TOUCHE_0

PORT_B EQU 06 ;Port B = registre 06h BSF PORT_B,1


PORT_A EQU 05 ;Port A BCF PORT_B,2 ;RB2=0, troisième colonne
COUNT_1 EQU 0C ;Compteur
COUNT_2 EQU 0D ;Compteur BTFSS PORT_B,4 ;Teste touche 9
CPTTOUCHE EQU 0F CALL TOUCHE_9
FSR EQU 04H
INDF EQU 00 BTFSS PORT_B,5 ;Teste touche 6
CALL TOUCHE_6
;Initialisation *********************************************
BTFSS PORT_B,6 ;Teste touche 3
INIT ORG 0000H CALL TOUCHE_3
MOVLW b’11110000’
TRIS PORT_B ;Configure port B BSF PORT_B,2
MOVLW b’00000000’
TRIS PORT_A ;Configure port A GOTO MAIN
BSF PORT_B,0
BSF PORT_B,1 ;**************************************************************
BSF PORT_B,2
BSF PORT_B,3 ;Colonne à 1 TOUCHE_0 MOVLW d’0’
MOVLW 0FF MOVWF PORT_A ;Visualisation de la touche
MOVWF COUNT_1 ;Initialise COUNT_1 ;appuyée
MOVLW 0FF MOVWF INDF ;Charge à l’adresse pointée par FSR
MOVWF COUNT_2 ;Initialise COUNT_2 INCF FSR ;Incrémentation du compteur
MOVLW h’10’ INCF CPTTOUCHE ;Incrémentation de CPTTOUCHE
MOVWF FSR ;FSR pointe l’adresse 10h CALL DELAY
MOVLW 1 TOUCHE_0_1 BTFSS PORT_B,7 ;TOUCHE encore appuyée ?
MOVWF CPTTOUCHE ;CPTTOUCHE à 1 GOTO TOUCHE_0_1 ;Si oui, attend
RETURN ;sinon, retour
;Programme principal ****************************************
TOUCHE_1 MOVLW d’1’
MAIN BCF PORT_B,0 ;RB0=0, première colonne MOVWF PORT_A
BTFSS PORT_B,4 ;Teste touche 7 MOVWF INDF
INCF FSR
CALL TOUCHE_7 ;Si touche appuyée, INCF CPTTOUCHE
;va à TOUCHE_7 CALL DELAY
TOUCHE_1_1 BTFSS PORT_B,6
BTFSS PORT_B,5 ;Teste touche 4 GOTO TOUCHE_1_1
CALL TOUCHE_4 RETURN

BTFSS PORT_B,6 ;Teste touche 1 TOUCHE_2 MOVLW d’2’


CALL TOUCHE_1 MOVWF PORT_A
MOVWF INDF
BTFSS PORT_B,7 ;Teste touche * INCF FSR
CALL TOUCHE_15 INCF CPTTOUCHE
CALL DELAY
BSF PORT_B,0 TOUCHE_2_1 BTFSS PORT_B,6
BCF PORT_B,1 ;RB1=0, seconde colonne GOTO TOUCHE_2_1
RETURN
BTFSS PORT_B,4 ;Teste touche 8
CALL TOUCHE_8 TOUCHE_3 MOVLW d’3’
MOVWF PORT_A
BTFSS PORT_B,5 ;Teste touche 5 MOVWF INDF
CALL TOUCHE_5 INCF FSR
INCF CPTTOUCHE
BTFSS PORT_B,6 ;Teste touche 2 CALL DELAY
CALL TOUCHE_2 TOUCHE_3_1 BTFSS PORT_B,6

Figure 6 : Programme DEMO7 pour mémorisation

ELECTRONIQUE 64 magazine - n° 14
TECHNOLOGIE

registres, “FSR” et “INDF”, utilisés Cette fois, cependant, si une touche est appelée, elle permet de visualiser
dans les microprocesseurs PIC pour est pressée, l’instruction “CALL” le chiffre 1 sur l’afficheur relié au port
mémoriser une donnée dans une case appelle une sous-routine spécifique, A et d’exécuter ces trois instructions :
de mémoire RAM. une pour chaque touche appuyée (cette MOVWF INDF
solution n’est cer tainement pas la INCF FSR
Les registres “COUNT_1” et meilleure pour réaliser la mémorisation INCF CPTTOUCHE
“COUNT_2” sont utilisés comme à l’ha- des touches mais elle se prête bien à
bitude dans la routine “DELAY”. Tou- une explication didactique). La première instruction déplace le
tefois, le “corps” du programme prin- contenu de “W”, qui est la valeur cor-
cipal est semblable au précédent, dans Analysons donc une de ces routines, respondant à la touche pressée (la
la mesure où il effectue la scrutation puisque les autres sont toutes simi- touche [ 1 ]), dans le registre “INDF” uti-
des lignes et des colonnes (notez que laires, excepté pour les valeurs mémo- lisé dans les PIC pour adresser le registre
seule la lecture des touches 0 à 9 et risées. Si l’on appuie, par exemple, sur spécifié par “FSR” qui, dans notre cas,
de la touche [ * ] est effectuée). la touche [ 1 ], la routine “TOUCHE_1” contient le nombre 10 hexadécimal.

GOTO TOUCHE_3_1 TOUCHE_9_1 BTFSS PORT_B,4 ;Teste touche 9


RETURN GOTO TOUCHE_9_1
RETURN
TOUCHE_4 MOVLW d’4’
MOVWF PORT_A ;TOUCHE 15 = * pour reproduire les numéros mémorisés
MOVWF INDF
INCF FSR TOUCHE_15 CALL DISPLA ;Vas à la routine DISPLAY
INCF CPTTOUCHE CALL DELAY
CALL DELAY RETURN
TOUCHE_4_1 BTFSS PORT_B,5 ;Teste touche 4
GOTO TOUCHE_4_1 ;Routine DISPLAY **********************************************
RETURN
DISPLAY DECFSZ CPTTOUCHE
TOUCHE_5 MOVLW d’5’
MOVWF PORT_A GOTO DISP1 ;Si il y a des touches
MOVWF INDF ;mémorisées, vas à DISP1
INCF FSR MOVLW h’10’ ;Sinon réinitialise FSR
INCF CPTTOUCHE ;et CPTTOUCHE
CALL DELAY MOVWF FSR
TOUCHE_5_1 BTFSS PORT_B,5 ;Teste touche 5 MOVLW 1
GOTO TOUCHE_5_1 MOVWF CPTTOUCHE
RETURN RETURN ;Retour

TOUCHE_6 MOVLW d’6’ ;Routine de visualisation *************************************


MOVWF PORT_A
MOVWF INDF DISP1 MOVLW h’10’
INCF FSR MOVWF FSR ;Pointe la première adresse
INCF CPTTOUCHE DISP MOVF INDF,0 ;Charge la première adresse
CALL DELAY MOVWF PORT_A ;Affiche
TOUCHE_6_1 BTFSS PORT_B,5 ;Teste touche 6 CALL DELAY
GOTO TOUCHE_6_1 CALL DELAY ;Laisse affiché
RETURN MOVLW 0FF
MOVWF PORT_A ;Eteins l’afficheur
TOUCHE_7 MOVLW d’7’ CALL DELAY ;Attends
MOVWF PORT_A INCF FSR ;Pointe l’adresse suivante
MOVWF INDF DECFSZ CPTTOUCHE
INCF FSR GOTO DISP ;Si il y a encore un chiffre à
INCF CPTTOUCHE ;visualiser, vas à DISP
CALL DELAY MOVLW h’10’
TOUCHE_7_1 BTFSS PORT_B,4 ;Teste touche 7 MOVWF FSR
GOTO TOUCHE_7_1 MOVLW 1
RETURN MOVWF CPTTOUCHE
RETURN ;Retour
TOUCHE_8 MOVLW d’8’
MOVW PORT_A ;Routine de retard ********************************************
MOVWF INDF
INCF FSR DELAY DECFSZ COUNT_1,1 ;Déc. COUNT_1
INCF CPTTOUCHE GOTO DELAY ;Si différent de 0, vas à DELAY
CALL DELAY MOVLW 0FF
TOUCHE_8_1 BTFSS PORT_B,4 ;Teste touche 8 MOVWF COUNT_1 ;Recharge COUNT_1
GOTO TOUCHE_8_1 DECFSZ COUNT_2,1 ;Déc. COUNT_2
RETURN GOTO DELAY ;Si différent de 0, vas à DELAY
MOVLW 0FF
TOUCHE_9 MOVLW d’9’ MOVWF COUNT_1 ;Recharge COUNT_1
MOVWF PORT_A MOVLW 0FF
MOVWF INDF MOVWF COUNT_2 ;Recharge COUNT_2
INCF FSR RETURN ;Retour au programme principal
INCF CPTTOUCHE
CALL DELAY END

et affichage des touches clavier.

ELECTRONIQUE 65 magazine - n° 14
TECHNOLOGIE

Donc, l’instruction “MOVWF INDF”


transfère le contenu de “W”, à travers Routine Routine
le registre “INDF”, dans le registre indi- touche 15 touche 5
qué par “FSR”. Etant donné que “W”
contenait “1” et que “FSR” contenait
Décrémente Visualise 5
“10h”, le résultat de la “MOVWF INDF” CPTTOUCHE
est d’écrire “1” dans le registre “10h”,
OUI Charge 5 dans
qui appartient justement à la zone RAM CPTTOUCHE = 0 ? la position pointée
des registres d’utilisation générale. NON par FSR
FSR pointe à la Rétablis
Puis, tant “FSR” que “CPTTOUCHE” première position CPTTOUCHE et FSR Incrémente FSR
sont incrémentés, ce qui signifie que
“FSR” ne contiendra plus “10h” mais Incrémente
Lis et visualise RET
“11h”, et donc qu’à la prochaine pres- la donnée CPTTOUCHE
sion de la touche le code correspon-
dant sera mémorisé à la position RAM Eteins l'afficheur OUI Touche encore
d’adresse “11h”. De cette façon, les appuyée ?
touches sont mémorisées séquentiel- Incrémente FSR NON
lement, au fur et à mesure qu’elles
DEMO7
sont appuyées, dans la zone RAM, en Décrémente
RET
partant de la case à l’adresse “10h”. CPTTOUCHE
Initialise les ports
Avant de sor tir de la routine, il faut NON
Compte-touche = 0 ?
attendre que le bouton pressé soit relâ- OUI Initialise :
ché. Dans ce but, les instructions sui- CONT_1, COUNT_2,
Rétablis
vantes ont été insérées : FSR, CPTTOUCHE
CPTTOUCHE et FSR

TOUCHE_1_1 BTFSS PORT_B,6


Sélectionne
pour 4 colonnes

GOTO TOUCHE_1_1 RET


la colonne
pour 4 lignes

Lorsque la touche est relâchée, le pro- Lis la première ligne


gramme peut continuer et exécuter
OUI
l’instruction “RETURN”. Touche appuyée ? Appelle touche 7
NON
Voyons maintenant ce qui se passe
lorsque l’on appuie sur la touche [ * ]
qui, comme vous le savez, permet de Figure 7 : Organigramme du programme DEMO7.
visualiser les touches pressées (mémo-
risées en RAM) jusqu’alors.
fois la routine “DELAY” car, si on omet- Et la suite ?
Tout d’abord, la touche [ * ] force le tait cette routine, vous ne parviendriez
microcontrôleur à mettre en route la pas à voir les chiffres car ils seraient Rendez-vous dans le prochain numéro
routine “DISPLAY”. Dans cette routine, visualisés trop rapidement. où le cours sera consacré à l’afficheur
on décrémente d’abord “CPTTOUCHE” LCD. Nous verrons comment réaliser
puis, ensuite, on vérifie que des Les deux instructions suivantes sont : un programme simple capable de stoc-
touches aient été acquises : en effet, ker des phrases et des nombres en
si aucune touche n’a été pressée avant MOVLW 0FF mémoire et, après les avoir convertis
la touche [ * ], le programme doit igno- MOVWF PORT_A en caractère ASCII, de les envoyer à l’af-
rer la section de visualisation et retour- ficheur qui les visualisera. Nous verrons
ner au programme principal. Dans ce Elles ser vent à éteindre temporaire- également comment adapter ces pro-
cas, on veille également à rétablir la ment l’afficheur de façon à donner un grammes à d’autres microcontrôleurs.
valeur de “CPTTOUCHE” et de “FSR”. effet de clignotement entre un chiffre
Si, au contraire, des touches ont été et l’autre. La condition de “blanking”
appuyées, “CPTTOUCHE” contiendra le s’obtient avec ces deux instructions Petite précision
nombre de touches pressées et le pro- car le décodeur 4511 éteint, comme
gramme “sautera” à l’étiquette “DISP1” nous l’avons déjà dit, l’afficheur si le Nous vous rappelons que bien que la
où le registre “FSR” est initialisé pour code en entrée ne correspond pas à carte de test ait été conçue, à l’origine,
se diriger vers la première case un chiffre compris entre 0 et 9. “FSR” pour fonctionner avec le PIC16C84 ce
mémoire écrite (adresse “10h”) avec est alors incrémenté afin de pouvoir dernier peut être remplacé broche à
les instructions : aller vers la position de mémoire sui- broche par son successeur le
vante. On décrémente également “CPT- PIC16F84. Tous les programmes
MOVF INDF,O TOUCHE” et, si son contenu n’est pas conçus pour le 16C84 fonctionnent
MOVWF PORT_A arrivé à “0”, on revient au label “DISP”. sans aucune modification avec le
Dans le cas contraire, le programme 16F84. N’ayez donc aucune crainte,
De cette façon, on lit la première case continue en restaurant les valeurs ini- toutes les connaissances que vous
mémoire RAM indiquée par “FSR” pour tiales correctes de “FSR” et de “CPT- avez acquises ne seront pas perdues !
la transférer ensuite au port A pour être TOUCHE” de façon à pouvoir reprendre Bien au contraire !
visualisée. On appelle maintenant deux le cycle normal du programme. ◆ R. N.

ELECTRONIQUE 66 magazine - n° 14
TECHNOLOGIE

Microcontrôleurs
PIC
10ème partie - Chapitre 3
La pratique :
l'écriture de programmes
Les afficheurs à cristaux liquides (LCD) de type alphanumérique,
capables de visualiser soit des chiffres, soit des nombres, sont,
aujourd’hui, utilisés dans de nombreuses applications. Cela est dû
à la disponibilité sur le marché de nouveaux modèles à des prix à la
portée de tous mais aussi parce que les afficheurs de nouvelle
conception sont fournis équipés de drivers d’interface en mesure de
piloter de façon autonome le LCD à partir de simples commandes
reçues en format digital. Quand un afficheur alphanumérique dispose
des drivers d’interface, il est dit “intelligent”. Malgré cet adjectif
qui les qualifie, les afficheurs intelligents demandent presque toujours
l’interconnexion avec un dispositif à microcontrôleur en mesure de
gérer les différents signaux qu’ils exigent.

ans cette par- Comme nous l’avons


tie du cours, déjà noté, notre af fi-
nous allons donc cheur dispose d’un cer-
voir comment fonc- tain nombre de lignes
tionnent ces types pour la communication
d’afficheurs et en particulier com- avec les systèmes
ment les gérer en utilisant un micro- externes (pour la précision,
contrôleur de la famille des PIC. 11 lignes), ainsi que de
quelques lignes nécessaires
Comme nous l’avons fait jusqu’à pré- à l’alimentation et au réglage
sent, nous utiliserons comme hardware de du contraste.
référence la carte de test, présentée dans le
numéro 12 d’ELM. Cette carte implémente Les 8 lignes de données vont de
justement un afficheur intelligent de type “DB0” à “DB7”. Si le mot est envoyé
CDL4162 de 16 caractères / 2 lignes. Nous étudierons en format 8 bits, le bit de poids “0” sera
ensuite un programme adapté à la gestion de cet afficheur présenté sur la ligne “DB0”, celui de poids “1” sur la ligne
en gardant cependant à l’esprit que les techniques de pro- “DB1” et ainsi de suite.
grammation que nous allons acquérir sont valables pour
tout autre type d’afficheur, pour vu qu’il soit alphanumé- Nous avons aussi 3 lignes de contrôle. La ligne “R/W”
rique. (Read/Write) qui nous permet d’écrire des données sur l’af-

ELECTRONIQUE 62 magazine - n° 15
TECHNOLOGIE

ficheur ou bien de lire des Avec la car te test, il est


données de l’af ficheur, la L’afficheur LCD CLOVER CDL4162 nécessaire de fermer JP2,
ligne “RS” qui nous permet activant de cette façon les
de faire savoir à l’afficheur Caractéristiques techniques deux buffers qui pilotent l’af-
si nous sommes en train de mini 4,75 V ficheur.
Tension d’alimentation VDD typique 5,00 V
lui envoyer des données ou maxi 5,25 V
des instructions, (comme, mini 2,20 V
Tout le port B du PIC est uti-
par exemple, le déplacement Tension d’entrée niveau haut VIH lisé pour piloter le bus de
maxi VDD
du curseur) et, enfin, la ligne Tension d’entrée niveau bas VIL
mini 0,00 V données “DB0” à “DB7”
“E” de validation. maxi 0,60 V alors que le por t A est uti-
Température de fonctionnement TOPR de 0 à 50 °C lisé pour piloter les lignes
Avant de pouvoir utiliser l’af- “E”, “R/W” et “RS”.
ficheur en lui envoyant des
caractères à visualiser, vous
devrez l’initialiser à travers
Programme
une procédure bien définie pour gérer un
sans laquelle il deviendrait afficheur LCD
impossible de lui faire affi-
cher quoi que ce soit. Voyons maintenant notre
programme de démonstra-
Nous allons vous expliquer tion (DEMO8.ASM) dont le
les opérations d’initialisation, listing est donné en figure
16 1
mais voyons d’abord com- 1 et l’organigramme en
ment fonctionne la logique figure 2.
de contrôle implémentée, en
gardant à l’esprit que chaque Après avoir initialisé les
afficheur LCD dispose à l’in- deux ports en sorties, nous
térieur d’une mémoire de entrons dans la partie cor-
sélection des caractères respondant à l’initialisation
dénommés “CG RAM” et de l’afficheur. Tout d’abord,
d’une mémoire de données la ligne “R/W” est mise à
dénommée “DD RAM”. “0” (BCF PORT_A, R_W)
puisque l’afficheur sera tou-
Pour les afficheurs à 2 lignes jours utilisé en écriture. Puis
la “DD RAM” est située aux la ligne “RS” est également
adresses qui vont de “00” à mise à “0” puisque, lors de
“0F” hexadécimales et de l’initialisation, nous
“40” à “4F” toujours hexa- envoyons à l’afficheur des
décimales. Les caractères Broche Nom Fonction instructions et non des don-
inscrits dans ces 32 cases 1 BL+ Rétroéclairage (+) nées à visualiser.
mémoire sont ceux que l’on 2 BL– Rétroéclairage (-)
visualise effectivement sur 3 GND Alimentation (0 V) On envoie alors une série
l’af ficheur. Pour pouvoir 4 VDD Alimentation (5 V) d’instructions dont la signi-
écrire quelque chose sur l’af- 5 V0 Drive LCD fication peut être déduite
ficheur, il suffit donc d’insé- 6 RS Haut - sélectionne entrée instructions du tableau 1 qui illustre le
rer des données dans ces Bas - sélectionne entrée données jeu d’instructions des affi-
positions spécifiques. 7 R/W Haut - lecture données cheurs LCD. Vous noterez
Lorsque l’on veut écrire une Bas - écriture données qu’à chaque fois que l’on
ligne entière de l’afficheur, il 8 E Signal de validation met une cer taine instruc-
suffit de placer le curseur à 9 DB0 Bus de données bit 0 tion sur le por t B du micro,
la première case de la ligne 10 DB1 Bus de données bit 1 celle-ci est ensuite acquise
et d’envoyer les données. De 11 DB2 Bus de données bit 2 par l’afficheur à travers une
cette façon, à chaque envoi 12 DB3 Bus de données bit 3 impulsion sur la broche
d’un caractère, le curseur est 13 DB4 Bus de données bit 4 “E”. On obtient cette impul-
positionné automatiquement 14 DB5 Bus de données bit 5 sion avec les deux instruc-
à la case suivante. 15 DB6 Bus de données bit 6 tions “BSF PORT_A, E” et
16 DB7 Bus de données bit 7 la suivante “BCF PORT_A,
Nous vous rappelons cepen- E” qui permettent de
dant que l’afficheur est un Sélection des registres mettre à “1” puis à “0” la
dispositif assez lent, c’est RS R/W Opération ligne “E”.
la raison pour laquelle, une 0 0 Écrit opérations internes
routine de retard qui permet 0 1 Lit le drapeau “busy” (DB7) et pointe Après avoir initialisé l’affi-
de “ralentir” le flux des don- le compteur d’adresse (DB0 à DB6) cheur, nous sommes prêts
nées à visualiser est sou- 1 0 Écrit opérations internes à écrire sur ses deux lignes.
vent insérée dans le pro- (de DR à DD ou bien CG RAM) Pour exécuter cette opéra-
gramme. Ceci est également 1 1 Lit opérations internes tion, le programme a été
valable pour celui que nous (de DR ou bien CG RAM à DD) subdivisé en dif férentes
avons réalisé. sous-routines, que nous

ELECTRONIQUE 63 magazine - n° 15
TECHNOLOGIE

avons appelées “LIGNE_1”, “LIGNE_2” facilement le deviner à la lecture du ment identique : elles positionnent la
et “CARACT”. Les deux premières rou- programme, il s’agit du tableau dans ligne “RS” à “0” pour dire à l’afficheur
tines servent à positionner le curseur lequel on place l’inscription que l’on que l’on est en train d’envoyer une com-
au début de la première ligne et au veut visualiser. mande, et transmettent ensuite la com-
début de la seconde, alors que la rou- mande qui permet de positionner le
tine “CARACT” permet d’écrire un carac- Voyons maintenant le fonctionnement curseur au début de la première ou de
tère prélevé d’un tableau qui se trouve des deux routines “LIGNE_1” et la deuxième ligne. La routine “CARACT”
au point du programme distingué par “LIGNE_2”, tout en tenant compte rappelle la routine “TABLE” à travers
l’étiquette “TABLE” et, comme on peut qu’elles sont conçues de façon totale- l’instruction “CALL” et met le contenu

Le jeu d’instructions des afficheurs LCD intelligents

Tableau 1 : Avant de pouvoir utiliser l’afficheur pour la visualisation de données, il faut lui envoyer une série de commandes
d’initialisation qui permettent de préparer l’afficheur au mode de fonctionnement désiré. C’est la raison pour laquelle il faut
se référer à ce tableau qui indique, pour chaque commande possible, la valeur logique du bus de données et des lignes de
contrôle RS et R/W.

ELECTRONIQUE 64 magazine - n° 15
TECHNOLOGIE

Voici l’organigramme du programme qui permet de gérer


DEMO8 l’afficheur (2 lignes / 16 caractères) de la carte de test.
Le programme, après avoir initialisé l’afficheur, positionne
le curseur sur le premier caractère de la première ligne
Initialise les ports puis il appelle la routine “CARACT”, 16 fois. Cette dernière
va chercher, à l’adresse pointée par le registre “W”, le
Initialise caractère à afficher en utilisant pour l’adressage le “Pro-
l’afficheur LCD gram Counter” (voir diagramme ci-dessous). Ceci fait, le
programme positionne le curseur de l’afficheur sur le pre-
Appelle LIGNE_2 mier caractère de la deuxième ligne puis appelle de nou-
COUNT_3 = 16
veau 16 fois la routine “CARACT”.
COUNT_4 = 0
COUNT_3 = 16

Appelle LIGNE_1
W=0
W = COUNT_4
PC = TABLE
W = COUNT_4 call TABLE TABLE
Appelle CARACT add WF PC ;PC TABLE + 1
RETLW “E”
Appelle CARACT W = “E”
Incrém. CONT_4

Incrém. CONT_4
Décrém. COUNT_3 W=1
PC = TABLE
Décrém. COUNT_3 NON call TABLE TABLE
COUNT_3 = 0 ?
add WF PC ;PC = TABLE + 2
NON OUI
COUNT_3 = 0 ? RETLW “E”
OUI RETLW “L”
FIN W + “L”

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


MICROCONTRÔLEURS PIC : CARTE DE TEST POUR PIC PROGRAMMATEUR UNIVERSEL POUR PIC.
Pour apprendre de manière simple la technique de programmation des
microcontrôleurs PIC. Interfaçable avec le programmateur pour PIC16C84, Permet de programmer tous les
(Réf. : FT201K). Le demoboard possède les options suivantes : 8 LED, 1 microcontrôleurs MICROCHIP,
display LCD, 1 clavier matriciel, 1 display 7 segments, 2 poussoirs, 2 relais,
1 buzzer piézo ; toutes ces options vous permettent de contrôler à l’exception des PIC16C5x et
immédiatement votre programme. Le kit des PIC17Cxx. Livré avec son
comprend tous les composants, un micro programme : éditeur (exa) +
PIC16C84, un afficheur LCD, le clavier assembleur + programmateur.
matriciel et une disquette contenant des
programmes de démonstrations.
FT215/K (Kit complet) ....468 F FT215/M (Livré monté)..668 F FT284 (Kit complet + câble PC + SFW 284) ......455 F

Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 08/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PRO ............................................ 2 070,00 F
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 65 magazine - n° 15
TECHNOLOGIE

;Cours PIC - DEMO8 BCF PORT_A,E


;list P=16F84, F=INHX8M CALL DELAY
MOVLW DIS_CLEAR
E EQU 0 MOVWF PORT_B ;Efface tout sur l’afficheur
R_W EQU 1 BSF PORT_A,E
RS EQU 2 BCF PORT_A,E
CUR_HOME EQU 02 CALL DELAY
DIS_CLEAR EQU 01 MOVLW CUR_HOME
CG_RAM EQU H’40’ ;Adresse CG ram MOVWF PORT_B ;Curseur au début
DD_RAM_1 EQU H’80’ ;Adresse première ligne BSF PORT_A,E
DD_RAM_2 EQU H’C0’ ;Adresse seconde ligne BCF PORT_A,E
BITS EQU H’38’ MOVLW CG_RAM
AI_NS EQU H’06’ MOVWF PORT_B ;Adresse CG ram
DO_NC EQU H’0C’ BSF PORT_A,E
PORT_B EQU 06 ;Port B = registre 06h BCF PORT_A,E
PORT_A EQU 05 ;Port A CALL DELAY
COUNT_1 EQU 0C ;Compteur MOVLW DD_RAM_1
COUNT_3 EQU 0E ;Compteur MOVWF PORT_B ;Adresse la première ligne
COUNT_4 EQU 0F ;Compteur BSF PORT_A,E
PCL EQU 02 BCF PORT_A,E
CALL DELAY
ORG 00 BSF PORT_A,RS ;Fin d’envoi des instructions
CALL DELAY
;Configure les ports en sortie ***************************

MOVLW 00 ;Routine d’écriture pour la première ligne de l’afficheur **


TRIS PORT_B
MOVLW 00 CALL LIGNE_1
TRIS PORT_A CALL DELAY
MOVLW 00 PREMR MOVF COUNT_4,0 ;Charge COUNT_4 dans W
MOVWF PORT_A CALL CARACT
MOVWF PORT_B CALL DELAY
INCF COUNT_4
;Initialisation des compteurs***************************** DECFSZ COUNT_3
GOTO PREMR ;Si les 16 caractères
MOVLW H’FF’ ;ne sont pas écrits
MOVWF COUNT_1
MOVLW D’16’ ;Routine d’écriture pour la deuxième ligne de l’afficheur **
MOVWF COUNT_3
MOVLW 00 CALL LIGNE_2
MOVWF COUNT_4 CALL DELAY
MOVLW D’16’
;Initialisation de l’afficheur**************************** MOVWF COUNT_3
SECRIG MOVF COUNT_4,0
INIT BCF PORT_A,R_W ;Afficheur en écriture CALL CARACT
BCF PORT_A,RS ;envoie les instructions CALL DELAY
CALL DELAY INCF COUNT_4
MOVLW BITS DECFSZ COUNT_3
MOVWF PORT_B ;Interface 8 bits GOTO SECRIG ;Si les 16 caractères
BSF PORT_A,E ;E=1 ;ne sont pas écrits
BCF PORT_A,E ;E=0
CALL DELAY fine nop
BSF PORT_A,E goto fine
BCF PORT_A,E
CALL DELAY ;Routine d’adressage de la première ligne ****************
BSF PORT_A,E
BCF PORT_A,E LIGNE_1 BCF PORT_A,RS ;Envoie une instruction
CALL DELAY MOVLW DD_RAM_1
MOVLW DO_NC MOVWF PORT_B ;Adresse la première ligne
MOVWF PORT_B ;Afficheur on, pas de curseur BSF PORT_A,E
BSF PORT_A,E BCF PORT_A,E
BCF PORT_A,E CALL DELAY
CALL DELAY BSF PORT_A,RS
MOVLW AI_NS RETURN
MOVWF PORT_B ;Sélectionne mode
BSF PORT_A,E ;Routine d’adressage de la deuxième ligne ****************

du registre “W” sur le port B, en l’en- tir de cette position. A l’étiquette fois que la routine “TABLE” est appe-
voyant ensuite à l’af ficheur pour la “TABLE”, le contenu du “Program Coun- lée, après l’instruction “ADDWF PCL”,
visualisation. ter” est additionné à celui du registre le “Program Counter” pointera ensuite
“W” et le résultat est ensuite remis aux dif férentes instructions rencon-
L’instruction CALL qui, comme vous le dans le “Program Counter”. trées. Celles-ci sont toutes du type
savez, ser t à exécuter une sous-rou- “RETLW”, c’est-à-dire de retour à la rou-
tine, charge dans le “Program Coun- Comme nous le verrons bientôt, Le tine, chargeant dans le registre “W” à
ter” l’adresse de l’étiquette “TABLE”. registre “W” est chargé avec un nombre chaque fois une lettre différente. Ce
Le programme continue ensuite à par- de 0 à 31. Ce qui veut dire qu’à chaque sera justement le contenu du registre

ELECTRONIQUE 66 magazine - n° 15
TECHNOLOGIE

LIGNE_2 BCF PORT_A,RS ;Envoie une instruction


MOVLW DD_RAM_2
MOVWF PORT_B ;Adresse la seconde ligne
BSF PORT_A,E
BCF PORT_A,E
CALL DELAY
BSF PORT_A,RS
RETURN

;Routine d’écriture d’un caractère se trouvant dans la TABLE

CARACT CALL TABLE


MOVWF PORT_B elle envoie à l’af ficheur le code du caractère lu par le
BSF PORT_A,E tableau.
BCF PORT_A,E
CALL DELAY
RETURN Etant donné que “W” contenait “0”, le code de la lettre “E”
sera transmis. Puis “COUNT_4” est incrémenté alors que
;Table *************************************************** l’on procède à la décrémentation de “COUNT_3”, qui avait
été initialisé à “16”. Puisque l’opération de décrémentation
TABLE ADDWF PCL ne donne pas comme résultat “0”, l’instruction “GOTO PRI-
RETLW ‘E’ MAR” est exécutée, elle permet de rappeler encore la rou-
RETLW ‘L’
RETLW ‘E’ tine “CARACT” avec “W” contenant le nombre “1”. Le code
RETLW ‘C’ correspondant à la lettre “L” sera alors envoyé à l’afficheur.
RETLW ‘T’ Cette opération est répétée 16 fois, jusqu’à ce que “COUNT_
RETLW ‘R’ 3” se porte à “0”. De cette façon est écrite toute la pre-
RETLW ‘O’ mière ligne de l’afficheur, constituée de 16 caractères.
RETLW ‘N’
RETLW ‘I’
RETLW ‘Q’
Une fois cette première partie terminée, on rappelle la rou-
RETLW ‘U’ tine “LIGNE_2” qui positionne le curseur au début de la
RETLW ‘E‘ seconde ligne de l’af ficheur et, après avoir rechargé
RETLW ‘ ‘ “COUNT_3”, s’occupe d’envoyer les données selon une
RETLW ‘M’ modalité tout à fait similaire à celle utilisée dans la pre-
RETLW ‘A’ mière routine.
RETLW ‘G‘
◆ R. N.
;Seconde ligne *******************************************

RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘C’
RETLW ‘O’
RETLW ‘U’
RETLW ‘R’
RETLW ‘S’
RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘P’
RETLW ‘I’
RETLW ‘C’
RETLW ‘ ‘
RETLW ‘ ‘

;Routine de retard ***************************************

DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1


GOTO DELAY ;Si différent de 0 va à DELAY
MOVLW 0FF
MOVWF COUNT_1 ;Recharge COUNT_1
RETURN ;Retour au programme principal

END

“W” chargé dans la sous-routine qui sera utilisé pour com-


muniquer à l’afficheur quels caractères visualiser.
SRC pub 02 99 42 52 73 04/2000

Le corps principal du programme prévoit, en effet, le posi-


tionnement du curseur au début de la première ligne (CALL
LIGNE_1), une fois l’initialisation de l’af ficheur terminée.
Pendant ce temps, le contenu du registre “COUNT_4”, qui
avait été initialisé à “0”, est chargé en “W”. Puis la rou-
tine “CARACT” est appelée et, comme nous l’avons vu,

ELECTRONIQUE 67 magazine - n° 15
TECHNOLOGIE

Microcontrôleurs
PIC
11ème partie
Les autres PIC
et leurs ressources
Jusqu’à maintenant, nous avons toujours pris comme référence un seul circuit de
la famille des PIC de Microchip, le 16C84 (16F84). Ce microcontrôleur dispose
d’une mémoire programme du type EEPROM (programmable électriquement), il
est donc particulièrement intéressant lorsqu’il s’agit de développer et de mettre
au point rapidement des petits programmes ou des routines spéciales. Ce choix
a également été celui de Microchip dans son kit de programmation. La carte de
test que nous vous avons présentée dans ELM 12 fait également référence au
16C84. Pour des questions pratiques évidentes, nous nous sommes cantonnés à
ce seul modèle mais, en réalité, les microcontrôleurs PIC sont caractérisés par la
grande variété de périphériques que les différentes familles intègrent. Cette
remarquable disponibilité permet au concepteur de réaliser des systèmes à
microcontrôleurs qui réduisent au minimum le nombre de circuits intégrés externes.
Dans cette partie du cours, nous allons étudier rapidement les ressources offertes
par les autres modèles de PIC.

omme vous - COMPARATEURS : Cer-


l’avez bien com- tains microcontrôleurs
pris, le 16C84 intègrent des compara-
n’est pas le seul teurs analogiques, avec
PIC. Il est seulement la possibilité d’autogéné-
un membre impor tant d’une rer une tension de réfé-
grande famille. Nous allons analy- rence. Avec ces dispositifs
ser les périphériques présents sur il devient facile de réaliser
les autres modèles de PIC et plus des programmes pouvant
particulièrement les ressources sui- contrôler des grandeurs ana-
vantes : logiques, comme des comparateurs
de seuil et autres.
- TIMERS : Dans les plus petits microcontrô-
leurs, il n’y a qu’un timer, mais dans certains - INTERFACE SERIELLE : Avec les inter-
modèles, on arrive jusqu’à quatre timers intégrés dans un faces sérielles intégrées, il est possible
seul chip. de se relier facilement à des dispositifs externes tels que
des convertisseurs A/D (analogiques/digitaux), des mémoires
- CCP : Ce périphérique permet d’utiliser les timers intégrés EEPROM, des drivers pour afficheur et autres, en utilisant
afin d’obtenir la génération de signaux particuliers, tels que un petit nombre de lignes pour la communication. Il est en
les PWM utilisés dans le contrôle de la vitesse des moteurs. outre possible de réaliser des systèmes de communication

ELECTRONIQUE 76 magazine - n° 16
TECHNOLOGIE

entre différents microcontrô- Famille Timers CCP Sériel A/D Comparateurs - D6 : Non utilisé.
leurs et entre des microcon- - D7 : Non utilisé.
trôleurs et des ordinateurs. 16C54 1 - - - -
16C55 1 - - - - TMR2
- CONVERTISSEURS A/D : 16C56 1 - - - - Ce timer est alimenté par
Partout où il est nécessaire 16C57 1 - - - - l’horloge du microcontrôleur
d’acquérir des grandeurs 16C58 1 - - - - divisée par 4. Il fonctionne
analogiques pour les traiter, 16C620 1 - - - 2 comme un compteur 8 bits
un conver tisseur analo- 16C621 1 - - - 2 qui dispose cependant d’un
gique/digital (A/D) est indis- 16C622 1 - - - 2 prédiviseur (prescaler) en
pensable. La présence sur 16C61 1 - - - - mesure de diviser ultérieu-
le chip de ce périphérique 16C62 3 2 OUI - - rement une fréquence par
simplifie considérablement 16C63 3 2 OUI - - 1, par 4 ou par 16, et d’un
la réalisation des systèmes 16C64 3 1 OUI - - postscaler, qui divise la fré-
de contrôle analogiques, en 16C65 3 2 OUI - - quence en sor tie du timer
réduisant le nombre des 16C71 1 - - OUI - d’un facteur de 1 à 16. Le
composants externes à uti- 16C73 3 2 OUI OUI - mode de fonctionnement du
liser et en optimisant la fonc- 16C74 3 2 OUI OUI - timer, et les facteurs de divi-
tionnalité du système. 16C84 1 - - - - sion du prescaler et du post-
17C42 4 2 OUI - - scaler, sont définis à travers
La présence de ces péri- 17C43 4 2 OUI - - le registre T2CON. La valeur
phériques intégrés et l’ample 17C44 4 2 OUI - - du timer TMR2 est compa-
possibilité de choix parmi les rée à un registre, dénommé
microcontrôleurs qui intè- Figure 1 : Tableau des périphériques intégrés dans les PIC. PR2, et quand les deux
grent cer tains de ces péri- valeurs sont égales, une
phériques ont permis à la famille PIC pilotée par quartz (avec une fréquence impulsion est générée pour le post-
de conquérir une place de premier plan divisée par 4) ou externe. Il est inté- scaler. La sortie de celui-ci, si elle est
sur le marché, pour tant varié, des ressant de noter une caractéristique activée, génère la condition d’inter-
microcontrôleurs 8 bits. Ainsi, le particulière de TMR1 : il offre la possi- ruption du timer TMR2.
concepteur peut choisir le dispositif le bilité de réaliser un oscillateur à quartz
plus adapté à chaque application sans autour d’une porte inverseuse et d’une
devoir acquérir de nouvelles bases de résistance déjà intégrées. Il est donc Les modules CCP
programmation. possible, de cette façon, de réaliser un
oscillateur à 200 kHz en utilisant peu Le sigle CCP est l’abréviation de Cap-
Dans le tableau donné en figure 1, de composants externes. Le TMR1 peut ture/Compare/PWM. La famille 16C6x,
nous indiquons quels sont les péri- fonctionner selon deux modes : comme par exemple, intègre deux de ces
phériques intégrés pour chaque sous- timer ou comme compteur. Lorsqu’il tra- modules. Chaque CCP est formé d’un
famille de microcontrôleurs. Comme vaille comme compteur, le timer incré- registre à 16 bits qui peut fonctionner
vous pouvez l’observer, on passe des mente son propre comptage à chaque comme registre de capture, de com-
dispositifs de la famille 16C5x, qui n’in- front montant de l’horloge externe. Lors- paraison ou comme contrôle de la sor-
tègrent qu’un seul timer, aux disposi- qu’il fonctionne en mode timer, l’hor- tie PWM. Les deux modules sont pra-
tifs 16C7x qui disposent de plusieurs loge qui alimente le timer est la même tiquement identiques et sont chacun
timers, d’interfaces de communication que celle du microcontrôleur lui-même. constitués de deux registres, dénom-
sérielle et de conver tisseurs analo- Dans les deux cas, une interruption est més CCPR1L et CCPR1H pour le pre-
giques/digitaux. générée à chaque fois que l’on a un mier module et CCPR2L et CCPR2H
dépassement (overflow) du compteur. pour le second module.
Analysons maintenant en détail les dif-
férents éléments et leur mode de fonc- Le registre qui contrôle le mode de fonc- Analysons maintenant les trois diffé-
tionnement. tionnement de ce timer s’appelle rents modes de fonctionnement en
T1CON et la signification de chaque bit tenant compte du fait que ce qui a été
est la suivante : dit pour le premier module est égale-
TIMERS ment valable pour le deuxième.
- D0 (TMR1ON) : Active (1) ou désac-
Nous avons vu que le PIC 16C84 dis- tive (0) le timer. Mode CAPTURE
pose d’un timer intégré en mesure de - D1 (TMR1CS) : Sélectionne l’horloge En mode CAPTURE, les registres
générer une interruption chaque fois externe (1) ou interne (0). CCPR1L et CCPR1H capturent la valeur
qu’un comptage est terminé. Ce timer, - D2 (T1SYNC) : Sert à synchroniser (0) de 16 bits du timer TMR1 lorsque se
désigné par TMR0, est présent dans ou non (1) l’horloge externe avec l’hor- vérifie un événement déterminé sur la
tous les PIC, et fonctionne de la même loge interne du microcontrôleur. patte RC2/CCP1. Cet événement peut
manière pour tous les chips. Dans cer- - D3 (T1OSCEN) : Active (1) ou désac- être : un front montant ou descendant,
tains microcontrôleurs on peut trouver tive totalement (0) l’oscillateur. tous les 4 fronts montants, tous les
des timers supplémentaires qui sont - D4 (T1CKPS1) et 16 fronts descendants. Le mode de
alors désignés par TMR1 et TMR2. - D5 (T1CKPS2) : Etablissent la valeur l’événement est déterminé à travers
du prédiviseur : un registre de configuration.
TMR1 - 00 = divise par 1
Ce timer à 16 bits utilise deux registres: - 01 = divise par 2 Mode COMPARE
TMR1H et TMR1L. L’horloge qui ali- - 10 = divise par 4 En mode COMPARE, la valeur du
mente le compteur peut être interne, - 11 = divise par 8 registre CCPR1, de 16 bits, est conti-

ELECTRONIQUE 77 magazine - n° 16
TECHNOLOGIE

nuellement comparée à la valeur du ADCON0 (adresse 1Fh) ADRES


timer TMR1. Lorsque les deux valeurs ADCON1 (adresse 9Fh) Ce registre est chargé automatique-
sont égales, un événement est généré ADRES (adresse 1E) ment au terme d’une conversion A/D
sur la patte RC2/CCP1. Cet événement avec la donnée à 8 bits qui en exprime
peut être: patte CCP1 mise à “1”, patte Il convient de noter que les adresses le résultat.
CCP1 mise à “0”, patte CCP1 inchan- des registres sont valables pour les
gée. PIC 16C73 et 74, mais sont différentes Pour effectuer une conversion A/D il
pour le 16C71. est donc nécessaire d’exécuter les opé-
Mode PWM rations suivantes :
En mode PWM (Pulse Width Modula- Voyons en détail la signification des - définir et configurer quelles lignes
tion) il est possible de générer un signal bits des registres de configuration et sont consacrées aux entrées analo-
carré sur la patte RC2/CCP1 du micro- les opérations à suivre pour effectuer giques, à travers le registre ADCON1,
contrôleur et à ce signal, le rappor t une conversion A/D. - sélectionner un des canaux possibles
cyclique peut être modifié. La sélection pour l’entrée analogique,
de la valeur du rapport cyclique se pro- ADCON0 - sélectionner la fréquence de conver-
duit en chargeant 8 bits dans le registre - Bit 0 (AD0N) : mis à “1”, le conver- sion,
CCPR1L et deux bits dans le registre tisseur travaille, mis à “0” le conver- - allumer le convertisseur A/D.
CCP1CON (les bits D4 et D5). Le signal tisseur est désactivé et n’absorbe
qui pilote la génération du signal PWM pas de courant. Ces trois dernières opérations sont effec-
est pris dans le timer 2. - Bit 2 (GO/DONE) : mis à “0” signifie tuées par la sélection du registre
que la conversion est terminée, mis ADCON0. On fait alors partir la conver-
à “1”, signifie que la conversion est sion, en mettant le bit GO/DONE du
Convertisseur A/D en court. S’il est forcé à “1” par l’écri- registre ADCON0 à “1” et on attend la
ture, la conversion se met en route fin de la conversion. Si la génération
La famille 16C7x est constituée par les automatiquement. d’une interruption a été prévue, c’est cet
microcontrôleurs PIC 16C71, 16C73 - Bit 3, Bit 4, Bit 5 : ces bits servent à événement qui indiquera que la conver-
et 16C74, respectivement à 18, 28 et définir quelle patte d’entrée est utili- sion a eu lieu, sinon il sera nécessaire
40 pattes, caractérisés par la disponi- sée pour la conversion. La relation d’aller tester le bit GO/DONE du registre
bilité d’un convertisseur A/D de 8 bits. entre les bits (respectivement 3, 4 et ADCON0 jusqu’à le trouver à niveau
Le nombre d’entrées qui peuvent être 5) et la patte habilitée est la suivante : logique bas. Le résultat de la conversion
reliées au convertisseur varie en fonc- 000 = RA0, 001 = RA1, 010 = RA2, se trouve alors dans le registre ADRES.
tion du type du microcontrôleur. Pour 011 = RA3, 100 = RA5, 101 = RE0,
la précision, il est de 4 entrées pour le 110 = RE1, 111 = RE2.
16C71, 5 pour le 16C73 et 8 pour le - Bit 6, Bit 7 : ils établissent la fré- Modules de
16C74. Le convertisseur intégré dans quence de l’horloge qui alimente le communication sérielle
les PIC est du type à approximations convertisseur, en déterminant donc
successives, c’est-à-dire que la conver- également le temps de conversion : Les microcontrôleurs PIC prévoient deux
sion est effectuée en mettant succes- 00 = Fosc/2, 01 = Fosc/8, 10 différents modules de communication
sivement à “1” les bits du registre cor- = Fosc/32, 11 = horloge dérivée d’un sérielle : le premier est appelé SCI
respondant, en partant du plus fort, oscillateur RC. (Serial Communication Interface = inter-
jusqu’à trouver la combinaison exacte face de communication sérielle), et le
entre donnée digitale et entrée analo- ADCON1 second SSP (Synchronous Serial Port
gique correspondante. Les trois bits les moins significatifs de = port sériel synchrone).
ce registre (D0, D1 et D2) permettent
La gestion du convertisseur se produit de sélectionner les entrées à utiliser en Voyons en détail chacun de ces deux
au moyen de trois registres dénommés: liaison avec le convertisseur analogique. modules.

Figure 2 : Schéma synoptique du timer 16 bits TMR1. Comme vous pouvez le remarquer, ce timer est composé de deux
registres TMR1H et TMR1L qui peuvent être contrôlés par une horloge interne (piloté par quartz externe) ou par une horloge
externe.

ELECTRONIQUE 78 magazine - n° 16
TECHNOLOGIE

SCI
Le module SCI permet de communiquer de façon asynchrone
avec des périphériques comme les ordinateurs par exemple.
Il permet également de communiquer de façon synchrone
avec des périphériques comme les convertisseurs A/D, les
mémoires EEPROM sérielles, etc.

Le SCI utilise deux lignes pour la communication sérielle,


dénommée TX pour la transmission et RX pour la réception
lorsqu’on travaille en mode asynchrone, ou bien DT (data)
et CK (clock) lorsqu’on travaille en mode synchrone.

Le SCI peut, en effet, être configurée pour travailler dans


un des trois modes suivants :

Asynchrone
Synchrone comme maître
Synchrone comme esclave

En mode asynchrone les données sont transmises sur la


ligne TX, qui est donc une sortie, et elles sont reçues sur
la ligne RX, qui est donc une entrée. La synchronisation
entre récepteur et transmetteur se produit en envoyant un
bit de START avant d’envoyer les données proprement dites.

En mode synchrone, les données voyagent de façon bidi-


rectionnelle sur la ligne DT et le synchronisme entre le récep-
teur et le transmetteur se produit à travers l’envoi d’une
impulsion d’horloge sur la ligne CK correspondante : évi-
demment l’horloge doit être gérée depuis un seul des deux
dispositifs communicants. Le dispositif qui envoie l’impul-
sion d’horloge prend le nom de MASTER (maître), alors que
celui qui reçoit cette impulsion prend le nom de SLAVE
(esclave). La configuration du mode de fonctionnement de
la SCI se réalise à travers deux registres dénommés TXSTA
(registre de transmission et de contrôle) et RCSTA (registre Mode synchrone
de réception et de contrôle). Un registre particulier, dénommé En transmission synchrone, l’un des deux dispositifs com-
SPRGB, permet de définir la vitesse de communication municants prend la fonction de maître (MASTER) et l’autre
sérielle, c’est-à-dire le “baud rate”. d’esclave (SLAVE). En plus des données, le dispositif
maître envoie également une impulsion d’horloge qui ser t
Voyons donc en détail le mode de fonctionnement du module à l’esclave pour synchroniser la réception. C’est pour
SCI. cette raison que la transmission est définie comme syn-
chrone.
Mode asynchrone
Dans ce mode, le périphérique se compor te comme un Le mode de communication synchrone, aussi bien en ce qui
UART. La communication se fait à travers deux lignes dénom- concerne la réception que la transmission, se passe de
mées TX (transmission) et RX (réception). La transmission façon tout à fait identique à ce que l’on a vu pour la com-
se réalise en envoyant d’abord un bit de start, suivi de huit munication asynchrone.
ou neuf bits représentant les données à envoyer et un bit
de stop. Pour effectuer la transmission d’une donnée, il suf- Voyons la signification des bits qui composent les deux
fit d’activer la transmission en mettant à “1” un bit dénommé registres TXSTA et RCSTA :
TXEN du registre TXSTA. En effet ce bit est la validation de
la transmission. Une fois cette opération effectuée, il suf- TXSTA
fit de charger la donnée que vous voulez transmettre dans - D0 (TXD8) : Représente le neuvième bit de transmis-
le registre dénommé TXREG. Cette opération de “charge- sion.
ment” met en route la transmission de la donnée en forme - D1 (TMRT) : Indique si le registre de transmission (TSR)
sérielle. est plein (1) ou vide (0).
- D2 (BRGH) : Détermine, avec la BRG, la vitesse de trans-
Lorsqu’on veut recevoir des données de la ligne sérielle, il mission.
faut habiliter la réception en mettant le bit CREN du registre - D3 : Non utilisé.
RCSTA à “1”. Le système attend alors l’envoi d’un bit de - D4 (SYNC) : Définit le type de communication : synchrone
start, des données proprement dites et d’un bit de stop. Si (1) ou asynchrone (0).
cela se passe correctement, dès que le bit de stop est reçu, - D5 (TXEN) : Active (1) ou désactive (0) la transmission.
le bit RCIF est mis à “1” et une demande d’interruption est - D6 (TX8/9) : Détermine les bits de transmission : 9 (1)
générée. En réponse à cette demande d’interruption, il suf- ou 8 (1).
fira de lire la donnée qui se trouve dans le registre dénommé - D7 (CSRC) : Détermine si, en mode synchrone, le micro-
RCREG. contrôleur fonctionne en maître (1) ou en esclave (0).

ELECTRONIQUE 79 magazine - n° 16
TECHNOLOGIE

RCSTA Module comme entrée des comparateurs une


- D0 (RCD8) : Représente le neuvième comparateurs tension de référence générée par un
bit en réception. module spécial à l’intérieur du PIC
- D1 (OERR) : Indique s’il y a une erreur Cer tains dispositifs PIC de la famille même.
de over-run (1) ou non (0). 16C62, bien qu’ils n’intègrent pas de
- D2 : Indique s’il y a erreur de framing véritables conver tisseurs A/D, per- Le registre de contrôle des compara-
(1) ou non (0). mettent de gérer des signaux analo- teurs est dénommé CMCON et per-
- D3 : Non utilisé. giques grâce à la présence de deux met de sélectionner une des huit
- D4 (CREN) : Active (1) ou désactive comparateurs. configurations possibles et donc
(0) la réception. d’établir quelles lignes du port A doi-
- D5 (SREN) : Permet d’activer (1) ou En pratique, les comparateurs sont des vent être reliées aux entrées du com-
de désactiver (0) la réception en dispositifs analogiques qui présentent parateur. Le même registre permet
mode synchrone. deux entrées et une sortie. Les deux de relever l’état de la sor tie des com-
- D6 (RC8/9) : Détermine les bits de entrées sont indiquées avec “+” (entrée parateurs.
réception de donnée à 9 bits (1) ou non inverseuse) et “–” (entrée inver-
à 8 bits (0). seuse). Lorsque la tension sur la patte CMCON
- D7 (SPEN) : Active (1) le module de “+” dépasse celle présente sur la patte - D0 (CMO),
communication sérielle ou le désac- “–”, la sortie du comparateur se trouve - D1 (CM1) et
tive (0). au niveau logique “1” et, inversement, - D2 (CM2) : Déterminent une des huit
si la tension sur la patte “–” dépasse configurations possibles.
celle sur la patte “+” la sortie se porte - D3 (CIS) : Permet de sélectionner les
Module de au niveau logique “0”. entrées des comparateurs pour les
communication combinaisons 010 et 001 de D0, D1
synchrone sérielle Les deux comparateurs présents dans et D2.
les PIC font face aux lignes RA0 à RA3. - D4 : Non utilisé.
En plus du module SCI que nous avons Il est également possible d’utiliser - D5 : Non utilisé.
analysé, certains PIC disposent
d’un autre système de commu-
nication sérielle dénommé SSP
qui est particulièrement indiqué
pour communiquer avec des péri-
phériques extérieurs au micro-
contrôleur. Le SSP peut fonc-
tionner dans les deux modes
suivants :

- SPI, c’est-à-dire Serial Per-


ipherical Inter face (inter face
périphérique sérielle),
- I2C c’est-à-dire Inter Integrated
Circuit.

Il s’agit de deux systèmes diffé-


rents de communication sérielle
développés par divers produc-
teurs de circuits intégrés pour
permettre une communication
facile entre ces circuits et les
microcontrôleurs.

Pour l’interface I2C en particulier


(développée et diffusée par Phi-
lips) certains PIC présentent trois
lignes spéciales appelées SDO
(Serial Data Out), SDI (Serial Data
In) et SCK (Serial Clock). Les
lignes SDO et SDI sont évidem-
ment les lignes qui transportent
les données sous forme sérielle,
alors que sur la ligne SCK est
appliquée l’horloge de synchro-
nisme, puisqu’il s’agit d’une
transmission de type synchrone
entre les dispositifs. Les registres
qui interviennent dans la déter-
mination du mode opérationnel Figure 3 : Comparaison des méthodes de fonctionnement.
de cette inter face sérielle sont A = entrée analogique, D = entrée digitale.
appelés SSPSTAT et SSPCON.

ELECTRONIQUE 80 magazine - n° 16
TECHNOLOGIE

- D6 (C1OUT) : Sortie du premier com- Vref : bas (1) ou haut (0). Vers la fin
parateur. - D6 (VROE) : Indique si Vref se trouve du cours sur les PIC
- D7 (C2OUT) : Sor tie du deuxième sur RA2 (1) ou non (0).
comparateur. - D7 (VREN) : Informe le microcontrô- Dans le prochain numéro, nous arrive-
leur si le circuit qui génère Vref est rons à la dernière partie du cours sur
Lorsque l’état de sor tie de l’un des alimenté (1) ou non (0). les PIC de Microchip. Nous vous pré-
deux comparateurs change, une inter- senterons un puissant compilateur en
ruption est générée, en réponse à Comme vous le voyez, la valeur de la Basic, étudié spécialement pour ces
laquelle il est nécessaire d’aller lire via tension de référence est déterminée microcontrôleurs : le “PIC Basic Com-
software les deux bits D6 et D7 pour par les bits D0 à D3 avec les formules piler”. Il sera possible, avec cet ins-
savoir lequel des deux comparateurs suivantes : trument de développement, de réaliser
a réellement changé d’état. des programmes, même complexes,
Si VRR = 1 avec des instructions Basic simples et
Vref = (Vx : 24) x Vdd intuitives que le compilateur se char-
Module gera de traduire dans le langage assem-
générateur de tension Si VRR = 0 bleur des PIC.
Vref = (Vdd : 4) + (Vx : 32) x Vdd ◆ R. N.
Nous avons vu que les deux compa-
rateurs peuvent utiliser une tension Lorsque Vdd coïncide avec la tension
de référence générée par le micro- d’alimentation, Vx représente un
contrôleur lui-même. Ce module est
contrôlé par un registre dénommé
nombre compris entre 0 et 15, déter-
miné par les bits D0 à D3.
Pour vos achats,
VRCON dont les bits ont la significa- choisissez
tion suivante : Par exemple, si nous prenons en consi-
dération une Vdd de 5 V et une valeur
de préférence
- D0 (VR0), de Vx égale à 10, nous avons : nos annonceurs.
-
-
D1 (VR1),
D2 (VR2) et Si Vrr = 1
C’est auprès d’eux
- D3 (VR3) : Déterminent la valeur de Vref = 2,083 V que vous trouverez
la tension. les meilleurs tarifs et
- D4 : Non utilisé. Si Vrr = 0
- D5 (VRR) : Détermine l’échelle de Vref = 2,8125 V les meilleurs services.

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


MICROCONTRÔLEURS PIC : CARTE DE TEST POUR PIC PROGRAMMATEUR UNIVERSEL POUR PIC.
Pour apprendre de manière simple la technique de programmation des
microcontrôleurs PIC. Interfaçable avec le programmateur pour PIC16C84, Permet de programmer tous les
(Réf. : FT201K). Le demoboard possède les options suivantes : 8 LED, 1 microcontrôleurs MICROCHIP,
display LCD, 1 clavier matriciel, 1 display 7 segments, 2 poussoirs, 2 relais,
1 buzzer piézo ; toutes ces options vous permettent de contrôler à l’exception des PIC16C5x et
immédiatement votre programme. Le kit des PIC17Cxx. Livré avec son
comprend tous les composants, un micro programme : éditeur (exa) +
PIC16C84, un afficheur LCD, le clavier assembleur + programmateur.
matriciel et une disquette contenant des
programmes de démonstrations.
FT215/K (Kit complet) ....468 F FT215/M (Livré monté)..668 F FT284 (Kit complet + câble PC + SFW 284) ......455 F

Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 08/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PRO ............................................ 2 070,00 F
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 81 magazine - n° 16
TECHNOLOGIE

Microcontrôleurs
PIC
12ème partie et fin
Le Pic Basic Compiler

Nous savons que pour réaliser un programme pour les PIC, et plus généralement
pour n’importe quel microcontrôleur, nous devons suivre les instructions en format
mnémonique, puis les traduire en code machine en utilisant un programme spécial
appelé assembleur. Lorsque l’on réalise un software avec cette méthode, on parle
de programmation en assembleur ou “de bas niveau”. Mais il existe cependant
d’autres langages de programmation qui sont définis “de haut niveau” puisqu’ils
n’utilisent pas d’instructions assembleur. Ils prennent le nom de compilateurs.
Les plus célèbres de ces langages sont le Basic et le C.

ous devez mainte- L’utilisation d’un langage


nant vous deman- de haut niveau simplifie
der le pourquoi de énormément l’écriture des
cette introduction qui programmes pour les
explique la dif férence microcontrôleurs, en met-
entre la programmation de bas tant à la disposition du pro-
niveau et celle de haut niveau. La grammeur une série d’ins-
réponse est simple : il y a quelque tructions puissantes et
temps, la société californienne Micro simples à utiliser.
Engineering Labs, a mis sur le marché un
puissant compilateur Basic pour les plus Les avantages de l’utilisation d’un
connus des microcontrôleurs 8 bits : les PIC compilateur Basic par rapport au lan-
de chez Microchip. gage assembleur sont donc évidents :
l’apprentissage des commandes est immédiat, le temps
Ce programme, qui porte le nom de “PBC” (PIC Basic Com- de développement du programme est nettement réduit,
piler), est donc en mesure de transformer des instructions les instructions disponibles sont intuitives et simples d’em-
Basic en codes machine déjà prêts à être transférées dans ploi, vous pourrez réaliser des programmes complexes
la mémoire des PIC. avec quelques lignes d’instructions, et, enfin, vous aurez

ELECTRONIQUE 72 magazine - n° 17
TECHNOLOGIE

immédiatement à disposition des fonctions que seul un plus facilement utilisé à l’intérieur du programme. Ainsi, par
exper t en programmation réussit à gérer en assembleur. exemple : “Symbol LED = Pin0” donne à “Pin0” (qui, nous
vous rappelons, identifie la patte 0 du port B) le symbole
Mais surtout, il vous sera possible d’insérer des parties de “LED”. Une fois ce symbole défini, vous pourrez l’utiliser
programme en assembleur à l’intérieur de programmes dans le programme. L’instruction “LED = 1”, par exemple,
écrits en basic, en utilisant simplement la directive ASM. met un niveau logique haut sur la patte associée au sym-
bole LED (Pin0).
Pratiquement tous les microcontrôleurs des différentes
familles de PIC sont concernés, exception faite des 16C5x Etiquettes :
(16C54 à 16C58), qui sont les PIC de niveau le plus bas et Comme en assembleur, les étiquettes doivent commencer
dont la structure particulière ne permet pas l’utilisation du obligatoirement à la première colonne. Elles doivent en outre
code généré par le compilateur Basic. se terminer par deux points (:).

Nous allons donc consacrer cette partie du Cours à la des- Constantes :


cription du “PBC” de chez MicroEngineering Labs et nous Les constantes numériques peuvent être définies en trois
verrons tout de suite comme il sera simple et intuitif de systèmes différents : décimal, binaire et hexadécimal. Pour
contrôler les lignes d’entrée/sortie. dire au compilateur en quelle base est exprimé le nombre,
on place un symbole devant lui (préfixe). Ainsi, si vous
écrivez “100” sans préfixe, vous exprimez le nombre 100
Gestion des ports E/S (I/O) en décimal. Si, par contre, vous tapez “%100”, vous infor-
mez le compilateur que le nombre est exprimé en binaire
Dans le compilateur Basic, les pattes correspondant au port et vaut donc, dans ce cas précis, 4 en décimal. En écri-
B sont identifiées par “Pin0” jusqu’à “Pin7”. Ainsi, lorsque vant, encore, “$100” vous exprimez le nombre en hexa-
vous utilisez, par exemple, “Pin3” dans une instruction, cela décimal donc, le compilateur l’interprète comme 256 en
indique la patte P3 du port B. décimal.

Pour les instructions qui intéressent directement le port Variables :


B, telles que “High” et “Low”, il suffit de spécifier seule- Le compilateur utilise les registres du microcontrôleur pour
ment le numéro correspondant à la patte : l’instruction y loger les variables du programme. Ce qui veut dire que le
“High2”, par exemple, met au niveau logique haut la patte nombre de variables qui peut être utilisé dépend, évidem-
2 du port B. ment, du type de PIC utilisé. On peut définir des variables
de type “Byte” (8 bits) ou du type “Word” (16 bits). Les
Pour utiliser les pattes des autres ports qui ne sont pas variables sont identifiées par les sigles B0, B1, B2, etc.
directement définis par des instructions Basic, il vous fau- pour les variables “Byte”, et par W0, W1, W2, etc. pour les
dra utiliser les instructions PEEK et POKE. variables “Word”. Les variables “W” sont constituées de
deux variables “B” : “W0” est constitué de B0 et B1, W1
La variable “Pins” sert, quant à elle, à définir l’état logique de B2 et B3, etc. Les deux variables B0 et B1 peuvent éga-
de toutes les broches en même temps. Si vous écrivez, par lement être utilisées comme variables pour les simples bits,
exemple, “Pins=255” dans le programme, toutes les pattes identifiés par Bit0, Bit1… jusqu’à Bit15.
du port B seront automatiquement mises au niveau logique
haut.
Le set d’instructions du PBC
Vous pouvez également utiliser la variable “Dir” pour défi-
nir si une patte du port B est configurée en entrée (0) ou Le PIC Basic Compiler de MicroEngineering Labs est carac-
en sortie. Ainsi, si vous écrivez par exemple “Dir2=1” vous térisé par 37 instructions Basic qui peuvent être réparties
définissez la patte P2 du port B en sortie. dans 5 groupes fonctionnels.

Avec la variable “Dirs” vous définissez en même temps Instructions pour le contrôle du flux du programme :
toutes les 8 broches du port B.
BRANCH Saut conditionnel.
CALL Appelle une sous-routine en assembleur.
Comment écrire END Termine le programme.
un programme en PBC FOR…NEXT Cycle.
GOSUB Appelle une sous-routine en Basic.
Avant d’entrer dans le vif du sujet et donc d’analyser les GOTO Saut inconditionnel.
instructions que le “PBC” prévoit, il vous faudra apprendre IF…THEN Conditionnel.
la syntaxe de ce Basic par ticulier c’est-à-dire les modes RETURN Retour de sous-routine.
génériques auxquels se tenir pendant l’écriture du pro- PAUSE Cycle d’attente pour un temps spécifié.
gramme.
Instructions pour le contrôle des pattes du port B :
Commentaires :
Les commentaires du programme peuvent être écrits après BUTTON Lit l’état d’un bouton avec anti-rebond.
avoir inséré une apostrophe (‘). Tout ce qui sera écrit après HIGH Met l’état logique haut.
ce symbole sera ignoré par le compilateur. LOW Met l’état logique bas.
INPUT Initialise une broche en entrée.
Symboles : OUTPUT Initialise une broche en sortie.
Avec la directive “Symbol” vous associez un nom, à une REVERSE Inverse entrée/sortie.
variable ou à une patte du microcontrôleur, qui peut être TOGGLE Inverse l’état logique d’une broche.

ELECTRONIQUE 73 magazine - n° 17
TECHNOLOGIE

Instructions pour la lecture et l’écriture des registres : Analysons la signification de chaque mot de l’instruction :
PEEK Lit le contenu d’un registre.
Pin = Spécifie quelle patte du port B doit être
POKE Ecrit dans un registre.
utilisée : c’est un nombre de 0 à 7.

Instructions pour la gestion des périphériques : Dowm = Détermine l’état de la patte quand on
appuie sur le bouton. Peut prendre les deux
EEPROM Initialise EEPROM. valeurs 0 ou 1.
I2CIN Lecture depuis un dispositif avec bus I2C.
I2COUT Ecriture sur un dispositif avec bus I2C. Delay = Représente le cycle de comptage avant un
PULSIN Mesure la durée d’une impulsion. “autorepeat” suivant. Si “Delay” est mis à
PULSOUT Génère une impulsion de durée spécifique. 0, l’anti-rebond n’est pas géré. S’il est mis
PWM Génère un signal PWM. à 255 l’anti-rebond est exécuté sans cycle
READ Lit un bit de l’EEPROM interne. “d’autorepeat”.
WRITE Ecrit un bit dans l’EEPROM interne.
SERIN Entrée sérielle asynchrone. Rate = Représente le nombre de fois où l’opéra-
SEROUT Sortie sérielle asynchrone. tion de lecture de l’état du bouton est répé-
SOUND Génère un son d’une fréquence tée (autorepeat).
et d’une durée déterminée.
Var = Indique la variable qui est utilisée pour
Instructions diverses : effectuer l’opération d’anti-rebond.

DEBUG Pour introduire des informations pour la Action = Indique à quel état du bouton il faut asso-
mise au point du programme. cier le saut à une étiquette (0 = le saut se
LET Associe le résultat d’une opération à une produit si le bouton n’est pas pressé. 1 = le
variable. saut se produit s’il est pressé).
LOOKDOWN Recherche d’une valeur dans un tableau.
LOOKUP Prélève d’une donnée dans un tableau. Label = Indique où saute le programme si la condi-
NAP Met le processus en mode veille pour un tion spécifiée par “Action” est vérifiée.
intervalle de temps court.
RANDOM Génère des nombres aléatoires.
SLEEP Met le processeur en veille pour un inter- CALL : Permet de rappeler des sous-routines en assembleur.
valle de temps long. Donc : “CALL Label1” exécute la sous-routine assembleur
qui se trouve à l’étiquette “Label1”.
Nous pouvons maintenant analyser en détail chaque ins-
truction donnée du compilateur Basic en examinant la syn- Syntaxe : “CALL Label”
taxe correspondante.

EEPROM : Cette instruction ser t à écrire des données


Les instructions dans l’EEPROM interne, ceci bien sûr, pour les micro-
du compilateur Basic contrôleurs qui prévoient ce type de mémoire. Les posi-
tions EEPROM spécifiées sont écrites au moment de la
BRANCH : Cette instruction permet de sauter à des éti- programmation.
quettes (Label) en fonction de la valeur prise par une variable.
Syntaxe : “EEPROM Location, (Constant, Constant,…)”
Syntaxe : “BRANCH Offset (Label1, Label2…)”
où “Location” est l’adresse de la première position de
Si “Offset” vaut “0”, le programme exécute l’instruction mémoire à écrire et “Constant, Constant,…” sont les don-
caractérisée par l’étiquette “Label1”. S’il vaut “1”, il exé- nées à écrire.
cute le “Label2” et ainsi de suite.
Exemple : “EEPROM 3, (5,30,67)” signifie qu’au moment
Exemple : “BRANCH B5 (Etiquette1, Etiquette2, Etiquette3)”. de la programmation, les nombres 5, 30 et 67 seront res-

Si “B5” vaut 0, le programme saute à “Etiquette1”. S’il vaut


1, il exécute l’instruction reportée après “Etiquette2”. S’il
vaut 2, il exécute celle après “Etiquette3”. Si “B5” prend
une valeur supérieure à 2, le programme n’exécute aucune
opération.

BUTTON : Cette instruction permet de lire l’état d’une entrée


en effectuant également la gestion de l’anti-rebond. Il est
possible de tester des boutons qui ferment vers le positif
d’alimentation ou vers la masse, et de sauter à une cer-
taine étiquette si le bouton est appuyé ou s’il ne l’est pas.

Syntaxe : “BOUTON Pin, Down, Delay, Rate, Var, Action,


Label1” Un écran dans Pic Basic Compiler.

ELECTRONIQUE 74 magazine - n° 17
TECHNOLOGIE

pectivement mémorisés dans les cases de mémoire EEPROM


d’adresses 3, 4 et 5.
Caméra N&B avec micro
END : Cette instruction termine l’exécution du programme,
activée par capteur PIR
en faisant entrer le processeur en mode veille.
Micro Caméra N&B activée à l’aide
d’un détecteur de mouvement (PIR).
FOR…NEXT : Les cycles “FOR…NEXT” permettent d’exé-
cuter un certain nombre d’instructions pour un nombre de
fois défini.

Syntaxe : FOR Index = Start TO End [STEP [-] Inc]


[Body]
NEXT [Index]

VEAUTE
La variable qui compte combien de fois doit être répétée
une certaine opération est représentée par “Index” qui pren-
NOU
dra les valeurs qui vont de “Star t” à “End”, en utilisant
comme facteur d’incrémentation la variable “Inc”. Les ins- Elément sensible : CCD 1/3’’. Système : standard CCIR.
tructions qui seront répétées sont celles spécifiées par Résolution : 380 lignes TV. Sensibilité : 0,5 Lux.
“Body”. Alimentation : 12 VDC. BLC : automatique.
Sortie vidéo composite : 1 Vpp/75 Ω.
Voyons un exemple : Sortie audio et vidéo.
Microphone incorporé.
For B6 = 1 to 10 Alarme réglable (3,20 ou 60 secondes).
High 0

SRC pub 02 99 42 52 73 08/2000


Dimensions : 125 x 68 x 42 mm.
Pause 1000
Low 0 BN/PIR. ................................................................................ 1 050 F
Pause 1000
Next B6 ZI des Paluds
Paluds - BP 1241 - 13783 AUB
AUBAAGNE Cedex
Cedex
Tél : 04 42 82 96 38 - Fax
Fax 04 42 82 96 51
Dans le cas présent, les instructions qui sont exécutées I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r
sont les quatre comprises entre “For” et “Next” (High 0,
Pause 1000, Low 0, Pause 1000). L’exécution de ces ins-
tructions met d’abord un “1” logique sur la patte PB0, attend
une seconde et met un “0”, attend encore une autre Syntaxe : “IF Comp THEN Label”
seconde. La variable “Index” est B6, elle est incrémentée
de 1 à 10. Si vous désirez incrémenter de 2 à chaque cycle Si la condition spécifiée par “Comp” se vérifie, alors le pro-
au lieu de générer une incrémentation unitaire, vous pou- gramme continue à la position indiquée par “Label”. La
vez définir la variable “Inc” de cette façon : “For B6 = 0 to condition est établie en comparant une variable avec une
10 step 2”. valeur.

Par exemple : “IF BO > 50 THEN Label1”.


GOSUB : Cette instruction sert à rappeler une sous-routine
qui commence à la position de mémoire définie par “Label”. Si la valeur de la variable B0 est supérieure à 50, alors un
saut est ef fectué à l’étiquette “Label1”. Dans le cas
Syntaxe : “GOSUB Label” contraire, le programme continue normalement et exécute
l’instruction suivante.
L’instruction “GOSUB” est tout à fait identique à “CALL” de
l’assembleur. La sous-routine doit terminer avec une com-
mande “RETURN”. INPUT : Sert à initialiser une patte du port B en entrée.

Par exemple : “INPUT 3” définit la patte 3 du port B comme


GOTO : Cette instruction exécute la même commande que entrée.
l’instruction “GOTO” de l’assembleur, et provoque donc un
saut inconditionnel à une position déterminée.
LET : Avec cette instruction, on associe une valeur à une
variable.
HIGH : Permet de mettre à “1” une patte de sortie du port B.
Voyons quelques exemples :
Par exemple : “HIGH 0” met au niveau logique haut (1) la
patte 0 du port B. “LET B0 = 35” associe à la variable B0 le nombre décimal
35. On aurait pu écrire la même opération : “BO = 35” étant
donné que l’expression “LET” peut être sous-entendue.
IF…THEN : Les instructions “IF…THEN” sont utiles pour tes-
ter une condition et donc sauter à une cer taine partie du Vous pouvez également utiliser des opérations mathéma-
programme si cette condition se vérifie. tiques dans l’association de la valeur à la variable, par

ELECTRONIQUE 75 magazine - n° 17
TECHNOLOGIE

exemple : “B0 = B1 * 2”, ou encore : “Pin2 = 0” qui met la OUTPUT : Sert à définir une patte du port B en sortie.
patte 2 du port B à niveau logique “0”.

Les opérations reconnues par notre compilateur Basic sont PAUSE : Cette instruction permet d’introduire un retard en
les suivantes : millisecondes défini par la variable “Period”.

+ Addition - Soustraction Syntaxe : “PAUSE Period”


* Multiplication ** Multiplication
/ Division // Reste Par exemple, l’instruction : “PAUSE 2000” arrête l’exécu-
MIN Minimum MAX Maximum tion du programme pendant 2 secondes.
& AND I OR
^ OR exclusif &/ NAND
I/ NOR ^/ NOR exclusif. PEEK : Cette instruction lit le registre défini par “Address”
et met son contenu dans la variable “Var”.

A propos de l’opération de multiplication, nous vous rap- Syntaxe : “PEEK Address, Var”
pelons que la multiplication entre deux nombres à 16 bits
donne comme résultat un nombre à 32 bits.
POKE : L’instruction “POKE” sert pour écrire un nombre spé-
L’opérateur “*” restitue les 16 bits les plus bas de ce cifié par “Value” dans un registre défini par “Address”.
nombre à 32 bits.
Syntaxe : “POKE Address, Value”
Ainsi, par exemple : “W1 = W0 * 1000”, exécute la multi-
plication par 1000 de W0 et met le résultat en W1 (les
variables “W” sont en effet à 16 bits). POT : Avec cette instruction vous pouvez lire la position d’un
potentiomètre relié à une patte du port B spécifié par “Pin”.
L’opérateur “**”, par contre, restitue les 16 bits les plus Le potentiomètre doit être relié à cette broche comme le
hauts d’une multiplication à 16 bits. montre le petit schéma de ce paragraphe.

Donc, l’opération : “W2 = W1 ** 1000” met les 16 bits les De cette façon, le Basic
plus haut du résultat de la multiplication dans la variable mesure le temps de
W2. Pin 5-50 kΩ décharge du condensateur
sur le potentiomètre pour
Il est donc possible en utilisant ces deux opérateurs d’ob- relever la résistance du
tenir une multiplication entre deux variables à 16 bits en 0,1 µF potentiomètre même. Le
obtenant le résultat sur 32 bits. terme “Scale” doit être
choisi en fonction de la
constante de temps RC.
LOOKDOWN : Avec cette instruction, vous pouvez recher- Pour de petites valeurs de
cher dans une liste de valeurs (Constant) la présence de la cette constante, “Scale”
valeur “Search”. Si vous trouvez une égalité, l’index de la doit prendre une valeur élevée et vice-versa. Avec les grandes
position est redonné en “Var”. constantes de temps RC, il faudra utiliser des valeurs
basses. La donnée acquise est mémorisée dans la variable
Syntaxe : “LOOKDOWN Search, (Constant, Constant,… ), “Var”.
Var”
Syntaxe : “POT Pin, Scale, Var”

LOOKUP : Si “Index” vaut 0, “Var” prend la valeur de la pre-


mière “Constant”. Si “Index” vaut 1, “Var” prendra la valeur PULSIN : Avec cette instruction, vous pouvez mesurer le
de la deuxième “Constant” et ainsi de suite. temps d’une impulsion.

Syntaxe : “LOOKUP Index, (Constant, Constant,… ), Var” Syntaxe : “PULSIN Pin, State, Var”

où “Pin” indique, comme toujours, quelle patte du port B


LOW : Permet d’imposer un niveau logique bas à une patte doit être utilisée pour effectuer la mesure. “State” indique,
du port B. s’il est à 0, que l’on mesure le temps du niveau logique bas
d’une impulsion, dans le cas contraire, que l’on mesure la
durée du niveau logique haut. “Var” représente la variable
NAP : Met le PIC en mode veille pendant un court intervalle dans laquelle le résultat de la mesure doit être mémorisé.
de temps, en réduisant la consommation de courant du La variable, et donc le résultat, peut être à 8 ou à 16 bits.
microcontrôleur au minimum. La valeur est mesurée en utilisant, comme unité de mesure,
les dizaines de microsecondes.
Syntaxe : “NAP Period”

où “Period”, qui peut prendre les valeurs comprises entre PULSOUT : Cette instruction permet de générer une impul-
0 et 7, met en veille le processeur pour des durées qui sion dont la durée est donnée par “Period” (exprimé en
vont de 18 ms (NAP 0) jusqu’à 2,3 secondes environ (NAP dizaines de microsecondes) sur la patte définie par “Pin”.
7). Puisque l’instruction “PULSOUT” travaille en complémentant

ELECTRONIQUE 76 magazine - n° 17
TECHNOLOGIE

l’état de la patte donnée, son niveau dépendra de l’état ini- REVERSE : Avec cette instruction, si une patte est définie
tial présent sur cette patte avant cette instruction. en entrée, elle est redéfinie en sortie, et vice-versa.

Syntaxe : “PULSOUT Pin, Period” Syntaxe : “REVERSE Pin”.

PWM : Avec cette instruction on peut générer un train d’im- SERIN : Permet de recevoir des données sérielles sur une
pulsions sur une patte donnée par “Pin”. Chaque cycle patte du microcontrôleur. La communication doit être stan-
“PWM” est constitué de 256 pas, le coefficient d’utilisa- dard asynchrone avec des données à 8 bits, sans égalité
tion (duty cycle) de ce train d’impulsion est imposé avec et avec un bit de stop.
“Duty” d’un minimum de 0 % (Duty=0) jusqu’à un maximum
de 100 % (Duty=255). La variable “Cycle” détermine com- Syntaxe : “SERIN Pin, Mode, (Qual, Qual,…) Item, Item,…”
bien de fois le cycle est répété.
“Pin” indique la patte à utiliser pour l’entrée des données.
Syntaxe : “PWM Pin, Duty, Cycle” “Mode” représente la vitesse de transmission, c’est-à-dire
le “baud rate”, qui peut varier de 300 à 9 600 bauds. “Qual”
représentent des caractères qui doivent être acquis avant
RANDOM : Cette instruction génère un nombre aléatoire qui de recevoir les véritables données. “Item” sont les variables
est positionné dans la variable “Var”. où sont chargées les données reçues.

Syntaxe : “RANDOM Var”


Pour vos achats,
READ : Avec cette instruction vous pouvez lire une position
de mémoire EEPROM, spécifiée par “Address”, et en mettre
choisissez de préférence
le contenu dans la variable “Var”. nos annonceurs.
Syntaxe : “READ Address, Var”. C’est auprès d’eux que vous
trouverez les meilleurs tarifs et
RETURN : Est utilisé pour terminer une sous-routine appe-
lée par l’instruction “GOSUB”.
les meilleurs services.

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


MICROCONTRÔLEURS PIC : CARTE DE TEST POUR PIC PROGRAMMATEUR UNIVERSEL POUR PIC.
Pour apprendre de manière simple la technique de programmation des
microcontrôleurs PIC. Interfaçable avec le programmateur pour PIC16C84, Permet de programmer tous les
(Réf. : FT201K). Le demoboard possède les options suivantes : 8 LED, 1 microcontrôleurs MICROCHIP,
display LCD, 1 clavier matriciel, 1 display 7 segments, 2 poussoirs, 2 relais,
1 buzzer piézo ; toutes ces options vous permettent de contrôler à l’exception des PIC16C5x et
immédiatement votre programme. Le kit des PIC17Cxx. Livré avec son
comprend tous les composants, un micro programme : éditeur (exa) +
PIC16C84, un afficheur LCD, le clavier assembleur + programmateur.
matriciel et une disquette contenant des
programmes de démonstrations.
FT215/K (Kit complet) ....468 F FT215/M (Livré monté)..668 F FT284 (Kit complet + câble PC + SFW 284) ......455 F

Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 08/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PRO ............................................ 2 070,00 F
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 77 magazine - n° 17
TECHNOLOGIE

Par exemple avec : “SERIN 1, N2400, (“A”), B0”, le signal PIC BASIC PRO COMPILER qui ajoute de nombreuses fonc-
d’entrée sériel est appliqué à la patte 1 du port B. La com- tions à la version standard, comme la gestion des inter-
munication se passe à 2 400 Bauds (N2400) et, une fois ruptions, la possibilité d’utiliser un tableau, la possibilité
le caractère “A” acquis, la donnée suivante est mise en d’allouer une zone mémoire pour les variables, la gestion
“B0”. plus souple des routines et sauts conditionnels (IF… THEN…
ELSE…). La compilation et la rapidité d’exécution du pro-
gramme compilé sont bien meilleures que dans la version
SEROUT : Avec l’instruction “SEROUT”, vous pouvez trans- standard. Ce compilateur est adapté aux utilisateurs qui
mettre des données sous formes sérielles. souhaitent profiter au maximum de la puissance des PIC et
veulent développer des projets de moyenne et grande impor-
La syntaxe est la suivante : “SEROUT Pin, Mode, Item, tance.
Item…”

“Pin” et “Mode” ont la même signification que dans l’ins- Le mot de la FIN…
truction “SERIN”. “Item” représente les données à envoyer.
Le Cours sur le PIC 16C84, qui s’applique également à son
cadet plus performant mais compatible broche à broche,
SLEEP : Cette instruction met le PIC en mode veille pour un le 16F84, se termine avec cette leçon. Nous espérons vous
certain intervalle de temps donné par “Period” et exprimé avoir emmené plus loin dans la compréhension et la pro-
en secondes (“Period” est une variable à 16 bits et peut grammation de cette petite merveille qu’est le microcon-
donc prendre des valeurs comprises entre 0 et 65 535). trôleur. Certes, ce fut quelquefois ardu mais l’impression-
nant courrier que nous avons reçu prouve que vous avez
Syntaxe : “SLEEP Period” été nombreux à être tentés par l’expérience de la pro-
grammation.

SOUND : Avec cette instruction vous pouvez générer une Bien sûr, le prix d’un compilateur est assez élevé pour un
onde carrée de fréquence donnée. amateur et il n’est pas indispensable. Néanmoins, si vous
voulez développer vos propres applications, nous dirons
Syntaxe : “SOUND Pin, Note, Duration” qu’il sera une aide précieuse pour vous simplifier considé-
rablement la tâche et vous faire gagner du temps.
où “Pin” représente la patte du port B utilisé. “Note” repré-
sente la note à générer (les nombres de 0 à 127 repré- En raison du succès de ce cours, nous avons décidé de le
sentent des notes de différentes fréquences, les nombres rassembler dans un ouvrage qui se nomme tout simplement
de 128 à 255 provoquent la génération d’un bruit blanc). “Microcontrôleurs PIC, le cours” et qui est disponible dans
“Duration” représente la durée de la note générée. la librairie de la revue.
◆ R. N.

TOGGLE : Permet d’inverser le niveau logique présent sur


une patte de sortie. Coût de la réalisation
(si l’on peut dire !)*
WRITE : Avec cette instruction vous pouvez écrire dans la Le compilateur de base “PIC BASIC COMPILER” coûte
mémoire EEPROM. environ 940 F, la version enrichie “PIC BASIC PRO COM-
PILER” coûte environ 2 100 F.
Syntaxe : “WRITE Address, Value”
* Les coûts sont indicatifs et n’ont pour but que de donner une échelle
où “Address” est l’adresse de la position EEPROM à écrire de valeur au lecteur. La revue ne fournit ni circuit, ni composant, ni pro-
et “Value” indique la valeur à écrire dans la case mémoire. gramme. Voir les publicités des annonceurs.

Conclusion
LA LIBRAIRIE
On dispose, avec “PBC”, d’un puissant outil de program-
mation des PIC. Le gain en temps, par rapport à l’écriture
traditionnelle est énorme. Ce programme existe en deux
versions : Réservés, il y a encore quelques années, aux seuls
industriels, les microcontrôleurs sont aujourd’hui à la
PIC BASIC COMPILER qui Permet d’utiliser des fonctions de portée des amateurs et permettent des réalisations
aux possibilités étonnantes. Vous pouvez concevoir
programmation avancées, commandes de saut (GOTO, l’utilisation des microcontrôleurs de deux façons dif-
GOSUB), de boucle (FOR… NEXT), de condition (IF… férentes. Vous pouvez considérer que ce sont des cir-
THEN…), d’écriture et de lecture d’une mémoire (POKE, cuits « comme les autres », intégrés à certaines réa-
SRC pub 02 99 42 52 73 10/2000

lisations, et tout ignorer de leur fonctionnement. Mais


PEEK) de gestion du bus I2E (I2CIN, I2COUT), de contrôle vous pouvez aussi profiter de ce cours pour exploi-
des liaisons séries (SERIN, SEROUT) et naturellement de ter leurs possibilités de programmation, soit pour
toutes les commandes classiques du BASIC. La compila- concevoir vos propres réalisations, soit pour modifier
Réf. : JEA25 le comportement d’appareils existants, soit simple-
tion se fait très rapidement, sans se préoccuper du langage
machine. Cette version conviendra particulièrement bien 90 F + port 35F
ment pour comprendre les circuits les utilisant. Pour
ce faire, il faut évidemment savoir les programmer
mais, contrairement à une idée reçue qui a la vie
aux amateurs et aux développements de projets de petite Utilisez
Utilisez lele bon
bon de
de commande ELECTRONIQUE dure, ce n’est pas difficile. C’est le but de ce Cours.
commande ELECTRONIQUE
et moyenne importance.

ELECTRONIQUE 78 magazine - n° 17

Das könnte Ihnen auch gefallen