You are on page 1of 12

CHAPITRE 7

Le Microcontrleur PIC16F84
I. Introduction :
Un microcontrleur est une unit de traitement de l'information de type microprocesseur laquelle nous
ajoutons des priphriques internes permettant de raliser des montages sans ncessiter lajout de
composants annexes. Un microcontrleur peut donc fonctionner de faon autonome aprs
programmation. Un microcontrleur est ralis en technologie CMOS, en le regardant pour la premire
fois, il fait davantage penser un banal circuit intgr logique TTL ou MOS, plutt qu un
microcontrleur.
Un PIC (Programmable Interface Controler) est un microcontrleur fabriqu par la Socit amricaine
Arizona MICROCHIP Technology. Les PIC sont drivs du PIC1650 dvelopp l'origine par la
division microlectronique de General Instrument.
Un PIC est fourni en botier DIL (Dual In Line) de 2x9 pattes. En dpit de sa petite taille, ils sont
caractriss par une architecture interne qui lui confre une souplesse et une vitesse incomparables. Ses
caractristiques principales sont :
Sparation des mmoires de programme et de donnes (architecture Harvard) : On obtient ainsi
une meilleure bande passante et des instructions et des donnes pas forcment codes sur le
mme nombre de bits.
Communication avec l'extrieur seulement par des ports : il ne possde pas de bus d'adresses, de
bus de donnes et de bus de contrle comme la plupart des microprocesseurs.
Utilisation d'un jeu d'instructions rduit, d'o le nom de son architecture : RISC (Reduced
Instructions Set Construction). Les instructions sont ainsi codes sur un nombre rduit de bits, ce
qui acclre l'excution (1 cycle machine par instruction sauf pour les sauts qui requirent 2
cycles). En revanche, leur nombre limit oblige se restreindre des instructions basiques,
contrairement aux systmes d'architecture CISC (Complex Instructions Set Construction) qui
proposent plus d'instructions donc codes sur plus de bits mais ralisant des traitements plus
complexes.
Il existe trois familles de PIC :
- Base-Line : Les instructions sont codes sur 12 bits ;
- Mid-Line : Les instructions sont codes sur 14 bits ;
- High-End : Les instructions sont codes sur 16 bits.
Par rapport des systmes lectroniques base de microprocesseurs et autres composants spars, les
microcontrleurs permettent de diminuer la taille, la consommation lectrique et le cot des produits. Ils
sont frquemment utiliss dans les systmes embarqus, comme les contrleurs des moteurs
automobiles, les tlcommandes, les appareils de bureau, l'lectromnager, les jouets, la tlphonie
mobile, etc.
II. Le PIC16F84 de Microchip
Le PIC16F84 est un microcontrleur 8 bits 18 pattes. Le numro 16 signifie qu'il fait partie de la
famille "MID-RANGE". La lettre F indique que la mmoire programme de ce PIC est de type "Flash".
Les deux derniers chiffres permettent d'identifier prcisment le PIC, ici c'est un PIC de type 84. La
rfrence 16F84 peut avoir un suffixe du type "-XX" dans lequel XX reprsente la frquence d'horloge
maximal que le PIC peut recevoir.
Remarque : La lettre L indique que le PIC peut fonctionner avec une plage de tension beaucoup plus
tolrante. La lettre C indique que la mmoire programme est une EPROM ou plus rarement une
EEPROM et la lettre CR indique une mmoire de type ROM. Notez ce niveau que seule une mmoire
FLASH ou EEPROM est susceptible dtre efface.

Tableau n1: Liste des composants prsents dans la documentation technique n DS30430C du PIC.

II.1. Dtails des principales caractristiques du PIC16F84


Les principales caractristiques dun PIC16F84 sont :
- 35 instructions (composant RISC) ;
- 2Ko de mmoire Flash pour le programme (RAM de 1019 mots de 14 bits pour les instructions),
cette mmoire allant de ladresse 005 ladresse 3FF ;
- 68 octets de RAM (Donnes sur 8 bits) allant de ladresse 0C ladresse 4F) ;
- Une mmoire RAM de 2x12 emplacements rserve aux registres spciaux
- 64 octets de d'EEprom ;
- 1 compteur/timer de 8 bits ;
- Une horloge interne, avec pr diviseur et chien de garde (Watch dog) ;
- 4 sources d'interruption ;
- 13 entres/sorties configurables individuellement, rparties en un port de 5 lignes (Port A) et un
port de 8 lignes (Port B) ;
- Mode SLEEP ;
- 1 cycle machine par instruction, sauf pour les sauts (2 cycles machine) ;
- Vitesse maximum 10 MHz soit une instruction en 400 ns (1 cycle machine = 4 cycles
d'horloge) ;
- 1000 cycles d'effacement/criture pour la mmoire flash, 10.000.000 pour la mmoire de donne
EEPROM ;
- Vecteur de Reset situ ladresse 000 ;
- Bus dadresses de 13 lignes ;
- Alimentation sous 5 Volts.

En plus des caractristiques suivantes :


- Architecture interne rvolutionnaire lui confrant une extraordinaire rapidit ;
- Possibilit dtre programm in-circuit, cest dire sans quil soit ncessaire de le retirer du
support de lapplication ;
- Un vecteur dinterruption, situ ladresse 004 ;
- Prsence dun code de protection permettant den empcher la duplication ;
- Facilit de programmation ;
2

Simplicit ;
Une faible consommation lectrique ;
Faible prix.

II.2. Brochage du PIC16F84


Le PIC16F84 est un microcontrleur ralis en technologie CMOS. Les signaux sont compatibles TTL.
VSS et VDD : broches d'alimentation (3 5,5V) ;
OSC1 et OSC2 : signaux d'horloges, ces broches peuvent recevoir un circuit RC ou un
rsonateur ;
CLKIN : peut tre connecte une horloge externe (0 4, 10 ou 20 MHz) ;
MCLR : Reset (Master Clear) ;
RA0, ... , RA4 : 5 entres/sorties du port A ;
RB0, ... , RB7 : 8 entres/sorties du port B ;
T0CKI : Entre d'horloge externe du timer TMR0 ;
INT : entre d'interruption externe.

Remarque1: RA = Register A, RB = Register B.


Remarque2: A remarquer que RB0 (pin 6) et RA4 (pin 3), outre qu pouvoir servir dentres/sorties,
selon la faon dont on les programme peuvent respectivement servir lune comme entre dinterruption
et lautre comme entre dhorloge externe pour le pilotage du timer (TMR0).
Remarque3: Le 16F84 possde 13 entres/sorties (5 dans le port A et 8 dans le port B). Chaque
entre/sortie est configurable individuellement (en entre ou bien en sortie). On peut par exemple
configurer les broches RB0, RA2 et RA3 en entre et les broches RB1, RB2, RB3, RA0 et RA1 en
sortie. Le choix de la configuration des entres/sorties non utilises n'a videmment aucune importance.
Notez le cas particulier de la broche RA4 configure en sortie. Cette broche possde une sortie de type
drain ouvert. Cela veut dire qu'elle ne peut pas fournir de courant. Par contre, elle peut en consommer :

II.3. Vitesse des PIC


Tous les PIC Mid-Range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot de
programme, et excutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc des trs grandes
vitesses, et les instructions sont de plus trs rapidement assimiles. Lexcution en un seul cycle est
typique des composants RISC.
Lhorloge fournie au PIC est prdivise par 4 au niveau de celle-ci. Cest cette base de temps qui donne
la dure dun cycle. Si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000 de
cycles/seconde, or, comme le PIC excute pratiquement 1 instruction par cycle, hormis les sauts, cela
vous donne une puissance de lordre de 1MIPS (1 Million dInstructions Par Seconde). Pensez que les
PIC peuvent monter 20MHz. Cest donc une vitesse de traitement plus quhonorable.

II.4. Fonctionnement dun PIC16F84


Indpendamment de ce quon veut faire des 13 lignes (que lon dfinit par lignes dentre/sortie) et
quelle que soit lapplication laquelle on le destine, un microcontrleur PIC 16F84, pour pouvoir
fonctionner, a ncessairement besoin de :
Une alimentation de 5 Volts ;
Un quartz et deux condensateurs (si un pilotage prcis par base de temps quartz est ncessaire),
ou une rsistance et un condensateur (pour une base de temps de type RC, conomique, utilisable
dans les cas ne demandant pas une extrme prcision de cadencement) ;
Un condensateur de dcouplage (pour rduire les transitoires se formant invitablement dans tout
systme impulsionnel) ;
Un bouton poussoir et une rsistance, pour la mise en place dune commande de Reset.
Ces lments - quil convient de considrer comme des invariants devant ncessairement figurer dans
tout montage - reprsentent le cortge obligatoire de tout microcontrleur PIC 16F84, de la mme faon
- pourrais-je dire - quun transistor demande, pour fonctionner, une rsistance de Base et une rsistance
de Collecteur. Les applications type sont celles des deux pages suivantes :

Pilotage par quartz

Pilotage par oscillateur RC

III. Organisation du PIC16F84


La Figure suivante prsente l'architecture gnrale du circuit. Il est constitu des lments suivants :
Un systme d'initialisation la mise sous tension (power-up timer, ) ;
Un systme de gnration d'horloge partir du quartz externe (timing gnration) ;
Une unit arithmtique et logique (ALU) ;
Une mmoire flash de programme de 1k "mots" de 14 bits ;
Un compteur de programme (program counter) et une pile (stack) ;
Un bus spcifique pour le programme (program bus) ;
Un registre contenant le code de l'instruction excuter ;
Un bus spcifique pour les donnes (data bus) ;
Une mmoire RAM contenant :
Les SFR ;
68 octets de donnes ;
Une mmoire EEPROM de 64 octets de donnes ;
2 ports d'entres/sorties ;
Un compteur (timer) ;
Un chien de garde (watchdog).

Diagramme blocs dun PIC16F84

III.1. Organisation de la mmoire du PIC16F84


Le PIC contient de la mmoire de programme et de la mmoire de donnes. La structure Harvard des
PICs fournit un accs spar chacune. Ainsi, un accs aux deux est possible pendant le mme cycle
machine. La mmoire du PIC16F84 est rpartie en trois espaces, logs sur la mme pastille de silicium :
III.1.1. La mmoire programme
La mmoire programme est constitue de 1K mots de 14 bits. Cest une mmoire EEPROM de type
flash, de 1 K mots de 14 bits, allant de ladresse 0000 ladresse 03FF. Cest dans cette zone que nous
allons crire notre programme do le nom mmoire programme. Ce dernier est tlcharg par une
liaison srie. Ceci explique aussi pourquoi les fichiers sur un PC font 2Ko (1 Kibioctets). Le plan de
cette mmoire est le suivant :
5 adresses rserves au C
(adresses ne pas utilise)

1019 adresses restantes,


disponibles pour y loger
les instructions de programme

000
001
002
003
004
005
.
.
.
.
.
.
.
3FF

Vecteur de Reset

Vecteur dInterruption
Dbut du programme utilisateur

Fin de lespace mmoire disponible

La Figure suivante montre encore l'organisation de la mmoire programme. Elle contient 1k "mots" de
14 bits dans le cas du PIC 16F84, mme si le compteur de programme (PC) de 13 bits peut en adresser
8k. Il faut se mfier des adresses images ! L'adresse 0000h contient le vecteur du reset, l'adresse 0004h
l'unique vecteur d'interruption du PIC. La pile contient 8 valeurs. Comme le compteur de programme,
elle n'a pas d'adresse dans la plage de mmoire. Ce sont des zones rserves par le systme.

Organisation de la mmoire de programme et de la pile

a) Ladresse 000 correspond au vecteur de Reset :


A la mise sous tension, ou chaque fois que des instructions spcifiques lobligent, le Program Counter
(PC) se rend cette adresse et cest l que le systme trouve la premire instruction excuter. Cest
une case devant obligatoirement tre remplie et contenir lorigine du programme (ORG). Si cette
adresse tait vide, le microcontrleur ne ferait rien, car aucun programme ne serait excut.
b) ladresse 004 correspond au vecteur dinterruption :
Cest ladresse point de rencontre dfinie par le fabricant, laquelle systme et utilisateur se rendent
lorsquun problme surgit, pour se dire ce quil se passe et quel sont les remdes durgence apporter.
III.1.2. La mmoire de donnes
Elle se dcompose en deux parties de RAM (RAM statique SRAM) et une troisime zone EEPROM. La
premire contient les SFRs (Special Function Registers) qui permettent de contrler les oprations sur le
circuit. La seconde contient des registres gnraux, libres pour l'utilisateur. La dernire contient 64
octets que nous pouvons lire et crire depuis notre programme. Ces octets sont conservs aprs une
coupure de courant et sont trs utiles pour conserver des paramtres semi-permanents. Leur utilisation
implique une procdure spciale, car ce nest pas de la RAM, mais bien une ROM de type spcial. Il est
donc plus rapide de la lire que dy crire.
Les instructions orientes octets ou bits contiennent une adresse sur 7 bits pour dsigner l'octet avec
lequel l'instruction doit travailler. D'aprs la Figure suivante, l'accs au registre TRISA d'adresse 85h,
par exemple, est impossible avec une adresse sur 7 bits. C'est pourquoi le constructeur a dfini deux
banques. Le bit RP0 (et RP1 pour dautre PICs) du registre d'tat (STATUS) permet de choisir entre les
deux. Ainsi, une adresse sur 8 bits est compose de RP0 en poids fort et des 7 bits provenant de
l'instruction excuter.
RP1:RP0 = 00 pour la slection Bank0 ;
RP1:RP0 = 01 pour la slection Bank1.
(RP1 est utilis pour la compatibilit avec dautres PICS de la famille et restera 0 sur le 16F84.)
6

Adr.
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch - 4Fh
50h - 7Fh

Banque0
Indirect addr.
TMR0
PCL
STATUS
FSR
PORTA
PORTB
-EEDATA
EEADR
PCLATH
INTCON
68 cases mmoires
Inutilis

Banque1
Indirect addr.
OPTION_REG
PCL
STATUS
FSR
TRISA
TRISB
-EECON1
EECON2
PCLATH
INTCON
idem banque 0
inutilis

Adr.
80h
82h
84h
86h
88h
8Ah
8Ch CFH
D0H FFH

RAM et Registres du 16F84


a) Registres internes
Les registres SFR (Registres internes Fonctions Spciales) sont rpartis en deux banques. Cette partie
de mmoire est suivie par 68 registres d'usage gnral pouvant tre utiliss comme mmoire simple qui
sont identiques sur les deux banques. Ensuite vient une srie de registre gnraux qui eux dpendent de
la banque mmoire choisie et qui ne sont pas implment dans le 16F84 original.
Les SFR vont de 00h 0Bh en Bank0 et de 80h 8Bh en Bank1. Certains registres sont accessibles en
Bank0 et galement en Bank1 (ils sont remapps). La fonction de chacun des bits de ces registres est
dtaille dans lannexe A3.
Bank 0
00h INDF
Utilis en adressage indirect avec FSR, il ne sagit pas dun registre physique
01h TMR0
Timer/Compteur 8 bits
02h PCL
Poids faible du compteur programme (PC)
03h STATUS Registre dtat dont les bits sont : IRP RP1 RP0 TO PD Z DC C
04h FSR
Pointeur dadresse en adressage indirect.
05h PORTA
Port dEntre/Sortie A dont les bits sont : x x x RA4/T0CKI RA3 RA2 RA1 RA0
06h PORTB
Port dEntre/Sortie B dont les bits sont: RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
07h Pas utilis
08h EEDATA Registre de donnes de l Eeprom
09h EEADR
Registre dadresses de l Eeprom
0Ah PCLATH 5 bits de poids fort du compteur programme
0Bh INTCON Registre des Interruptions dont les bits sont: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
Bank 1
80h INDF
Utilis en adressage indirect avec FSR, il ne sagit pas dun registre physique
81h OPTION_REG
Registre doptions, bits : RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
82h PCL
Poids faible du compteur programme (PC)
83h STATUS Registre dtat dont les bits sont : IRP RP1 RP0 TO PD Z DC C
84h FSR
Pointeur dadresse en adressage indirect.
85h TRISA
Registre de Direction du Port A
86h TRISB
Registre de Direction du Port B
87h Pas utilis
88h EECON1 Registre de Contrle n1 de l Eeprom : x x x EEIF WRERR WREN WR RD
89h EECON2 Registre de contrle n2 de l Eeprom (il ne sagit pas dun registre physique)
0Ah PCLATH 5 bits de poids fort du compteur programme
0Bh INTCON Registre des ITs dont les bits sont: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

b) La RAM
La RAM GPR (RAM utilisateur dusage Gnral ou encore General Purpose Registers) de 68 octets va
de 0Ch 4Fh, soient 68 octets disponibles pour les variables du programme. Cette RAM est remappe
en Bank0 et Bank1, il sagit donc des mmes emplacements mmoires qui sont accessibles par les deux
Banks deux adresses diffrentes. Ceci permet dviter davoir changer de bank avant daccder une
variable ou une autre.
Lors de la programmation il faut toujours indiquer ladresse de la zone RAM partir de laquelle le C
doit commencer crire, ainsi que le nombre demplacements rserver pour chaque variable.
Comme par exemple :
ORG OC
Compteur RES 3
Ce qui revient dire : rserve trois emplacements la variable Compteur, dans lordre suivant :
7

Compteur ladresse 0C
Compteur+1 ladresse 0D
Compteur+2 ladresse 0E .
Ainsi, par exemple, pour effacer les donnes de ladresse OE, on crira :
CLRF Compteur+2.
c) La mmoire EEPROM
La mmoire EEPROM de 64 octets est indirectement mappe dans la zone de donnes et est donc
accessible par un pointeur dadresse indirect (accessibles en lecture et en criture par le programme). On
peut y sauvegarder des valeurs, qui seront conserves mme si l'alimentation est teinte, et les rcuprer
lors de la mise sous tension. Cette mmoire de donnes est une mmoire de type flash de 64
emplacements 8 bits, allant de ladresse 00 ladresse 3F, auxquels on accde uniquement par
lintermdiaire de quatre registres spciaux :
- EEADR (EEprom ADRess) pour ce qui concerne les adresses ;
- EEDATA (EEprom DATA) pour ce qui concerne les donnes ;
- EECON1 et EECON2 (EEprom CONtrol) permettant de dfinir le mode de fonctionnement de
cette mmoire.
III.1.3. La mmoire EEPROM rserves au microcontrleur
Une autre petite mmoire EEPROM, contenant seulement 8 cases, de ladresse 2000 ladresse 2007,
est rserve au microcontrleur. Les adresses 2000, 2001, 2002 et 2003 correspondent aux
emplacements dans lesquels lutilisateur peut stocker un code didentification (en nutilisant que les
quatre bits de poids faible de chacun de ces mots 14 bits). Ladresse 2007 correspond au registre de
configuration du microcontrleur.
III.2. Les Ports d'entres/sorties
Le PIC 16F84 est dot de deux ports d'entres/Sorties appels PortA et PortB.
III.2.1. Le Port A: RA0 RA4
Il comporte 5 pattes d'entre/sortie bi-directionnelles, notes RAx avec x={0,1,2,3,4}. Le registre
PORTA, d'adresse 05h dans la banque 0, permet d'y accder en lecture ou en criture (une copie des
lignes RA0..RA4). En effet, lire le PORTA revient lire ltat des pins alors quune criture place le
niveau correspondant sur les pins qui auront t configures en sorties (dans une squence interne au
PIC de Read-modify-write). Le registre TRISA, d'adresse 85h dans la banque 1, permet de choisir le
sens de chaque patte (entre ou sortie) : un bit 1 positionne le port en entre, un bit 0 positionne le
port en sortie.
Les lignes RA0 .. RA3 sont des entres niveaux compatibles TTL et des sorties CMOS standards. La
ligne RA4 est une entre Trigger de Schmitt et une sortie drain ouvert qui est multiplexe avec
lentre de Timer TMR0.
Il ny a aucune instruction permettant dcrire directement dans le registre TRISA (ou TRISB pour le
port B) : on y accde en transitant par le registre de travail W. En programmation, on commence donc
par charger loctet de configuration dans le registre W, puis on copie celui-ci dans TRISA (ou TRISB).
Exemple
MOVLW 00000001
MOVWF TRISA

;(en binaire, sinon 01 en hexa)

Le bit 0 du port A est dfini comme entre, tandis que les sept autres lignes sont dfinies comme
sorties.
Exemple de configuration du PORTA
BSF
MOVLW
MOVWF
BCF

BCF
BSF

STATUS, RP0
0xFB
TRISA
STATUS, RP0

; Acces Bank1
; TRISA.b2 0 pour RA2 en sortie

STATUS, RP0
PORTA, RA2

; Acces Bank0
; Allume la Led connecte la ligne RA2

(% 1111.1011)

; Acces Bank0

III.2.1. Le Port B: RB0 RB7


Il comporte 8 pattes d'entre/sortie bi-directionnelles, notes RBx avec x={0,1,2,3,4,5,6,7}. Le registre
PORTB, d'adresse 06h dans la banque 0, permet d'y accder en lecture ou en criture. Le registre
TRISB, d'adresse 86h dans la banque 1, permet de choisir le sens de chaque patte (entre ou sortie) : un
bit 1 positionne le port en entre, un bit 0 positionne le port en sortie.
Le cblage interne d'une porte du port B ressemble beaucoup celui du port A. On peut noter la
fonction particulire pilote par le bit RBPU (OPTION_REG.7) qui permet d'alimenter (RBPU=0) ou
non (RBPU=1) les sorties.
Les quatre bits de poids fort (RB7-RB4) peuvent tre utiliss pour dclencher une interruption sur
changement d'tat. RB0 peut aussi servir d'entre d'interruption externe.
III.2. Les registres spciaux
Nous avons dit que dans lespace mmoire RAM que Microchip appelle Register File, une zone est
rserve aux registres spciaux. Le mot registre est utilis ici pour dsigner un emplacement mmoire,
tandis que le mot file signifie groupement. Ils ont des noms et des usages spcifiques, et servent
commander le microcontrleur. Il y en a 16 en tout, et sont si importants quils conditionnent
vritablement la programmation.
Ils sont utiliss constamment, et constamment tenus prsents dans la tte du programmeur. Celui qui
veut crire ne ft-ce quun petit programme de quelques lignes, ne peut pas les ignorer.
A. Dtail du registre STATUS (Bank 0 en 03h et Bank 1 en 83h)
Les cinq premiers bits de ce registre (bits 0 4) correspondent des flags que le programmeur peut
interroger pour obtenir des informations lui permettant dcrire correctement la suite des instructions de
son programme ; tandis que les bits 5, 6 et 7 (RP0, RP1, RP2), daprs la faon dont on les programme,
pourraient slectionner 8 pages de registres internes (chacune de 128 octets). Les dtails des diffrents
bits du registre STATUS sont donns comme ci-aprs. Ces bits refltent le status de lALU du PIC, ils
permettent galement de basculer dune Bank de registres une autre.

b7:
b6-5:

IRP
RP1 RP0

b4:

TO\

b3:

PD\

b2:

b1:

DC

b0:

non utilis dans le 16F84


Slection de la bank de registres active
00: Bank0
01: Bank1
10: non utilis sur le 16F84
11: non utilis sur le 16F84
Sert slectionner lune des deux pages de registres (Page 0 ou Page 1).
Time Out du watch dog
1: aprs un dmarrage, CLRWDT ou SLEEP.
0: aprs un time-out du watch dog
Dpassement de dlai. Passe 0 si le timer du Watch-Dog (chien de garde) dborde. Est
mis 1 par les instructions CLWDT et SLEEP, ainsi qu la mise sous tension.
Power down bit
1: aprs un dmarrage ou aprs linstruction CLRWDT
0: aprs lexcution de linstruction SLEEP
Mise en veilleuse de lalimentation, effectue par linstruction SLEEP. Passe 1
lorsquon utilise linstruction CLWDT, ou la mise sous tension.
bit Zero
1: Rsultat de lopration prcdente nul
0: Rsultat de lopration non nul
Ce flag passe 1 si le rsultat dune opration (arithmtique ou logique) est 0.
Digital carry / borrow\
1: Dbordement du 4 bit du rsultat de lopration prcdente
0: Pas de dbordement
Flag fonctionnant comme le bit de Carry, sauf quici la surveillance de la retenue
sexerce non pas sur loctet entier, mais sur le premier demi-octet. Ce flag se
positionne 1 si une retenue est gnre du bit 3 (bit de poids fort du quartet
infrieur) vers le bit 0 du quartet suprieur. Il est utile pour corriger le rsultat
doprations effectues en code BCD.
Carry / borrow\
1: Dbordement bit du rsultat de lopration prcdente
0: Pas de dbordement
Flag indiquant si une retenue a eu lieu dans un octet lors dune addition ou dune
soustraction. Si une retenue a t gnre, ce bit passe 1.

B. Dtail du registre OPTION_REG (Bank 1 en 81h)


Permet de configurer les rsistances de rappel internes du PortB, et aussi lINT externe, le Timer0 et le
prescaler du Timer0 ou du watch-dog
b7:

RBPU\

b6:

INTEDG

b5:

TOCS

b4:

TOCE

b3:

PSA

b2-b1-b0:
Valeurs du prescaler
PS2:PS1:PS0
000
001
010
011
100
101
110
111

Rsistances de rappel des entres du PortB


1: Les rsistances sont dsactives
0: Les rsistances du PortB sont actives
Slection du front actif de lINT externe
1: Interruption sur le front montant de RB0/INT
0: Interruption sur le front descendant de RB0/INT
Source de lhorloge du Timer0
1: Comptage sur la pin RA4/TOCKI
0: Comptage sur lhorloge interne CLKOUT
Slection du front actif pour le comptage sur RA4/TOCKI
1: Comptage sur front descendant
0: Comptage sur front montant
Assignation du Prescaler
1: Prescaler assign au chien de garde WDT
0: Assign au Timer TMR0
PS2:PS1:PS0
Valeur du Prescaler du TMR0 ou du WDT

Prescaler TMR0
1/2
1/4
1/8
1/16
1/32
1/64
1/128
1/256

Prescaler WDT
1/1
1/2
1/4
1/8
1/16
1/32
1/64
1/128

C. Dtail du registre INTCON (Bank 0 en 0Bh et Bank 1 en 8Bh)


Bits dautorisation et Flags dinterruptions
b7:

GIE

b6:

EEIE

b5:

TOIE

b4:

INTE

b3:

RBIE

b2:

TOIF

b1:

INTF

b0:

RBIF

Autorisation Globale des Interruptions


1: Autorise toutes les interruptions
0: Interdit toutes les interruptions
Autorisation de linterruption de fin dcriture en Eeprom
1: Autorise linterruption de fin dcriture en Eeprom
0: Interdit linterruption de fin dcriture en Eeprom
Autorisation de linterruption de dbordement de TMR0
1: Autorise linterruption de TMR0
0: Interdit linterruption de TMR0
Autorisation de linterruption sur RB0/INT
1: Autorise linterruption sur RB0/INT
0: Interdit linterruption sur RB0/INT
Autorisation de linterruption lors dun changement dtat sur le PortB
1: Autorise linterruption sur RB7:RB4
0: Interdit linterruption sur RB7:RB4
Flag de dbordement de TMR0
1: Le TMR0 a dbord ( effacer par programme)
0: Le TMR0 na pas dbord
Flag dinterruption sur RB0/INT
1: Il y a eu une demande dinterruption sur RB0/INT
0: Il ny a pas dinterruption sur RB0/INT
Flag dinterruption sur le PortB
1: Au moins une pin RB7:RB4 a chang dtat (doit tre effac par programme)
0: Il ny a pas de changement dtat sur RB7:RB4

D. EEADR (EEprom ADRess)


Registre dans lequel on crit ladresse de la mmoire de donnes EEPROM (mmoire flash de 64 octets,
allant de ladresse 00 ladresse 3F) laquelle on veut accder pour y lire ou pour y crire.
Contrairement lEEPROM de programme qui - en plus de la tension dalimentation du
microcontrleur - ncessite une tension externe pour la programmation, cette EEPROM fonctionne avec
la seule tension dalimentation, dans toute sa plage.
E. EECON1 (EEprom CONtrol 1)
Cest un registre de contrle permettant de dfinir le mode de fonctionnement de la mmoire de donnes
EEPROM (mmoire flash de 64 octets, allant de ladresse 00 ladresse 3F). En plus, cest registre 8
bits, mais dont 5 seulement sont utiliss:
Bit 0 : RD (ReaD) : Normalement 0. Il se met dans cet tat de lui-mme. Le programmeur ne peut y
crire que un 1. Naccepte pas dtre programm zro.
Bit 1 : WR (WRite) : Normalement 0. Il se met dans cet tat de lui-mme. Le programmeur ne peut
crire que un 1. Naccepte pas dtre programm zro.
Bit 2 : WREN (WRite ENable) : Mis zro, interdit toute criture en mmoire. Mis 1, autorise une
criture en mmoire.
10

Bit 3 : WRERR (WRite ERRor) : Flag derreur. Normalement zro. Passe 1 pour signaler quune
erreur sest produite juste au moment o une criture tait en cours (Celle-ci na pu aboutir parce quun
vnement inopin sest produit ; par exemple un Reset).
Bit 4 : EEIF (EEprom Interrupt Flag) : Flag dinterruption. Il est automatiquement mis 1 lorsque la
programmation de lEEPROM de donnes est termine. Doit tre mis zro par programmation.
F. EECON2 (EEprom CONtrol 2)
Registre nayant aucune consistance physique, et dont le seul rle consiste obliger le programmeur
vrifier les donnes quil envoie dans lEEPROM.
G. EEDATA (EEprom DATA)
Pendant une opration de lecture : registre dans lequel est disponible la donne quon est all
chercher une certaine adresse de la mmoire EEPROM.
Pendant une opration dcriture : registre dans lequel on place la donne quon veut y crire.
H. FSR (File Select Register)
Sert slectionner la mmoire de donnes, pour pouvoir y accder.
I. INTCON (INTerrupt CONtrol)
Cest le registre qui prside au fonctionnement des interruptions. Dans le 16F84 il y a quatre sources
possibles dinterruptions. Chaque fois que lune delles surgit, le microcontrleur (aprs avoir not dans
la pile ladresse de retour) abandonne momentanment (interrompt) le programme quil avait en cours
dexcution et saute ladresse 004 (adresse prdfinie par le fabricant, de la mme faon que ladresse
000 a t prdfinie pour la fonction Reset).
En lisant le contenu de ce registre, on peut dterminer la provenance de la demande dinterruption et
aiguiller le programme de manire y rpondre de faon adquate.
Linterruption peut tre commande soit par un flanc montant, soit par un flanc descendant : cela dpend
de la faon dont on a pralablement programm le bit 6 (INTEDG) du registre OPTION :
1 = linterruption est gnre lapparition dun front montant ;
0 = linterruption est gnre lapparition dun front descendant.
Les quatre sources dinterruption possibles sont :
1) la fin dune programmation de lEEPROM de donnes ;
2) le dbordement du timer interne ;
3) une commande externe applique sur la pin 6 (RB0/INT) ;
4) un changement dtat sur lune des pins 10, 11, 12 ou 13 (respectivement RB4, RB5, RB6, RB7).
Dans ce cas, seule une configuration des lignes en entre peut donner lieu une ventuelle demande
dinterruption.
J. PCL (Program Counter Low)
Il sagit du compteur qui fournit au programme la partie basse de ladresse. Dans les microcontrleurs
de Microchip les lignes dadresses sont rparties en deux bytes : le PCL (fourni par ce registre Program
Counter Low), et le PCH (fourni par le registre PCLATH Program Counter LATch High).
Il sagit dun compteur dont la tche est dadresser la mmoire dans laquelle sont loges les instructions
du programme. Lorganisation de ce type de compteur, dans les microcontrleurs PIC, veut que
ladresse soit compose de deux parties : la partie basse (fournie par PCL, sur dix lignes dadresse) et la
partie haute (fournie par PCLATH).
K. PCLATH (Program Counter LATch High)
Ladresse du compteur de programme est obtenue en mettant ensemble la partie basse fournie par PCL
(Program Counter Low) et la partie haute fournie par PCLATH.
Contrairement ce quon pourrait penser, ce registre ne fournit pas un nombre complmentaire fixe de
bits, mais un nombre de bits variable, en fonction des instructions qui sont traites.

11

L. TMR0 (TiMeR zero)


Cest le registre de contrle de lhorloge interne (timer) du microcontrleur. Ce timer peut soit
fonctionner seul, soit tre prcd par un pr diviseur programmable 8 bits dont la programmation se
fait par lintermdiaire du registre OPTION. Ce registre peut tre lu et modifi tout moment, soit pour
connatre sa position courante, soit pour le dclencher partir dune valeur dtermine.
Une quelconque opration dcriture dans ce registre met automatiquement zro le comptage en cours
dans le pr diviseur. Se rappeler que le timer compte sur 8 bits, et quune fois que le comptage est arriv
FF, celui-ci revient 00 (ce qui provoque le passage 1 du bit 2 du registre INTCON appel T0IF).
En programmation on peut crire :
1) pour le lire :
MOVF TMR0 ,W - (porte la valeur de TMR0 dans W)
2) pour lui donner une valeur de dpart :
MOVLW valeur
MOVWF TMR0
3) pour le mettre zro :
CLRF TMR0

12