1
Les microcontrôleurs PIC de Microchip Le 16F84
2
Sommaire
INTRODUCTION ……………………………………………………………………………………………………….3
I Le PIC 16F84……………………………………………………………………………………………………..4
I.1 Aspect externe du 16F84………………………………………………………………………………..4
I.2 La mémoire programme (flash)………………………………………………………………………..5
I.3 La mémoire RAM – Rrgistres…………………………………………………………………………….5
I.4 L’ALU et le registre W…………………………………………………………………………………….5
I.5 L’Horloge…………………………………………………………………………………………………….6
I.6 Le ports d’ E/S PORTA……………………………………………………………………………………6
I.7 Le ports d’ E/S PORTB……………………………………………………………………………………7
I.8 Le Timer TMR0…………………………………………………………………………………………….7
I.9 Le Timer Watchdog WDT (Chien de garde)…………………………………………………………8
I.10 Le mode SLEEP…………………………………………………………………………………………….8
I.11 La mémoire EEPROM de configuration……………………………………………………………….9
I.12 La mémoire EEPROM de données……………………………………………………………………..9
I.12.1 Procédure de lecture dans l’EEPROM de données…………………………………………10
I.12.2 Procédure d’écriture dans l’EEPROM de données………………………………………….10
I.13 Les interruptions…………………………………………………………………………………………10
I.13.1 Déroulement d’une interruption……………………………………………………………….10
I.13.2 L’interruption INT (Entrée RBO DU PORTB)………………………………………………..11
I.13.3 L’interruption RBI (RB4 A RB7 DU PORTB)………………………………………………….11
I.13.4 L’interruption T0I : Débordement du Timer TMR0………………………………………..11
I.13.5 L’interruption EEI : Fin d’écriture dans l’EEPROM………………………………………….11
I.14 L’adressage indirect……………………………………………………………………………………..11
I.15 Le conteur programme…………………………………………………………………………………11
I.15.1 GOTO calculé……………………………………………………………………………………….12
I.16 Les indicateurs……………………………………………………………………………………………12
I.17 Les instructions du 16F84……………………………………………………………………………..12
I.17.1 Les instructions « orientées octet » (adressage direct)………………………………….12
I.17.2 Les instructions « orientées bits »…………………………………………………………….13
I.17.3 Les instructions opérant sur une donnée (adressage immédiat)………………………13
I.17.4 Les instructions de saut et appel de procédures…………………………………………..13
I.17.5 Le jeu d’instructions………………………………………………………………………………14
I.17.6 Etat de quelque registre à l’initialisation……………………………………………………..14
II Les outils de développement………………………………………………………………………………..15
II.1 Deux mot sur MPLAB……………………………………………………………………………………15
II.2 Les directives de MPASM………………………………………………………………………………16
II.2.1 Les directives les plus utilisées…………………………………………………………………16
II.3 Format des nombres……………………………………………………………………………………17
II.4 Structure d’un programme écrit en assembleur………………………………………………….17
II.5 Exemples de programme………………………………………………………………………………19
II.6 Références…………………………………………………………………………………………………22
3
INTRODUCTION
Un PIC est un microcontrôleur, c’est une unité de traitement de l’information de type
microprocesseur à laquelle on a ajouté des périphériques internes permettant de faciliter l’interfaçage avec le monde extérieur sans nécessiter l’ajout de composants externes.
Les PICs sont des composants RISC (Reduce Instructions Construction Set), ou encore
composant à jeu d’instructions réduit. L’avantage est que plus on réduit le nombre d’instructions, plus facile et plus rapide en est le décodage, et plus vite le composant fonctionne.
La famille des PICs est subdivisée en 3 grandes familles : La famille Base-Line, qui utilise des
mots d’instructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits.
Nous nous limiterons dans ce document à la famille Mid-Range et particulièrement au PIC
16F84, sachant que si on a tout assimilé, on pourra facilement passer à une autre famille, et même à un autre microcontrôleur.
Pour identifier un PIC, on utilise simplement son numéro :
• Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique un PIC Mid-Range.
• Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner avec une plage de tension beaucoup plus tolérante.
• Vient en suite une ou deux lettres pour indiquer le type de mémoire programme :
C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM
CR pour indiquer une mémoire de type ROM
F pour indiquer une mémoire de type FLASH.
• On trouve ensuite un nombre qui constitue la référence du PIC.
• On trouve ensuite un tiret suivi de deux chiffres indiquant la fréquence d’horloge maximale que le PIC peut recevoir.
Donc, un 16F84-04 est un PIC Mid-Range donc la mémoire programme est de type FLASH de
référence 84 et capable d’accepter une fréquence d’horloge de 4MHz.
Notez que les PICs sont des composants STATIQUES, c’est à dire que la fréquence d’horloge
peut être abaissée jusque l’arrêt complet sans perte de données et sans dysfonctionnement. Une version –10 peut donc toujours être employée sans problème en lieu et place d’une –04. Pas l’inverse, naturellement.
Pourquoi choisir un PIC ?
• Les performances sont identiques voir supérieurs à ses concurrents
• Les prix sont les plus bas du marché
• Très utilisé donc très disponible
• Les outils de développement sont gratuits et téléchargeables sur le WEB
• Le jeu d’instruction réduit est souple, puissant et facile à maîtriser
• Les versions avec mémoire flash présentent une souplesse d’utilisation et des avantages pratiques indéniables
• La communauté des utilisateurs des PICs est très présente sur le WEB. On trouve sur le net quasiment tout ce dont on a besoin, tutoriaux pour démarrer, documents plus approfondis, schémas de programmeurs avec les logiciels qui vont avec, librairies de routines, forums de discussion . . .
4
I LE PIC 16F84
Les caractéristiques principales du 16F84 sont :
• Une mémoire programme de type flash de 1K (1024) mots de 14 bits
• Une mémoire RAM constituée : o Des registres de control SFR (Special Function Registers) o 68 octets de RAM utilisateur appelés aussi GPR (General Propose Resisters)
• Une mémoire EEPROM de donnée de 64 octets
• Deux ports d’entrée sortie, un de 8 bits et un de 5 bits
• Un timer/Compteur cadencé par une horloge interne ou externe
• Un chien de garde / compteur qui est un timer particulier
• Un prédiviseur de fréquence programmable permettant d’étendre les possibilités du Timer TMR0 et du chien de garde WDT
• 4 sources d’interruption
• L’horloge peut être générée par 4 types d’oscillateurs sélectionnables
• Protection de code
• Fonctionnement en mode sleep pour réduction de la consommation
• Programmation par mode ICSP (In Circuit Serial Programming)
Mémoire
programme de type Flash
1024
mots de 14 bits EEPROM 64 octets
16 registres
système
RAM
utilisateur 64 octets
14 bits : config
timer TMR0
WDT timer
Prédiviseur
Horloge système
Horloge
WDT
PORTA PORTB W
ALU
I.1 Aspect externe du 16F84
Le 16F84 est commercialisé dans un boîtier 18 broches classique
1 2 3 4 5 6 7 8 9PIC16F8X 10 11 12 13 14 15 16 17 18 RA1 RA0 OSC1 OSC2 Vdd RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT VSS MCLR RA4/T0CKI RA3 RA2
Fig. I-1 : brochage du 16 F84