Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Ab Pic 16F84

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 46

E.S.

A 1ère Année

MICROCONTROLEURS

1
A. BELAHMAR
Qu'est-ce qu'un PIC?
Programmable Interface Contrôler

Un PIC est un microcontrôleur de chez Microchip. Ses caractéristiques principales sont :

• Séparation des mémoires de programme et de données


• Communication avec l'extérieur seulement par des ports,
• Utilisation d'un jeu d'instructions réduit,

1. Applications des microcontrôleurs


• Informatique (souris, modem …).
• Vidéo (Appareil photos numérique, camera numérique …).
• Contrôle des processus industriels (régulation, pilotage).
• Appareils de mesures (affichage, calcul statistique, mémorisation).
2
• Automobile (GPS, airbag)…
2
2. MICROPROCESSEUR ET MICROCONTROLEUR
Il y a une différence fondamentale entre un microprocesseur et un
microcontrôleur :
- le microprocesseur se présente sous la forme d’un boîtier qui nécessite
des éléments externes, comme de la mémoire et des circuits d’interfaces.
- le microcontrôleur intègre dans un même boîtier, un microprocesseur, de
la mémoire, et des interfaces entrées/sorties.

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)

La pile est une zone


7
de mémoire
réservée par le
système
II. Organisation de lamémoire
Le PIC contient une mémoire de programme et une mémoire de données.

1. Mémoire de programme (flash)


• C'est elle qui contient le programme à exécuter.
• Elle contient 1k "mots" de 14 bits,
• L'adresse 0000h contient le vecteur du reset, l'adresse 0004h l'unique vecteur
d'interruption du PIC.

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)

bit 7 IRP Bit non utilisé (à laisser à 0)


bit 6 RP1 Bit non utilisé (à laisser à 0)
bit 5 RP0 Bit de sélection de la banque.

11
2. Registre de configuration de périphériques -
OPTION_REG

Utiliser pour le timer TMR0

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,

W : registre de travail (accumulateur), taille 8 bits k :


valeur littérale, taille 8 bits
f : registre (spécial ou d'usage général) 14
d : registre de destination (d=0 => W et d=1 => f).
b : position du bit (0 à 7)
Mnémonique , bit du nombre de
opérande Description registre cycles
STATUS
affecté

MOVLW k k (8 bits) est chargé dans (W) - 1


ADDLW k Additionne k (8 bits) et (W) et place le résultat C, DC , Z 1
dans (W)
Soustrait W de k (8 bits) et place le résultat
SUBLW k C, DC , Z 1
dans (W) k - (W) -> (W)

Réalise un ET logique entre k (8 bits) et (W), et


ANDLW k Z 1
place le
résultat dans (W)
Réalise un OU logique (inclusif) entre k (8 bits)
IORLW k Z 1
et (W), et place le résultat dans (W)

Réalise un OU exclusif entre k (8 bits) et (W),


XORLW k Z 1
et place le résultat dans (W)

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

ADDWF f , d Additionne le contenu du registre f (8 C, DC , Z 1


bits) et (W), et place le résultat dans
(destination)

Soustrait (W) de (f) (8 bits) et place le


SUBWF f , d résultat dans (destination). C, DC , Z 1
(f) - (W) ->(destination)
Réalise un ET logique entre (f) (8 bits) et
ANDWF f , d Z 1
(W), et place le résultat dans
(destination)

16

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 ).
Réalise un OU logique (inclusif) entre (f)
IORWF f , d Z 1
(8 bits) et (W), et place le résultat dans
(destination)
Réalise un OU exclusif entre (f) (8 bits) et (W),
XORWF f , d Z 1
et place
le résultat dans (destination)
Réalise le complément logique de (f) (8
COMF f , d bits), et place le résultat dans (destination) Z 1

Décrémente (f) et place le résultat dans


DECF f , d (destination). Z 1
(f) - 1 -> (destination)

Décrémente (f) et place le résultat dans


(destination). Si le résultat est 0, alors
DECFSZ f , d - 1 ou 2
l'instruction suivante est ignorée, et une
instruction NOP est exécutée à la place (soit
2 cycles)

Incrémente (f) et place le résultat dans 17


INCF f , d Z 1
(destination).
(f) + 1 -> (destination)
Incrémente (f) et place le résultat dans
(destination).
INCFSZ f , d Si le résultat est 0, alors l'instruction suivante - 1 ou 2
est ignorée, et une instruction NOP est
exécutée à la place (soit 2 cycles)
Efface le contenu du registre (f).
CLRF f Remarque : le bit Z est donc mis à Z 1
1.
Efface le contenu de l'accumulateur (W).
CLRW Z 1
Remarque : le bit Z est donc mis à 1.

Réalise une rotation circulaire à gauche :


RLF f , d C 1
Le résultat est placé dans (destination).

Réalise une rotation circulaire à


RRF f , d droite : Le résultat est placé dans C 1
(destination).

Les 4 bits de poids forts et les 4 bits de poids


SWAPF f , d faibles de (f) sont échangés. - 1
Le résultat est placé dans (destination). 18

NOP Cette instruction ne fait rien (durée 1 cycle). - 1


registre
Mnémonique , STATUS nombre
opérande Description de cycles
Mise à 0 du bit du registre f
BCF f , b - 1
Mise à 1 du bit du registre f
BSF f , b - 1
Si le bit du registre f est égal à 0, alors
BTFSC f , b l'instruction suivante est ignorée, et une
Bit test, skip if clear instruction NOP est exécutée à la place - 1 ou 2
(soit 2 cycles)
Si le bème bit du registre f est égal à 1, alors
BTFSS f , b l'instruction suivante est ignorée, et une
Bit test, skip if set instruction NOP est exécutée à la place (soit - 1 ou 2
2 cycles)

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

RETFIE Retour de sous-programme d'interruption - 2

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).

• Donner l’organigramme du programme principal.


• Ecrire le programme d’initialisation
• Ecrire le programme principal

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

• Adressage direct: La donnée est contenue dans un registre.


• Ce dernier peut être par un nom (par exemple W) ou une adresse mémoire.
Exemple : movf 0x2B, 0 ; Transfert dans W la valeur contenue à l'adresse
0x2B.

• Adressage indirect : L'adresse de la donnée se trouve dans un pointeur (FSR et INDF).

25
Exercice 1

Utiliser l’instruction de test d’un bit

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

bit 4 EEIF • drapeau (flag) mis à 1 en fin d'opération d'écriture


bit 3 WRERR •drapeau (flag) mis à 1 en cas de problème durant l'opération
d'écriture (Reset externe)

bit 2 WREN •1 : autorise l'écriture


•0 : interdit l'écriture
bit 1 WR •1 : lance une opération d'écriture
•bit mis à 0 par hardware en fin d'opération d'écriture
•1 : lance une opération de lecture
bit 0 RD
•bit mis à 0 par hardware

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

Exemple 1: lecture de l'emplacement mémoire situé à l'adresse 0x10

bcf STATUS , RP0 ; passage en banque 0


movlw 0x10
movwf EEADR ; 0x10 est l'adresse de l'emplacement mémoire
bsf STATUS , RP0 ; passage en banque 1
bsf EECON1 , RD ; lecture de l'EEPROM
bcf STATUS , RP0 ; passage en banque 0
movf EEDATA, W ; la valeur lue dans l'EEPROM est placée dans l'accumulateur
37
VII. Les interruptions
• Une interruption provoque l’arrêt du programme principal pour aller exécuter une
procédure d'interruption.
• A chaque interruption sont associés deux bits: un bit de validation et un drapeau.
• Le premier permet d'autoriser ou non l'interruption, le second permet au programmeur
de savoir de quelle interruption il s'agit.

Le PIC 16F84 dispose de 4 sources d'interruptions :


• Interruption sur la broche RB0/INT
• Interruption "RB" : sur changement du niveau logique d'au moins
une de ces 4 broches : RB4, RB5, RB6 ou RB7 (port B)
• Interruption de débordement du registre TMR0 (H'FF' -> H'00')
• Interruption de fin d'écriture de l'EEPROM

A chaque interruption sont associés deux bits:


➢ un bit de validation (autorisation) : permet d'autoriser ou non l'interruption. 38
➢ un drapeau (flag) : permet au programmeur de savoir de quelle
interruption il s'agit.
39
Registre INTCON

bit 7 GIE • bit à mettre à 0 pour désactiver toutes les interruptions


• bit à mettre à 1 pour autoriser toutes les interruptions
bit 6 EEIE • 1 : si GIE = 1, autorise l'interruption de fin d'écriture de l'EEPROM
• 0 : désactive l'interruption de fin d'écriture de l'EEPROM
bit 5 T0IE •1 : si GIE = 1, autorise l'interruption de débordement du registre TMR0
0 : désactive l'interruption de débordement du registre TMR0
bit 4 INTE • 1 : si GIE = 1, autorise l'interruption sur la broche RB0/INT
• 0 : désactive l'interruption sur la broche RB0/INT
•1 : si GIE = 1, autorise l'interruption sur les broches RB4, RB5, RB6, RB7
bit 3 RBIE
du port B (en entrée).
• 0 : désactive l'interruption "RB"
bit 2 T0IF •drapeau (flag) mis à 1 lors du débordement du registre TMR0 ce
drapeau ne peut être effacé que de façon logicielle (bcf INTCON, T0IF)
bit 1 INTF • drapeau (flag) mis à 1 lors d'un sur la broche RB0/INT
•ce drapeau ne peut être effacé que de façon logicielle

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.

•GIE = 1 (bit 7 du registre INTCON) movlw B'10010000'


•INTE = 1 et RBIE = T0IE = EEIE = 0 movwf INTCON

Enfin, on initialise le drapeau (flag) INTF à 0. bcf INTCON, INTF


Maintenant, quand on appuie sur le bouton poussoir, le drapeau INTF est
automatiquement mis à 1.

Il faut remettre le drapeau INTF à 0 avant de quitter la routine


d'interruption (bcf INTCON, INTF). 42
org H'0004’
movwf W_TEMP
swapf STATUS, W
movwf STATUS_TEMP

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

Vous aimerez peut-être aussi