Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.
Simplicit ;
Une faible consommation lectrique ;
Faible prix.
000
001
002
003
004
005
.
.
.
.
.
.
.
3FF
Vecteur de Reset
Vecteur dInterruption
Dbut du programme utilisateur
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.
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
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
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
b7:
b6-5:
IRP
RP1 RP0
b4:
TO\
b3:
PD\
b2:
b1:
DC
b0:
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
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
GIE
b6:
EEIE
b5:
TOIE
b4:
INTE
b3:
RBIE
b2:
TOIF
b1:
INTF
b0:
RBIF
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
12