Vous êtes sur la page 1sur 33

1

Notes de cours sur le


microcontrleur PIC16F84
BADR DIDOUH
FSTF
2
PLAN
I. FAMILLE PIC DE MICROCHIP
II. ORGANISTION DU 16F84
Description Gnrale
Structure interne et externe
Organisation de la mmoire

III. LE JEU DINSTRUCTIONS
IV. LES MODES DADRESSAGE
V. LES INTERRUPTIONS SUR LES PICS
Mcanisme dinterruption sur les PICs
Les sources dinterruptions sur la 16F84

VI. FORME GENERALE DUN PROGRAMME
Configuration du PIC
Structure dun programme avec interruption

VII. EXEMPLES DAPPLICATIONS



3

I. FAMILLE PIC DE MICROCHIP
Introduction

Une PIC est un microcontrleur, cest dire une unit
de traitement de linformation de type microprocesseur
laquelle on a ajout des priphriques internes;

La dnomination PIC est sous copyright de Microchip;

Les PICs sont des composants dits RISC (Reduce
Instructions Construction Set), ou encore composant
jeu dinstructions rduit;

4
Les diffrents familles des PICs

La famille des PICs est subdivise en 3 grandes familles :

La famille Base-Line, qui utilise des mots dinstructions
de 12 bits;

La famille Mid-Range, qui utilise des mots de 14 bits (et
dont font partie la 16F84 et 16F876);

La famille High-End, qui utilise des mots de 16 bits.

5
Identification dune PIC
16 F 84 -04
Catgorie du PIC:

PIC Mid-Range
Indique une mmoire
de type Flash
Identification du PIC
frquence dhorloge
maximale (4 Mhz)
Le PIC existe aussi en deux versions:
PIC16F 84 : pour une utilisation dans une gamme d'alimentation
classique (4.5 5.5V).
PIC16LF84: pour une gamme tendue de l'alimentation (2 6V).
6
II. ORGANISATION DU 16F84
Description Gnrale
Le PIC16F84 est un microcontrleur 8 bits qui offre un
trs bon rapport qualit/prix.

Ses principales caractristiques:
seulement 35 mots dinstructions
vitesse jusqu' 10Mhz
4 sources d'interruption
1000 cycles effacement/criture possible de la mmoire
programme flash
1K mots mmoire programme Flash
68 octets de donnes RAM
64 octets de donnes EEPROM

7
principales caractristiques: (suite)

13 Entre/Sortie
1 Timer/Compteur
4 Sources doscillateur slectionnable
Mode sleep (pour une faible consommation)
Programmation par ISP (In Serial Programming)



8
Structure externe
Le PIC16F84 est log dans un botier 18 broches DIL ou SOIC (
version CMS).

PIN 1: 3me bit du PORTA
PIN 2: 4me bit du PORTA
PIN 3: 5me bit du PORTA /
TOCK
PIN 4: RESET
PIN 5: GND
PIN 6: 1er bit du PORTB
PIN 7: 2me bit du PORTB
PIN 8: 3me bit du PORTB
PIN 9: 4me bit du PORTB

PIN 18: 2me bit du PORTA
PIN 17: 1er bit du PORTA
PIN 16: OSCILLATEUR
PIN15: OSCILLATEUR 2
PIN 14: VCC
PIN 13: 8me bit du PORTB
PIN 12: 7me bit du PORTB
PIN 11: 6me bit du PORTB
PIN 10: 5me bit du PORTB
9
Structure interne

10
Organisation de la mmoire
La mmoire du PIC16F84 est divise en deux parties distinctes:

*la mmoire programme;
*la mmoire de donne.

Le premier contient les instructions du programme ainsi que les vecteurs
RESET et INTERRUPTION.
Dans la mmoire de donne se trouve tout les registres ncessaires pour
la configuration et l'utilisation des priphriques internes ainsi que
68 octets de RAM utilisateurs.


11
la mmoire programme
La mmoire programme est constitue de 1K mots de 14 bits.
RESET le PIC16F84 commence l'adresse 0000H (Vecteur RESET).
Interruption le microcontrleur va l'adresse 0004H (Vecteur
d'INTERRUPTION).

On trouve donc en mmoire programme
un mot de 14 bits:
Exemple: movlw 10 110000 00001010
12
la mmoire RAM
La mmoire RAM est organise en 2 banques pour
la 16F84.La RAM est subdivise de plus en deux parties.
Dans chacune des banques nous avons des cases
mmoires spciales appeles Registres spciaux
et 68 octets de cases mmoires libre pour
notre utilisation .
- En page 0, des registres fondamentaux
- En page 1, des registres associs
- Les adresses 00 et 07 ne contiennent aucune
mmoire .

01 TMRO: contenu du timer 8 bits, il peut tre
Incrment par lhorloge (fosc/4) ou RA4.
02 PCL: 8 bits du poids faible du PC, les 5 bits
Du poids fort sont dans PCLATH .



13
03 STATUS: registre dtat contenant:
- 5 bits, drapeaux caractrisant le rsultat de l opration ALU; (lecture)
- 1 bit de slection de page RP0 (0: page 0). ( lecture /criture)








04 FSR: contient ladresse dun autre registre (adressage indirect).
05 PORTA et 06 PORTB: registres de donnes des ports parallles.
08 EEDATA: contient un octet lu ou a crire dans lEEPROM de donnes.
09 EEADR: contient ladresse de la donne lue ou crite dans lEEPROM .
0B INTCON: contrle des 4 interruptions.









Time out:dbordement
du timer DWT
Power Down:
caractrise lactivit du
chien du garde
Carry: retenue sur un
octet
Digit carry: retenue sur un
quartet
Zro: rsultat nul pour
une opration ALU
14

Masques :
GIE : (Global Interrupt Enable) : masque global dinter.
EEIE : (EEProm Interrupt Enable)
T0IE : (Timer 0 Interrupt Enable)
INTE: ( Interrupt Enable) Entre dinter sur broche RB0/INT
RBIE: (RB Interrupt Enable) Entres dinter sur broches RB4-RB7.
Drapeaux :
T0IF : (Timer 0 Interrupt Flag) dbordement du timer
INTF: ( Interrupt Flag) interruption provoque par la broche RB0/INT
RBIF: ( RB Interrupt Flag) interruption provoque par les broches RB4-RB7.
81 OPTION_REG: 8 bits (tous a 1 au reset) affectant le comportement des E /S
et timers.


RBPU/: (RB Pull Up) Rsistances de tirage Vdd des entres du port B.
INTEDG: (Interrupt Edge) Front actif sur RB0 ( 1 pour front montant).
RTS: (Real Timer Source) Signal alimentant timer0 : 0 pour horloge interne, 1 pour RA4/T0CLK
RTE (Real Timer Edge) front actif du signal timer ( 0 pour front montant).
PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT.
PS2..0 (Prescaler 210 ) Valeur du Diviseur de frquence pour les timers.

15


85 TRISA: Direction des donnes pour le port A : 0 pour sortir et 1 pour entrer
86 TRISB: Direction des donnes pour le port B : 0 pour sortir et 1 pour entrer
88 EECON1: Contrle le comportement de lEEPROM de donnes.





EEIF: (EEProm Interrupt Flag) passe 1 quand lcriture est termine.
WRERR: (Write Error) 1 si erreur dcriture.
WREN: (Write Enable) : 0 pour interdire lcriture en EEProm de donnes.
WR: (Write) 1 pour crire une donne. Bit remis automatiquement 0
RD: (Read) : 1 pour lire une donne. Bit remis automatiquement 0




16

89 EECON2: Registre de scurit dcriture en EEPROM de donnes.

Une donne ne peut tre crite quaprs avoir crit successivement 0x55 et 0xAA
dans ce registre :

movlw Adresse
movwf EEADR ;dfinition de ladresse

movlw Donnee
movwf EEDATA ;dfinition de la donne

movlw Ox55 ;)
movwf EECON2 ;) scurit
movlw OxAA ;)
movwf EECON2 ;)
bsf EECON1,WR ; criture

17
III. LE JEU DINSTRUCTIONS
Mnmoniques
ADDWF f,d
ANDWF f,d
CLRF f
CLRW
COMF f,d
DECF f,d
DECFSZ f,d
INCF f,d
INCFSZ f,d
IORWF f,d
MOVF f,d
MOVWF f
NOP
RLF f,d
RRF f,d
SUBWF f,d
SWAPF f,d
XORWF f,d

Descriptions
Additionne W et f
AND de W avec f
Efface f
Efface W
Effectue le Complment de f
Dcrmente f
Dcrmente f, passe si 0
Incrmente f
Incrmente f, passe si 0
OR Inclusif de W avec f
Dplace f
Dplace W dans f
Pas dopration (No Opration)
Rotation gauche travers la Retenue (Carry)
Rotation droite travers la Retenue (Carry)
Soustrait W de f
Bascule f sur lui mme
XOR de W avec f

18
Oprations sur les Bit

Mnmoniques
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b

Descriptions
Met 0 le bit b de f
Met 1 le bit b de f
Test le bit b de f, passe si 0
Test le bit b de f, passe si 1


Oprations Littrales et de Contrles
Mnmoniques
ANDLW k
CALL k
CLRWDT k
GOTO k
IORLW k
MOVLW k
OPTION k
RETLW k
SLEEP
TRIS f
XORLW k


Descriptions
AND dun Littral avec W
Appel dune sous-fonction
Efface le 'Watchdog Timer'
Branchement inconditionnel
OR Inclusif dun Littral avec W
Place un Littral dans W
Charge le registre OPTION
Retourne au programme principal, place un Littral dans W
Se met en mode Stand by
Charge le registre TRIS
XOR dun Littral avec/vers W


19
IV. LES MODES DADRESSAGE
la 16F84 utilise 3 modes dadressages:

1. Adressage littral ou immdiat:
Exemple: movlw D'012
2. Adressage direct:
Exemple: movf D'012', W
3. Adressage indirect:
Cet adressage fait aux registres INDF et FSR.
INDF indirect File registre dadresse 0x00, ce registre nexiste pas vraiment,
ce nest quun procd daccs particulier FSR utilis par la PIC pour des
raisons de facilit de construction lectronique interne .

FSR est ladresse 0x04 dans les 2 banques.
Pour modifier la case mmoire pointe, on modifie FSR
Pour connatre ladresse de la case pointe, on accde FSR
Pour accder au contenu de la case pointe, on accde via INDF




20
Exemple:

movlw 0x50
movwf mavariable
movlw mavariable
movwf FSR
movf INDF,w

LE CONTENU DE INDF EST TRADUIT PAR LA PIC COMME ETANT
LE CONTENU DE LEMPLACEMENT MEMOIRE POINTE PAR
FSR (W) = 0X50

21
V. LES INTERRUPTIONS SUR LES PICs
Mcanisme dinterruption sur les PICs:
* Tout dabord, ladresse de dbut de toute interruption est fixe. Il sagit
toujours de ladresse 0x04.
* Les PICs en se connectant cette adresse, ne sauvent rien part le contenu
du PC, qui servira connatre ladresse du retour de linterruption.
* Le contenu du PC est sauv sur la pile interne (8 niveaux). Donc, on dispose
que de 7 niveaux dimbrication pour les sous-programmes.
* Le temps de raction dune interruption est calcul de la manire suivante :
le cycle courant de linstruction est termin, le flag dinterruption est lu au
dbut du cycle suivant. Celui-ci est achev, puis le processeur sarrte un
cycle pour charger ladresse 0x04 dans PC. Le processeur se connecte alors
ladresse 0x04 o il lui faudra un cycle supplmentaire pour charger
linstruction excuter. Le temps mort total sera donc compris entre 3 et 4
cycles.
* Une interruption ne peut pas tre interrompue par une autre interruption.
Les interruptions sont donc invalides automatiquement lors du saut
ladresse 0x04 par leffacement du bit GIE.
* Les interruptions sont remises en service automatiquement lors du retour de
linterruption. Linstruction RETFIE agit donc exactement comme
linstruction RETURN, mais elle repositionne en mme temps le bit GIE.

22
Les sources dinterruption de la 16F84:
La 16F84 ne dispose que de 4 sources dinterruptions:

* TMR0 : Dbordement du timer0 (tmr0). Une fois que le contenu du tmr0
passe de 0xff 0x00, une interruption peut tre gnre.

- * EEPROM : cette interruption peut tre gnre lorsque lcriture dans une
case EEPROM interne est termine. Nous verrons ce cas dans le chapitre
sur lcriture en zone eeprom.

- * RB0/INT : Une interruption peut tre gnre lorsque, la pin RB0, encore
appele INTerrupt pin, tant configure en entre, le niveau qui est
appliqu est modifi. Nous allons tudier ce cas ici.

- * PORTB : De la mme manire, une interruption peut tre gnre lors du
changement dun niveau sur une des pins RB4 RB7. Il nest pas possible
de limiter linterruption une seule de ces pins. Linterruption sera
effective pour les 4 pins ou pour aucune.

23
VI. FORME GENERALE DUN PROGRAMME
; Aprs chaque point virgule on peut mettre des commentaires

list p=16f84,f=inhx8m ; Type de PIC et format de
;fichier
__config B'11111111110001' ; Configuration du PIC
#include "p16f84.inc" ; Bibliothque des
;instructions pour le PIC16F84


Son equ D129' ; Dfinition des constantes

Note equ H'0C' ; Dfinition des Variables


org H'00' ; Dbut du programme (non obligatoire)

{ les instructions du programme }

end ; Obligatoire

24
__config B'11111111110001'

~ Bit0 et bit1: fixe le type d'oscillateur:
11 => horloge avec un circuit RC
01 => horloge quartz (4Mhz en gnral)
~ Bit2: Le chien de garde est activ lorsqu'il est "1"

~ Bit3: La tempo l'allumage du PIC est utilise lorsqu'il est "0"
Cette tempo est utile pour permettre l'oscillateur de se
stabiliser.

~ Bit4 Bit 13: lorsqu'ils sont "1", le programme n'est pas
protg, on peut toujours le rcuprer du PIC. Dans le cas
contraire, on ne peut pas lire le programme contenu dans le PIC,
on peut juste l'excuter.

Configuration du PIC

25
Structure dun programme avec interruption
list p=16f84,f=inhx8m ; Type de PIC et format de fichier
__config B'11111111110001' ; Configuration du PIC
#include "p16f84.inc" ; Bibliotheque des
;instructions pour le PIC16F84
Son equ D'129' ; Dfinition des constantes

Note equ H'0C' ; Dfinition des Variables

org H'00' ; Dbut du programme (non obligatoire)
goto dbut

org H'04' ; adresse dinterruption
{ programme dinterruption }
retfie ;retour lendroit ou le programme sest interrompu
dbut
{ les instructions du programme }

end

26
VII. EXEMPLES DAPPLICATIONS
27
Exemple1: clignotement d'une LED l'aide du chien de garde.








list p=16f84,f=inhx8m
__config B'11111111110111'
#include "p16f84.inc"
bsf STATUS,RP0
movlw B'00001101'
movwf OPTION_REG
movlw B'11111110'
movwf TRISB
bcf STATUS,RP0
Boucle sleep
comf PORTB,1
goto Boucle
end
28
Exemple2: clignotement d'une LED en crant des retards dans le PIC.
p=16f84,f=inhx8m
__config B'11111111110001'
#include "p16f84a.inc"
temp1 equ H'0C
temp2 equ H'0D'
bsf STATUS,RP0
movlw B'11111110'
movwf TRISB
bcf STATUS,RP0
clrf temp1
Debut movlw D'244'
movwf temp2
Boucle nop
decfsz temp1,1
goto Boucle

decfsz temp2,1
goto Boucle
comf PORTB,1
goto Debut
end
29
Exemple3: clignotement d'une LED laide des interruptions du TIMER 0.

p=16f84,f=inhx8m
__config B'11111111110001'
#include "p16f84a.inc"
temps equ H'0C'
org H'00'
goto Debut
org H'04'
movlw D'012'
movwf TMR0
bcf INTCON,T0IF
decfsz temps,1
retfie
comf PORTB,1
movlw D'008'


movwf temps
retfie
Debut bsf STATUS,RP0
movlw B'10000111'
movwf OPTION_REG
bcf TRISB,0
bcf STATUS,RP0
movlw D'008'
movwf temps
movlw B'10100000'
movwf INTCON
Boucle goto Boucle
end


30
Exemple3: Lecture et criture dans la mmoire EEPROM du PIC.
31
list p=16f84,f=inhx8m
__config
B'11111111110001' include
"p16f84.inc"
bsf STATUS,RP0
movlw B'11100000'
movwf TRISA
bcf OPTION_REG,7
bcf STATUS,RP0
clrf PORTA
clrf EEADR
Boucle
btfss PORTB,6
call Enregistre
btfss PORTB,7
call Lit
goto Boucle
Enregistre
btfss PORTB,6
goto Enregistre
comf PORTB,0
movwf EEDATA
movwf PORTA
call Ecriture
incf EEADR,1
return
Lit
btfss PORTB,7
goto Lit
call Lecture
movf EEDATA,0
movwf PORTA
incf EEADR,1
return
32
;criture EEPROM Ecriture
bsf STATUS,RP0
clrf EECON1
bsf EECON1,WREN
movlw H'55'
movwf EECON2
movlw H'AA'
movwf EECON2
bsf EECON1,WR
EcritureFin
btfsc EECON1,WR
goto EcritureFin
bcf STATUS,RP0
Return


; Lecture EEPROM
Lecture
bsf STATUS,RP0
bsf EECON1,RD
bcf STATUS,RP0
return
;criture des donnes dans la mmoire EEPROM du
;PIC l'aide du programmateur
org H'2100'
de
B'00000001',B'00000010',B'00000100',B'00001000'
de
B'00010000',B'00010000',B'00001000',B'00000100'
de B'00000010',B'00000001',B'00000000'
end
33
FIN