Vous êtes sur la page 1sur 24

Unité centrale de traitement

Le PIC16F887 dispose d'une unité de traitement 8 bits d'architecture RISC (Reduced


Instruction Set Computer). Elle reconnaît un jeu de 35 instructions simples. Les
instructions complexes comme la multiplication et la division ne sont pas implantées. La
différence avec les processeurs d'architecture CISC (Complex Instruction Set Computer),
qui peuvent décoder jusqu'à 200 instructions dont certaines peuvent être très
sophistiquées, est que toutes les instructions sont codées sur un nombre fixe et réduit de
bits. Ceci en facilite le décodage et l'exécution. En effet, toutes les instruction sont codées
sur 14 bits et sont exécutées en un cycle Tcy de l'horloge instruction (Fosc/4).
Unité centrale de traitement

La mémoire programme et la mémoire de données sont distinctes dans l’architecture de


Harvard ce qui facilite la gestion des bus (instruction/donnée).
La mémoire programme est une mémoire de type EEPROM flash de capacité 8 × 1024
mots de 14 bits. Chaque position contient le code d'une instruction.
Unité centrale de traitement

La mémoire de données est une RAM appelée fichier des registres. Elle est constituée de
96 registres de configuration appelés SFR (Special Function Registers) et de 368
registre à usage général GPR (General Propose Registers) qui jouent le rôle de RAM
proprement dit. Tous les registres SFR ou GPR sont des registres 8 bits. Toutes les
opérations exécutées dessus sont des opérations 8 bits.
Unité centrale de traitement

Comparaison d’architecture : Harvard / Von Neumann


Unité centrale de traitement

Le processeur dispose d'un seul accumulateur nommé W (Working register). C'est un


registre de travail 8 bits intégré avec l’Unité Arithmétique et Logique. Il ne peut donc pas
être adressé de la même façon que les registres SFR ou GPR puisqu'il n'est pas situé
dans la RAM. Toutes les opérations à deux opérandes passent par lui. On peut avoir :
- Une opération entre W et une valeur (précisée dans l'instruction) avec résultat dans W
- Une opération entre W et un registre (RAM). Le résultat peut être récupéré soit dans W
soit dans le registre.

RAM ROM
Unité centrale de traitement

Le processeur dispose d'une pile (Stack) de 8 positions non accessible par le programme.
Elle est utilisée pour sauvegarder le compteur programme lors de l'appel de sous-
programmes et au branchement aux interruptions. Le programmeur fera donc attention à
ne pas avoir plus de 8 appels de fonctions imbriquée.

RAM ROM
Organisation de la mémoire RAM

L’espace mémoire RAM adressable est de 512 positions de 1 octet chacune :



96 positions sont réservées au SFR (Special Function Registers) qui sont les registres
de configuration du PIC.

Les 416 positions restantes constituent les registres GPR (General Propose Registers)
ou RAM utilisateur. Sur le 16F887, 3 blocs de 16 octets chacun ne sont pas implantés
physiquement d’où une capacité de RAM utilisateur de 368 GPR.

→ Pour accéder à la RAM, on dispose de deux modes d’adressage :



Accès à la RAM par adressage DIRECT

Accès à la RAM par adressage INDIRECT
Organisation de la mémoire RAM
Accès à la RAM par adressage DIRECT

Avec ce mode d’adressage, on précise dans l’instruction la valeur de l’adresse { laquelle on


veut accéder. Par exemple, pour additionner le contenu de l'accumulateur W avec le
contenu de la case mémoire d'adresse 50h avec résultat dans Won utilise l'instruction
ADDWF 50h,0
ADDWF est l'instruction qui ajoute W au contenu d'une case mémoire. 50h est l'adresse de
notre case mémoire. « 0 » est un bit qui précise que le résultat doit être rangé dans W, si
on avait pris « 1 », le résultat aurait été rangé dans la case mémoire 50h.
Cette instruction sera codée sur 14 bits, comme le montre la figure ci-dessous :
Organisation de la mémoire RAM
Accès à la RAM par adressage DIRECT

CO : est le code opération de l'instruction ADDWF. Il est codé sur 6 bits car on a 35
instructions différentes,

d : précise la destination du résultat. Comme il n'y a que deux possibilités W ou F, un
seul bit suffit,

adresse : est l'adresse la case mémoire. On est obligé de la coder sur 7 bits pour
compléter les 14 bits de l'instruction

Problème ! 7 bits permettent d’adresser seulement 128 positions.


Organisation de la mémoire RAM
Accès à la RAM par adressage DIRECT
Pour pouvoir adresser les 512 positions accessibles, il faut 9 bits d’adresse. Pour avoir
ces 9 bits, le PIC complète les 7 bits venant de l’instruction par deux bits situés dans le
registre de configuration STATUS. Ces bits sont appelés RP0 et RP1 et doivent être
positionnés correctement avant toute instruction qui accède à la RAM par l’adressage
direct.

Même si on précise une adresse supérieure à 127 (+ de 7 bits) dans une instruction, elle
est tronquée à 7 bits puis complétée par les bits RP0 et RP1 pour former une adresse de 9
bits. Par exemple, pour copier l’accumulateur W dans la case mémoire d’adresse 1EFh, il
faut d’abord placer les bits RP0 et RP1 à 1 , ensuite on utilise soit l’instruction MOVWF
6Fh soit l’instruction MOVWF 1EFh, qui donne le même résultat. En effet, que l’on écrive
6Fh = 0110 1111 ou 1EFh = 0001 1110 1111, le PIC ne prend que 7 bits soit :
1101111 = 6Fh et complète avec les bits RP1 RP0 pour obtenir 11 1101111 = 1EFh.
Pour positionner les bits RP0 et RP1 on utilise les instructions bcf (0) et bsf (1).
Organisation de la mémoire RAM
Accès à la RAM par adressage DIRECT
La RAM apparaît alors organisée en 4 pages appelées banks de 128 octets chacun.
L'adresse instruction permet d'adresser à l'intérieur d'un bank alors que les bits RP0 et RP1
du registre STATUS permettent de sélectionner un bank. La Figure I-9 montre
l’organisation de la RAM avec les zones allouée au SFR et aux GPR. Les zones hachurées
ne sont pas implantées physiquement. Si on essaye d’y accéder, on est aiguillé
automatiquement vers la zone [70h,7Fh] appelée zone commune.
Oublier de sélectionner le bank est une cause fréquente de dysfonctionnement de
programmes. Si par exemple RP1 RP0 = 01 (bank1 est le bank courant). Si on veut faire
une opération sur la case 20h et on oublie de changer de bank. Le processeur prend 7 bits
de l'adresse 20h=0010 0000 et complète avec 01 ce qui donne 01 0100000= A0h. Nous
croyons travailler sur la case 20h alors que le processeur travaille sur la case A0h.
Les 16 cases de la zone commune sont intéressantes car pour y accéder, on n'est pas
obligé de préciser le bank.
Organisation de la mémoire RAM
Accès à la RAM par adressage DIRECT

Organisation
de la RAM
Organisation de la mémoire RAM
Accès à la RAM par adressage INDIRECT

Pour accéder à une position de la RAM en utilisant l’adressage indirect, on passe toujours
par une position fictive appelée INDF (Indirect File).
Exemple : l’instruction CLRF INDF signifie : mettre à zéro la case mémoire d’adresse INDF.
Mais quelle est l’adresse de cette position appelée INDF ? La réponse est :

INDF est la case mémoire pointée par le pointeur IRP/FSR.

IRP est un bit qui se trouve dans le registre STATUS et FSR est un registre accessible
dans tous les bancs. On peut se demander pourquoi on ajoute le bit IRP. En effet, le
registre de pointage FSR est un registre 8 bits, il peut donc adresser au maximum 256
positions mémoire (de 00h à FFh), c’est seulement la moitié de la RAM. Il nous manque
un bit pour avoir les 9 bits nécessaires. On utilise le bit IRP qui se trouve dans le registre
STATUS.
Exemple : Si on place 74h dans le registre FSR et on positionne le bit IRP à 1, alors,
l’instruction CLRF INDF signifie : remettre à zéro la case mémoire d’adresse 174h.
Organisation de la mémoire RAM
Accès à la RAM par adressage INDIRECT

INDF est la case mémoire pointée par le pointeur:


FSR+IRP

→ Chaque fois que le PIC rencontre le mot INDF dans un programme, il sait qu’il s’agit de
la case mémoire dont l’adresse (9 bits) se trouve dans le pointeur FSR complété par le bit
IRP du registre STATUS
Organisation de la mémoire RAM
Pour résumer :
Organisation de la mémoire RAM

Détail des registres SFR et leurs états au démarrage


Organisation de la mémoire RAM
Exercices:

Exercice 1)
Dans quel bank se trouvent les cases mémoire d'adresse : 1A4h, B5h, 130h, 58h, 100,
200, 250, 300, 400
Exercice 2)
Combien de cases mémoires libres (GPR) y a-t-il dans la zone mémoire qui commence à
la position A0h et se termine à EAh.
Exercice 3)
Quelle est l'adresse de la dernière position d'une zone mémoire de 40 cases qui
commence à la position 190h.
Exercice 4)
Combien de cases mémoires libres (GPR) y a-t-il dans les bancs bank0, bank1, bank2 et
bank3
Jeux d’instructions
Introduction:


Tous les PIC 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 (OC)

ainsi que l'opérande,



Toutes les instructions sont exécutées en un cycle d'horloge, à part les instructions de

saut qui sont exécutées en 2 cycles d’horloge. Sachant que l’horloge système est

égale à Fosc/4, si on utilise un quartz de 20MHz, on obtient une horloge Fosc/4 =

5000000 cycles/seconde, cela nous donne une puissance de l’ordre de 5MIPS (5 Million

d’ Instructions Par Seconde


Jeux d’instructions
Format des instructions:

Instructions orientées Registre →


Instructions orientées bits →


Instructions opérant sur une valeur →


Instructions de saut et appel de procédures →
Jeux d’instructions
Instructions orientées Registre :

Exemples :

ADDWF 70h,1 ou ADDWF 70h,f XORWF 35h,0 ou XORWF 35h,w


Jeux d’instructions
Instructions orientées Bits :

Exemple : BSF STATUS,2

Instructions orientées valeurs (constantes) :

Exemple : MOVLW 0x55 (w=0x55)


Jeux d’instructions
Instructions divers :

Exemple de programme : boucle :


bsf PORTB,0 ; mise à 1 de la sortie
nop ; rien à faire : 1 temps mort
bcf PORTB,0 ; mise à 0 de la sortie
goto boucle ; rebouclage
Exercices
Exercices 5 :

1)Donner une petite définition d’un microcontrôleur.

2)C’est quoi un PIC ?

3)Déchiffrer l’acronyme : RISC.

4)C’est quoi la différence avec CISC ?

5)Citer les familles les PIC selon la taille des instructions

6)Citer les mémoires du PIC 16F887 et leurs tailles

7)Sur combien de banques est subdivisée la mémoire de données RAM ?

8)Comment peut-on accéder à chaque banque ?

9)Donner le nom de deux portions constituant chaque banque

10)Quelle est l’utilité du registre FSR et de INDF ?


Exercices
Exercices 6 :

1)Comment peut on accéder à une position dans la RAM ?

2)Donner les différents moyens pour accéder à une case mémoire d’adresse 1Eh (RAM)

3)Que se passe-t-il si on essais d’accéder à l’adresse 172h ?

4)Expliquer l’instruction suivante : MOVLW 0xAA

5)On sait que le registre w contient la valeur 12, comment faire pour lui ajouter une valeur
de 5, donner la/les bonnes instructions en assembleur

6)On veut mettre la valeur suivante 10011100 sur le PORTD d’un PIC 16F887 pour
controller 8 LEDs. Donner le schéma électronique ainsi que les instructions nécessaires
en assembleur.

Vous aimerez peut-être aussi