Ab Pic 16F84
Ab Pic 16F84
Ab Pic 16F84
A 1ère Année
MICROCONTROLEURS
1
A. BELAHMAR
Qu'est-ce qu'un PIC?
Programmable Interface Contrôler
3
3. Architecture générale d’un système programmable
• Horloge : C'est l'horloge qui génère les signaux qui permettent le cadencement des
opérations.
• Le compteur programme PC : contient l'adresse de la prochaine instruction à charger.
• Le registre d'instruction RI : C'est la ou le µp stocke l'instruction en cours d'exécution.
• Le décodeur : C'est lui qui va "décoder" l'instruction contenue dans RI et générer les
signaux logiques correspondant et les communiquer au séquenceur.
• Le séquenceur : Il gère le séquencèrent des opérations et génère : - les signaux du bus
de commande ( RD,WR , etc…), - les signaux internes aux μP (gestion des registres, de
l‟A.L.U, etc...).
• Le registre d'état : Le registre d'état est formé de plusieurs bits appelés drapeaux ou
indicateur (Flags) qui sont positionnés par l'ALU après chaque opération
4
MICROCONTROLEUR
PIC (16F84)
5
I. Brochage et architecture
• Il s'agit d'un microcontrôleur 8 bits à 18 pattes.
• Principales caractéristiques :
• 35 instructions
• Instructions codées sur 14 bits
• Données sur 8 bits
• 1 cycle machine par instruction, sauf pour les sauts (2 cycles machine)
• Vitesse maximum 10 MHz
• 4 sources d’interruption
1. Brochage:
• VSS, VDD :Alimentation
• OSC1,2 : Horloge
• RA0-4 : Port A
• RB0-7 : Port B
• T0CKI : Entrée de comptage 6
• INT : Entrée d'interruption
• MCLR : Reset : 0V
2. Architecture générale:
• Il est constitué des éléments suivants :
• un système de génération d'horloge à partir du quartz externe (timing génération)
• une unité arithmétique et logique (ALU)
• une mémoire flash de programme de 1k "mots" de 14 bits
• un compteur de programme (program counter) et une pile (stack)
• un bus spécifique pour le programme (program bus)
• un bus spécifique pour les données (data bus)
• une mémoire RAM
• une mémoire EEPROM de 64 octets de données
• 2 ports d'entrées/sorties
• un compteur (timer)
2. Mémoire de données
• Elle se décompose en deux parties de RAM et une zone EEPROM.
• La première contient les SFRs (Special Function Registers) qui permettent de
contrôler les opérations sur le circuit.
• La seconde contient des registres généraux, libres pour l'utilisateur.
8
2. Mémoire dedonnées
• Le bit RP0 du registre d'état (STATUS.5) permet de choisir entre les deux
banques de la RAM.
9
• INDF (00h - 80h) : Utilise le contenu de FSR pour l'accès indirect à la mémoire.
• FSR (04h - 84h) : Permet l'adressage indirect.
• TMR0 (01h) : Registre lié au compteur.
• PCL (02h - 82h) : Contient les poids faibles du compteur de programmes (PC).
• PCLATCH (0Ah - 8Ah) : Donne accès en écriture aux bits de poids forts du PC.
• STATUS (03h - 83h) : Il contient l'état de l'unité arithmétique et logique.
• PORTA (05h) : Donne accès en lecture ou écriture au port A, 5 bits.
• PORTB (06h) : Donne accès en lecture ou écriture au port B.
• TRISA (85h) et TRISB (86h) : Indique la direction (entrée ‘1’ ou sortie ‘0’) du port A et B.
• EEADR (09h) : Permet l'accès aux adresses de la mémoire EEPROM.
• EEDATA (08h) : Permet l'accès aux données dans la mémoire EEPROM.
• EECON1 (88h) et EECON2 (89h) : Permet le contrôle d'accès à la mémoire EEPROM
• INTCON (0Bh - 8Bh) : Masque d'interruptions.
• OPTION_REG (81h) : Contient des bits de configuration pour divers périphériques. 10
III. Registres
1. Registre d’état(Status)
11
2. Registre de configuration de périphériques -
OPTION_REG
12
Le mode timer
• T0CS = 0
• Le contenu du registre TMR0 est alors incrémenté à chaque cycle de
l'horloge interne.
• Le mode timer est utilisé pour mesurer des durées.
Le modecompteur
• T0CS = 1
• Le contenu du registre TMR0 est alors incrémenté à chaque front du
signal présent sur la broche RA4/T0CKI
• Le mode compteur est utilisé pour faire du comptage.
13
IV. Jeu d'instructions
• Toutes les instructions sont codées sur 14 bits. Elles sont regroupées en trois grands
types :
• Instructions orientées octets
• Instructions orientées bits
• Instructions de contrôle
• Le registre de travail W joue un rôle particulier dans un grand nombre
d'instructions.
• Le microcontrôleur peut exécuter jusqu'à 5 millions d'instructions par
seconde (5 MIPS) avec une fréquence de 20MHz,
15
W : registre de travail (accumulateur), taille 8 bits
k : valeur littérale, taille 8 bits
MOVWF f (W) est chargé dans (f) - 1
MOVF f , d (f) (8 bits) est chargé dans (destination) Z 1
16
L : label (étiquette)
GOTO L Branchement à l'adresse L - 2
CALL L Appelle un sous-programme (subroutine) situé - 2
à l'adresse L
RETURN Retour de sous-programme - 2
Retour de sous-programme, avec chargement de
RETLW k la valeur littérale k (8 bits) dans (W) - 2 19
b : position du bit (0 à 7)
Ports d'entrées/Sorties
Port A
• Il comporte 5 pattes d'entrée/sortie bidirectionnelles, notées RAx avec x={0,1,2,3,4}
sur le brochage du circuit.
• Le registre TRISA, permet de choisir le sens de chaque patte (entrée ou sortie) : un
bit à 1 positionne le port en entrée, un bit à 0 positionne le port en sortie.
• La patte RA4 peut aussi servir d'entrée de comptage pour le timer0.
Port B
• Il comporte 8 pattes d'entrée/sortie bidirectionnelles, notées RBx avec
x={0,1,2,3,4,5,6,7} sur le brochage du circuit.
• Les quatre bits de poids fort (RB7-RB4) peuvent être utilisés pour déclencher une
interruption sur changement d'état.
• RB0 peut aussi servir d'entrée d'interruption externe.
20
Ports d'entrées/Sorties
21
Application 1 :
On désire réaliser un programme qui permet d’afficher l’état des quatre interrupteurs
branchés au PORTA sur les quatre leds branchées au PORTB (RB0 - 3).
22
Application 2 :
23
24
Modes d'adressages
Il existe trois grands types d'accès à une donnée ou modes d'adressage :
• Adressage immédiat : La donnée est contenue dans l'instruction.
Exemple : movlw 0xC4 ; Transfert la valeur 0xC4 dans W
25
Exercice 1
26
V. Boucles de délai (retard)
Une boucle simple de temporisation est basée sur l''initialisation d’une variable à
une valeur donnée et ensuite la décrémenter (ou l’incrémenter) en boucle jusqu'à ce
qu'elle atteigne 0.
Connaissant le temps d'exécution de chaque instruction, on peut calculer le temps de
la boucle.
27
28
Application
31
32
33
Exercice 3
34
VI. Mémoire EEPROM
• Le PIC possède une zone EEPROM de 64 octets accessibles en lecture et en écriture
par le programme.
• L'EEPROM du PIC 16F84A est indirectement accessible à travers les registres EEADR,
EEDATA, EECON1 et EECON2.
1- Registre EEADR
• Ce registre contient l'adresse de l'emplacement mémoire que l'on veut manipuler (pour une
lecture ou une écriture). Les 64 octets sont situés aux adresses 0x00 à 0x3F.
2- Registre EEDATA
• Ce registre contient la valeur (8 bits) de l'emplacement mémoire que l'on veut manipuler
(pour une lecture ou une écriture).
35
EEPROM…
3- Registre EECON1
36
4- Registre EECON2
Il s'agit d'un registre spécial situé à l'adresse 0x89 (banque 1) de la mémoire des données.
Ce registre n'est pas un registre physique.
Lecture d'une donnéeen mémoire
EEPROM
40
bit 0 RBIF •drapeau (flag) mis à 1 lors d'un changement de niveau logique
d'au moins une des broches : RB4, RB5, RB6 ou RB7
•ce drapeau ne peut être effacé que de façon logicielle
Mécanisme d’interruption
Lorsque l'événement déclencheur d'une interruption intervient, alors son drapeau est
positionné à un (levé). Si l'interruption correspondante a été validée (enable = 1),
elle est alors déclenchée .
• l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis
remplacée par la valeur 0004,
• Le bit GIE est placé "0" pour inhiber toutes les interruptions
• A la fin de la procédure d'interruption (instruction RETFIE) :
- le bit GIE est replacé à l'état haut (autorisant ainsi un autre événement)
- le contenu du PC est rechargé à partir de la pile,
Remarques :
41
Imaginons une application où l'on désire utiliser l'interruption sur la broche RB0/INT.
Il peut s'agir d'un bouton poussoir connecté sur la broche RB0/INT :
On veut donc provoquer une interruption quand on appuie sur le bouton poussoir.
swapf STATUS_TEMP, W
movwf STATUS
swapf W_TEMP, f 43
swapf W_TEMP, W
retfie ; retour d'interruption
Le Timer TMR0 (8 bits)
Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer) soit par
une horloge externe appliquée à la broche RA4 (mode compteur).
Au débordement de TMR0 (FF → 00), le drapeau INTCON.T0IF est placé à 1. Ceci peut
déclencher l'interruption T0I si celle-ci est validée
44
45
Exercice 2
Faire clignoter une LED (port B), la temporisation est obtenue en comptant les
débordements du TMR0. TMRO est utilisé en timer avec pré diviseur de 128 et en
comptant 5 débordements.
- Calculer la durée de clignotement de la LED
46