Vous êtes sur la page 1sur 14

MicroContrôleur PIC16F84 (μC)

I. Présentation :
Les Microcontrôleurs μC ou uC (MCU en anglais, MicroController Unit) sont des systèmes embarqués, qui
intègrent plusieurs circuits (Microprocesseur μP, mémoires, interfaces E/S...) dans un même boitier.
Un processeur ou unité centrale de traitement UCT (CPU en anglais, Central Processing Unit) est un circuit
intégré qui exécute les opérations arithmétiques ( + - * / ) et logiques (portes logiques, affectations, décalages,
comptages...) reçues sous forme d’instructions machine.
Un microprocesseur est un processeur construit en un seul circuit intégré.
Caractéristiques du PIC16F84 et Brochage du PIC16F84 :
 Une mémoire programme de type flash de 1K (1024) mots de 14 bits
 Une mémoire RAM constituée :
o 17 registres de control SFR (Special Function Registers)
o 68 octets de RAM utilisateur appelés aussi GPR (General Propose
Registers)
 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 (RA et RB)
 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)
II. Architecture interne :

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 17


1. La mémoire programme (flash) :
Cette mémoire, de 14bits * 1024 mots (1k), stocke le programme. Elle est non volatile et reprogrammable à
souhait. Chaque position de 14 bits contient une instruction. L'emplacement du programme peut se situer à
n'importe quel endroit de la mémoire. Cependant il faut savoir que suite à un RESET ou lors de la mise sous
tension, le PIC commence l'exécution à l'adresse 0000H. De plus, lorsqu'il y a une interruption, le PIC va à l'adresse
0004H. Il est donc conseillé de placer le début du programme après l'adresse 0004H et de mettre un branchement
au début du programme à l'adresse 0000H et un branchement au début de la routine d'interruption s'il y en a
une à l'adresse 0004H. Le programme est implanté dans la mémoire flash à l'aide d'un programmateur (hard+soft)
sur lequel nous reviendrons dans la suite de ce document.
2. PC (Program Counter):
C’est un compteur qui indique l’adresse (dans la mémoire programme) de l’instruction suivante à exécuter par
l’ALU
3. L'ALU et l’accumulateur W:
ALU est une Unité Arithmétique et Logique (UAL) 8 Bits qui réalise les instructions / opérations arithmétiques
et logiques entre 2 opérandes : l'accumulateur W et n'importe quel autre registre 'F' ou constante K.
L'accumulateur W (Work) est le registre de travail 8 bits, il n'a pas d'adresse comme les autres SFR (il est
implanté avec ALU et non pas dans la RAM). Il reçoit tout les résultats de l’ALU, et en même temps est une des
opérandes sur lesquelles agit l’ALU.
4. L'Horloge :
L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz ou d'un
oscillateur RC.
 Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 4, 10 ou 20 MHz selon le type de μC.
 Avec un oscillateur RC, la fréquence de l'oscillation est fixée par Vdd, Rext et Cext. Elle peut varier légèrement
d'un circuit à l'autre.
 Dans certains cas, une horloge externe au μC peut être utilisée pour synchroniser le PIC sur un processus
particulier.
Quel que soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue en divisant la
fréquence par 4.
Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour exécuter une
instruction de 1μs

N.B. : Notez que les PICs sont des composants très stables, 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.
5. La mémoire RAM - Registres :
La RAM est formée de registres de 8bits, des 2 types SFR et GPR, organisés en 2 pages (bank0-1)
Elle contient 256 registres adressés de 00h à FFh, sur 7bits (27=128 adresses) + le bit RP0 (21=2 pages)
Page 0 (RP0-adress 0000.0000 (00h) à 0111.1111 (7F)) Page 1 (RP0-adress 1000.0000 (80h) à 1111.1111
(FF))
 Les registres des zones 50h à 7Fh et D0h à FF + les 2 adresses 07 et 87 ne sont pas utilisables
 Les registres de 8C à CF (bank1) sont une copie matérielle des registres 0C à 4F (bank0)
Alors on reste avec 90 registres fonctionnelle :
 17 registres SFR (Special Function Register), ce sont les registres de fonctionnement du PIC. Certain SFR sont
dupliqués, L'ensemble de ces (22 registres) est souvent appelé fichier des registres.
 68 registres GPR (General Purpose Register) sont des positions mémoire que l'utilisateur peut utiliser pour
stocker ses variables et ses données.

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 18


48*2 Octets 68*2 Octets 11*2 Octets (07et87 exclus)

Zone GPR Zone SFR


a. Le registre STATUS:
C’est le registre d’état du μC, il est situé dans la RAM, donc sur 8bits, il apparait dans les 2 banks de la RAM, et
donc accessible directement:
IRP et RP1 : Non utilisé dans ce PIC IRP RP1 RP0 TO PD Z DC C
RP0 : permet de choisir la bank (RP0 = 0 → Bank 0, RP0 = 1 → Bank 1)
𝑻𝑶 : prend 0 pour indiquer que WatchDog a atteint la fin de comptage (Lecture uniquement)
𝑷𝑫 : prend 0 quand le μC est mis en « SLEEP » (Lecture uniquement)
C (Carry) : ce bit Il passe à "1" lorsque le résultat d'une opération dépasse la valeur FF ou si le résultat est
négatif.
DC (Digital Carry) : ce bit passe à "1" lorsqu’une retenue s'est produite entre les bits 3 et 4.
Z (Zero) : Ce bit passe à "1", pour indiquer que le résultat de l'opération est nul.
b. Le registre OPTION_REG:
Il est situé dans la bank1, il permet de gérer certaines options du PIC:
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
𝑹𝑩𝑷𝑼 = 0 active la résistance de Pull up sur les 8bits du Port.
INTEDG = 1 : Interruption si front montant sur la broche PB0/IRQ
T0CS = 1 : la broche RA4/Clk est utilisée comme source d’horloge pour le timer, sinon, il utilise l’horloge interne
et RA4 est utilisée comme E/S
TOSE = 1 : le timer utilise le front montant, sinon il utilise le front descendant (utilisé avec l’horloge externe)
PSA = 1 : prédiviseur est affecté au WatchDog, sinon il est affecté au timer
6. Le port d'E/S PORTA (8bits) :
Le port A relié électriquement au registre PORTA, est une interface E/S de 5 bits (RA0 à RA4) bidirectionnelle.
Chaque E/S du port est compatible TTL (0V-5V). La configuration de direction pour chaque bit du port est
déterminée avec le registre TRISA.
 Bit i du TRIS à 0 𝑇𝑅𝐼𝑆𝐴𝑖 = 0 → bit i de PORT, PORTAi est configuré en Sortie
 Bit i du TRIS à 1 𝑇𝑅𝐼𝑆𝐴𝑖 = 1 → bit i de PORT, PORTAi est configuré en Entrée
La valeur binaire à sortir ou à lire sur le port A est contenue dans le registre PORTA
N.B. : La broche RA4 est multiplexée avec l'entrée horloge du timer TMR0, elle peut donc être utilisée soit
comme E/S normale du port A, soit comme entrée horloge pour le Timer TMR0, le choix se fait à l'aide du bit T0CS
du registre OPTION_REG.
7. Le port d'E/S PORTB (8bits) :
Le port B relié électriquement au registre PORTB, est une interface E/S de 8 bits (RB0 à RB7) bidirectionnelle.
Chaque E/S du port est compatible TTL (0V-5V). La configuration de direction pour chaque bit du port est
déterminée avec le registre TRISB.
 Bit i du TRIS à 0 𝑇𝑅𝐼𝑆𝐵𝑖 = 0 → bit i de PORT, PORTBi est configuré en Sortie
 Bit i du TRIS à 1 𝑇𝑅𝐼𝑆𝐵𝑖 = 1 → bit i de PORT, PORTBi est configuré en Entrée
La valeur binaire à sortir ou à lire sur le port B est contenue dans le registre PORTB
N.B. : En entrée, le bit RB0 appelée aussi INT et peut déclencher l’interruption externe INT. (Si cette
interruption est autorisée)
En entrée, un quelconque des bits RB4 à RB7 peut déclencher l'interruption RBI. (Si cette interruption est
autorisée)
2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 19
8. Le Timer TMR0 :
C’est un compteur 8 bits, et situé dans la RAM, il est caractérisé par :
 Il est incrémenté en permanence
 Son horloge est déterminé par le bit T0CS du registre OPTION_REG :
o 𝑇𝑂𝐶𝑆 = 0 → horloge interne Fosc/4 (mode timer)
o 𝑇𝑂𝐶𝑆 = 1 → horloge externe appliquée à RA4 du port A (mode timer ou compter)
 Dans le cas de l'horloge externe, on peut choisir le front sur lequel le TIMER s'incrémente.
o 𝑇𝑂𝑆𝐸 = 0 → incrémentation sur fronts montants
o 𝑇𝑂𝑆𝐸 = 1 → incrémentation sur fronts descendants
 Quel que soit l'horloge choisie, on peut la passer dans un diviseur de fréquence programmable (Prescaler)
dont le rapport est fixés par les bits PS0, PS1 et PS2 du registre OPTION_REG (tableau ci-contre).
 L'activation ou non du prédiviseur à l’horloge se fait par le bit PSA du registre OPTION_REG :
o 𝑃𝑆𝐴 = 0 → on utilise le prédiviseur
o 𝑃𝑆𝐴 = 1 → pas de prédiviseur (il affecté au Watchdog)
Le contenu du timer TMR0 est accessible par le registre qui porte le même nom. Il peut être lu ou écrit à
n'importe quel moment. Après une écriture, l'incrémentation est inhibée pendant deux cycles instruction
Au débordement de TMR0 (𝐹𝐹 → 00), le drapeau T0IF est placé à 1. Ceci peut déclencher l'interruption T0I
si celle-ci est validée
Registre OPTION_REG :
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

9. Le Watchdog Timer WDT (Chien de garde) :


C’est un compteur 8 bits incrémenté en permanence (même si le μC est en mode sleep) par une horloge RC
intégrée indépendante de l'horloge système. Lorsqu’il déborde, (WDT TimeOut), deux situations sont possibles :
 Si le μC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet d’éviter de rester
planté en cas de blocage du microcontrôleur par un processus indésirable non contrôlé.
 Si le μC est en mode SLEEP, le WDT time-out provoque un WAKE-UP (réveil), l'exécution du programme
continue normalement là où elle s'est arrêtée avant de rentrer en mode SLEEP. Cette situation est souvent
exploitée pour réaliser des temporisations.
L'horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms. Il est cependant
possible d'augmenter cette durée en faisant passé le signal Time-Out dans un prédiviseur
programmable (partagé avec le timer TMR0). L’affectation se fait à l'aide du bit PSA du registre
OPTION_REG :
o 𝑃𝑆𝐴 = 1 → on utilise le prédiviseur
o 𝑃𝑆𝐴 = 0 → pas de prédiviseur (affecté à TMR0)
Le rapport du prédiviseur est fixé par les bits PS0, PS1 et PS2 du registre OPTION_REG :
Pour éviter un WDT timeOut lors de l'exécution d'un programme, on a deux possibilités :
 Inhiber le WDT d'une façon permanente en mettant à 0 le bit de configuration WDTE.
 Remettre le WDT à 0 périodiquement dans le programme à l'aide de l'instruction CLRWDT pour éviter qu'il
ne déborde.

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 20


10. Le mode SLEEP :
Le PIC peut être placé en mode faible consommation à l'aide de l'instruction SLEEP (Veille). Dans ce mode,
l'horloge système est arrêtée ce qui arrête l'exécution du programme.
Pour sortir du mode SLEEP, il faut provoquer un WAKE-UP (réveiller), pour cela il y a 3 possibilités :
 RESET externe dû à l'initialisation du PIC en mettant l'entrée 𝑀𝐶𝐿𝑅 à 0. Le PIC reprend l'exécution du
programme à partir du début.
 TimeOut du WDT 𝑇𝑂 = 0 si celui-ci est validé. Le PIC reprend le programme à partir de l'instruction qui suit
l'instruction SLEEP
 Interruption : INT (sur RB0) ou RBI (sur RB4-RB7) ou EEI (fin d'écriture en EEPROM de données). Le bit
d’autorisation de l'interruption en question doit être validé, par contre, le WAKE-UP a lieu quel que soit l’état
de GIE le bit de validation globale. On a alors deux situations :
o GIE = 0, Le PIC reprend l'exécution du programme à partir de l'instruction qui suit l'instruction SLEEP,
l'interruption n'est pas prise en compte
o GIE = 1, Le PIC exécute l'instruction qui se trouve juste après l'instruction SLEEP puis se branche à l'adresse
0004 pour exécuter la procédure d'interruption. Dans le cas où l'interruption suivant SLEEP n'est pas désirée,
il faut utiliser l'instruction NOP après SLEEP.
11. La mémoire EEPROM de données
La mémoire EEPROM de données est constituée de 64 mot de 8bits commençant à l'adresse 0x2100, et que
l'on peut lire et écrire depuis un programme. Ces octets sont conservés après une coupure de courant et sont
très utiles pour conserver des paramètres semi permanents.
 On y accède à l'aide des registres EEADR et EEDATA :
o toute lecture/écriture dans le registre EEDATA se fait dans la position mémoire pointée par
EEADR.
o EEADR contient l'adresse relative par rapport à la page qui commence en 0x2100, autrement
dit, l'adresse va de 0 à 63.
 Les Deux registres de contrôle (EECON1 et EECON2) sont associés à la mémoire EEPROM.
 La durée d’écriture d’un octet est de l’ordre de 10 ms, la fin de chaque écriture réussie est annoncé par le
drapeau EEIF et la remise à zéro du bit RW du registre EECON1.
 Le drapeau EEIF peut déclencher l'interruption EEI si elle a été validée.
12. Les interruptions
Une interruption est l’arrêt aléatoire du programme principal pour aller exécuter une procédure
d'interruption. A la fin de cette procédure, le microcontrôleur reprend le programme à l’endroit où il s’était
arrêté. Le PIC16F84 possède 4 sources d'interruption :
INT L'interruption de l’entrée RB0 du port B
Cette interruption est provoquée par un changement d'état sur l'entrée RB0 du port B quand elle est
programmée en entrée.
Le bit INTEDG permet de choisir front de déclenchement, 1=montant, 0=descendant (registre OPTION_REG)
RBI L'interruption du PORTB (RB4 à RB7 du port B)
Cette interruption est provoquée par un changement d'état sur l'une des entrées RB4 à RB7 du port B, Le front
n'a pas d'importance.
T0I L'interruption de débordement du Timer TMR0
Cette interruption est provoquée par le débordement du timer TMR0. Les bits associés sont T0IE (validation)
et T0IF (drapeau)
EEI L'interruption de Fin d'écriture dans l'EEPROM
Cette interruption est déclenchée à la fin d'une écriture réussie dans l'EEPROM.

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 21


a. INTCON Registre des interruptions:
Les interruptions sont contrôlées par le registre INTCON qui se compose de :
 Bit GIE (General Interruptions Enable) il permet d’utiliser la fonction interruption ou la bloquer, en autorisant
(à 1) ou non (à 0) l’accès à celle-ci.
 A chaque interruption sont associés deux bits :
o bit d'autorisation (Enable) il doit être mis à 1 pour utiliser ou non (à 0) l'interruption
o un indicateur/drapeau (Flag) prend 1 si une interruption est déclenchée il permet de savoir de quelle
interruption il s'agit
Interruption INT RBI T0I EEI
Tous bits ces Enable et Flag sont dans le registre INTCON à part Autorisation INTE RBIE T0IE EEIE
le drapeau EEIF de l'interruption EEI qui se trouve dans le registre Indicateur (flag) INTF RBIF T0IFF EEIF
EECON1.
b. Déroulement d'une interruption :
Lorsque l'événement déclencheur d'une interruption intervient, alors son indicateur est positionné à 1 (flag
levé). Si l'interruption correspondante a été autorisée, elle est alors déclenchée :
le programme principale s’arrête et le PIC exécute la procédure d'interruption qui se trouve à l'adresse 4 en
exécutant les étapes suivantes :
 l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis remplacée par la valeur
h’0004’ (adresse de la routine d'interruption).
 Le bit GIE est placé "0" pour bloquer d’autres interruptions (afin qu'on ne soit pas dérangés pendant
l'exécution de la procédure d'interruption).
 A la fin de la procédure d'interruption (instruction RETFIE) :
o le bit GIE est replacé à l'état haut (autorisant ainsi un autre événement)
o le contenu du PC est rechargé à partir de la pile ce qui permet au programme de reprendre là
où il s'est arrêté

Deux remarques importantes sont à faire :


Remarque 1 :
Le drapeau reste à l’état haut même après le traitement de l’interruption. Par conséquent, il faut toujours le
remettre à "0" à la fin de la routine d'interruption sinon l'interruption sera déclenchée de nouveau juste après
l'instruction RETFIE
Remarque 2 :
Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W et STATUS doivent être
sauvegardés en RAM puis restaurés à la fin de la routine pour que le microcontrôleur puisse reprendre le
programme dans les mêmes conditions où il l'a laissé.

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 22


Microcontrôleur PIC16F877 (μC)

I. Comparaison du PIC16F877 au PIC16F84 :


16F877 16F84
CPU High Performance RISC CPU
Fréquence Jusqu’à 20MHz
Instructions Jeu réduit de 35 instructions
Broches 40 18
Mémoire programme 8k x 14Bits 1k x 14Bits
RAM (GPR) 368 x 8Bits 68 x 8Bits
RAM (SFR) 96 x 8bits 16o x 8bits
EEPROM 256 x 8Bits 64 x 8Bits
Ports E/S A x 6, B x 8, C x 8, A x 5 et B x 8 (13)
D x 8 et E x 3 (33)
Source d’interruption 15 4
Entrées Analogiques 8 0
TIMERs 2 x 8Bits, 1 x 16Bits 1 x 8Bits

II. Architecture interne & package :

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 23


1. La Mémoire programme
Le plan mémoire est linéaire les adresses vont de 0000h à 1FFFh (8k mots de 14 bits), par page de 2K mots. On
peut remarquer, le vecteur de reset est figé en 0000h
Les Pics n'ont qu'un seul vecteur d'interruption en 0004h. Lors d'une interruption, le sous-programme associé
devra déterminer quel périphérique a demandé une interruption.
La pile utilisée par les sous programmes n'est pas implantée en mémoire de donnée comme avec les
microcontrôleurs classiques, mais dans la mémoire programme. Elles sont utilisées lors d'appels de sous
programmes, on ne peut pas imbriquer plus de 8 sous programmes (Ce qui est déjà beaucoup).

2. La RAM
La mémoire de Données est découpée en 4 Banks. En fonction de la bank choisie on
RP1-
accède à différents registres. Certains registres sont dans les 4 banks. Le choix de la IRP Bank
RP0
bank de fait par les bits 5 et 6 du registre STATUS, et le bit 7 (IRP) doit prendre 0 pour
0 00 Bank0
les pages (0 et 1), et 1 pour les pages (2 et 3)
0 01 Bank1
1 10 Bank2
1 11 Bank3

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 24


3. Les Ports E/S :
Toute les Ports sont semblables à ceux observés sur le 16F84, ils sont utilisés en E/S par l’utilisateur suivant le
besoin, la direction est imposée à travers les registres TRISs respectifs.
Les PORTs sont manipulés dans la Bank0 et les TRISs dans la Bank1, PORTB et TRISB clonés respectivement
dans bank2 et bank3
Les Ports du 16F877 ont quelques particularités que nous allons citer :
Le PORTB (RB0...RB7) :
Ses broches en mode Entrées logiques sont des entrées type « Trigger de Schmitt »
RB0 : peut-être configurée en source d’interruption INT
RB3/PGM , RB6/PGC , RB7/PGD : utilisés pendant la programmation LVP
PORTC (RC0...RC7) :
Ses broches en mode Entrées logiques sont des entrées type « Trigger de Schmitt »
RC6 et RC7 : sont utilisées pour la communication série avec l’ordinateur (RX/TX)
PORTD (RD0...RD7) :
Ses broches en mode Entrées logiques sont des entrées type « Trigger de Schmitt »
Ses broches peuvent être utilisées pour la communication parallèle avec un autre Processeur (Master), c’est
le mode PSPMODE où le PIC est utilisé en mode Slave.
Le mode Slave est commandé à partir du bit PSPMODE du TRISE
Le PORTA et le PORTE / entrées Analogiques :
Les 3 broches du PORTE et 5 broches du PORTA (An7..An0) peuvent être utilisées comme des entrées
Analogiques, elles sont liées à un CAN qui converti les signaux analogique en mots binaire de 10Bits. C’est un CAN
à approximations successives.
Pour manipuler ces 8 broches, nous allons utiliser des registres spéciaux : ADRESH (bank0) ADRESL (bank1)
ADCON0 (bank0) ADCON1 (bank1)
Le résultat de la conversion est stocké dans ADRESH-ADRESL (poids fort – poids faible)
ADCON1 configuration du PORT analogique. (voir tableau ci-dessous)
ADFM ADCS2 PCFG3 PCFG2 PCFG1 PCFG0
Résultat justifié Avec Non-
Configuration du Port analogique
droite/gauche (1/0) ADCS1-0 utilisé
ADCON0 permet de commander le convertisseur
ADCS1 ADCS0 CHS2 CHS1 CHS0 Go/ 𝐷𝑜𝑛𝑒 ADON
Fréquence d’Horloge du Sélection d’entrée à 1 pour lancer conv. N Convertisseur
CAN (voir tableau) convertir à la fin il prend 0 U ON-OFF

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 25


La durée de la Conversion :
Pour lire une entrée analogique, il faut tenir compte du temps nécessaire pour la convertir en donnée
numérique.
Temps d’acquisition Tacq:
C’est le temps nécessaire pour prendre un échantillon de l’entrée analogique Ve, il s’agit de charger cette
entrée sur le condensateur « Hold », puis de l’isoler de l’entrée, il permet de garder une valeur constante pendant
la conversion.

Tacq = (stabilisation de l’amli) + (charge du condensateur) + (coefficient de température)


Tacq = (2µs) + [(Chold (Rs + Ric + Rss) ) * ln (1/2047)] + [(t – 25°) * 0,5 µs)]

Avec ( Tacq = 19,72µs exemple)


Ric < 1k résistance d’interconnections
Rss =7k à 5V résistance du sambling switch, dépend de Vdd
Rs > 10K résistance interne de la source du signal (ne pas dépasser Rs max = 2,5 kΩ)
Chold = 120pF condensateur Hold

Temps de conversion TC:


C’est le temps nécessaire pour convertir l’entrée Ve (chargé dans Chold) en une valeur binaire, il commence au
lancement de conversion (bit Go), cela prend environ 12TAD, avec TAD le temps nécessaire à la conversion d’un bit.
La valeur de TAD est donnée par le tableau suivant (en fonction de FCAN), il doit être TAD > 1,6µs

Le cycle de conversion :

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 26


4. Les Interruptions :
Les interruptions au μC 16F877 diffèrent de celles du 16F84 par le nombre et la catégorisation, ici on en compte
15 sources (au lieu de 4) : 3 interruptions primaires et 12 interruptions de périphériques.
Interruptions primaires :
 Action sur la broche INTI/RB0
 Débordement du TIMER0
 Changement d'état logique sur une des broches du PORTB (RB4 à RB7)
Utilisation du registre INTCON :
Valider le bit GIE : autoriser les interruptions
Valider le bit concernant l'interruption (Enable) à utiliser
L’Interruption déclenchée est indiquée par son flag
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Différence au Bit PEIE (EEIE au 16F84)
Interruptions périphériques (PEIE) :
 Changement d'état sur le PORTD (PSPIE).
 Fin de conversion analogique numérique (ADIE).
 Réception d'une information sur la liaison série (RCIE).
 Fin d'émission d'une information sur la liaison série (TXIE)
 Interruption SPI ou I2C du module SSP (SSPIE).
 Interruption du registre de capture et/ou de comparaison 1 (CCP1IE).
 Débordement du TIMER1 (TMR1IE).
 Débordement du TIMER2 (TMR2IE)
 Fin de comparaison (CMIE).
 Fin de programmation d'une case mémoire de l'EEPROM (EEIE)
 Collision de BUS (BCLIE)
 Interruption du registre de capture et/ou de comparaison 2 (CCP2IE).
Utilisation des registres INTCON – PIE1/PIE2 – PIR1/PIR2
Valider le bit GIE : autoriser les interruptions
Valider le bit PEIE : autoriser les interruptions Périphériques
Valider le bit concernant l'interruption dans PIE1 ou PIE2
L’Interruption déclenchée est indiquée par son flag dans PIR1 ou PIR2
Registre PIE1/PIE2
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
——— CMIE ——— EEIE BCLIE ——— ——— CCP2IE
Registres PIR1/PIR2
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
——— CMIF ——— EEIF BCLIF ——— ——— CCP2IF

5. Les TIMERs :
Le PIC 16F877 contient 3 TIMERs semblables au TIMER0 du PIC16F84, incrémentés en permanence, ils
peuvent déclencher une interruption si elle est autorisée :
TIMER0 :
Sur 8Bits, (TMR0 répliqué dans bank0 et bank2) il est incrémenté par :
 Horloge interne (Fosc/4)
 Horloge externe sur broche T0CKi/RA4
 Registre de control du TMR0 : OPTION_REG (Interruption T0I commandée dans INTCON)
𝑅𝐵𝑃𝑈 INTEDG TOCS TOSE PSA PS2 PS1 PS0
RBPU = 0 active la résistance de Pull up sur les 8bits du Port.
INTEDG = 1 : Interruption si front montant sur la broche PB0/IRQ
2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 27
T0CS = 1 : la broche RA4/Clk est utilisée comme source d’horloge pour le TIMER, sinon, il utilise l’horloge
interne et RA4 est utilisée comme E/S
TOSE = 1 : le TIMER utilise le front montant, sinon il utilise le front descendant (utilisé avec l’horloge externe)
PSA = 1 : prédiviseur est affecté au WatchDog, sinon il est affecté au TIMER

TIMER1 :
Sur 16Bits, (dans bank0 TMR1H t TMR1L) il est incrémenté par :
 Horloge interne (Fosc/4)
 Horloge externe sur broche T1OCI/RC0
 Oscillateur entre T1OSI/RC1 et T1OSO/RC0
 Registre de control du TMR1 : T1CON
(Interruption T1I commandée dans INTCON + PIE1 + PIR1)
N-U N-U T1CKPS1 T1CKPS0 T1OSCEN 𝑇1𝑆𝑌𝑁𝐶 TMR1CS TMR1ON
T1CKPS1 – T1CKPS0 : Valeur du prédiviseur de la fréquence du TMR1.
T1OSCEN = 1 : Activer l’horloge du TMR1 (arrêt pour économie d’énergie)
T1SYNC = 0 Synchroniser horloge du TMR1 avec horloge interne
(Si la synchronisation est active, le TMR1 s’incrémente pendant le mode SLEEP)
TMR1CS = 1 Horloge externe sur (front montant de RC0), sinon horloge interne du TMR1 (32kHz)
TMR1ON = 1 Activer le TIMER, sinon il est éteint

T1CKPS1 – T1CKPS0

TIMER2 :
Sur 8Bits, (TMR2 dans bank0) il est incrémenté par :
 Horloge interne (Fosc/4) avec prédiviseur
 Registre de control du TMR2 : T2CON
(Interruption T2I commandée dans INTCON + PIE1 + PIR1)
N-U TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMRON T2CKPS1 T2CKPS0
TOUTPS3 – T1CKPS0 : Post-Diviseur de la valeur du TMR1 (utilisation avec capture/compare)
TMR2ON = 1 : Activer le TIMER, sinon il est éteint
T2CKPS1 - T2CKPS0 : Valeur du prédiviseur de la fréquence du TMR2

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 28


Jeu d’instruction du μC PIC16Fxxx

Si d = 1 (ou d = F) le résultat de l’opération est stocké dans le registre « F »


Si d = 0 (ou d = W) le résultat est stocké dans W
L’état de quelques registres à l’initiation PIC16F84

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 29


Résumé à retenir PIC16F84
IRP RP1 RP0 TO PD Z DC C
STATUS Choisir bank0 ou 0 indique time- 0 indique mode Flag Retenu sur 4 Flag Retenu sur 8
Non utilisés Flag Résultat Nul
bank1 out du WD sleep bits bits
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Front de
OPTION_REG Si 0 active les Front de Horloge du TMR0 l’horloge du Prédiviseur si 1
résistances de l’interruption si 1 externe (RA4) TMR0 si 1 au WD si 0 au Code du prédiviseur
PullUp du PORTB INT, si 1 montant si 0 interne montant si 0 TMR0
descendant
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
Autoriser Autoriser Flag de
INTCON Si 1 autoriser Autoriser Autoriser Flag de Flag de
l’interruption fin l’interruption fin l’interruption fin
toutes les l’interruption INT l’interruption du l’interruption INT l’interruption du
écriture dans de comptage de comptage
interruptions (RB0) PORTB (RB0) PORTB
EEPROM TMR0 TMR0
--- --- --- EEIF WRERR WREN WR RD
Flag de Flag de Fin
EECON1 Autoriser
l’interruption fin d’écriture dans Lancer l’écriture Lancer la lecture
Non utilisés l’écriture dans la
d’écriture dans EEPROM avec dans l’EEPROM de l’EEPROM
EEPROM
EEPROM Erreur

2STE Lycée Technique Mohamed VI – Azilal [2019/2020] N. EL-GAOUTI Cours A T C Page | 30

Vous aimerez peut-être aussi