Vous êtes sur la page 1sur 39

Programmation des PIC en C

Microcontrleur facile pour lectronicien amateur


PARTIE 1

Noxyben
2007

-1-

WWW.MarocEtude.Com --- PORTAIL DE LA FORMATION PROFESSIONNELLE


AU MAROC

Tlcharger des livres gratuitement sur notre site, en accdant la


rubrique : LIVRES




Vous trouverez aussi sur notre site :
- Modules, Cours, Exercices tlcharger gratuitement.
- Documents Techniques ddies la formation professionnelle : Gnie Electrique,
Gnie Mcanique. Gnie Informatique, Gnie Industriel, Gnie Climatique

"On ne jouit bien que de ce qu'on partage" [Madame de Genlis]

Introduction ................................................................................................................................ 3
Intrt de la programmation en langage C ................................................................................. 4
Choix du compilateur ................................................................................................................. 5
Choix dun PIC : le 16F877 ....................................................................................................... 6
Choix du programmateur ........................................................................................................... 7
Structure du PIC 16F877............................................................................................................ 8
Le cur du PIC : le microprocesseur ..................................................................................... 9
La mmoire .......................................................................................................................... 11
La Pile et le Compteur Programme ...................................................................................... 13
Les Ports dEntres/Sorties gnraux : PORTA, PORTB, PORTC, PORTD, PORTE....... 15
Le Port Parallle Esclave (PSP : Parallel Slave Port) .......................................................... 17
Le circuit de gnration dhorloge ....................................................................................... 18
Le TIMER0 .......................................................................................................................... 19
Le TIMER1 .......................................................................................................................... 20
Le TIMER2 .......................................................................................................................... 22
Les modules CCP1 et CCP2................................................................................................. 23
Le convertisseur Analogique Digital 10bits :.................................................................... 25
LUSART ............................................................................................................................. 27
Le SSP, Synchronous Serial Port ......................................................................................... 29
La logique de RESET........................................................................................................... 31
LIn-Circuit Debugger.......................................................................................................... 33
Low-Voltage Programming et ICSP (In-Circuit Serial Programming) ............................... 34
Les Bits de Configuration .................................................................................................... 36
Les Interruptions .................................................................................................................. 36
Le mode SLEEP ................................................................................................................... 37
Brochage du PIC16F877 .......................................................................................................... 38
Conclusion................................................................................................................................ 38

-2-

Introduction
Dans un pass pas trs lointain, llectronique pour les amateurs (clairs) se
rsumait essentiellement aux circuits analogiques et ventuellement en logique
cble (portes logiques, compteurs, registres dcalage). Lusage des
microprocesseurs tait plutt rserv un public averti dingnieurs sachant les
interfacer avec diffrents circuits priphriques (eprom, ram) et programmer en
assembleur.
Au fil du temps on a vu apparatre de nouveaux circuits regroupant dans une seule
puce le microprocesseur et ses circuits priphriques : les microcontrleurs.
On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse dent
lectrique
Loffre en microcontrleurs sest dveloppe dautant : plus de priphriques
intgrs, capacit de calcul accrue, plus de mmoire embarque. Il y a maintenant
de nombreux fabricants de microcontrleurs, possdant chacun plusieurs gammes
allant du circuit gnraliste , vritable couteau suisse lectronique, la puce
spcialise ddie par exemple, la rgulation de vitesse dun moteur de ventilateur.
La voie royale pour tirer le maximum des performances de ces circuits est toujours la
programmation en assembleur. On accde alors au moindre bit enfoui dans
nimporte quel registre du circuit. Cela ncessite nanmoins un investissement en
temps consquent, lassembleur ntant pas un langage trs naturel . De plus,
dun constructeur lautre, voire dun circuit lautre dans la mme gamme, il existe
des diffrences qui obligent rapprendre tout ou partie du langage lorsque lon
change de microcontrleur. Cest un investissement intressant pour un
professionnel qui cherche produire un code optimis sur la puce la moins chre
possible, mais pnible pour un amateur qui ne dispose que de relativement peu de
temps pris sur ses loisirs.
Heureusement, avec la monte en puissance des microcontrleurs, on voit
apparatre actuellement des compilateurs en langage C (voire mme C++) qui
permettent de gagner un temps considrable pour le dveloppement et le dbogage
des programmes.
Pour tous ceux qui se sont retrouv largu sur le bord du chemin cause de ces
 de microcontrleurs, cest mon avis une formidable opportunit de
sauter dans le train de llectronique numrique et dapprivoiser ces tranges petites
btes. Et pourquoi pas un ampli tubes pilot par microcontrleur ? Les capacits
tonnantes de ces circuits vous ouvrent un espace de crativit infini. Ce serait
vraiment dommage de se passer de leurs services
Une fois la dcision prise je vais me lancer dans les micros ! se pose la question
du comment. On trouve sur internet toutes les informations ncessaires, la difficult
serait plutt de les trier. Vous pouvez commencer par exemple par lire la
documentation de Microchip sur la gamme de PIC mid-range , cest une
excellente ide, mais a va vous prendre du temps (plus de 800 pages !)
Dans le but de vous simplifier la tche, je vais essayer dans le prsent ouvrage de
synthtiser quelque peu ces informations. Et pour viter la frustration du je saurais
utiliser un microcontrleur PIC, mais avant je dois me taper un bouquin de 1000
pages je vais tcher dutiliser une approche progressive permettant de, trs
rapidement, crer de vritables petits circuits.

-3-

Intrt de la programmation en langage C


Tout dabord, les inconvnients : Un compilateur C produit du code plus volumineux
et moins performant que ce que sait faire un bon programmeur en assembleur. De
plus, selon le compilateur employ, on naccde plus difficilement, voire pas du tout
certaines ressources de bas niveau. Et nayant plus besoin de plonger les mains
dans le cambouis, on risque galement de moins approfondir ltude du
microcontrleur utilis. Un dernier point : les compilateurs C sont souvent payants.
En contrepartie, il y a de sacrs avantages : connatre la programmation en C permet
de crer des programmes sur de multiples plateformes, commencer par les PC.
Autrement dit, les connaissances utilises sont en grande partie rutilisables. Le C
est un langage de haut niveau , compar lassembleur, qui permet dcrire des
programmes nettement plus intelligibles et donc plus faciles relire et corriger ou
modifier. Le compilateur contrle la cohrence du code au moment de la compilation
et signale bon nombre derreurs, qui seront autant de bogues en moins corriger. Le
compilateur prend en charge la gestion dun certain nombre de mcanismes
fastidieux : par exemple, pas besoin de spcifier la page mmoire dans laquelle on
veut crire, le compilateur sen charge ! De plus, certains compilateurs permettent
tout de mme daccder des ressources de bas niveau, voir mme dinsrer dans
le code des portions dassembleur. A vrai dire, moins dtre un pro de
lassembleur, vous pourrez certainement crer avec un bon compilateur C un code
plus propre et plus robuste, en nettement moins de temps. Et, cerise sur le gteau, le
portage dun de vos programmes sur un nouveau microcontrleur sera nettement
simplifi.
Pour bien fixer les ides sur la diffrence de niveau de langage entre assembleur et
C, je vais donner un exemple. Soit dcrire une action simple : ouvrir la fentre de la
pice dans laquelle vous tes actuellement.
En assembleur a donnerait :
-

soulever pied droit


avancer pied droit
poser pied droit
soulever pied gauche
avancer pied gauche
poser pied gauche
soulever pied droit
avancer pied droit
.
Slectionner bras gauche
Soulever bras
Avancer bras
Prendre poigne fentre dans main gauche
Tourner poigne de -90
Tirer poigne
Etc.

En C ce serait plutt :
-

Ouvrir la fentre

Et cest le compilateur qui se chargerait de traduire la fonction ouvrir la fentre en


instructions lmentaires comprhensibles par le microcontrleur.
Alors, merci qui ? Merci le C !
-4-

Choix du compilateur
Il y a sur le march plusieurs compilateurs C. Le microcontrleur tudi ici tant un
PIC Microchip, la solution la plus vidente consiste voir ce que propose Microchip :
Si on nous propose bien des compilateurs, ceux-ci sont payants et ne couvrent que
le haut de la gamme des PIC, ce qui est un peu luxueux pour un amateur dsirant
sinitier lutilisation de ces petites btes.
Dautres diteurs proposent galement des compilateurs dont certains sont trs
complets, livrs avec des bibliothques simplifiant lutilisation des priphriques du
PIC. Malheureusement, ici encore cest assez cher, jusqu plusieurs centaines
deuros pour un environnement de dveloppement intgr couvrant lessentiel de la
gamme des PIC.
Heureusement il existe des alternatives moins onreuses. Par exemple, en
cherchant bien sur internet on peut dnicher des compilateurs freeware en ligne de
commande.
Mon choix sest port sur le compilateur BoostC de la socit SourceBoost, pour les
raisons suivantes : Il existe une version gratuite avec quelques limitations mineures
(taille du code gnr) permettant de se faire la main et de crer des applications
personnelles, les versions payantes ( des tarifs trs raisonnables) permettent de
crer des applications commerciales et davoir accs au code source des
bibliothques. BoostC est livr avec un environnement de dveloppement intgr
facilitant le dveloppement dapplications. Le langage est du C ANSI , avec
toutefois quelques extensions destines tirer pleinement parti de toutes les
spcificits des microcontrleurs PIC. Et surtout, BoostC reste assez proche du
matriel : on peut trs facilement accder tous les bits dun registre quelquonque.
On peut faire lessentiel de ce quil est possible de faire en assembleur, avec les
contraintes en moins. Ce qui sous-entend nanmoins de sintresser dassez prs
la structure du PIC et de des diffrents sous-ensembles. A noter que SourceBoost
propose galement un compilateur C++ pour PIC, ainsi quun compilateur Basic.
http://www.sourceboost.com

-5-

Choix dun PIC : le 16F877


Pour apprendre, la meilleurs solution est de se faire la main sur du concret. On va
donc tudier un vrai microcontrleur, sachant que ce qui aura t vu sera assez
facilement transposable dautres PIC. Le 16F877 est un PIC de la srie Midrange qui se prte particulirement bien la programmation en C. Les PIC de la
srie infrieure sont un peu justes en performance et en capacit mmoire pour
accueillir un programme issu dun compilateur C ; mieux vaut les programmer en
assembleur. Les gammes suprieures (16 ou 32 bits) supportent sans problme la
programmation en C, mais comme se sont des circuits plus complexes (et plus
chers), commenons par quelque chose de plus simple et de plus didactique. Le
16F877 (F comme Flash ) convient parfaitement : mmoire programme de taille
suffisante (8K), nombreux priphriques intgrs, frquence de fonctionnement
jusqu 20 MHz. Tout ce quil faut pour crer des applications sympa en samusant !

-6-

Choix du programmateur
Une fois le programme cr, il faudra le transfrer dans la mmoire programme du
PIC. Pour cela, il existe plusieurs solutions :
Vous pouvez construire votre propre programmateur. De nombreuses variantes
existent, il suffit de faire une recherche sur le net pour sen rendre compte. Ces
programmateurs se raccordent sur un port srie RS232 ou parallle. A vrai dire la
majorit des circuits ont un air de famille. Pas sr nanmoins que tous fonctionnent.
Si vous vous engagez dans cette voie, un des design les plus rigoureux est
certainement celui propos par Microchip dans une de ses Application Note (
voir sur le site de Microchip).
Vous pouvez aussi acheter un programmateur tout fait, en tat de marche. Il en
existe pour port srie, parallle et, USB ! Sachant que les ports srie RS232 et
parallle tendent disparatre au profit de lUSB, cette dernire option, bien que
souvent un peu plus onreuse semble tre un bon choix. Il existe en outre des outils
permettant la fois de programmer le microcontrleur, mais aussi de le dboguer en
temps rel et tout a avec le microcontrleur en place dans son circuit dapplication
(voir les outils proposs par Microchip ce sujet).
Enfin, il y a la solution du programmateur en kit. Aprs mtre lanc dans un premier
temps dans la ralisation dun programmateur home made (dcrit dans un livre
fort onreux) qui na jamais daign fonctionner, je me suis tourn vers cette dernire
solution : Un programmateur en kit Velleman K8076 pour une quarantaine deuros
(c'est--dire moins cher que le prix des composants de celui que jai vainement tent
de raliser moi-mme), quip dun support ZIF (Zro Insertion Force). Il permet en
outre la programmation in-circuit , et est livr avec un logiciel de transfert
compatible avec lessentiel de la gamme des PIC. Des mises jour tant disponibles
sur le site de Velleman pour les circuits les plus rcents. Il faut procder au montage
soi-mme, mais a marche du premier coup ! (du moins si vous tes rigoureux au
moment du montage). Le seul inconvnient : il sagit ici dun programmateur
raccorder sur port RS232, donc impossible raccorder sur un pc portable rcent. Un
jour ou lautre il faudra bien passer par lUSB
http://www.velleman.be

-7-

Structure du PIC 16F877


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Timing
Generation
OSC1 / CLKIN
OSC2 / CLKOUT

Oscillator
Start-up Timer
Power-on
Reset

MUX

ALU
8

Watchdog
Timer

W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

Le schma ci-dessus reprsente les diffrents modules du PIC 16F877. Ca a lair un


peu complexe au premier abord, une visite guide nous permettra dy voir plus clair.

-8-

Le cur du PIC : le microprocesseur


Un microcontrleur, cest avant tout un microprocesseur, une unit de traitement
logique qui effectue lune aprs lautre les oprations contenues dans un
microprogramme stock en mmoire (la mmoire FLASH). On peut le voir sur le
schma (en jaune ci-dessous), il est essentiellement compos de l ALU (Unit
Arithmtique et Logique) qui effectue les oprations sur les donns, le registre de
travail W reg. , le multiplexeur MUX , le registre de statut status reg , le
registre FSR reg utilis pour ladressage indirect (en assembleur), le
multiplexeur dadresse Addr mux , le compteur programme Program Counter
qui pointe les instructions excuter, la pile 8 niveaux 8 level Stack , le registre
dinstruction Instruction reg , ainsi que les diffrents bus qui relient tous ces
lments entre eux.

13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

-9-

On nentrera pas ici dans les dtails du fonctionnement dun microprocesseur ; cest
trs intressant connatre, indispensable mme si on programme en assembleur.
Mais en ce qui nous concerne, on veut programmer en C, et cest donc le
compilateur qui se chargera de traduire notre code source en instructions de basniveau pour le microprocesseur contenu dans le PIC. Cest l le principal avantage
de la programmation en C : on prend du recul par rapport au fonctionnement intime
du systme. On se concentre davantage sur ce que fait le programme que sur
comment fonctionne le programme .
On va tout de mme jeter un petit coup dil sur le schma ci-dessus, histoire de
comprendre quelques particularits du PIC, droutantes au premier abord. On
saperoit que les bus autour de lALU ont un format de 8 bits : le PIC 16F877
travaille sur des donnes de 8 bits, cest donc bien un microcontrleur 8 bits !
(logique).
Pourquoi donc ce cas le Program Bus est-il, lui, large de 14 bits ? Cest simple,
certaines instructions peuvent tre codes sur plus de 8 bits. Si ce bus ntait large
que de 8 bits, il faudrait plus dun cycle dhorloge pour transmettre ces instructions,
alors quavec un bus plus large, a passe en une fois. De plus, la mmoire
programme, indpendante du bus de donnes, est elle-mme adresse avec un bus
large : le Program Counter , qui pointe sur linstruction en cours, une largeur de
13 bits. Et avec 13 bits on peut coder environ 8000 adresses. Autrement dit, on
8000 cases de mmoire programme pouvant contenir chacune 1 instruction
complte. Cette architecture avec bus de donnes et de programme spars
(architecture Harvard ) permet donc doptimiser le fonctionnement du PIC. La
plupart du temps, votre PIC excute une instruction et charge la suivante
simultanment en un seul cycle dhorloge. En comparaison, un microcontrleur 8 bits
construit selon larchitecture concurrente Von Neumann (mmoire programme et
donnes relis au microprocesseur par un unique bus 8 bits) devra faire plusieurs
cycles pour chercher les instructions en mmoire (en plusieurs fois si cest une
instruction longues) et les excuter ensuite. En consquence, frquence dhorloge
gales, un microprocesseur Harvard sera plus rapide quun Von Neumann .

- 10 -

La mmoire
Sur le PIC, il ny a pas une mais trois mmoires :
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

La Mmoire Programme, de type FLASH sur le 16F877. Capacit : 8K. Cest dans
celle-ci quest stock le programme du PIC. Aprs compilation de votre code, le
compilateur gnre un fichier .hex , une suite de codes hexadcimaux. Celui-ci
est transfr ensuite dans la mmoire programme du PIC laide du programmateur.
Cette mmoire nest pas relie au bus de donnes (DATA Bus), sa vocation est de
stocker le programme du PIC, mais PAS les variables de votre programme. Le gros
avantage de la mmoire FLASH cest que vous pouvez la rcrire, donc implanter un
nouveau programme dans le PIC. Les PIC existent galement avec dautres versions
de mmoire programme (non-FLASH), certaines ne pouvant tre programme
quune seule fois.
- 11 -

La Mmoire RAM, qui fait partie de la zone dadressage des donnes. Elle
comprend tous les registres spciaux permettant de contrler le cur du PIC ainsi
que ses priphriques. Elle contient galement des cases mmoires usage
gnrique dans lesquelles pourront tre stockes les variables de nos futurs
programmes.
La Mmoire EEPROM. LEEPROM est plutt une mmoire de stockage de donnes
long terme, alors que la RAM est utilise pour les variables du programme. Sur le
PIC 16F877, on a 256 octets dEEPROM disponible. Les mmoires de type
EEPROM sont limites en nombre de cycles deffacement / criture. Ce nombre de
cycle est tout de mme de lordre du million pour le PIC, mais si on lutilisait pour
stocker des variables modifies plusieurs milliers de fois par secondes, cette limite
pourrais tre atteinte plus vite quon ne le crot. Par contre, pour stocker toute les
heures une mesure de temprature, cest tout bon !

- 12 -

La Pile et le Compteur Programme


On les a dj voqus dans le paragraphe le cur du PIC : le microprocesseur ,
mais puisquon vient de parler de la mmoire, une petite remarque simpose.
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 13 -

Le Program Counter ou PC est le compteur qui pointe dans la mmoire


programme la prochaine instruction excuter. Il est li la pile systme (Pile =
Stack en anglais) qui est sur le PIC 16F877 une pile 8 niveaux. Quest ce que cela
signifie ? Simplement quon peut avoir jusqu' 8 niveaux dimbrication dappels de
sous-programme ou fonctions. Ce point est surtout critique pour la programmation en
assembleur : un sous-programme peut appeler un autre sous-programme qui appelle
son tour un autre sous-programme jusqu une profondeur de 8. Au-del,
cest la cata : votre programme est bugg et va faire nimporte quoi, tant donn que
le PIC ne peut dpiler que 8 niveaux. Le Compteur Programme narrivera pas
revenir la racine des appels. La programmation en C apporte l un peu de
souplesse : un bon compilateur veillera pour vous ce que la limite de 8 niveaux ne
soit pas dpasse, quitte recopier localement une fonction pour viter un saut
ladresse mmoire o cette fonction est dj prsente. Au dtriment donc de
loccupation en mmoire. Ainsi, mieux vaut-il viter de crer trop de niveaux
dimbrication dappels de fonctions dans nos programmes.

- 14 -

Les Ports dEntres/Sorties gnraux : PORTA, PORTB, PORTC,


PORTD, PORTE
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 15 -

Le PIC 16F877 est gnreusement dot de 5 ports, ce qui est plutt confortable. Un
examen plus attentif du schma ci-dessus nous montre cependant que les lignes
dentres/sorties (les pattes du composant) correspondantes sont galement
utilises par dautres modules du PIC. Ainsi, les pattes du PORTA servent galement
au convertisseur Analogique/Numrique, les pattes du PORTD au Port Parallle
Esclave, etc. Il faudra faire des choix au moment de la conception du schma
lectronique ! On voit galement que les ports B, C et D ont 8 lignes dentre/sortie,
alors que le port A nen a que 6 et le port E que 3. Ils sont tous connects au bus de
donne (DATA BUS), on pourra donc librement les adresser pour y lire ou crire des
donnes, et donc allumer des LED, commander des moteurs pas pas, des
afficheurs LCD, lire les donnes envoyes par un clavier ou un bouton poussoir
On peut configurer les entres/sorties de chaque port en entre ou en sortie, grce
un registre spcial ddi chaque port.
De plus, un des ports (le port B) possde des rsistances de pull-up internes qui
peuvent tres valides ou non par logiciel.

- 16 -

Le Port Parallle Esclave (PSP : Parallel Slave Port)


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

Le Port Parallle Esclave est un port 8 bits permettant dinterfacer le PIC avec, par
exemple, un autre microprocesseur. Les donnes transitent via les lignes PSP0
PSP7, qui physiquement utilisent les mmes broches que le PORTD. Le flux de
donnes est contrl par les lignes RD, WR et CS qui correspondent aux broches du
PORTE.
Cest le microprocesseur externe qui est le chef dorchestre : il valide notre PIC par la
ligne CS (Chip Select), et indique au PIC sil lit ou crit grce aux lignes RD (Read) et
WR (Write). Do lappellation de port parallle ESCLAVE. Esclave, puisque cest le
microprocesseur externe qui donne les ordres, notre PIC ne fait quexcuter.
- 17 -

Le circuit de gnration dhorloge


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

Pour faire battre le cur de notre PIC, on a besoin dun circuit de gnration
dhorloge. Avec les PIC Mid Range , plusieurs options possibles : circuit RC
(rsistance + condensateur), ou circuit rsonateur cramique, ou oscillateur
quartz... Le mode de fonctionnement est dtermin au moment de la programmation
du PIC par des bits de configuration qui sont en fait des emplacements de
mmoire non-volatile. Pour gnrer un cycle dinstruction , il faut 4 cycles
dhorloge. Autrement dit, si votre quartz bat 20 MHz, les instructions du programme
sexcutent une cadence de 5 MHz.

- 18 -

Le TIMER0
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Timing
Generation
OSC1 / CLKIN
OSC2 / CLKOUT

Oscillator
Start-up Timer
Power-on
Reset
Watchdog
Timer

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

Dans le pass, le Timer0 sappelait RTCC. Cest un compteur 8 bits (0 255) simple,
qui compte des impulsions soit internes, soit dune source externe. On peut par
ailleurs lui appliquer une pr-division programmable entre 1 et 256.
On peut librement lire ou crire dans le registre de comptage associ. On peut donc
le pr charger avec une valeur, partir de laquelle il comptera jusqu atteindre 255.
Une fois le registre de comptage plein, il peut gnrer une interruption.
tant donn quune fois configur il fonctionne quasi-indpendamment du
microprocesseur, on pourra sen servir comme base de temps.

- 19 -

Le TIMER1
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Timing
Generation
OSC1 / CLKIN
OSC2 / CLKOUT

Oscillator
Start-up Timer
Power-on
Reset
Watchdog
Timer

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 20 -

Le Timer1 fonctionne sur le mme principe que le Timer0, mais avec un registre de
comptage plus gros : 16 bits au lieu de 8, ce qui tend notablement ces capacits de
comptage. De plus, il possde un mode de fonctionnement particulier : on peut
lutiliser en association avec un des modules CCP (modules de capture et de
comparaison, voir plus loin). Voyons rapidement le mode capture : lorsquun
vnement survient sur lentre du module CCP, la valeur du Timer1 est lue. Comme
on connat la frquence de comptage, on peut en quelque sorte chronomtrer la
survenue dun vnement. Exemple : si lentre du module CCP est relie un
capteur qui dlivre une impulsion chaque tour de larbre dun moteur, la valeur
contenue dans le registre du Timer1 au moment de limpulsion est le reflet de la
vitesse de rotation.
Voyons maintenant le mode comparaison : Le Timer1 compte en continu, et une
interruption est gnre chaque fois que la valeur du compteur est gale celle
quon aura pr charge dans le registre de comparaison. On peut sen servir pour,
par exemple, gnrer un signal carr.

- 21 -

Le TIMER2
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Timing
Generation
OSC1 / CLKIN
OSC2 / CLKOUT

Oscillator
Start-up Timer
Power-on
Reset
Watchdog
Timer

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

Le Timer2 a un fonctionnement diffrent des Timer0 et Timer1. Cest un compteur 8


bits avec pr-diviseur et post-diviseur. On sen sert pour gnrer des signaux carrs,
ou, en association avec le module CCP, des signaux PWM.
PWM tant lacronyme de Pulse Width Modulation ou, en franais, Modulation de
Largeur dImpulsion (MLI).

- 22 -

Les modules CCP1 et CCP2


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 23 -

On en a parl au moment de voir les Timer1 et Timer2 ; on a deux modules CCP sur
le PIC. CCP pour Capture, Compare, PWM .
En association avec les deux timers, ils vont nous permettre de gnrer des signaux
modulation de largeur dimpulsion (PWM) pour, par exemple, faire varier la vitesse
dun moteur courant continu, rguler le courant (et donc la luminosit) dans une
ampoule
Ils vont galement nous permettre de comparer loccurrence dun signal en entre
avec la valeur du compteur Timer1, ralisant ainsi un chronomtrage de lvnement
en question (par exemple : indication de la frquence de rotation dun moteur).
Ils vont encore nous permettre de gnrer des signaux carrs, et cela de manire
quasi-indpendante du reste du microcontrleur qui pourra continuer vaquer ses
occupations.

- 24 -

Le convertisseur Analogique Digital 10bits :


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 25 -

Le convertisseur A/D convertit le signal analogique prsent sur une de ses 8 entres
en son quivalent numrique, cod sur 10 bits. Les pattes AN2 et AN3 peuvent tre
utilises comme rfrences de tension ou comme entres analogiques standard, les
rfrences de tension tant dans ce dernier cas prises sur les tensions
dalimentations du PIC : VDD et VSS. (VDD pour le + et VSS pour le -).
On peut donc numriser jusqu 8 signaux analogiques. Pas tous en mme temps,
bien sr, tant donn quil ny a quun seul module de conversion pour 8 signaux
dentre multiplexs. Mais si vos signaux nvoluent pas trop vite (frquence basse),
vous pouvez numriser le signal sur la patte AN0, puis celui sur AN1
Les paramtres important dont il faudra tenir compte sont :
La rsolution du convertisseur. Ici 10 bits, donc meilleur quun convertisseur 8
bits, mais moins prcis quun 12 bits
Le temps de conversion.
La rapidit dvolution des signaux prsents sur les entres (leur frquence
pour des signaux priodiques).
Le nombre de signaux numriser.
En effet, pour un signal priodique, la frquence dchantillonnage doit tre au moins
deux fois suprieure la frquence du signal ; mais a tout le monde le sait dj,
non ?

- 26 -

LUSART
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 27 -

LUSART ou Universal Synchronous Asynchronous Receiver Transmitter est lun des


deux modules de communication srie du PIC ou SCI en anglais (Serial
Communication Interface).
Comme son nom lindique, elle peut tablir une liaison synchrone ou asynchrone,
recevoir et transmettre des donnes, selon la manire dont elle est configure.
Cest son ct je peux tout faire qui lui vaut lattribut Universal .
Concrtement, lUSART permet de communiquer avec le reste du monde : un
ordinateur ou tout autre matriel quip dune interface srie RS232, des circuits
intgrs convertisseurs Numrique/Analogique ou Analogique/Numrique, des
EEPROMs srie
LUSART peut tre configure selon 3 modes :
Asynchrone (Full Duplex)
Synchrone Matre (Half Duplex)
Synchrone Esclave (Half Duplex)

- 28 -

Le SSP, Synchronous Serial Port


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 29 -

Le module SSP est la deuxime interface de communication srie du PIC.


En fait, il sagit dun port Matre, donc lappellation exacte est plutt MSSP pour
Master Synchronous Serial Port .
Il est utile pour communiquer avec dautres modules ou microcontrleurs, des
EEPROMs sries, des registres dcalage, des afficheurs, des convertisseurs A/N
ou N/A
Il peut fonctionner dans deux modes de communication :
Le mode SPI (Serial Peripheral Interface)
Le mode IC (Inter-Integrated Circuit)
Lutilisation de lun de ces deux modules de communication, USART ou MSSP
dpend donc essentiellement du protocole de communication ncessaire.
Schmatiquement, lUSART est bien adapte pour communiquer avec le reste de
lunivers via la clbre interface RS232 alors que le MSSP permet de communiquer
aisment avec dautres composants lectroniques interface srie.
Une dernire remarque par rapport aux interfaces de communication : certains PIC
(mais pas le 16F877) intgrent une interface USB ou un module de communication
Ethernet.

- 30 -

La logique de RESET
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 31 -

La logique de reset comprend plusieurs modules :

Le POWER-UP TIMER : cest une temporisation au dmarrage. Lors dun


dmarrage ou redmarrage suite un reset, cette temporisation permet la
tension dalimentation VDD datteindre une valeur suffisante et stable. On
vite ainsi au PIC de subir les invitables phnomnes transitoires la mise
sous tension. Cette temporisation fonctionne avec son propre circuit RC
interne.
LOSCILLATOR START UP TIMER : une fois la temporisation du Power-Up
Timer coule, cest au tour de lOscillator Start Up Timer de prendre le relais.
Il sagit dune temporisation dont le but est de permettre au circuit de
loscillateur de dmarrer proprement. En effet, de la mme manire que la
tension dalimentation met un certain temps se stabiliser, loscillateur a
besoin de temps pour dmarrer et se stabiliser
Le POWER-ON RESET : la mise sous tension, lorsque VDD est dtect, ce
module gnre une impulsion de reset, ce qui lance le Power-Up Timer et
remet un certain nombre de registre du PIC dans un tat dtermin.
Habituellement on utilise un circuit externe rsistance / condensateur pour
gnrer ce pulse de reset. Mais sur le PIC, condition que lapparition de
la tension dalimentation soit assez nergique vous pouvez vous passer de
ce circuit RC. On ramne juste la tension dalimentation travers une
rsistance approprie sur la patte MCLR (Memory CLeaR).
Le BROWN-OUT RESET : ce module surveille la tension dalimentation. Si
celle-ci descend en-dessous dune valeur minimum pour laquelle le
fonctionnement correct du PIC ne peut plus tre assur, le module Brown-Out
Reset redmarre (reset) le PIC.
Le WATCHDOG TIMER : Cest le Chien de garde (watchdog en anglais)
du PIC. Sil est utilis, ce timer doit tre priodiquement remis zro par le
programme, car, sil dborde , il place le PIC en mode Reset. Ainsi, en cas
de plantage de votre programme le PIC est redmarr automatiquement.

- 32 -

LIn-Circuit Debugger
13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

Ce module permet de simplifier la phase de dbogage des programmes. Une fois


activ, il donne accs des fonctionnalits avances de dbogage. Celles-ci sont
exploites par le module ICD de MPLAB, lenvironnement de dveloppement intgr
de Microchip.
Vous pouvez alors suivre en live lvolution de votre programme entrain de
sexcuter sur le PIC, poser des points darrt, lire le contenu des registres, etc.

- 33 -

Low-Voltage Programming et ICSP (In-Circuit Serial Programming)


13

DATA Bus

Program Counter

PORTA

FLASH
Program
Memory

Program
Bus

RAM
File
Registers

8 Level Stack
( 13-bit )

14

RAM Addr (1)

Direct Addr

AN0
AN1
AN2 / VrefAN3 / Vref+
T0CKl
AN4 / SS

RB0 /
RB1
RB2
RB3 /
RB4
RB5
RB6 /
RB7 /

INT

RC0 /
RC1 /
RC2 /
RC3 /
RC4 /
RC5 /
RC6 /
RC7 /

T1OSO / T1CKL
T1OSI / CCP2
CCP1
SCK / SCL
SDI / SDA
SD0
TX / CK
RX / DT

RD0 /
RD1 /
RD2 /
RD3 /
RD4 /
RD5 /
RD6 /
RD7 /

PSP0
PSP1
PSP2
PSP3
PSP4
PSP5
PSP6
PSP7

PORTB

Addr MUX

Instruction reg

RA0 /
RA1 /
RA2 /
RA3 /
RA4 /
RA5 /

Indirect
Addr

FSR reg
STATUS reg

PGM

PGC
PGD

8
PORTC
3

Power-up
Timer
Instruction
Decode &
Control

Oscillator
Start-up Timer

Timing
Generation

Watchdog
Timer

OSC1 / CLKIN
OSC2 / CLKOUT

Power-on
Reset

MUX

ALU
8
W reg

PORTD

Brown-out
Reset
In-Circuit
Debugger
Low-Voltage
Programming

Parallel Slave Port

PORTE
MCLR

VDD, Vss

RE0 / AN5 / RD
RE1 / AN6 / WR
RE2 / AN7 / CS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous
Serial Port

USART

Note 1 : High order bits are from the STATUS register

- 34 -

A quoi peut bien servir ce module Low-Voltage Programming ?


Tout dabord, voyons comment le PIC est programm habituellement. Contrairement
des modles de microcontrleurs plus anciens qui taient programms en
parallle (les octets taient transfrs dans la mmoire programme sur 8 lignes),
les modles rcents de PIC se programment en srie. C'est--dire que les octets
sont transmis bits aprs bits sur un nombre restreint de lignes. Le grand avantage
cest quon peut, moyennant certaines prcautions, programmer le PIC alors quil est
dj implant sur le circuit imprim de son application ! Pas besoin de le retirer de
son support chaque fois (en risquant de tordre des pattes) pour le placer sur le
programmateur. Cest ce quon appelle lICSP : In-Circuit Serial Programming, ou
autrement dit, en franais, Programmation Srie En Circuit. On programme le PIC
dj implant, en mode de transfert srie.
Comment se passe la programmation ICSP ?
- On alimente le PIC avec sa tension de programmation, gnralement 13V
- On utilise pour transfrer le programme les lignes RB6 (qui devient
lhorloge cadenant le transfert) et RB7 (pour transfrer les donnes en
criture ou lecture).
On donc besoin dune tension de programmation, plus leve que la tension
dalimentation normale.
Cest pour le cas standard, mais grce au module Low Voltage Programming , il y
a moyen de faire la mme chose en ayant pas besoin de la tension de
programmation.
Il y a galement un autre moyen de programmer notre PIC : lutilisation dun Boot
loader. Quest-ce donc ? Un boot loader (traduction littrale : chausse-pied ) est
un petit bout de programme que lon implante dans la mmoire du PIC et qui va
charger le programme que vous voulez implanter dans la mmoire du PIC. Ici,
plus besoin de programmateur. Si votre PIC est quip dune interface srie, ou
USB, ou autre, vous pouvez transfrer le programme via cette interface. Cest le boot
loader, en coordination avec le logiciel ad hoc sur votre ordinateur, qui va se charger
du transfert et de lcriture en mmoire programme. Le boot loader reste ensuite
inactif dans la mmoire du PIC pendant que votre programme sexcute
normalement. Au prochain dmarrage du PIC, si le boot loader dtecte une nouvelle
tentative de transfert de programme sur linterface slectionne (srie, USB,) il le
charge et remplace lactuel. Sinon il passe la main au programme actuel.
Ce mcanisme est surtout trs pratique dans les phases de prototypage o de
nombreux transferts son ncessaires, dautant plus que la vitesse de transmission
des donnes est beaucoup plus rapide quavec un programmateur.
Ici encore, la programmation se fait sur un mode srie, mais comme on ne passe pas
par un programmateur on pas accs la tension de programmation. Lutilisation du
module Low Voltage Programming prends ici tout son sens.

- 35 -

Les Bits de Configuration


Pour customiser notre PIC, il existe ce que lon appelle les bits de configuration.
Ce sont des bits spciaux de la mmoire programme qui permettent de spcifier le
mode de fonctionnement dun certain nombre de fonctionnalit du PIC. savoir :
- Loscillateur : utilisation dun quartz ou dun circuit RC, plage de frquence
- Utilisation ou nom du Watchdog
- Utilisation de la patte MCLR ou non
- Validation ou non du Power-Up Timer
- Validation ou non du Brown-Out Reset
- Protection de la mmoire programme et de la mmoire EEPROM
Ces bits sont programms au moment du transfert du programme dans le PIC.

Les Interruptions
Un certain nombre dvnements sont susceptible de gnrer des interruptions : fin
de conversion de signal analogique, criture en mmoire EEPROM termine,
dbordement de Timer, USART, SSP, changement dtat dune entre de port.
Si votre programme comprend une routine de gestion de cette interruption, le
droulement normal sinterrompt et la routine de gestion de linterruption est
excute.
Le gros avantage de ce mcanisme, cest que le microcontrleur peut vaquer ses
occupations sans tre oblig de scruter en permanence si telle ou telle action a eu
lieu. Par exemple, si un clavier est raccord au PIC, pas besoin de surveiller en
permanence si une touche a t active. Si cest le cas, le changement dtat sur le
port gnrera une interruption. Le PIC sera ainsi mis au courant quun changement a
eu lieu et excutera les actions adquates.
Cest un peu comme lalarme sonore de votre micro-onde : celui-ci vous signale par
un BiiiP que le temps de cuisson est coul, pas besoin de rester les yeux rivs sur
la vitre avec un chronomtre en main.

- 36 -

Le mode SLEEP
Le mode Sleep est un mode de fonctionnement particulier du PIC dans lequel celui-ci
rduit sa consommation lectrique au minimum. Il est presque entirement
dsactiv, son oscillateur est teint. Le PIC est en mode veille !
Pour sortir de cette torpeur, il faut un des vnements suivant :
- Reset du circuit, ou
- Rveil par le Watch-Dog Timer (ci celui-ci est activ, il continue de
fonctionner en mode SLEEP)
- Interruption gnre par un module priphrique (Timer, convertisseur
A/D, changement dtat de port, SSP.)
Ce mode peut tre particulirement intressant pour une application fonctionnant sur
pile ou batterie et qui ne requiert le fonctionnement du microprocesseur qu la
survenue dvnements particuliers. On prolonge ainsi considrablement
lautonomie.

- 37 -

Brochage du PIC16F877

40

39

38

37

36

35

34

8
9
10
11
12
13

PIC 16F877

MCLR/Vpp
RA0/AN0
RA1/AN1
RA2/AN2/VRefRA3/AN3/VRef+
RA4/T0CKI
RA5/AN4/SS
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
VSS
OSC1/CLKIN
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1

33
32
31
30
29
28

14

27

15

26

16

25

17

24

18

23

19

22

20

21

RB7/PGD
RB6/PGC
RB5
RB4
RB3/PGM
RB2
RB1
RB0/INT
VDD
VSS
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
RD3/PSP3
RD2/PSP2

Conclusion
Ainsi sachve notre survol du PIC 16F877. Vous savez maintenant ce qui se cache
dans la bote, et avec quels outils nous allons le programmer. Notre prochain objectif
sera de le faire fonctionner. On pourra passer ensuite ltude un peu plus dtaille
des diffrents priphriques.

- 38 -