Le PIC16F84 est un microcontrôleur 8 bits de faible coût. Certes, il ne peut se substituer aux autres microcontrôleurs (68HC11 par exemple) mais il permet toutefois de créer de nombreuses applications.
De plus, avec son jeu d'instructions réduit, il est très agréable a utiliser lorsqu'on désire s'initier à l'étude d'un microcontrôleur.
Enfin, ses caractéristiques internes et externes sont très appréciable:
Le PIC16F84 est logé dans un boîtier 18 broches DIL ou SOIC ( version CMS).
La figure ci-dessous nous décrit le brochage du PIC16F84:
Le PIC existe aussi en deux versions:
PIC16F 84 : pour une utilisation dans une gamme d'alimentation classique (4.5 à 5.5V).
PIC16LF84: pour une gamme étendue de l'alimentation (2 à 6V).
L'architecture interne nous présente les principaux organes qui composent le microcontrôleur.
Le but ici n'est pas d'expliquer chaque organe (puisqu'un chapitre leur est consacré) mais permet de visualiser l'ensemble pour mieux comprendre le fonctionnement du monochip.
Cependant, même si les opcodes sont codés sur 14 bits, les données et les résultats sont et seront toujours sur 8 bits.
La mémoire du PIC16F84 est divisée en deux parties distinctes:la mémoire programme et la mémoire de donnée.
Le premier contient les instructions du programme ainsi que les vecteurs RESET et INTERRUPTION.
Dans la mémoire de donnée se trouve tout les registres nécessaires pour la configuration et l'utilisation des périphériques internes ainsi que 68 octets de RAM utilisateurs.
Cette mémoire de 1K stock le programme. l'emplacement de celui-ci peut être à n'importe quel endroit de la mémoire. Cependant, il faut savoir que le PIC16F84 ,suite à un RESET ou lorsqu'on l'alimente, commence toujours à l'adresse 0000H (Vecteur RESET).
De plus, lorsqu'il y a une interruption, et si celle-ci est validée,le microcontrôleur va à l'adresse 0004H (Vecteur d'INTERRUPTION).
Par conséquent, garder toujours à l'esprit ces deux adresses particulières de la mémoire programme.
Voici un exemple typique d'un programme où l'on utilise l'instruction GOTO et CALL pour gérer les vecteurs:
ORG 0000 ;Début de la mémoire programme
GOTO debut ;Là, on indique au microcontrôleur que le début du programme se trouve à l'adresse debut
ORG 0004 ;Début de l'adresse d'une l'interruption.
CALL GESTIN ; S'il y a une interruption, le monochip ira appelle le sous-programme GESTIN.
debut bla bla ; début du programme.
bla bla
La mémoire de donnée est divisée en deux parties. Une partie appelée SFR est encore divisée en deux pages (Bank0 et Bank 1). Toutes les données de la mémoire sont appelées registres y compris les données utilisateurs.
Le SFR permet de configurer tout les modules internes du PIC16F84 (les PORTS, le TIMER, la gestion des interruptions, etc...). Il est de plus utilisé par le CPU.
Pour accéder a l'un de ces registres, il faut d'abord se positionner sur la page (Bank) appropriée. Ensuite, il suffit de lire ou d'écrire dans le registre nommé.
L'adressage directe des pages se fait par deux bits du registre de STATUS (RP0 et RP1). On peut utiliser l'adressage indirecte avec le registre FSR.
La figure ci-dessous nous montre les différents registres du SFR ainsi que leur adresse associée.
Le GPR est en fait la RAM (8bits) utilisateurs. C'est ici que l'on stocke les variables et les données. L'utilisation des pages (Bank ) n'est pas nécessaire puisque le Bank 1 est "mapped" avec le Bank0. Cela signifie qu' écrire une donnée à l'adresse 0CH ou à l'adresse 8CH revient au même.
Enfin, l'adressage peut se faire de manière directe ou indirecte (en utilisant le registre FSR).