PIC16F84
PIC16F84
PIC16F84
1
Introduction
Un Microcontrôleur est un circuit intégré qui regroupe dans un même boîtier une unité de
traitement de l’information avec tous les éléments vitaux d’un système programmé RAM, ROM,
Interfaces d’entrées/sorties, etc. sans nécessiter l’ajout de composants externes.
Les microcontrôleurs sont caractérisés par un plus haut degré d'intégration, une plus faible
consommation électrique, et un coût de produits réduit par rapport aux systèmes électroniques à
base de microprocesseur.
Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués, comme les
télécommandes, les téléphones mobile, les contrôleurs des moteurs automobiles, les appareils de
bureau, l'électroménager, les jouets etc.
2
Architecture d’un Microcontrôleur
La particularité d’un microcontrôleur est qu’il est contenu dans un seul circuit intégré. Son
architecture est la même que celle d’un système informatique. Par rapport à une carte mère
d’ordinateur, les éléments qui constituent un microcontrôleur sont généralement plus simples,
moins performants, et de capacité plus limitée.
Bus d’adresses
Bus de données
Les microcontrôleurs PIC sont dérivés du PIC1650 qui à été développé à l'origine par la division
microélectronique de General instrument.
A l'époque du développement du PIC1650 par General Instrument, le nom PIC était un acronyme
de « Programmable Intelligent Computer » ou « Programmable Integrated Circuit », Actuellement, la
traduction en « Peripheral Interface Controller » ou « contrôleur d'interface périphérique » est
généralement admise
4
Les microcontrôleurs PIC
• Communication avec l'extérieur seulement par des ports : Pas de bus d'adresses, ni bus de
données ni bus de contrôle comme la plupart des microprocesseurs.
• Utilisation d'un jeu d'instructions réduit : RISC (Reduced Instructions Set Construction):
Les instructions sont ainsi codées sur un nombre réduit de bits, ce qui accélère l'exécution (1 cycle
machine par instruction sauf pour les sauts qui requirent 2 cycles) d'où l’utilisation des
instructions basiques, contrairement aux systèmes d'architecture CISC (Complex Instructions
Set Construction) qui proposent plus d'instructions donc codées sur plus de bits mais réalisant
des traitements plus complexes.
Soit :
- 16 : Mid-Line (instructions codées sur 14 bits)
- F : FLASH (Mémoire programme)
- 84 : Type (Référence de 2 à 4 chiffres)
- 10 : Quartz à 10MHz au maximum
6
Le PIC 16F84
C’est un microcontrôleur 8 bits à 18 pattes qui s’est très vite répandu, et qui reste l’un des plus
utilisé dans le monde de l’électronique amateur pour de multiples raisons :
9
Architecture interne du PIC 16F84
10
Architecture interne du PIC 16F84
1K
partie du corps du programme si l’interruption
n’est pas utilisée.
• L'adresse 0004h contient l'unique vecteur
d'interruption du PIC.
• La pile contient 8 valeurs. pour la sauvegarde du
compteur programme avant un saut à un sous 3FFh
programme (CALL) ou quand une interruption
apparaît. Les 13 bits de la valeur du compteur
sont restitués à l'instruction de retour sous
programme ou retour d'interruption (RETURN et
RETLW ou RETFIE).
1FFFh 12
Organisation de la mémoire – Mémoire Données
Adresse Page 0 Page 1 Adresse
• Constituée de deux zones : 00h INDF INDF 80h
- SFR (Special function registers): Contient les 01h TMR0 OPTION 81h
registres de configuration et de fonction du 02h PCL PCL 82h
microcontrôleur.
03h STATUS STATUS 83h
- GPR ( General Purpose Register ) : Contient la RAM.
04h FSR FSR 84h
• Découpée en deux pages : Bank 0 et Bank 1.
12 Octets
Zone SFR
05h PORTA TRISA 85h
Accès à la Bank 0 : STATUS .RP0 = 0.
06h PORTB TRISB 86h
Accès à la Bank 1 : STATUS .RP0 = 1
07h 87h
• Chaque page contient 128 bits (de 00 à 7F), donc
7 bits d'adresse. 08h EEDATA EECON1 88h
• Les 12 premiers octets de chaque page sont 09h EEADR EECON2 89h
réservés pour la zone SFR. 0Ah PCLATH PCLATH 8Ah
• Le reste est attribué à la zone GPR de la RAM.
0Bh INTCON INTCON 8Bh
ZONE GPR:
0Ch 8Ch
Elle contient des mots de 8 bits. Les adresses GPR
68 Octets
Les registres spéciaux du 16F84 sont au total 16 registres. Ils permettent la gestion du circuit.
Certains ont une fonction générale, d'autres une fonction spécifique attachée à un périphérique
donné. Ils sont situés de l'adresse 00h à l'adresse 0Bh dans la banque 0 et de l'adresse 80h à
l'adresse 8Bh dans la banque 1.
Les registres 07h et 87h n'existent pas.
INDF (00h - 80h) : Utilise le contenu de FSR pour l'accès indirect à la mémoire .
Le registre INDF n'est pas un registre physique. Quand on adresse INDF, on accède au registre dont
les 8 bits d'adresse sont contenus dans le registre FSR (04h - 84h), qui se comporte comme un
pointeur.
TMR0 (01h) : Le compteur/Timer TMR0 qui a les
caractéristiques suivantes :
- Compteur sur 8 bits.
PC : Program Counter
- Lecture / écriture de TMR0.
- Prédiviseur 8 bits programmable.
- Choix de l'horloge : interne en mode timer et externe
en mode compteur.
- Interruption au débordement ( passage de FF à 00).
- Choix du front de l'horloge en mode horloge externe.
PCL (02h - 82h) : Le compteur de programme (PC) est
sur 13 bits. Les 8 bits de poids faible sont dans le PCL
registre PCL qui est en lecture/écriture
PCLATH (0Ah-8Ah) : Contient les poids forts du
compteur de programmes (PC).
PCLATH 15
Les registres spéciaux du 16F84
REGISTRE OPTION ( h'81' ) : Registre qui fixe le fonctionnement de l’horloge interne.
B7 B0
RBPU : Active à 0 toutes les résistances pull-up (de tirage) à 5V pour le port B. +5V
1 : Pull up désactivé sur le Port B.
0 : Pull up activé.
INTEDG : Interrupt Edge select bit. Front de l’interruption sur RB0/INT
1: Interruption sur RB0 si front montant ↑ RBi
0: Interruption sur RB0 si front descendant ↓
TOCS : Timer TMR0 Clock Source select bit : choix de l’horloge du Timer
0: Timer piloté par horloge interne
1: Timer piloté par signal externe via la broche RA4/TOCK1 PIC 16F84
TOSE : Timer TMR0 Source Edge select bit.
PS2 PS1 PS0 Prédiv Timer Prédiv WDT
fixe le front d’horloge externe
0 0 0 2 1
1: front montant ↑ 0: front descendant ↓
PSA: affecte un facteur de division 0 0 1 4 2
0: pour le Timer 0 1 0 8 4
1: pour le chien de garde 0 1 1 16 8
PS2,PS1,PS0: (Taux de prédivision) 1 0 0 32 16
définie la valeur du facteur de division. 1 0 1 65 32
Remarque : Quand le prédiviseur est affecté au 1 1 0 128 64
Watchdog (PSA=1), TMR0 est prédivisé par 1. 1 1 1 256 128
16
Les registres spéciaux du 16F84
REGISTRE STATUS ( h'03' ou h'83' ) : On accède indifféremment à ce registre par une quelconque de
ces 2 adresses.
B7 B0
REGISTRE STATUS ( h'03' ou h'83' ) : On accède indifféremment à ce registre par une quelconque
de ces 2 adresses.
B7 B0
Z : Zero bit.
1 = Le résultat d'une opération arithmétique ou logique est zéro.
0 = Le résultat d'une opération arithmétique ou logique est différent de zéro.
PORTA : (h'05') : Il comporte 5 bits. PA4 peut également servir d'entrée pour le décomptage du
Timer TMR0. Les autres bits PA0 à PA3 sont des entrées/sorties compatibles TTL . Chaque broches
peut être configurée en entrée ou en sortie grâce à un registre de direction : TRISA.
RA4 RA3 RA2 RA1 RA0
TRISA : (h'85‘)
1 : Le bit correspondant est configuré en ENTREE.
0 : Le bit correspondant est configuré en SORTIE.
TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
PORTB : (h'06')
Il comporte 8 bits, Chaque broche du PORT B est munie d'un tirage au +VDD que l'on peut mettre ou
non en service en mode entrée uniquement par la mise à "0" du bit 7 dans le registre OPTION.
Ce tirage est inactif quand le port est configuré en sortie.
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
TRISB : (h'86')
1 : Le bit correspondant est configuré en ENTREE.
0 : Le bit correspondant est configuré en SORTIE.
TRISB2 TRISB1 TRISB0 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
Au RESET: PORTA et PORTB sont configurés en ENTREE (TRISA et TRISB = 0xFF) et PORTB
présente des tirages désactivés.
La mémoire de données EEPROM du 16F84
Cette mémoire est en lecture/écriture. Elle n'est pas placée dans la zone de mémoire DATA et sera
donc adressée indirectement par 4 registres de la zone SFR, il s'agit des registres suivant :
EECON1 , EECON2 , EEDATA , EEADR
Le PIC 16F84 possède 64 octets d'EEPROM dont les adresses vont de 00 à 3F.
EEADR h'09' : Registre d'adresse.
Ce registre permet d'adresser jusqu'à 256 octets d'EEPROM mais seulement les 64 premiers
octets sont implémentés. Les deux bits de poids forts doivent donc être positionné à "0" pour être
certain de bien accéder aux 64 premiers octets.
EEDATA h'08' : Registre données, dans lequel transitent les données à écrire ou lues.
EECON1 h'88' : Registre de contrôle. Ce registre de contrôle possède 5 bits.
EEIF WRERR WREN WR RD
EEIF : EEPROM Write Operation Interrup Flag bit. WREN : EEPROM Write Enable bit.
1 : L'opération d'écriture est terminée. 1 : Autorise les cycles d'écriture.
0 : L'opération d'écriture n'est pas terminée 0 : Interdit l'écriture dans l'EEPROM.
WR : Write Control bit
WRERR : EEPROM Error Flag bit.
1 = Démarre un cycle d'écriture.
1: Une opération d'écriture s'est terminée
0 = Le cycle d'écriture est terminé.
prématurément à cause d'un reset ou de l'entrée
en action du watchdog pendant la phase RD : Read Control bit.
d'écriture. 1 = Débute un cycle de lecture de l'EEPROM.
0 : L'opération d'écriture s'est passé correctement. 0 = Ne débute pas un cycle de lecture.
EECON2 h'89' : Registre de contrôle. Ce n'est pas un registre physique. Il est utilisé uniquement
pendant les séquences d'écriture en EEPROM.
Les 35 Instructions du PIC 16F84
DECF f , d Décrémente (f) et place le résultat dans RRF f , d Réalise une rotation circulaire à droite :
(destination). d:=f – 1
DECFSZ f , d Décrémente (f) et place le résultat dans
(destination). d:=f - 1 Si le résultat est # 0, Le résultat est placé dans (destination).
l'instruction suivante est exécutée. Si le
résultat est 0, on saute l'instruction suivante. SUBWF f , d d:= f – W Soustrait (W) de (f) (8 bits) et place
le résultat dans (destination).
INCF f,d Incrémente (f) et place le résultat dans
(destination). d:=f+1 SWAPF f , d Les 4 bits de poids forts et les 4 bits de poids
faibles de (f) sont échangés.
INCFSZ f,d Incrémente (f) et place le résultat dans Le résultat est placé dans (destination).
(destination). d:=f+1 ; Si le résultat est # 0,
l'instruction suivante est exécutée. Si le XORWF f , d d:= W XOR f OU exclusif entre (f) (8 bits) et
résultat est 0, on saute l'instruction suivante. (W), et place le résultat dans (destination)
21
Les 35 Instructions du PIC 16F84