You are on page 1of 27

LES MICROCONTROLEURS PIC DE MICROCHIP

INTRODUCTION

Définition

Un PIC est un microcontrôleur (μC), c’est-à-dire une unité de traitement de l’information à


laquelle on a ajouté des périphériques internes permettant de faciliter l’interfaçage avec le
monde extérieur sans nécessiter l’ajout de composants externes.

Microcontrôleur = CPU + Mémoire + Interface d’entrée/sortie

L’architecture interne d’un microcontrôleur est celle d’un microprocesseur avec ses interfaces.
Le microprocesseur est le moteur (unité centrale) du microcontrôleur qui comporte en plus, tous
les interfaces, et ceci dans un même boitier.

Il existe plusieurs versions d’un microcontrôleur, car les utilisateurs n’ont pas tous besoin des
mêmes interfaces. Par exemples, certains vont privilégier plusieurs convertisseurs analogiques
digitaux alors que d’autres vont souhaiter étendre l’espace mémoire interne.

Les éléments incontournables dans tout microcontrôleur sont :

- Une unité centrale, qui contrôle le fonctionnement et qui calcule ;

- Une mémoire morte, du type ROM pour conserver le programme, l’ensemble des
instructions qui seront exécutées par l’unité centrale, même si le processeur perd son
alimentation électrique ;

- Une mémoire de données intermédiaires, variables sous la forme d’une RAM, dont le
contenu est effacé si le microprocesseur perd son alimentation électrique ;

- Des ports regroupés sous forme d’entrée ou de sortie ou les deux (E/S), pour
communiquer avec l’extérieur ;

- Des bus (bus de données, d’adresses et de contrôle) pour échanger des informations
entre les différents modules ;

- Un générateur d’horloge qui rythme le déroulement des opérations élémentaires, qui


sert aussi dans l’échange des données sur le bus.

1
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
Domaines d’utilisation

Un microcontrôleur sert :

A contrôler des automatismes très divers

- Machines à laver
- Photocopieuses
- Guichet bancaire automatiques

A contrôler des processus industiels

- Acquisition de données issues de capteurs


- Elaboration de lois de commandes
- Commande d’actionneurs
- Conversion de signaux

A surveiller le fonctionnement de dispositifs complexes

- Alarmes
- Détection
- Supervision dans les appareils

2
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
Architecture Harvard contre Von Neumann

 Architecture Von Neumann

Mémoire de
programme
Unité centrale Bus de données contenant
instructions et
données

- Architecture de la plupart des microprocesseurs ;


- La mémoire contient à la fois les instructions et les programmes placées les unes à
la suite des autres ;
- Un seul bus (bus de données) sert à véhiculer tour à tour les codes des instructions
et les données qui leur sont associées ;
- L’exécution d’une seule instruction nécessite plusieurs échanges sur le seul bus
dévolu à cet usage ⟹ lenteur.

 Architecture Harvard

Mémoire de
Unité programme
Mémoire de données Bus de données Bus d’instructions ne contenant
centrale que des
instructions

- Les données et les instructions sont différenciées ;


- L’exécution d’une instruction ne fait appel qu’à un seul cycle machine puisque l’on
peut simultanément, grâce aux deux bus, rechercher le code de l’instruction et la
ou les données qu’elle manipule ⟹ vitesse d’exécution des programmes
impressionnante.

Les microcontrôleurs PIC utilisent une architecture Harvard. Ils font également appel à une
architecture de type RISC (Reduced Instruction Set Computer).

- Les circuits RISC utilisent une structure de type pipe-line qui leur permet d’exécuter
une instruction tout en recherchant la suivante en mémoire ;
- De plus, les circuits RISC exécutent toutes leurs instructions en un seul cycle
machine dû en grande partie au codage de l’instruction en un seul mot.

Les références des Pics

Une référence de microcontrôleur Microchip est toujours de la forme :

NN LLL XXX

3
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
 NN : famille à laquelle appartient le circuit : peut être 12, 16, 17 ou 18. On
distingue 3 grandes familles :

- 12 : Base-line (instruction sur 12 bits)


- 16 : Mid-range (instruction sur 14 bits)
- 17 ou 18 : High-range (instruction sur 16 bits)

 LLL : ensemble de une, deux ou trois lettres désignant tout à la fois, le type de
mémoire de programme contenu dans le circuit et la plage de tension
d’alimentation (étendue ou normale) :

- CC : mémoire EPROM
- CR : mémoire ROM
- F : mémoire Flash.

 XXX : ensemble de deux ou trois chiffres constituant la référence du circuit dans


la famille et permettant de savoir de quelles ressources internes il dispose.

Un suffixe peut également suivre la référence : il désigne en général la fréquence maximale du


circuit d’horloge.

Exemple : 16 F 84-04 : PIC Mid-range dont la mémoire programme est de type Flash, de
référence 84 et capable d’accepter une fréquence d’horloge de 4 MHz.

Remarque :

Les PICs sont des composants statiques, c’est-à-dire que la fréquence d’horloge peut être
abaissée jusqu’à l’arrêt complet sans perte de données et sans disfonctionnement.

4
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LE MICROCONTROLEUR PIC 16F84

PRESENTATION GENERALE

Les caractéristiques principales du PIC 16F84 sont :

- Une mémoire programme de type flash de 1024 mots de14 bits ;


- Une RAM constituée :
 des registres de contrôle SFR (Special Function Register)
 64 octets de RAM utilisateurs appelés aussi GPR (General Purpose
Register).
- Une mémoire EEPROM de 64 octets ;
- 2 ports d’E/S, un de 8 bits et un de 5 bits ;
- 1 timer/compteur cadencé par une horloge interne ou externe ;
- 1 chien de garde/compteur qui est un timer particulier ;
- 1 prédiviseur de fréquences programmables permettant d’étendre les possibilités du
timer TMRO et du chien de garde WDT ;
- 4 sources d’interruption ;
- L’horloge peut être générée par 4 types d’oscillateurs sélectionnables ;
- Protection en mode sleep pour réduction de consommation ;
- Programmation par mode ICSP (In Circuit Serial Programming).

STRUCTURE INTERNE

LE BROCHAGE

Le 16F84 est un boitier de 18 broches constituées de :

- L’alimentation Vdd/Vss (Vdd=+5V et Vss=0V=GND)


- 2 entrées d’horloge OSC1 et OSC2 ;
- 1 entrée RESET qui est la broche MCLR ;
- 13 broches constituant les lignes d’E/S des ports A et B dont 2 sont multiplexés :
RA4/TOCK1 et RBO/INT.

5
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
RB0 peut servir comme entrée/sortie normale du port B ou comme une entrée d’interruption

RA4 peut servir comme entrée sortie normale du port A ou comme entrée d’horloge externe
pour le pilotage du timer (TMR0).

SCHEMA DE MISE EN ŒUVRE

En fonctionnement normal, la broche MCLR doit être reliée directement ou par l’intermédiaire
d’une résistance de 1 KΩ à +Vdd (+5V). Le bouton poussoir BP permet de faire une remise à
zéro externe.

Le circuit d’horloge peut être un circuit R/C ou R est connecté entre Vdd et OSC1 et C entre
OSC1 et Vss.

Pour R = 5,6 KΩ et C = 22 pF on a un fonctionnement du PIC à la fréquence de 4MHz environ.

6
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
ORGANISATION DE LA MEMOIRE

Le PIC dispose de trois types de mémoires : la mémoire de programme, la mémoire de données


EEPROM et la mémoire RAM.

7
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LA MEMOIRE DE PROGRAMME (FLASH)

Cette mémoire de 1024 mots ($000-$3FF) de 14 bits stocke le programme. Elle est volatile et
reprogrammable à souhait. Chaque position de 14 bits contient une instruction. Ce qui permet
de coder sur un mot l’instruction et l’opérande ou son adresse. Le code produit est ainsi
compact. L’emplacement du programme peut se situer à n’importe quel endroit de la mémoire.

Les adresses 000h et 004h sont réservées. Elles correspondent respectivement aux vecteurs de
RESET et d’INTERRUPTION.

Suite à une remise à 0 (RESET) ou à la mise sous tension, le programme commence toujours à
l’adresse 000h (vecteur RESET).

Une interruption provoque un saut à l’adresse 004h (vecteur d’interruption).

On conseille donc de placer le début du programme après l’adresse 0004H et de mettre un


branchement au début du programme à l’adresse 0000H et un branchement au début de la routine
d’interruption s’il y en a une à l’adresse 0004H :

Org 000 ; début du programme

Goto main ; indique que le début du programme se trouve à l’adresse

org 004
goto L1
org 0x30
MAIN ………..
………..
………..

L1 ………..
………..
retfie
end

8
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LES REGISTRES DE L’UNITE CENTRALE (LA MEMOIRE RAM)

Ces registres permettent de configurer tous les modules internes du PIC. On distingue :

- Les registres INDF et FSR : les registres d’adressage indirect ;


- PCL et PCLATH : les registres du compteur programme ;
- STATUS : bits C, DC, Z : permettent de tester le résultat d’une opération;
- OPTION-REG pour définir le mode du timer, prescaler, etc. ;
- INTCON pour les interruptions ;
- PORTA, PORTB, TRISA, TRISB pour les ports ;
- TMRO pour le timer ;
- EEADR, EEDATA, EECON1, EECON2 pour la mémoire EEPROM.

Ces registres sont accessibles en lecture et écriture suivant leur fonction. L’espace mémoire
contenant ces registres est scindée en 2 parties : BANK0 et BANK1. Ces deux parties sont
accessibles par la même adresse ; la sélection de l’un des bank se fait selon deux bits de
contrôle : (RP1 et RP0) du registre d’état STATUS.

Dans le bank 0 les registres occupent les adresses 00h à 0Bh. Ce sont les registres
fondamentaux.

Dans le bank 1, les registres occupent les adresses 80h à 8B. Ce sont les registres associés.

Certains registres figurent dans les deux bank pour en faciliter l’accès.

adresses Bank 0 Bank 1 adresses


00 INDF INDF 80
01 TMRO OPTION 81
02 PCL PCL 82
03 STATUS STATUS 83
04 FSR FSR 84
05 PORTA TRISA 85
06 PORTB TRISB 86
07 87
08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C Mémoire utilisateur 8C
. (GPR) : positions .
mémoires pour
. stocker des variables Mapped in bank 0 .
. et des données .
4F CF

9
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
Remarque :

 Pour accéder à un registre, il faut d’abord se placer dans le bank où il se trouve :


ceci se fait grâce aux bits RP0 et RP1 du registre d’état STATUS :
- Si RP0 = 0 on accède au bank 0
- Si RP0 = 1 on accède au bank 1
 Pour la mémoire utilisateur, l’utilisation des bank n’est pas nécessaire puisque
le bank 1 est « mapped » au bank 0. Cela signifie qu’écrire une donnée à l’adresse
0CH ou à l’adresse 8CH revient au même.
 La mémoire utilisateur (GPR=General Purpose Register) de 64 octets est
réservée au stockage des données et des variables. Elle occupe les 0Ch à 4Fh.

Ces variables peuvent être déclarées de deux manières lors de la programmation :

- Par la directive CBLOCK :


CBLOCK 0x0c
Liste des variables séparées par des virgules
ENDC
- Par la directive ORG :
ORG 0x0c

Compteur RES 3

Ce qui signifie : réserver 3 emplacements mémoire à la variable compteur, dans l’ordre


suivant :

Compteur à l’adresse 0x0c

Compteur +1 à l’adresse 0x0D

Compteur +2 à l’adresse 0x0E

LA MEMOIRE EEPROM DE DONNEES

Le PIC dispose de 64 octets ($00 à $3f) de mémoire de type EEPROM réservés au stockage
des données qu’on désire conserver en cas d’absence de tension d’alimentation. Cette mémoire
que l’on peut lire et écrire commence à l’adresse 2100h.

L’inconvénient de cette mémoire est le temps d’écriture qui est assez long (environ 10 ms).

On accède à cette mémoire par l’intermédiaire de quatre registres spéciaux :

- EEADR (EEprom ADRess) pour les adresses


- EEDATA (EEprom DATA) pour les données
- EECON1 et EECON2 (EEpron CONtrol) pour le contrôle d’écriture et de lecture
de cette mémoire.

10
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
Toute lecture ou écriture dans le registre EEDATA se fait dans la position mémoire pointée par
EEADR. En fait, EEADR contient l'adresse relative par rapport à la page qui commence en
0x2100, autrement dit, l'adresse va de 0 à 63.

Deux registres de contrôle (EECON1 et EECON2) sont associés à la mémoire EEPROM. La


durée d’écriture d’un octet est de l’ordre de 10 ms. La fin de chaque écriture réussie est indiquée
par le drapeau EEIF et la remise à zéro du bit RW du registre EECON1. Le drapeau EEIF peut
déclencher l'interruption EEI si elle a été validée.

EECON1 - - - EEIF WRERR WREN WR RD

Procédure de lecture dans l'EEPROM de données

1. Placer l’adresse relative dans EEADR ;


2. Mettre le bit RD de EECON1 à 1 ;
3. Lire le contenu du registre EEDATA.

Procédure d'écriture dans l'EEPROM de données

1. Ecriture dans L'EEPROM doit être autorisée par le positionnement à 1 du bit WREN ;
2. Placer l’adresse relative dans EEADR ;
3. Placer la donnée à écrire dans EEDATA ;
4. Placer 0x55 dans EECON2 ;
5. Placer 0xAA dans EECON2 ;
6. Démarrer l'écriture en positionnant le bit WR (bit 1 du registre EECON1);
7. Attendre la fin de l'écriture, (10 ms) (EEIF=1 ou WR=0) ;
8. Recommencer au point 2 si on a d'autres données à écrire.

Remarque :

- Le drapeau WRERR est positionné si une erreur d'écriture intervient.


- EECON2 n’est pas véritablement un Registre. Microchip l’utilise en tant que registre
de commande. L’écriture de valeurs spécifiques dans EECON2 provoque l’exécution
d’une commande spécifique dans l’électronique interne du PIC.

L’UNITE ARITHMETIQUE ET LOGIQUE (ALU) ET LE REGISTRE W

C’est une ALU 8 bits qui réalise les opérations arithmétique et logique entre l’accumulateur W
et n’importe quel autre registre « f » ou constante k. L’accumulateur W est un registre de travail
8 bits, il n’a pas d’adresse comme les autres SFR. Pour les instructions à 2 opérandes, c’est
toujours le registre W qui contient l’un des opérandes. Pour les instructions à un opérande,
celui-ci peut être soit dans W soit n’importe quel registre f.

11
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LES REGISTRES SPECIAUX

Ils permettent de configurer tous les modules internes du PIC (les ports, le timer, la gestion des
interruptions, etc.). Ces registres sont contenus dans l’espace mémoire RAM située au dessus
du registre à usage général (GPR). Ils sont désignés par « Special Function Rgister (SFR) » et
repartis sur deux pages appelés « bank » :

a)- Le registre INDF d’adresse 00 ou registre d’adressage indirect

Ce registre n’a aucune existence physique. En écriture, un NOP est produit. En lecture, on y
trouve toujours 00. Ce registre sert uniquement à spécifier l’utilisation de l’adressage indirect
de la façon suivante :

ADDWF INDF,W; ajouter au contenu du registre W, le contenu de la case mémoire adressée par le registre
FSR.

On réalise l’adressage indirect par rapport au contenu du registre FSR en se servant de


INDF comme mode de notation.

b)- Le registre F01 (TMR0) : compteur du TIMER 0

c)- Le registre F02 ou F82 (PCL) : 8 bits de poids faible du compteur de programme PC.

C’est un registre de 8 bits. Ce n’est autre que les 8 bits de poids faible du registre PC
(program counter). Le contenu de ce registre est complété avec tout ou partie du registre
PCLATH pour générer la valeur réelle du PC lors de certaines instructions particulières.

d)- Le registre F03 ou F83 (STATUS) : registre d’état

Ce registre contient les bits d’état de l’unité centrale et les bits RP0 et RP1 de sélection des
pages (bank) de la mémoire de données.

IRP RP1 RP0 TO PD Z DC C

 C =1 si retenue, 0 sinon
 DC=1 si une retenue est générée du bit 3 vers le quartet supérieur dans les
instructions ADDLW et ADDWF. DC =0 sinon.
 Z=1 si le résultat de l’opération arithmétique ou logique exécutée est nul et à 0
sinon.
 PD = 0 lors de l’exécution de l’instruction SLEEP. Il est à 1 suite à une mise
sous tension ou à l’exécution de l’instruction CLRWDT.

12
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
 TO =1 lors du débordement du timer chien de garde et est à 0 suite à une mise
sous tension ou à l’exécution de l’instruction CLRWDT ou SLEEP.
 RP0 = 0 : choix du bank 0 et RP0 = 1, choix du bank 1.

e)- registre F04 ou F84 (FSR) : registre d’adressage indirect

Le contenu de ce registre est utilisé pour réaliser l’adressage indirect. C’est un registre de 8 bits.

f)- registre F05 (PORTA) : registre de sortie du port A

g)- registre F06 (PORTB) : registre de sortie du port B

h)- registre F08 (EEDATA) : registre contenant la donnée à écrire ou à lire dans la
mémoire EEPROM.

i)- registre F09 (EEADR) : registre contenant l’adresse à accéder dans la mémoire
EEPROM

j)- registre F0A ou F8A (PCLATCH) : 5 bits de poids fort du compteur de programme

k)- registre F0B ou F8B (INTCON) : registre de contrôle des interruptions

7 6 5 4 3 2 1 0
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

 GIE : Global Interrupt Enable – validation générale des interruptions

Si 1 : interruptions activées

Si 0 : interruptions désactivées

 EEIE : EEprom Interrupt Enable – interruption issue de la fin d’écriture en EEPROM


Si 1 interruption EEIF activée
Si 0 interruption EEIF désactivée
 TOIE : TIMER 0 Interrupt Enable – interruption due au débordement du TIMER 0.
Si 1 interruption du TIMER 0 activée
Si 0 interruption du Timer 0 désactivée
 INTE : INTerrupt Enable – entrée d’interruption sur RB0/INT
Si 1 interruption activée sur RB0
Si 0 interruption désactivée sur RB0
 RBIE : RB if Interrupt Enable – entrée d’interruption sur le broches RB4 à RB7
Si 1 interruption activée sur le changement d’état des ports RB4 à RB7
Si 0 interruption désactivée sur le changement d’état des ports RB4 à RB7
 TOIF : Timer 0 Interrupt Flag – drapeau d’interruption due au débordement du Timer 0
Si 1 débordement du timer 0
Doit être remis à 0 par programmation

13
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
 INTF : INTerrupt Flag – drapeau d’interruption provoquée par la broche RB0/INT
Si 1 une interruption vient de se produire sur RB0
Doit être remis à 0 par programmation
 RBIF : RB port change interrupt flag – drapeau d’interruption provoquée par les broches
RB4 à RB7
Si 1 un changement d’état vient de se produire sur l’un des ports RB4 à RB7
Doit être remis à 0 par programmation.

l)- registre F81 (OPTION) : registre de contrôle du diviseur, des interruptions externes et
des pull-ups du port B.

7 6 5 4 3 2 1 0
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

 RBPU : Port B pull-up – Résistances de tirage à Vdd des entrées du port B


Si 1 resistances de pull-up du port B désactivées
Si 0 résistances de pull-up du port B activées
 INTEDG : INTerrupt EDGe – front actif sur RB0
Si 1 interruption sur RB0 sur front montant
Si 0 interruption sur RB0 sur font descendant
 TOCS : Timer 0 Clock Source – Signal alimentant le Timer 0
Si 1 horloge externe présente sur RA4
Si 0 horloge interne du PIC
 TOSE : Timer 0 Source Edge – front actif du signal Timer.
Si 1 interruption sur RA4 sur front descendant
Si 0 interruption sur RA4 sur front montant
 PSA : Prescaler Assignment bit
Si 1 prédiviseur est assigné au Watchdog
Si 0 prédiviseur assigné au TIMER 0
 PS2-PS0 : Prescaler rate Select bit

PS2 PS1 PS0 TMR0 WDT


0 0 0 2 1
0 0 1 4 2
0 1 0 8 4
0 1 1 16 8
1 0 0 32 16
1 0 1 64 32
1 1 0 128 64
1 1 1 256 128

14
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
m)- registre F85 [TRISA]: registre de contrôle de direction du port A

C’est un registre de 8 bits dont les bits 0 à 4 sont significatifs.

bit i (i allant de 0 à 4) à 0 : définit la ligne i du port A en sortie

bit i (i allant de 0 à 4) à 1 : définit la ligne i du port A en entrée

n)- registre F86 [TRISB] : registre de contrôle de direction du port B

C’est un registre de 8 bits

bit j (j allant de 0 à 7) à 0 : définit la ligne correspondante (ligne i) du port B en sortie

bit j (j allant de 0 à 7) à 1 : définit la ligne correspondante (ligne i) du port B en entrée

o)- registre F88 |[EECON1] : registre de contrôle pour la mémoire EEPROM

Registre à utiliser lors d’une lecture ou d’une écriture dans la mémoire EEPROM.

4 3 2 1 0
EEIF WRERR WREN WR RD

 EEIF : EEprom Interrupt Flag : drapeau d’interruption.

Il est mis à 1 automatiquement lorsque la programmation de l’EEPROM de


données est terminée. Il doit être remis à 0par programmation.

 WRERR : Write ERRor : flag d’erreur

Normalement à 0, il passe à 1 pour signaler qu’une erreur s’est produite juste au


moment où une écriture était en cours.

 WREN : Write Enable

Mis à 0 pour interdire toute écriture en mémoire

Mis à 1 pour autoriser une écriture en mémoire.

 WR : WRite
Normalement à 0, il se met dans cet état de lui-même
1 pour écrire une donnée ; bit remis automatiquement à 0.
 RD :Read
Normalement à 0, il se met dans cet état de lui-même
1 pour lire une donnée ; bit remis à 0 automatiquement

p)- registre F89 [EECON2] : registre de sécurité d’écriture pour la mémoire EEPROM

Registre à utiliser lors d’une écriture dans la mémoire EEPROM.

15
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
REGISTRE DE CONFIGURATION

C’est un registre de 14 bits situé à l’adresse 0x2007 hors de l’espace d’adressage normal du
PIC. Il n’est accessible qu’au moment de la programmation. On accède à ce registre à l’aide de
la directive _CONFIG. Cette directive permet de :

- Choisir le type d’horloge (quartz ou RC)


- Valider ou non le WDT
- Interdire la lecture des mémoires EEPROM de
programme et de données

13 12 11 10 9 8 7 6 5 4 3 2 1 0
2
CP CP CP CP CP CP DP CP CP CP PWRTE WDTE FOSC1 FOSC0

 bits 1:0 FOSC1:FOSC0 Sélection du type d'oscillateur pour l'horloge
11 : Oscillateur RC
10 : Oscillateur HS (High speed) : quartz haute fréquence (jusqu'à 10 MHz)
01 : Oscillateur XT, c'est le mode le plus utilisé, quartz jusqu'à 4 MHz
00 : Oscillateur LP (Low power), consommation réduite, jusqu'à 200 kHz

 bit 2 WDTE validation du timer WDT (chien de garde)


1 : WDT validé
0 : WDT inhibé

 Bit 3 PWRTE validation d'une temporisation à la mise sous tension


Le PIC possède un timer permettant de retarder de 72 ms le lancement du programme
après la mise sous tension du circuit.
1 : temporisation inhibée (le microcontrôleur attend 72 ms)
0 : temporisation validée (le microcontrôleur démarre tout de suite)

 Bit 6 :4 CP (code protection de la mémoire programme)


1 : protection désactivée
0 : programme mémoire protégé

 Bit 7 DP Data Memory Code Protection


1: protection désactivée
0: mémoire de donnée EEPROM protégée
 Bit 13:8 CP Protection en lecture du code programme
1 : pas de protection
0 : protection activée
Exemple : pour une configuration de base, on a :

CP = 1 : code protection de la mémoire de programme désactivé

DP = 1 : code protection de la mémoire de données EEPROM désactivé

PWTE = 0 : power-up Timer activé

16
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
WDTE = 0 : Watch Dog Timer désactivé

FOSC1= 0 et FOSC1=1 : oscillateur à quartz XT

On écrit : _CONFIG H’3FF1’ ou de façon explicite :

_config_CP_OFF&_PWTE_ON&WDTE_OFF&_XT_OSC

17
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LES MODES D’ADRESSAGE

Définition

Les modes d’adressage sont un ensemble de techniques permettant d’accéder aux opérandes
d’une opération ou à leur adresse.

Adressage immédiat (ou littéral)

Dans ce mode d’adressage, la donnée manipulée par l’instruction est codée avec l’instruction
elle-même. La donnée en question s’appelle ici un « littéral ». Le mode d’adressage permet de
charger directement une valeur dans un registre.

MOVLW k ; transférer le littéral k, qui est une valeur quelconque codée sur 8 bits (de 0 à 255) dans le
registre W.

Adressage direct

Ce mode consiste à coder le nom du ou des registres directement dans l’instruction. Il permet
d’opérer sur un registre contenu dans l’instruction. Le registre est repéré par son nom ou par
son adresse.

MOVWF f ; transférer le contenu du registre W dans le registre f repéré par son adresse

MOVF f,d ; transférer le contenu du registre f dans W si d = 0 ou dans f lui-même si d = 1.

Adressage permettant la manipulation des bits

Ce mode d’adressage ne s’emploie jamais seul mais toujours couplé avec l’adressage direct.

BCF f,b ; mettre à zéro le bit b du registre f ; b varie entre 0 et 7 ; f est repéré par son adresse.

BSF f,b ; mettre à 1 le bit b du registre f

BTFSC f,b ; tester le bit b de f ; sauter l’instruction suivante si b=0

BTFSS f,b ; tester le bit b de f ; sauter l’instruction suivante si b=1

Adressage indirect

Le registre FSR d’adresse 04 ou registre de sélection du registre dans lequel on place le numéro
du registre adressé. Le mode de notation correspondant utilise le registre INDF sous la forme
par exemple :

MOVWF INDF ; transférer le contenu de W dans l’emplacement mémoire adressé par FSR

MOVF INDF,d ; transférer l’octet adressé par FSR dans W si d = 0 ou dans l’emplacement mémoire

; adressé par FSR si d=1(c’est une lecture de la mémoire)

18
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LES INSTRUCTIONS DU PIC 16F84

Tous les PICs Mid-range ont un jeu de 35 instructions. Chaque instruction est codée sur un mot
de 14 bits qui contient le code opération ainsi que l’opérande. A part les instructions de saut,
toutes les instructions sont exécutées en un cycle d’horloge. Sachant que l’horloge fournie au
PIC est prédivisée par 4, si on utilise par exemple un quartz de 4 MHz, on obtient donc 1 000 000
de cycles/ seconde, soit une puissance de l’ordre de 1MIPS (1 Million d’Instructions par
seconde).

Les instructions « orientées octet » (adressage direct)

Ce sont des instructions qui manipulent les données sous forme d’octets.

f : registre (file register), de 0 à 7Fh

d : destination ; d = 0 résultat dans W ; d = 1 résultat dans f.

Exemple :

MOVF f,d

Les instructions orientées bits

Ce sont des instructions destinées à manipuler directement les bits d’un registre particulier.

b : numéro du bit affecté par l’opération (varie de 0 à 7)

f : registre codé par son adresse

Exemple :

BCF PORTA,0 ; mettre le bit 0 du port A à 0.

BTFSS PORTB,5 ; tester le bit 5 du port B, saut si égal à 1.

Les instructions opérant sur une donnée (adressage immédiat)

Ce sont les instructions qui manipulent des données (littérales) qui sont codées dans
l’instruction directement. La valeur immédiate appelée « littéral » est codée sur 8 bits (de 0 à
255).

Remarque :

Les mnémoniques de ces instructions comportent un « L » pour littéral. Ce sont des instructions
à un seul opérande qui est le littéral k.

Exemple :

ANDLW k ; ET logique entre le « littéral » k et le contenu du registre W. Le résultat est stocké dans W.

19
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
SUBLW k ; k - W ⟶ W.

Les instructions de saut et d’appel de procédure

Elles provoquent une rupture dans la séquence de déroulement du programme.

Exemple :
CALL L ; appel du sous-programme L
GOTO L ; branchement à l’étiquette L
NOP ; pas d’opération
RETURN ; retour d’un sous-programme
RETFIE ; retour d’interruption
RETLW ; retour d’un sous-programme avec k dans le registre W.
SLEEP ; mise en mode standby
La liste complète des instructions du PIC 16F84 se trouve en annexe.

PROGRAMMATION DU PIC 16F84

Structure de base d’un programme en assembleur

Elle se présente selon le modèle suivant :


; Configuration du microcontrôleur
List p = 16F84A ; déclaration du processeur
#include <p16F84.inc > ; déclaration du fichier des registres
_config H’3FF1’ ; protection off ; PWRTE on; WDT off; XT
………………………………………
; Déclarations des équivalences
Constante1 equ valeur1 ; liste des équivalences et des constantes
Constante2 equ valeur2
……………………………………….
; Déclaration des variables dans la RAM
cblock 0x0C ; déclaration des registres à usage général
Reg1

20
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
Reg2
endc
……………………………………….
; Début du programme après RESET et configuration des lignes de port
org 0
bsf STATUS, RP0 ; choix du bank 1
movlw b’xxxxxxxx’ ; charger le registre w avec le nombre binaire (x=0 ou 1)
movwf TRISB ; configuration des lignes du port B en entrée ou en sortie
bcf STATUS, RP0 ; choix du bank 0
Debut instruction 1
Instruction 2
; Sous programmes
end ; fin du programme

 Les étiquettes (ou labels) commencent toujours à la première colonne ;


 Les instructions, les directives (LIST, _CONFIG ou ORG) commencent à partir
de la deuxième colonne ;
 Une ligne commençant par un point-virgule ( ;) est un commentaire ;
 La fin du programme est signifiée par l’instruction « end ».

21
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
L’INTERFACE PARALLELE DU PIC 16F84
Le port A
C’est un port de 5 bits (RA0-RA4). Chaque entrée/sortie est compatible TTL. La configuration
de direction pour chaque ligne d’E/S est déterminée par le registre TRISA.

 bit i de TRISA = 0 ⟹ bit i du port A en sortie ;


 bit i de TRISA = 1 ⟹ bit i du port A en entrée.

La broche RA4 est multiplexée avec l’entrée horloge du timer TMRO. Le choix se fait à l’aide
du bit TOCS du registre OPTION_REG.

 TOCS = 0 ⟹ RA4 est une entrée normale ;


 TOCS = 1⟹ RA4 = entrée horloge externe pour le timer TMRO.

Registre OPTION_REG
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

 Le registre de sortie de ce port est PORTA d’adresse 05 du Bank 0.

Le port B
C’est un port bidirectionnel de 8 bits (RB0-RB7). Toutes les broches sont compatibles TTL. La
configuration de direction se fait grâce au registre TRISB. En entrée, la ligne RB0 appelée
aussi INT peut déclencher une interruption externe INT. En entrée, une quelconque des lignes
RB4 à RB7 peut déclencher une interruption RBI. Le registre de sortie est PORTB d’adresse
06 du Bank 0.

Remarque :

Une entrée RA ou RB peut drainer un courant maximal de 2 mA

Une sortie RA ou RB peut débiter un courant maximal de 20 mA.

La ligne RA4 est une sortie à drain ouvert.

LE TIMER TMRO

C’est un compteur 8 bits ayant les caractéristiques suivantes :


 Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer) soit par
une horloge externe appliquée à la broche RA4 du port A (mode compteur). Le choix
de l'horloge se fait à l'aide du bit T0CS du registre OPTION_REG
o TOCS = 0 ⟹ horloge interne
o TOCS = 1 ⟹ horloge externe appliquée à RA4

22
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
 Dans le cas de l'horloge externe, on peut choisir le front sur lequel le TIMER
s'incrémente.
o TOSE = 0 ⟹ incrémentation sur fronts montants
o TOSE = 1 ⟹ incrémentation sur fronts descendants

 Quelle que soit l'horloge choisie, on peut la passer dans un diviseur de fréquence
programmable (prescaler) dont le rapport est fixé par les bits PS0, PS1 et PS2 du registre
OPTION_REG (tableau ci-contre). L'affectation ou non du prédiviseur se fait à l'aide
du bit PSA du registre OPTION_REG
o PSA = 0 ⟹ on utilise le prédiviseur
o PSA = 1 ⟹ pas de prédiviseur (affecté au chien de garde)

PS2 PS1 PS0 DIV


0 0 0 2
0 0 1 4
0 1 0 8
0 1 1 16
1 0 0 32
1 0 1 64
1 1 0 128
1 1 1 256

 Le contenu du timer TMR0 est accessible par le registre qui porte le même nom. Il peut
être lu ou écrit à n'importe quel moment. Après une écriture, l'incrémentation est inhibée
pendant deux cycles instruction.

 Au débordement de TMR0 (FF⟶00), le drapeau T0IF est placé à 1. Ceci peut


déclencher l'interruption T0I si celle-ci est validée.

23
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LE WATCHDOG TIMER WDT (CHIEN DE GARDE)

C’est un compteur 8 bits incrémenté en permanence (même si le microcontrôleur est en mode


sleep) par une horloge RC intégrée indépendante de l'horloge système. Lorsqu’il déborde,
(WDT Time Out), deux situations sont possibles :

 Si le microcontrôleur est en fonctionnement normal, le WDT time-out provoque un


RESET. Ceci permet d’éviter de rester planter en cas de blocage du microcontrôleur par
un processus indésirable non contrôlé.

 Si le microcontrôleur est en mode SLEEP, le WDT time-out provoque un WAKE-UP,


l'exécution du programme continue normalement là où elle s'est arrêtée avant de rentrer
en mode SLEEP. Cette situation est souvent exploitée pour réaliser des temporisations

L'horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms. Il est
cependant possible d'augmenter cette durée en faisant passer le signal Time-Out dans un
prédiviseur programmable (partagé avec le timer TMR0). L’affectation se fait à l'aide du bit
PSA du registre OPTION_REG.
 PSA = 1 ⟹ on utilise le prédiviseur
 PSA = 0 ⟹ pas de prédiviseur (affecté à TMR0)
Le rapport du prédiviseur est fixé par les bits PS0, PS1 et PS2 du registre OPTION_REG.
L'utilisation du WDT doit se faire avec précaution pour éviter la réinitialisation (inattendue)
répétée du programme. Pour éviter un WDT timeOut lors de l'exécution d'un programme, on a
deux possibilités :

 Inhiber le WDT d'une façon permanente en mettant à 0 le bit WDTE dans


l'EEPROM de configuration.
 Remettre le WDT à 0 périodiquement dans le programme à l'aide de l'instruction
CLRWDT pour éviter qu'il ne déborde WDT.

24
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
LE MODE SLEEP

Le PIC peut être placé en mode faible consommation à l'aide de l'instruction SLEEP. Dans ce
mode, l'horloge système est arrêtée ce qui arrête l'exécution du programme. Pour sortir du mode
SLEEP, il faut provoquer un WAKE-UP, pour cela il y a 3 possibilités :
 RESET externe dû à l'initialisation du PIC en mettant l'entrée MCLR à 0. Le PIC
reprend l'exécution du programme à partir du début.
 Timeout du chien de garde WDT si celui-ci est validé. Le PIC reprend le programme à
partir de l'instruction qui suit l'instruction SLEEP
 Interruption INT (sur RB0) ou RBI (sur RB4-RB7) ou EEI (fin d'écriture en EEPROM
de données). Le bit de validation de l'interruption en question doit être validé, par
contre, le WAKE-UP a lieu quelle que soit la position du bit de validation globale GIE.
On a alors deux situations :
o GIE = 0, Le PIC reprend l'exécution du programme à partir de l'instruction
qui suit l'instruction SLEEP, l'interruption n'est pas prise en compte.
o GIE = 1, Le PIC exécute l'instruction qui se trouve juste après l'instruction
SLEEP puis se branche à l'adresse 0004 pour exécuter la procédure
d'interruption. Dans le cas où l'instruction suivant SLEEP n'est pas désirée, il
faut utiliser l'instruction NOP.

LES INTERRUPTIONS

Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure
d'interruption. A la fin de cette procédure, le microcontrôleur reprend le programme à l’endroit
où il s’était arrêté. Le PIC16F84 possède 4 sources d'interruption. A chaque interruption sont
associés deux bits: un bit de validation et un drapeau. Le premier permet d'autoriser ou non
l'interruption, le second permet au programmeur de savoir de quelle interruption il s'agit. Tous
ces bits sont dans le registre INTCON à part le drapeau EEIF de l'interruption EEI qui se trouve
dans le registre EECON1.

Le déroulement d’une interruption

Lorsque l'événement déclencheur d'une interruption intervient, alors son drapeau est positionné
à un (levé). Si l'interruption correspondante a été validée, elle est alors déclenchée : le
programme arrête ce qu'il est en train de faire et va exécuter la procédure d'interruption qui se
trouve à l'adresse 4 en exécutant les étapes suivantes :
 l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis
remplacée par la valeur 0004 (adresse de la routine d'interruption).
 Le bit GIE est mis à "0" pour inhiber toutes les interruptions (afin qu'on ne soit pas
dérangés pendant l'exécution de la procédure d'interruption).
 A la fin de la procédure d'interruption (instruction RETFIE) :
o le bit GIE est replacé à l'état haut (autorisant ainsi un autre événement)
o le contenu du PC est rechargé à partir de la pile, ce qui permet au
programme de reprendre là où il s'est arrêté

25
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
Remarque :
- Le drapeau reste à l’état haut même après le traitement de l’interruption. Par
conséquent, il faut toujours le remettre à "0" à la fin de la routine d'interruption
sinon l'interruption sera déclenchée de nouveau juste après l'instruction RETFIE.

- Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W et


STATUS doivent être sauvegardés en RAM puis restaurés à la fin de la routine
pour que le microcontrôleur puisse reprendre le programme dans les mêmes
conditions où il l'a laissé.

L’interruption INT (entrée RB0 du port B)

Cette interruption est provoquée par un changement d'état sur l'entrée RB0 du port B quand
elle est programmée en entrée. Elle est gérée par les bits :
- INTE : bit de validation (1=oui, 0=non) ;
- INTF : drapeau ;
- INTEDG : front de déclenchement, 1=montant, 0=descendant (registre
OPTION_REG).

L'interruption RBI (RB4 A RB7 du port B)

Cette interruption est provoquée par un changement d'état sur l'une des entrées RB4 à RB7 du
port B, Le front n'a pas d'importance. Les bits associés sont RBIE (validation) et RBIF (drapeau)
du registre INTCON.

L'interruption TOI : débordement du timer TMRO

Cette interruption est provoquée par le débordement du timer TMR0. Les bits associés
sont T0IE (validation) et T0IF (drapeau) du registre INTCON.

L'interruption EEI : fin d’écriture dans l’EEPROM

Cette interruption est déclenchée à la fin d'une écriture réussie dans l'EEPROM. Les bits
associés sont EEIE (validation) et EEIF (drapeau) du registre INTCON.

INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF


EECON1 - - - EEIF WRERR WREN WR RD
OPTION_REG RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

26
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène
REFERENCES

[1] PIC16F8X, document DS30430C, www.microchip.com


[2] PIC16F84a, document DS35007A, www.microchip.com
[3] Programmation des PIC, Première partie-PIC16F84-Révision 5, par BIGONOFF,
http://www.abcelectronique.com/bigonoff/organisation.php?2654c
[4] Le microcontrôleur PIC 16F84, 2002, par Somo COULIBALY

27
Le microcontrôleur PIC 16F84 de Microchip – Notes de cours – année 2015 – Dr. ALI Eugène

You might also like