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 :
- 1792 octets (16F84A)
- 3584 octets (16F628A)
- 7168 octets (16F88)
- 14 336 octets (16F876A - 16F886)
ce qui permet de stocker un programme de :
- 1024 instructions (16F84A)
- 2048 instructions (16F628A)
- 4096 instructions (16F88)
- 8192 instructions (16F876A - 16F886)
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) !
- Jeu d'instructions
W : régistre de travail (accumulateur), taille 8 bits
k : valeur littérale, taille 8 bits
Mnémonique , opérande
|
Description
|
bit du registre STATUSaffecté
|
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 : |
C
|
1
|
RRF f , d | Réalise une rotation circulaire à droite : |
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