Pic 2
Pic 2
1
Qu'est-ce qu'un PIC ?
2
Qu'est-ce qu'un PIC ?
3
Les trois familles de PIC :
Base-Line : Les instructions sont codées sur 12 bits
Mid-Line : Les instructions sont codées sur 14 bits
High-End : Les instructions sont codées sur 16 bits
Un PIC est identifié par un numéro de la forme suivante : xx(L)XXyy –zz
xx : Famille du composant (12, 14, 16, 17, 18)
L : Tolérance plus importante de la plage de tension
XX : Type de mémoire de programme C - EPROM ou EEPROM
CR - PROM F - FLASH
yy : Identification
zz : Vitesse maximum du quartz Nous utiliserons un PIC 16F84 –10, soit :
16 : Mid-Line
F : FLASH
84 : Type 4
10 : Quartz à 10MHz au maximum
PIC 16F84
6
Architecture générale
• Il est constitué des éléments suivants :
• un système d'initialisation à la mise sous tension (power-up timer, …)
• 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 registre contenant le code de l'instruction à exécuter
• un bus spécifique pour les données (data bus)
• une mémoire RAM contenant
• les SFR
• 68 octets de données
•
une mémoire EEPROM de 64 octets de données
• 2 ports d'entrées/sorties
• un compteur (timer) 7
• un chien de garde (watchdog)
Architecture générale..
8
Organisation de la mémoire
• Le PIC contient une mémoire de programme et
une mémoire de données. La structure Harvard
des PICs fournit un accès séparé à chacune.
Ainsi, un accès aux deux est possible pendant le
même cycle machine.
9
Mémoire de programme
• C'est elle qui contient le programme à exécuter. Ce
dernier est téléchargé par liaison série.
• Elle contient 1k "mots" de 14 bits dans le cas du PIC
16F84, même si le compteur de programme (PC) de 13
bits peut en adresser 8k.
• Il faut se méfier des adresses images ! L'adresse 0000h
contient le vecteur du reset, l'adresse 0004h l'unique
vecteur d'interruption du PIC.
• La pile contient 8 valeurs. Comme le compteur de
programme, elle n'a pas d'adresse dans la plage de
mémoire. Ce sont des zones réservées par le système. 10
11
Mémoire de données
12
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. Cette dernière contient 64 octets.
• le constructeur a défini deux banques. Le bit RP0 du registre
d'état (STATUS.5) permet de choisir entre les deux. Ainsi, une
adresse sur 8 bits est composée de RP0 en poids fort et des 7
bits provenant de l'instruction à exécuter.
13
Registres spéciaux - SFRs
• Ils permettent la gestion du circuit. Certains ont une
fonction générale, d'autres un fonction spécifique
attachée à un périphérique donné. La Figure donne la
fonction de chacun des bits de ces registres. Ils sont
situés de l'adresse 00h à l'adresse 0Bh dans la banque 0
et de l'adresse 80h à l'adresse 8Bh dans la banque 1. Les
registres 07h et 87h n'existent pas.
14
15
• INDF (00h - 80h) : Utilise le contenu de FSR pour l'accès
indirect à la mémoire.
• TMR0 (01h) : Registre lié au compteur.
• PCL (02h - 82h) : Contient les poids faibles du compteur de
programmes (PC). Le registre PCLATH (0Ah-8Ah) contient les
poids forts.
• STATUS (03h - 83h) : Il contient l'état de l'unité arithmétique et
logique ainsi que les bits de sélection des banques .
• FSR (04h - 84h) : Permet l'adressage indirect.
• PORTA (05h) : Donne accès en lecture ou écriture au port A, 5
bits. Les sorties sont à drain ouvert. Le bit 4 peut être utilisé
en entrée de comptage.
• PORTB (06h) : Donne accès en lecture ou écriture au port B.
Les sorties sont à drain ouvert.
• Le bit 0 peut être utilisé en entrée d'interruption. 16
• EEDATA (08h) : Permet l'accès aux données dans la mémoire
EEPROM. EEADR (09h) : Permet l'accès aux adresses de la
mémoire EEPROM.
• PCLATCH (0Ah - 8Ah) : Donne accès en écriture aux bits de
poids forts du compteur de programme.
• INTCON (0Bh - 8Bh) : Masque d'interruptions.
• OPTION_REG (81h) : Contient des bits de configuration pour
divers périphériques.
• TRISA (85h) : Indique la direction (entrée ou sortie) du port A.
• TRISB (86h) : Indique la direction (entrée ou sortie) du port B.
• EECON1 (88h) : Permet le contrôle d'accès à la mémoire
• EEPROM. EECON2 (89h) : Permet le contrôle d'accès à la
mémoire EEPROM
17
Registre d’état (Status)
bit 7 IRP Bit non utilisé (à laisser à 0)
bit 6 RP1 Bit non utilisé (à laisser à 0)
Bit de sélection de la banque.
•Il faut mettre ce bit à 0 pour accéder à la banque 0 (bcf
bit 5 RP0
STATUS , RP0), et à 1 pour accéder à la banque 1 (bsf STATUS ,
RP0).
Bit "Time-out" (en lecture uniquement)
•bit mis à 1 après :
• une mise sous tension
• une instruction SLEEP
bit 4 /TO
• une instruction CLRWDT
NOT_TO
• un réveil (sortie du mode SLEEP) dû à une interruption
•bit mis à 0 quand la temporisation du watchdog est dépassée
plus d'informations 18
Registre d’état (Status)…
Bit "Power-down" (en lecture uniquement)
•bit mis à 1 après :
bit 3 /PD • une mise sous tension
NOT_PD • une instruction CLRWDT
•bit mis à 0 après une instruction SLEEP
Bit "Zero"
•Cela ne concerne que les instructions qui affectent le bit Z (addwf, andlw,
bit 2 Z movf ...)
•Ce bit est mis à 1 quand le résultat d'une opération est 0.
•Ce bit est mis à 0 quand le résultat d'une opération est différent de 0.
Bit "Digit Carry"
•Cela concerne les opérations arithmétiques (instructions : addwf, addlw,
bit 1 DC subwf et sublw) en système de numération DCB (binary coded decimal).
•Ce bit est mis à 1 quand le résultat d'une opération génère une retenue.
•Ce bit est mis à 0 quand le résultat d'une opération ne génère pas de retenue.
Bit "Carry"
•Cela concerne les opérations arithmétiques (instructions : addwf, addlw,
bit 0 C subwf et sublw) en système de numération binaire en complément à 2.
•Ce bit est mis à 1 quand le résultat d'une opération génère une retenue. 19
•Ce bit est mis à 0 quand le résultat d'une opération ne génère pas de retenue
Registre de configuration de
périphériques - OPTION_REG
20
Registre de configuration de
périphériques - OPTION_REG..
"TMR0 Clock Source Select"
•Ce bit doit être mis à 0 pour que l'horloge du module TMR0 soit
bit 5 T0CS l'horloge interne (un quart de la fréquence du signal OSC1/CLKIN)
•Ce bit doit être mis à 1 pour que l'horloge du module TMR0 soit
le signal de la broche RA4/T0CKI
0 000 2 1
0 001 4 1
0 010 8 1
0 011 16 1
0 100 32 1
0 101 64 1
0 110 128 1
0 111 256 1
1 000 1 1
1 001 1 2
1 010 1 4
1 011 1 8
1 100 1 16 22
1 101 1 32
1 110 1 64
1 111 1 128
Mémoire EEPROM
• Le PIC possède une zone EEPROM de 64 octets
accessibles en lecture et en écriture par le programme.
On peut y sauvegarder des valeurs, qui seront
conservées même si l'alimentation est éteinte, et les
récupérer lors de la mise sous tension. Leur accès est
spécifique et requiert l'utilisation de registres dédiés. La
lecture et l'écriture ne peut s'exécuter que selon des
séquences particulières décrite plus tard.
• L'EEPROM du PIC 16F84A est indirectement accessible à
travers les registres EEADR, EEDATA, EECON1 et EECON2.
23
EEPROM..
1- Registre EEADR
2- Registre EEDATA
4- Registre EECON2
Il s'agit d'un registre spécial situé à l'adresse 0x89 (banque 1) de la mémoire des 26
données (Data RAM). Ce registre n'est pas un registre physique ...
Lecture d'une donnée en
mémoire EEPROM
Exemple : lecture de l'emplacement mémoire situé à l'adresse 0x10
27
Ecriture d'une donnée en
mémoire EEPROM
Exemple : écriture de la donnée 0xE3 dans l'emplacement mémoire
situé à l'adresse 0x10
30
W : registre de travail (accumulateur), taille 8 bits
k : valeur littérale, taille 8 bits
bit du
registre nombre de
Mnémonique , opérande Description
STATUS cycles
affecté
L : label (étiquette) 31
bit du
Mnémonique , registre nombre
Description
opérande STATUS de cycles
affecté
Mise à 0 du b ème bit du registre
BCF f , b - 1
f
Mise à 1 du b ème bit du registre
BSF f , b - 1
f
Si le b ème bit du registre f est
égal à 0, alors l'instruction
BTFSC f , b suivante est ignorée, et une - 1 ou 2
instruction NOP est exécutée à
la place (soit 2 cycles)
Si le bème bit du registre f est égal
à 1, alors l'instruction suivante
BTFSS f , b est ignorée, et une instruction - 1 ou 2
NOP est exécutée à la place (soit
2 cycles) 32
f : registre (spécial ou d'usage général)
b : position du bit (0 à 7)
bit du
registre nombre de
Mnémonique , opérande Description
STATUS cycles
affecté
34
Incrémente (f) et place le résultat dans
(destination).
INCFSZ f , d Si le résultat est 0, alors l'instruction suivante est - 1 ou 2
ignorée, et une instruction NOP est exécutée à la
place (soit 2 cycles)
37
Ports d'entrées/Sorties..
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. Le
registre PORTB, d'adresse 06h dans la banque 0, permet d'y
accéder en lecture ou en écriture. Le registre TRISB, d'adresse
86h dans la banque 1, 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.
• On peut noter la fonction particulière pilotée par le bit RBPU
(OPTION_REG.7) qui permet d'alimenter (RBPU=0) ou non
(RBPU=1) les sorties.
• Les quatre bits de poids fort (RB7-RB4) peuvent être utilisés
pour déclencher une interruption sur changement d'état.
38
• RB0 peut aussi servir d'entrée d'interruption externe.
Registre TMR0 (Timer 0)
• Il s'agit d'un registre spécial situé à l'adresse 0x01 (banque 0)
de la mémoire des données (Data RAM).
• Ce registre contient un nombre de 8 bits (0 à 255 en
numération décimale).
• Le module TMR0 (Timer 0) possède deux modes de
fonctionnement :
1- Le mode timer
2- Le mode compteur
39
Le mode timer
• Pour configurer le module TMR0 en mode timer, il faut au
préalable que : T0CS = 0 (bit 5 du registre OPTION_REG)
• Le contenu du registre TMR0 est alors incrémenté à chaque
cycle de l'horloge interne. 1 cycle correspond à une durée de 1
µs pour un oscillateur à quartz de 4 MHz (1 cycle = 4 / F OSC).
• En toute rigueur, cela est vrai si le taux de prédivision
(prescaler) est réglé à 1 (bit 3 du registre OPTION_REG = PSA =
1).
• Notez que si le contenu du registre TMR0 est 255 (0xFF), il
passera à 0 (0x00) à la prochaine incrémentation.
• En conclusion, le mode timer est utilisé pour mesurer des
durées. 40
Le mode compteur
• Pour configurer le module TMR0 en mode compteur, il faut au
préalable que : T0CS = 1 (bit 5 du registre OPTION_REG)
• Le contenu du registre TMR0 est alors incrémenté à chaque
front du signal présent sur la broche RA4/T0CKI :
• front montant si T0SE = 0 (bit 4 du registre OPTION_REG)
• front descendant si T0SE = 1
• En toute rigueur, cela est vrai si le taux de prédivision (prescaler)
est réglé à 1 (bit 3 du registre OPTION_REG = PSA = 1).
• En conclusion, le mode compteur est utilisé pour faire du
comptage.
Interruption 41
On peut activer une interruption quand le registre TMR0 déborde (passage
de 0xFF à 0x00).
Les interruptions
Le PIC 16F84A 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
42
Mécanisme d’interruption
43
Registre INTCON
Il s'agit d'un registre spécial situé à l'adresse H'0B' (banque 0) de la mémoire des
données (Data RAM). Ce registre est également accessible en banque 1 (adresse
H'8B').
Nom Description
Nom Description
45
"RB0/INT external interrupt flag"
•drapeau (flag) mis à 1 lors d'un front (montant ou
descendant selon l'état du bit INTEDG du
bit 1 INTF
registre OPTION_REG) sur la broche RB0/INT
•ce drapeau ne peut être effacé que de façon logicielle (bcf
INTCON, INTF)
"RB port change interrupt flag"
•drapeau (flag) mis à 1 lors d'un changement de niveau
logique d'au moins une des broches : RB4, RB5, RB6 ou RB7
bit 0 RBIF
(cela ne concerne que les broches configurées en entrée)
•ce drapeau ne peut être effacé que de façon logicielle (bcf
INTCON, RBIF)
Remarque : le drapeau EEIF se trouve dans le registre spécial EECON1 (bit 4).
46
Bits (ou "fusibles") de configuration
On se place dans le cadre de l'outil de développement MPLAB de
Microchip. La syntaxe utilisée est alors :
OSC
(Oscillator
Selection bits)
HS Oscillateur à quartz haute fréquence (4 MHz, 20 MHz ...).
48
Exemple de configuration
Dans le code source (fichier avec extension .asm), les fusibles de
configuration sont indiqués au compilateur avec la directive
suivante :
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
Remarque
Les bits de configuration ne sont pas modifiables.
Dans l'exemple ci-dessus, pour activer le watchdog et utiliser un
oscillateur de type RC, il faut modifier le code source, recompiler
et reprogrammer le µC ...
__config _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
49