Vous êtes sur la page 1sur 17

Chapitre 1:

Architecture du microcontrôleur PIC 16F84

Niveau: 2A, 2P et 3B

1
Introduction
• Les instructions d’un programme sont contenues dans la mémoire programme du
microcontrôleur sont une suite de mots binaires décodées puis exécutées par le
microprocesseur.

• Ces codes binaires sont difficilement compréhensibles par le programmateur.

• C’est la raison pour laquelle ils sont traduits en différents mots (opcodes) faisant partie du
langage assembleur.

• Rappel: Le PIC 16F84 fait partie de la famille MidRange:


• ses instructions sont codées sur un mot de 14 bits.

• le PIC16F84 est de type RISC:


• jeu d’instruction réduit (composé de 35 instructions).

2
types d’instructions
• D’après le jeu d’instruction du PIC16F84 (page 56 du Datasheet), on peut classer les
instructions en 4 types:

1) Les instructions orientées octet: Ce sont des instructions qui manipulent les
données sous forme d’octets.

2) Les instructions orientées bit : Ce sont des instructions destinées à manipuler


directement des bits d’un registre particulier.

3) Les instructions générales: Ce sont les instructions qui manipulent des données qui
sont codées dans l’instruction directement. (mode d’adressage immédiat)

4) Les instructions de sauts et appels des sous-routines : Ce sont les instructions qui
provoquent une rupture dans la séquence de déroulement du programme.
3
1er groupe d’instructions (1)

4
Explication des colonnes du tableau précédant:
❑ Mnémonique, opérandes = mots réservés compris et interprétés par le programme
d’assemblage.
• f : la désignation du registre mémoire (SFR ou GPR) qui sera utilisé par l’instruction.
• d : la désignation de la destination, spécifie l’emplacement du résultat:
• Si d=0 , le résultat est placé dans le registre de travail W;
• Si d=1, le résultat est placé dans le registre spécifié dans l’instruction.
❑ Description = le rôle de l’instruction
Exemple 1: ADDWF PORTB,0 ; (w)+(PORTB) et mettre le résultat dans (w)
Exemple 2: ADDWF PORTB,1 ; (w)+(PORTB) et mettre le résultat dans (PORTB)
Exemple 3: DECF var,0 ; décrémentation de var : (var)-1 et mettre le résultat dans (w)
Exemple 4: DECF PORTB,0 ; décrémentation de var: (var)-1 et mettre le résultat dans (var)

5
❑ Cycles = le cycle machine ou cycle d’instruction = le temps nécessaire pour exécuter une instruction
Rappel: Cycle instruction = 4 * Cycle du circuit d’horloge
= 4 / Fréquence du circuit d’horloge (pins 15,16 du PIC 16F84)

• la majorité des instructions sont simples (durent 1 cycle)


• D’autres instructions nécessitent 1 ou 2 cycles, cela dépend de leur résultat (DECSZ,INCFSZ).
• Si le résultat est faux: 1 cycle
• Si le résultat est vrai : 2 cycles

Exemple:
decfsz var,1 ;décrémenter var, mettre le résultat dans var et tester si ce résultat est null?
si résultat non null → l’instruction dure 1 cycle
si résultat null → l’instruction dure 2 cycles

6
❑ La traduction de l’instruction sur 14bits (le code binaire):

Exemple :
COMF PORTB,1
• les 7 bits de plus faible poids de l’adresse du registre PORTB.
00001110000101 • le 8ème bit de l’adresse est déduit du numéro de la banque (le bit RP0 du registre
STATUS)

7
❑Les bits de STATUS affectés :

L’indicateur d’état Zéro (flag Z):


Z=1 Si le résultat d’une opération qui l’affecte est NULL.
Z=0 Si le résultat est NON NULL.
Exemple:
• Dans le cas de ADDWF et que le résultat obtenu est 0, le bit Z sera à 1.
• Si le résultat est différent de 0, le bit Z = 0. Dans les 2 cas il est modifié.
• Dans le cas de l’instruction MOVWF, le bit Z ne sera pas modifié, même si la valeur vaut 0 car cette instruction n’affecte pas le bit Z.

L’indicateur d’état de Débordement « Carry » (flag C):


C=1 Si le résultat d’une opération entraîne un débordement. Il s’agit en fait du 9ème bit de l’opération.
C=0 Sinon.
Exemple: avec l’instruction ADDWF:
• B’11111110’ (254) + B’00000011’ (3) = B’100000001’ (257) donc 9 bits.
• Comme les registres du PIC ne font que 8 bits, résultat B’00000001’ et C positionné à 1.
• B’11111110’ (254) + B’00000010’ (2) = B’00000000’ avec C = 1 ET Z = 1, signifie résultat null, mais avec report (donc résultat = 256).
8
2ème groupe d’instructions

• b :le numéro du bit affecté par l’opération.


• f :le registre dans lequel le bit est localisé.
Représentation binaire:

9
• BTFSS , BTFSC

10
3ème groupe d’instructions

11
Les modes d’adressage
• Les modes d’adressages sont les différents moyens qui permettent au
microprocesseur d’accéder à une opérande en vue de tester ou de
modifier le contenu d’un registre de la mémoire.

• Il existe 3 modes d’adressage:

1. Mode d’adressage immédiat (littéral),


2. Mode d’adressage direct,
3. Mode d’adressage indirect.
12
Mode d’adressage immédiat (littéral):
La donné manipulée par l’instruction est codée avec l’instruction elle-même, la donnée est appelée un
«literal» (appellation adoptée par Microchip).

• Exemple:

« je mets 100DT en poche »


• La valeur fait IMMEDIATement partie de la phrase. J’ai donné LITTERALlement la valeur concernée.

13
Le mode d’adressage direct:
L’emplacement contenant la valeur utile est donné DIRECTement dans la phrase.

• exemple : Movwf SORTIE


• SORTIE désigne l’emplacement contenant la valeur qu’on veut manipuler,
• Cette instruction permet de mettre dans le registre SORTIE le contenu du registre W .

14
Le mode d’adressage indirect:
• Avec ce mode d’adressage, il faut passer par 2 étapes préalables pour connaitre la valeur utile.

• L ’adressage indirect fait appel au deux registres spéciaux FSR (adresse 0X04 dans les 2 banques) et
INDF (adresse0x00) de la mémoire de donnée.

• Fonctionnement:
▪ Le registre FSR (signifie File Select Register) pointe sur l’emplacement du registre qui contient la
donnée utile.
▪ Le registre INDF (signifie INDirectFile) nous donne accès au CONTENU de la case pointée par
FSR.

• Remarque: le registre INDF n’existe pas vraiment, ce n’est qu’un procédé d’accès particulier à FSR.
• Ce mode d’adressage se reconnaît immédiatement par l’utilisation du registre INDF.

15
Exemple: La donnée utile est 0x05 qui se trouve à l’adresse 0x0E de la mémoire.
• Pour récupérer cette donnée avec le mode d’adressage indirect, le PIC va voir dans le registre FSR,
et lit l’adresse contenue, dans ce cas 0X0E. Il va ensuite à l’emplacement visé, et lit le CONTENU via
INDF et le met dans (W).
• Donc, dans (W) on aura le contenu de 0x0E, soit 0x50.

movlw 0x50 ; chargeons une valeur quelconque


movwf mavariable ; et plaçons-la dans la variable « mavariable »
movlw mavariable ; on charge l’ADRESSE de mavariable, par exemple 0x0E. Donc (W) = 0x0E
movwf FSR ; on place l’adresse de destination dans FSR et on dira que FSR POINTE sur mavariable
movf INDF,w ; charger le CONTENU de INDF dans W.

• Attention : movf FSR , w


Ceci en effet de l’adressage DIRECT. On placera donc dans (W) le CONTENU du registre FSR, donc 0X0E
(l’adresse pointée) sera mis dans (W).
16
Conclusion
Veuillez consulter le document datasheet du PIC 16F84 ,
à partir de la page 57 jusqu’à la page 70.

17

Vous aimerez peut-être aussi