Vous êtes sur la page 1sur 14

Chapitre II Architecture du microcontrôleur PIC

II.1 Présentation du microcontrôleur considéré

On considère un microcontrôleur PIC de la famille Mid-Range qui est le PIC16F84. La


figure II.1 montre la structure générale du PIC16F84, on peut clairement voir qu’elle est basée
sur l’architecture de Harvard.

Figure. II.1 Description générale du PIC16F84

En effet, Le PIC16F84 se compose de quatre principaux blocs : la mémoire de


programme, la mémoire de données, le CPU et les ressources auxiliaires. La figure II.2
présente l’organisation générale du PIC avec les principales caractéristiques de ces
composants.

Figure. II.2 Organisation générale du PIC16F84

SMAANI Billel 9 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Le microcontrôleur PIC16F84 se caractérise par :

Une mémoire programme (FLASH) permettant de stocker les mots des


instructions formant le programme, sa capacité est 1024 emplacements de 14 bits
(Mid-Range) et elle est programmable et effaçable électriquement.
La mémoire de données volatile est représentée par la RAM dans laquelle on
trouve les différents registres du PIC considéré.
La EEPROM est une mémoire donnée non volatile (64 octets) dans laquelle on
peut lire et écrire des données de huit bits (soit un octet).
On trouve des ressources auxiliaires, comme les temporisateurs : WDT et TMR0,
le premier est un chien de garde et le deuxième est un temporisateur d’usage
général.
Dans les microcontrôleurs PICs, le registre du travail est ‘’W’’.

On note également que les microcontrôleurs PICs se caractérisent par un prédiviseur de


fréquence, dans lequel la fréquence est toujours diviser sur quatre (voir la suite du chapitre).

II.2 Architecture matérielle

II.2.1 Structure externe

Le PIC16F84 se présente sous la forme d’un boitier PDIP de 19 pines (pattes), comme
montre la figure II.3.

Figure. II.3 Brochage du PIC16F84

La description des pines du PIC16F84 est la suivante :

L’alimentation du circuit est assurée par les pattes VDD (entre 3 et 6 Volts) et
VSS (GND).

SMAANI Billel 10 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Le PIC est un système qui exécute des instructions, les unes après les autres à
une vitesse qui est fixée par la fréquence d’horloge interne au circuit. Cette
horloge doit être stabilisée de manière externe au moyen d’un oscillateur externe
connecté aux pattes OSC1/ OSC2 (patte 16 et 15).
La patte numéro 4 est appelée MCLR (Reset), elle permet lorsque la tension
appliquée est égale à 0V de réinitialiser le microcontrôleur. C’est-à-dire, que si un
niveau bas (0 Volt) est appliqué sur le MCLR, le PIC s’arrête et place tout ses
registres dans un état connu et se redirige vers le début de la mémoire de
programme pour recommencer la réexécution des instructions du programme à
partir du début (adresse dans la mémoire de programme: 0000).
Les broches RB0 à RB7 et RA0 à RA4 sont les lignes d’entrées/sorties
numériques. Elles sont au nombre de 13 et peuvent être configurées en entrée ou
en sortie. Ce sont elles qui permettent au microcontrôleur de dialoguer avec le
monde extérieur (périphériques). L’ensemble des lignes RB0 à RB7 forme le port
B et les lignes RA0 à RA4 forment le port A.. Certaines de ces broches ont aussi
d’autres fonctions telles que les temporisateurs (Timer) et les interruptions.

II.2.2 Structure interne

La structure interne du PIC16F84 est décrite par la figure II.4, l’architecture du


microcontrôleur considéré est basée sur le schéma de la figure II.1.

Pour que le microcontrôleur exécute un programme en Assembleur PIC, il utilise divers


composants, comme :

La mémoire de programme FLASH.


Les mémoires de données : RAM et EEPROM.
Le décodeur & l’unité de commande.
L’unité arithmétique et logique (UAL).
Différents types de registres comme : le compteur ordinal (CO), le registre
d’instruction (RI), le registre du travail W et le registre d’état (STATUS).

En effet, le registre RI permet de stocké le code d’opération de l’instruction qui est en


cours d’exécution. L’adresse de la prochaine instruction a exécutée se trouve dans le registre
CO (ou PC). On note également qu’il existe d’autres registres (SFR) qui sont nécessaires au
fonctionnement du PIC.

SMAANI Billel 11 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Figure. II.4 Architecture interne du PIC16F84

Le microcontrôleur PIC exécute les instructions des programmes en respectant un rythme


d’horloge. On définit ‘’le cycle instruction’’ comme étant le temps nécessaire à l’exécution
d’une instruction.

Dans ce cas, chaque instruction est exécutée en deux phases :

Phase de recherche : recherche du code binaire de l’instruction stocké dans la


mémoire de programme.
Phase d’exécution : le code de l’instruction est interprété par le processeur et
exécuté.

On note que chaque cycle d’instruction dure 4 périodes du signal d’horloge.

En effet, durant chaque cycle d’instruction, le PIC réalise la phase d’exécution de


l’instruction en parallèle avec la phase de recherche de la prochaine instruction, come montre
la figure II.5. Cela grâce à la séparation des mémoires programme/données et ainsi aux
doublements des bus adresse/données pour chaque cas de mémoire (voir la figure II.6).

SMAANI Billel 12 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Figure. II.5 Processus d’exécution des instructions du PIC

On note également qu’un seul cycle d’instruction suffit à l’exécution complète de la majorité
des instructions du PIC.

Figure. II.6 Connexion du CPU avec les différents mémoires

II.2.2.1 La mémoire programme

La mémoire programme est un élément crucial dans la structure du PIC considéré. La


figure II.7 représente le schéma de la mémoire programme reliée au registre PC (ou CO).

Figure. II.7 Schéma de la mémoire programme du PIC16F84 reliée au registre PC.

SMAANI Billel 13 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

A la mise sous tension, le processeur du PIC va chercher la première instruction qui se


trouve à l’adresse 0000 de la mémoire de programme, exécute puis il va chercher la
deuxième instruction à l’adresse 0001 et ainsi de suite, cela sauf dans le cas d’un saut ou
d’appel de sous programme. On parle donc du fonctionnement séquentiel.

En effet, le registre PC se pointe sur l’adresse de la prochaine instruction a exécutée. De


plus, la PILE est une mémoire de type LIFI (Last In First Out) permettant de sauvegarder
l’adresse d’une instruction de manière temporaire et automatique, cela dans le cas des
interruptions (ou d’appel d’un sous programme). Après l’exécution d’un sous programme, le
processeur se retourne vers l’exécution de l’instruction définit par l’adresse stocké dans la
PILE (08 niveaux).

Aussi, la mémoire programme est formé de 1024 emplacements (3FF en hexadécimale)


contenant 14 bits. Et chaque instruction occupe un emplacement, défini par une adresse.

II.2.2.2 La mémoire de données RAM

Il s’agit d’un élément énormément important dans le fonctionnement et la structure du


PIC16F64. La figure II.8 représente le schéma de la mémoire RAM et compris les registres de
ce microcontrôleur. Dans ce cas, les registres sont repartis sur deux pages (ou Bank) : page 0
et page 1.

Figure. II.8 La mémoire de données RAM.

SMAANI Billel 14 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

A partir de la figure II.8, on distingue deux types de registres :

Registres SFR : les premiers octets de la mémoire sont réservés aux registres
SFR (Special File Registre). Ce sont des registres (espaces de 08bits) utilisés par
le microcontrôleur pour configurer l’ensemble de son fonctionnement. On les
appelle « registres spécifiques ».
Registres GPR : c’est des registres à usage général qui s’étend de l’adresse 0CH
jusqu’à 4FH (68 octets). Ils sont disposés au niveau de la page 0, dont les quels
l’utilisateur peut lire ou écrire des données.

La figure II.9 décrit la manière qui permet d’accéder à la page 0 ou à la page 1 de la


mémoire. Dans ce cas, l’accès est contrôlé par le bit RP0 du registre d’état STATUS.

Figure. II.9 Processus d’accès à la page 0 ou à la page 1.

II.2.2.3 Les registres SFR

On distingue 16 registres spécifiques répartis sur deux pages (0 et 1) comme montre la


figure II.8. Et chaque registre à une fonction bien déterminée.

Le tableau II.1 présente la structure et la fonction des registres SFR du PIC16F84.

SMAANI Billel 15 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Tableau. II.1 Description des registres SFR du PIC16F84

Registre/Adresse Description
Les cinq bits de poids faible de ce registre sont en lecture seule,
Registre d’état STATUS ce sont des témoins (drapeaux ou Flag en anglais) caractérisant
le résultat de l’opération réalisée par l’UAL.

Z (Zéro) : résultat nul pour une opération arithmétique ou


logique.
DC (Digit Carry) : retenue sur un quartet (4 bits)
Adresse : 03 et 83
C (Carry) : retenue sur un octet (8 bits).
TO/ (Time Out) : débordement du Timer WDT
PD/ : (Power Down) caractérise l’activité du chien de garde
WDT.
FSR Registre de sélection de registre : il contient l’adresse d’un autre
Adresse : 04 et 84 registre (adressage indirect).
PORTA Registre qui contient l’état des lignes du port A
Adresse : 05
PORTB Registre qui contient l’état des lignes du port B.
Adresse : 06
EEDATA Contient un octet lu ou à écrire dans l’EEPROM de données.
Adresse : 08
EEADR Contient l’adresse de la donnée lue ou écrite dans
Adresse : 09 l’EEPROM de données.
INTCON Contrôle des 4 interruptions :
Adresse : 0B et 8B

GIE (Global Interrupt Enable) : interruption générale GIE active


EEIE (EEProm Interrupt Enable) : autorise l'interruption venant
de l'EEPROM.
T0IE (Timer 0 Interrupt Enable) : autorise l'interruption
provoquée par le débordement du TIMER0
INTE (Interrupt Enable) : autorise l’interruption provoquée par
un changement d'état sur broche RB0/INT.
RBIE (RB Interrupt Enable) : autorise les interruptions

SMAANI Billel 16 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

provoquées par un changement d'états sur l'une des broches RB4


à RB7. Si ces bits sont mis à 1, ils autorisent les interruptions
pour lesquels ils sont dédiés.

Drapeaux :
T0IF (Timer 0 Interrupt Flag) : débordement du TIMER
INTF (Interrupt Flag) : interruption provoquée par la broche
RB0/INT.
RBIF (RB Interrupt Flag) : interruption provoquée par les
broches RB4-RB7.
OPTION 8 bits (tous à 1 au RESET) affectant le comportement des E/S et
Adresse : 81 de TIMER.

RBPU/ (RB Pull-Up) : Résistances de tirage à Vdd des entrées


du port B. Si RBPU=0 les résistances de Pull-Up sont
connectées en interne sur l'ensemble du port B.
INTEDG (Interrupt Edge) : sélection du front actif de
l’interruption sur RB0/INT (1 pour front montant et 0 pour front
descendant).
RTS (Real Timer Source) : sélection du signal alimentant le
timer 0 : 0 pour horloge interne, 1 pour RA4/T0CLK
RTE (Real Timer Edge) : sélection du 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) sélection de la valeur du diviseur de
fréquence pour les timers.
TRISA Direction des données pour le port A : 0 pour ‘’sortir’’ et 1 pour
Adresse : 85 ‘’entrer’’
TRISB Direction des données pour le port B : 0 pour ‘’sortir’’ et 1 pour
adresse : 86 ‘’entrer.’’

SMAANI Billel 17 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

EECON1 Contrôle le comportement de l’EEPROM de données.


Adresse : 88 EEIF WRERR WREN WR RD
EEIF (EEProm Interrupt Flag) : passe à 1 quand l’écriture est
terminée.
WRERR (WRite Error) : 1 si erreur d’écriture.
WREN (WRite Enable) : 0 pour interdire l’écriture en EEPROM
de données.
WR (WRite) 1: pour écrire une donnée. Bit remis
automatiquement à 0.
RD (ReaD) : 1 pour lire une donnée. Bit remis automatiquement
à 0.
EECON2 Registre de sécurité d’écriture en EEPROM de données.
Adresse : 89 Une donnée ne peut être écrite qu’après avoir écrit
successivement 0x55 et 0xAA dans ce registre

Aussi, on note que :

Adresse 00 et 80, INDF. Cette adresse ne contient pas de registre physique, elle
sert pour l’adressage indirect.
Adresse 01, TMR0. Contenu du Timer (8 bits). Il peut être incrémenté par
l’horloge (tous les 4 coups d'horloge) ou par la broche RA4.
Adresse 02 et 82, PCL .8 bits de poids faibles du compteur ordinal PC. Les 5
(13-8) bits de poids forts sont dans PCLATH.

II.2.2.4 Les ports d’entrées/sorties

Le PIC16F84 à deux ports :

le port A : RA0 à RA4.


le port B : RB0 à RB7.

Chaque ligne du port A ou B peut être configurée soit en entrée, soit en sortie, et ceci
indépendamment en utilisant les registres TRISA et TRISB.

Si on veut placer une ligne en sortie, il suffit de mettre le bit correspond dans TRISA ou
TRISB à 0 (à retenir : 0 comme Output = sortie et 1 comme Input= entrée).

SMAANI Billel 18 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Les bits des deux registres PORTA et PORTB permettent soit de lire l’état d’une ligne si
celle-ci est en entrée, soit de définir le niveau logique d’une ligne si celle-ci est en sortie.

II.2.2.5 Les temporisateurs

Dans beaucoup d’applications d’électronique, il est nécessaire de contrôler le temps,


et afin de ne pas occuper le microcontrôleur qu'à cette tâche (boucle de comptage qui
monopolise le microcontrôleur), on le décharge en utilisant un temporisateur (Timer).

II.2.2.5.1 Le temporisateur TMR0

Le PIC16F84 dispose de deux temporisateurs : un temporisateur d’usage général qui est


nommé TMR0 et un chien de garde (WDT), ceci comme montre la figure II.4.

Le TMR0 est un compteur ascendant de 8 bits qui peut être chargé avec une valeur
initiale quelconque, il est ensuite incrémenté à chaque coup d'horloge jusqu'à ce que le
débordement aura lieu (débordement : passage de FF à 00).

Figure. II.10 Description général du temporisateur TMR0.

Le TMR0 à deux modes de fonctionnement :

Contrôle du temps ; dans ce cas son entrée d'incrémentation est alors l'horloge
qui correspond au cycle d’instruction (Fosc/4). Il est possible d'utiliser un
prédiviseur de fréquence que nous verrons plus loin.
Compteur d'événements : dans ce cas l'impulsion d'entrées du TMR0 est fournie
par la patte RA4/TOCK (voir la figure II.3).

Le PIC16F84 dispose d'un diviseur de fréquence qui peut être assigné soit au chien de
garde WDG, soit au TMR0 (uniquement un à la fois). L'assignation du prédiviseur se fait
grâce au bit PSA du registre OPTION.

Le principe du fonctionnement est décrit par la figure II.11.

SMAANI Billel 19 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

(a)

(b)

Figure. II.11 (a) : Incrémentation du TMR0 en fonction du signal d’entrée ; (b) : Principe du
fonctionnement du TMR0.

Dans ce cas, le temps de comptage Tcompt se calcule avec la formule suivante :

Tcompt  Tquartz * V pre  compteur  fixe * V pre  compteur  reglable * N impuls

Où, Tcompt : temps de comptage.

Tquartz : période du signal généré par le quartz (décrit par la suite).

V pre compteur  fixe : Valeur du pré-compteur (pré-diviseur) fixe (4).

V pre  compteur  reglable : Valeur du pré-compteur réglable.

N impuls : Nombre d’impulsions.

La structure interne du TMR0 est présentée sur la figure II.12. La configuration du TMR0
se fait à laide des bits du registre OPTION.

Figure. II.12 Structure interne du TMR0.

SMAANI Billel 20 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Le rôle des bits utiles du registre OPTION :

TOCS : type d’horloge sur le TMR0.


0 =impulsion d’horloge interne (Fosc/4).
1 =impulsion via T0CK.
TOSE : type de front sur T0CK.
0 =incrémentation du TMR0 à chaque front ascendant.
1 =incrémentation du TMR0 à chaque front descendant.
PSA ; Assignation du prédiviseur fréquence.
0= diviseur de fréquence est assigné au WDT.
1= diviseur de fréquence est assigné au TMR0.
PS 2, 1, 0 : définition de la valeur du diviseur de fréquence (tableau II.2).

Tableau. II.2 Définition de la valeur du pré-diviseur


de fréquence du TMR0
PS2 PS1 PS0 Diviseur de fréquence
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

II.2.2.5.2 Le chien de garde

Le chien de garde (WDT) est un système qui permet de protéger le microcontrôleur


contre le blocage d’un programme qui est en exécution.

Par exemple, si un programme attend le résultat d'un système extérieur (conversion


analogique numérique par exemple) et qu'il n'y a pas de réponse, dans ce cas le programme
restera bloquer. Et pour en sortir, on utilise un chien de garde qui permettra ainsi de
réinitialiser le microcontrôleur de manière automatique (Reset automatique). On peut activer
ou désactiver le chien de garde en utilisant la directive CONFIG (_WDT_OFF).

SMAANI Billel 21 FT/UMBB


Chapitre II Architecture du microcontrôleur PIC

Du point électronique, le chien de garde est un compteur qui s’incrémente à base d’un
signal d’horloge, et lorsqu'il arrive en fin de comptage, il permet de redémarrer le programme
à partir du début.

II.2.3 L’oscillateur

Le fonctionnement des PICs est basé sur l’utilisation d’un signal d’horloge (CLK)
permettant de cadencé l’exécution des instructions de programmes. À cet effet, on doit relier
le PIC à un oscillateur externe qui permet de générer le signal d’horloge.

La figure II.13 montre le schéma du PIC16F84 connecté à un oscillateur externe à base


du quartz.

Figure. II.13 Schéma de l’oscillateur à quartz connecté au PIC16F84

La figure II.13 montre le schéma du PIC16F84 connecté à un oscillateur externe à base


du quartz. Dans ce cas, la fréquence de l’oscillateur externe est presque égale à la fréquence
du quartz (exemple : 4 Mhz). Aussi, il existe d’autres types d’oscillateurs comme l’oscillateur
RC.

Cependant, puisque les microcontrôleurs PICs se caractérisent par un prédiviseur de


fréquence ‘’/4’’, donc la fréquence interne est égale à la fréquence du quartz divisée sur 4.
Cela comme montre la figure II.5.

On note également, qu’il ne faut pas oublier d’alimenter le PIC (VSS=GND et VDD=5V)
ainsi que de relier la patte MCLR au 5V, ceci pour éviter la réinitialisation du PIC. En effet, le
processus de réinitialisation du PIC doit être effectué garce à un petit circuit qui permet de
relier le MCLR à +5V dans les cas souhaités.

SMAANI Billel 22 FT/UMBB