Jeu d'instructions des PIC 16F84A, 16F628A, 16F88, 16F876A et 16F886
Les PIC 16F84A, 16F628A, 16F88, 16F876A, 16F886 (famille mid-range) ont le même jeu d'instructions, constitué de seulement 35 instructions (architecture RISC : Reduced Instruction-Set Computer).
Une instruction est codée par un mot de 14 bits.
La mémoire programme (de type Flash) a une taille de :
ce qui permet de stocker un programme de :
Une instruction nécessite 1 cycle, ou bien 2 cycles dans le cas d'une instruction de branchement (GOTO, CALL ...).
Avec une horloge à quartz de 20 MHz, un cycle correspond à 4/(20.106) = 200 nanosecondes.
Le microcontrôleur peut donc exécuter jusqu'à 5 millions d'instructions par seconde (5 MIPS) !
W : régistre de travail (accumulateur), taille 8 bits
k : valeur littérale, taille 8 bits
Mnémonique
, opérande | Description | bit
du registre STATUS affecté | nombre
de cycles |
MOVLW k | k (8 bits) est chargé dans (W) | - | 1 |
ADDLW k | Additionne k (8 bits) et (W) et place le résultat dans (W) | C,
DC , Z | 1 |
SUBLW k | Soustrait W de k (8 bits) et place le résultat dans (W) k - (W) -> (W) | C, DC ,
Z | 1 |
ANDLW k | Réalise un ET logique entre k (8 bits) et (W), et place le résultat dans (W) | Z | 1 |
IORLW k | Réalise un OU logique (inclusif) entre k (8 bits) et (W), et place le résultat dans (W) | Z | 1 |
XORLW k | Réalise un OU exclusif entre k (8 bits) et (W), et place le résultat dans (W) | Z | 1 |
L : label (étiquette)
Mnémonique
, opérande | Description | bit
du registre STATUS affecté | nombre
de cycles |
GOTO L | Branchement à l'adresse L | - | 2 |
CALL L | Appelle un sous-programme (subroutine) situé à l'adresse L | - | 2 |
RETURN | Retour de sous-programme | - | 2 |
RETLW k | Retour de sous-programme, avec chargement de la valeur littérale k (8 bits) dans (W) | - | 2 |
RETFIE | Retour de sous-programme d'interruption | - | 2 |
CLRWDT | Efface le Watchdog | /TO,
/PD | 1 |
SLEEP | Place le microcontrôleur en mode sommeil | /TO,
/PD | 1 |
f : registre (spécial ou d'usage général)
b : position du bit (0 à 7)
Mnémonique
, opérande | Description | bit
du registre STATUS affecté | nombre
de cycles |
BCF f , b | Mise à 0 du b ème bit du registre f | - | 1 |
BSF f , b | Mise à 1 du b ème bit du registre f | - | 1 |
BTFSC f , b | Si le b ème bit du registre f est égal à 0, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles) | - | 1
ou 2 |
BTFSS f , b | Si le b ème bit du registre f est égal à 1, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles) | - | 1
ou 2 |
f : registre (spécial ou d'usage général)
d : registre de destination (on peut choisir entre le registre de travail W et le registre f ).
Mnémonique
, opérande | Description | bit
du registre STATUS affecté | nombre
de cycles |
MOVWF f | (W) est chargé dans (f) | - | 1 |
MOVF f , d | (f) (8 bits) est chargé dans (destination) | Z | 1 |
ADDWF f , d | Additionne le contenu du registre f (8 bits) et (W), et place le résultat dans (destination) | C,
DC , Z | 1 |
SUBWF f , d | Soustrait (W) de (f) (8 bits) et place le résultat dans (destination). (f) - (W) ->(destination) | C,
DC , Z | 1 |
ANDWF f , d | Réalise un ET logique entre (f) (8 bits) et (W), et place le résultat dans (destination) | Z | 1 |
IORWF f , d | Réalise un OU logique (inclusif) entre (f) (8 bits) et (W), et place le résultat dans (destination) | Z | 1 |
XORWF f , d | Réalise un OU exclusif entre (f) (8 bits) et (W), et place le résultat dans (destination) | Z | 1 |
COMF f , d | Réalise le complément logique de (f) (8 bits), et place le résultat dans (destination) | Z | 1 |
DECF f , d | Décrémente (f) et place le résultat dans (destination). (f) - 1 -> (destination) | Z | 1 |
DECFSZ f , d | Décrémente (f) et place le résultat dans (destination). Si le résultat est 0, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles) | - | 1
ou 2 |
INCF f , d | Incrémente (f) et place le résultat dans (destination). (f) + 1 -> (destination) | Z | 1 |
INCFSZ f , d | Incrémente (f) et place le résultat dans (destination). Si le résultat est 0, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles) | - | 1
ou 2 |
CLRF f | Efface le contenu du registre (f). Remarque : le bit Z est donc mis à 1. | Z | 1 |
CLRW | Efface le contenu de l'accumulateur (W). Remarque : le bit Z est donc mis à 1. | Z | 1 |
RLF f , d | Réalise une rotation circulaire à gauche : Le résultat est placé dans (destination). | C | 1 |
RRF f , d | Réalise une rotation circulaire à droite : Le résultat est placé dans (destination). | C | 1 |
SWAPF f , d | Les 4 bits de poids forts et les 4 bits de poids faibles de (f) sont échangés. Le résultat est placé dans (destination). | - | 1 |
NOP | Cette instruction ne fait rien (durée 1 cycle). | - | 1 |
(C) Fabrice Sincère ; Révision 1.0.4