Cours Microcontrôleurs PIC16F877
Cours Microcontrôleurs PIC16F877
Microcontrôleur
3.3. Les interruptions .............................................................................................................................. 9
1. Présentation ........................................................................................................................................... 11
2. Caractéristiques du PIC16F877........................................................................................................... 11
2.1. Caractéristique de la CPU ............................................................................................................. 11
-1-
2. PORTB .................................................................................................................................................. 26
2. Port série du microcontrôleur PIC ...................................................................................................... 47
3. PORTC .................................................................................................................................................. 26 2.1. Registre SPBRG ............................................................................................................................ 47
1. Introduction .......................................................................................................................................... 29
2. Timer 0................................................................................................................................................... 29
3. Timer 1................................................................................................................................................... 31
4. Timer 2................................................................................................................................................... 32
1. Présentation ........................................................................................................................................... 36
1.1. Registre ADCON1 ........................................................................................................................ 37
-2- -3-
- le bus d'adresses: unidirectionnel qui permet la sélection de la case contenant
I - INTRODUCTION AU MICROPROCESSEUR
l’information à traiter dans un espace mémoire (ou espace adressable). L’espace
1. Structure de base d’un calculateur adressable peut avoir 2n emplacements, avec n est le nombre de lignes du bus
D’un point de vue matériel, un système informatique minimal est constitué d’un d'adresses.
processeur, des mémoires et d’un ensemble des entrées sorties. - le bus de commande: constitué par quelques conducteurs qui assurent la
- Le microprocesseur (MPU, Micro-Processing Unit) est un circuit intégré à très grande synchronisation du flux d'informations sur les bus de données et d’adresses.
CPU
Bus de données
échelle d’intégration (VLSI) capable d'exécuter automatiquement des instructions
P é r i p h é r ia u e s
Horloge
(opérations élémentaires) qu'il ira chercher dans la mémoire du micro-ordinateur. Il
remplit donc les fonctions d’une unité centrale de traitement (CPU, Central Processing Registres Interfaces
ROM RAM
d’entrées
Unit) en un seul boîtier. sorties
Mémores
Toutes les informations qu’utilise le microprocesseur sont stockées dans des
Unité de
mémoires, en particulier le programme, le fonctionnement du microprocesseur est
Contrôle Bus d’adresses
entièrement conditionné par le contenu de celles-ci. Ces mémoires contiennent deux (UC)
Bus de contrôle
types d'informations : le programme (ensemble des ordres à exécuter) et les données
nécessaires pour la réalisation d'une tâche précise. Figure I-1 : Schéma bloc d’un système à microprocesseur
- Les données ou OPERANDES proviennent, le plus souvent, d'un calcul effectué par
le microprocesseur ou d'un périphérique d'entrée, (clavier, disque, ...) via une interface. 2. Architecture d’un CPU
Elles sont stockées dans des mémoires qui peuvent être lues et écrites appelées RAM Le microprocesseur est constitué des unités fonctionnelles suivantes :
(Random Acces Memory). - d’unité Arithmétique et Logique (ALU),
- Les programmes figés sont placés, de façon définitive, dans des mémoires qui ne - des registres,
pourront qu'être lues par le microprocesseur. Ce sont des mémoires non volatiles, de - une unité de commande (CU).
type ROM (Read Only Memory), PROM, EPROM, Flash … 2.1. Unité arithmétique et logique
- Dans un système à microprocesseur, l'interface d’entrée-sortie permet d’assurer la
Cet organe, interne au microprocesseur, permet la réalisation d'opérations
liaison entre l'unité centrale, via le bus interne du micro-ordinateur et l'environnement
arithmétiques (Addition, Soustraction) et logiques (AND, OR, XOR…). Outre les
extérieur (périphériques).
opérations arithmétiques et logiques, l'ALU réalise aussi les opérations de décalage et
Le microcontrôleur échange les informations avec les composants qui lui sont
de rotation. Le registre d’état est lié étroitement à L’ALU, nous donne à travers ces
associés (mémoire et périphériques I/O) au moyen d’un ensemble de connexions
inducteurs (Flags) des renseignements supplémentaires sur le résultat d’une opération
appelé bus. Un bus est un ensemble de fils qui assure la transmission du même type
(résultat nul, négatif, dépassement…). On peut citer par exemple les indicateurs de :
d’information. On retrouve trois types de bus véhiculant des informations en parallèle
- retenue (carry : C)
dans un système de traitement à microprocesseur :
- retenue intermédiaire (Auxiliary-Carry : AC)
- le bus de données : bidirectionnel qui assure le transfert des informations entre le
- signe (Sign : S)
microprocesseur et son environnement. Le nombre de lignes du bus de données définie
- débordement (overflow : OV ou V)
la capacité de traitement du microprocesseur ; selon le microprocesseur la largeur du
- zéro (Z)
bus peut être de 8 bits, 16 bits, 32 bits, 64 bits …
- parité (Parity : P)
-4- -5-
Une instruction au niveau machine doit fournir à l'unité centrale toutes les informations
2.2. Les registres
nécessaires pour déclencher une telle opération élémentaire. Elle comporte en général
Il existe deux types de registres : les registres d'usage général, et les registres
plusieurs champs ; le premier champ contient le code de l’opération (Code-Op ou Op-
d'adresses (pointeurs)
Code en anglais); les autres champs peuvent comporter des données ou l'identification
Les registres d’usage général (Registre de travail)
des opérandes. Sur certaines machines les instructions ont toutes la même longueur, sur
Ce sont des mémoires rapides, à l'intérieur du microprocesseur, qui permettent à
d'autres cette longueur peut varier avec le code opération ou le mode d'adressage.
l'UAL de manipuler des données à vitesse élevée. Ils sont connectés au bus de données
Format d’une instruction :
interne du microprocesseur.
Code de l’opération opérande1 opérande2
L'adresse d'un registre est associée à son nom (on donne généralement comme nom
Exemple : Additionner le contenu du registre A avec le contenu de la case mémoire
une lettre A, B, C…). L’accumulateur est un registre de travail qui sert à stocker un
dont l’adresse est mentionnée dans le champ 3
opérande au début d'une opération et/ou le résultat à la fin de l'opération.
ADDITIONNER Registre A @ Case mémoire
Les registres d’adresses (pointeurs)
Ce sont des registres connectés sur le bus adresses. 3.2. Cycle d’exécution d’une instruction
On peut citer comme registre: Le traitement d'une instruction peut être décomposé en plusieurs phases. Celles-ci
- Le compteur ordinal (pointeur de programme PC) : celui-ci contient toujours sont au nombre de trois :
l’adresse de la prochaine instruction à exécuter. 3 Recherche de l'instruction (Fetch)
- Le pointeur de pile (Stack Pointer SP), utilisé pour la sauvegarde de l’adresse de 3 Décodage (decode)
retour d’un sous-programme. 3 Exécution (execute)
- Les registres pointeur de données ou d'index : utilisés pour l’adressage indirect
de la mémoire. 3.2.1. Recherche d’une instruction (Fetch)
Le contenu de PC (compteur ordinal) est placé sur le bus des adresses (c'est l'unité de
2.3. L’unité de contrôle (UC)
contrôle qui établit la connexion). L'unité de contrôle (UC) émet un ordre de lecture
Elle permet de séquencer le déroulement des instructions. Elle effectue la recherche
(READ=RD=1), au bout d'un certain temps (temps d'accès à la mémoire) le contenu de la
en mémoire des instructions, décodage et exécuté l’instruction recherchée. Elle est
case mémoire sélectionné est disponible sur le bus des données.L'unité de contrôle
composée essentiellement :
charge la donnée dans le registre d'instruction pour décodage.
- d’un registre d’instruction (RI), recevant le code de l’instruction à exécuter.
- d’un décodeur d’instruction, permettant de déterminer le type de l’instruction à
Microprocesseur Mémoire
exécuter.
Programme
- d’un Bloc logique de commande (ou séquenceur) : Il organise l'exécution des PC 2000 @2000
n 2000 Instr 1
instructions au rythme d’une horloge, et élabore tous les signaux de synchronisation
2002 Opér
internes ou externes du microprocesseur. RI Instr 1 2004 Instr 2
: :
3. Fonctionnement d’un microprocesseur o : :
Instr 1
Décodeur : :
3.1. Jeu instructions d’instructions 8000 Instr n
Les microprocesseurs sont capables d'effectuer un certain nombre d'opérations
Figure I-2 : Recherche de l'instruction
élémentaires. Cet ensemble d’opérations élémentaires est appelé jeu d’instructions.
-6- -7-
3.2.2. Décodage 3.3. Les interruptions
Le registre d'instruction (RI) contient maintenant le premier mot de l'instruction qui Le microprocesseur exécute les instructions de manière séquentielle. Souvent, il est
peut être codée sur plusieurs mots. Ce premier mot contient le code opératoire qui nécessaire d’interrompre un programme pour exécuter une tâche supposée prioritaire.
définit la nature de l'opération à effectuer (addition, rotation,...) et le nombre de mots Cette tâche (appelée routine d’interruption) est déclenchée suite à un évènement
de l'instruction. L'unité de commande décode le code opératoire. Si l’instruction est extérieur.
suivie d’un opérande (une constante ou adresse d’une donnée), l’unité de contrôle Une fois que l’interruption à été servie (exécutée) le programme principal reprend son
récupère cet opérande, et positionne le compteur ordinal (PC) sur l'instruction suivante. exécution à partir de l’endroit où il a été interrompu.
Microprocesseur n Mémoire Le microprocesseur possède des broches spécialisées pour les interruptions. Si un
Programme composant extérieur au microprocesseur veut l'interrompre, il lui suffit de changer l’état
Logique de PC
2004 @2002 d'une de ces broches (0 Ö1 ou 1Ö0 suivant l’état les broches). Le sous-programme
commande 2000 Instr 1
p 2002 Opér d'interruption est placé en mémoire par le concepteur à une adresse connue par
RI Instr 1 2004 Instr 2 microprocesseur.
: :
o : :
Opér 4. Système à microprocesseur
Décodeur : :
d’instructions 8000 Instr n 4.1. Microprocesseur et Microcontrôleur
Tmp Opér Au début de la commercialisation des microprocesseurs, un système minimum était
obligatoirement constitué de plusieurs circuits intégrés.
Figure I-3 : Récupération de l’opérande Les microcontrôleurs sont apparus ensuite, lorsque l’intégration des composants a fait
des progrès considérables. Actuellement, dans un circuit intégré, un microcontrôleur
3.2.3. Exécution
regroupe l’équivalent d’un système à microprocesseur dans un même boîtier. Un
Le microprogramme réalisant l'instruction est exécuté. Les indicateurs sont positionnés système à microprocesseur peut être constitué de nombreux composants (mémoires,
(registre d'état). etc.) ; il est facilement extensible. Les constituants d'un microcontrôleur sont figés.
L’exemple suivante montre l’exécution d’une addition d’un Opérande se trouvant Les microcontrôleurs sont plutôt dédiés aux applications qui ne nécessitent pas une
dans un registre temporaire (Tmp) avec le contenu du registre A, le résultat est chargé grande quantité de calculs complexes, mais qui demandent beaucoup de manipulations
dans le registre A. d’entrées/sorties. C’est le cas de contrôle de processus.
Microprocesseur
Les systèmes à microprocesseur sont plutôt réservés pour les applications demandant
Logique de PC PC
2004
n : Charger le contenu de A dans Tmp2 beaucoup de traitement de l’information et assez peu de gestion d’entrées / sorties. Les
commande
o : Additionner le deux Opér.
p : Charger le résultat dans le registre A ordinateurs sont réalisés avec des systèmes à microprocesseur.
A Opér2 q : Positionner le registre d’état
p
4.2. Architecture des microprocesseurs
n Registre d’Etat
+ q Z, C, …. Pour l’organisation des différentes unités, il existe deux architectures :
o
- l’architecture Von Neuman (du nom d’un des savants qui a contribué à la mise au
Tmp2 Tmp1 Opér1 point d’un des tout premiers ordinateurs). La mémoire programme, la mémoire données
et les périphériques d’entrées/sorties partagent le même bus s’adresses et de données.
Figure I-4 : Exécution de l'instruction
-8- -9-
par cycle, hormis les sauts, cela nous donne une puissance de l’ordre de 1MIPS (1
Figure I-5 : Architecture Von Neuman
Million d’Instructions Par Seconde).
Bus d’adresses Bus d’adresses - Les microcontrôleurs PICs sont subdivisés en 3 grandes familles :
Mémoire Microproce- Mémoire - La famille Base-Line, utilise des mots d’instructions de 12 bits,
programme sseur de données - la famille Mid-Range, utilise des mots de 14 bits « PIC16 »,
Bus de données Bus de données
- la famille High-End, utilise des mots de 16 bits. « PIC17 et PIC18 »
Figure I-6 : Architecture Harvard Nous allons dans ce document étudier le microcontrôleur PIC16F877, qui n’est rien
d’autre qu’un PIC16F84 amélioré.
2. Caractéristiques du PIC16F877
2.1. Caractéristique de la CPU
F CPU à architecture RISC (8 bits)
F Mémoire programme de 8 Kmots de 14 bits (Flash),
F Mémoire donnée de 368 Octets,
F EEPROM donnée de 256 Octets,
F 14 sources d’interruptions,
F 5 ports d’entrées/sorties bidirectionnels,
F Pile de 8 niveaux,
F Oscillateurs de type RC ou Quartz (Fmax = 20MHz),
F Programmation en mode série de la mémoire Flash à travers les broches
RB6/PGC et RB7/PGD,
F Chien de garde (WatchDog),
- 10 - - 11 -
2.2. Caractéristiques des périphériques programme des microcontrôleurs Mid-range est de 13 bits ; ils peuvent donc adresser
F Timer0 : Timer/Compteur 8 bits avec un prédiviseur 8 bits 8Kmots au maximum.
F Timer1 : Timer/Compteur 16 bits avec un prédivision de 1, 2, 4, ou 8 ; il peut être La pile du PIC est constituée d’une mémoire circulaire (LIFO) de 8 niveaux, par
incrémenté en mode veille (Sleep), via une horloge externe, conséquent, il n’est pas possible de faire plus de 8 empilements successifs ; de plus elle
F Timer2 : Timer 8 bits avec deux diviseurs (pré et post diviseur) n’est pas accessible à l’utilisateur.
F Deux modules « Capture, Compare et PWM » La Figure II-2, montre la structure interne des microcontrôleurs PIC16.
F Module capture 16 bits avec une résolution max. 12,5 ns, Flash PC
Program
F Module Compare 16 bits avec une résolution max. 200 ns, memory SFR
8 Level
Data EEPROM
RAM
F Module PWM avec une résolution max. 10 bits,
Stack
F ADC multi-canal (8 voies) avec une conversion sur 10 bits,
Instruction reg. MUX
F Synchronous Serial Port (SSP) travaillant en mode SPI et en mode I2C (mode
maitre/escalve), SFR
F Universel Synchronous Asynchronous Receiver Transmitter (USART/SCI) avec un
Power Up
9ème bit pour la détection d’adresse. Timer MUX
Instuction
PORTS
Osc.
O sc. Start Up
p
F Parallel Slave Port de 8 bits avec signaux de contrôle externes RD\, RW\ et CS\. decode &
Timer
control ALU STATUS
Power On
2.3. Brochage Reset
Timing WDT
generation Timer Work
Brown-On
detect Périphériques
OSC1/CLKIN
OSC2/CLKOUT MCLR VDD/VSS
Figure II-1 : Brochages des microcontrôleurs PIC valeur du bit d, dans registre W (d = 0) ou
d
dans le mémoire File (d = 1). Il est a noté MUX
3. Architecture interne du microcontrôleur PIC16F877
que le mémoire File comprend les
Les microcontrôleurs la famille PIC16 se base sur une architecture RISC, cette
registres du CPU (STATUS, FSR, PCLATH, W 7FH
architecture permet une accessibilité séparée de la mémoire programme et celle des RAM file
PCL), les registres des périphériques I/O
données avec un nombre d’instructions très réduit (35 insts.). Le compteur de
et la mémoire de données utilisateur. Figure II-3
- 12 - - 13 -
- Adressage immédiat (Litéral) : ce mode ne fait pas intervenir le mémoire de La partie restante GPR, constitue la mémoire de stockage des données utilisateur.
données (File). Exemple : ADDLW Const ; W Å W + Const.
Dans le cas des PIC16F876/877, elle compte au total 368 octets, reparties de la
- Adressage direct : Ce mode fait intervenir l’accumulateur W et la mémoire File.
Le résultat pourra être chargé selon la valeur du bit d, dans W ou File. manière suivante :
Exemple : ADDWF F,d 96 octets (80 octets dans la banque 0 et 16 Octets zone commune)
Si d = 0, alors W Å W + (F) 80 octets dans la banque 1,
Si d = 1, alors (F) Å W + (F) 96 octets dans la banque 2,
- Adressage indirect utilisant le registre FSR pour pointer la donnée. 96 octets dans la banque 3,
L´accès à la zone commune n’impose pas la sélection de la banque.
5. Organisation de la mémoire
5.1. Mémoire programme
La mémoire programme est constituée de 8 Kmots de 14 bits. Le vecteur Reset occupe
l’adresse 0000H, alors que le vecteur d’interruption occupe l’adresse 0004H. La
mémoire programme est divisée en 4 pages (2 Kmots par page).
Microchip a réservé une zone de pile de 8 niveaux pour l’empilement des adresses
de retour des sous programmes.
Vect. RESET 0000H
:
:
Page 0
13
0800H
retfie, retlw
1000H
Page 2
Pile 8 niveaux
1800H
Page 3
1FFFH
- 14 - - 15 -
Deux modes d’adressage sont utilisés pour l’accès à la mémoire File :
Bit 7 : IRP : sélection des banques en adressage indirect.
- adressage direct : les 7 bits (b6 .. b0) de la partie basse de l’adresse font partie du
IRP = 0 : banque 0, 1
code de l’instruction ; la partie haute de l’adresse est constituée des bits RP1 et RP0 du IRP = 1 : banque 2, 3
registre STATUS. Bits 6 et 5 : RP1 et RP0 : sélection des banques en adressage direct
Dans ce mode d’adressage, tout accès à la mémoire est précédé par la sélection Bit 4 : TO\ : Time Out bit (bit en lecture seulement).
TO\ = 1 : Après une mise sous tension, après l’instruction CLRWDT ou bien
d’une banque selon le tableau suivant :
après l'instruction SLEEP.
RP1 : RP0 Banque Zone d’adressage TO\ = 0 : Signifie qu'un Time Out du timer de watchdog est survenu.
00 Banque 0 00H .. 7FH Bit 3 : PD\ = Power Down bit (bit en lecture seulement).
01 Banque 1 80H .. FFH PD\ = 1 : Après une mise sous tension ou bien après une RAZ du
10 Banque 2 100H .. 17FH Watchdog.
11 Banque 3 180H .. 1FFH PD\ = 0 : Après l'instruction SLEEP.
- adressage indirect : la partie basse de l’adresse est fournie par le registre FSR (File
Bit 2 : Z = Zero bit.
Z = 1 : Le résultat d'une opération arithmétique ou logique est nul.
Select Register). La sélection d’une banque est réalisée dans ce cas par le 8 bits du Z = 0 : Le résultat d'une opération arithmétique ou logique est différent de
registre FSR et le bit IRP du registre STATUS. zéro. Ce bit est positionné aussi par l’instruction « movf »
Bit 1 : DC = Digit Carry/ borrow bit (affecté par ADDWF, ADDLW, SUBWF et SUBLW).
Ce bit est inversé en cas d’un emprunt.
DC = 1 : Une retenue sur le 4ème bit des poids faible est survenue.
DC = 0 : Pas de retenue sur le 4ème bit des poids faible.
Bit 0 : C = Carry/ borrow bit (affecté par ADDWF, ADDLW, SUBWF et SUBLW). Ce bit
est inversé en cas d’un emprunt.
C = 1 : Une retenue sur le bit MSB est survenue.
C = 0 : Pas de retenue sur le bit MSB.
- 16 - - 17 -
catégories (voir Figure II-8) : Les instructions agissent sur les registres internes du CPU. Les instructions comportent
- les instructions orientée octet (byte), donc un code opératoire (Mnémmonique) sans opérande.
- les instructions orientée bit, Syntaxe : MNEMONIQUE
- les instructions à adressage immédiat et de contrôle,
- 18 - - 19 -
Syntaxe : MNEMONIQUE Constante registre FSR (File Select Register). Les 9 bits d´adresse sont obtenus en concaténant les 8
Format de l’instruction bits du registre FSR avec le bit IRP du registre STATUS.
Instruction
Syntaxe : MNEMONIQUE INDF, d
Code-Op Constante k (8bits)
b13 b7 b6 b0 L’exemple suivant initialise à zéro les cases mémoires de l´adresse 20H à 3FH.
Å
Å
Å
Exemple :
Ce mode d’adressage utilise le registre virtuel INDF. Les instructions qui utilisent le Code-Op k (Adresse sur 11bits)
b13 b11 b10 b0
registre INDF (INDirect File), accèdent réellement à la case mémoire pointée par le Exemple :
- 20 - - 21 -
Interrupt Enable) ; ce bit sert à inhiber les interruptions périphériques, tout en conservant
les interruptions Timer0, INT et RB4/RB7.
7. Les Interruptions
Le microcontrôleur PIC16F877 dispose 14 sources d’interruptions. Chaque
interruption a un bit d’autorisation (Enable) et un bit indicateur (Flag). Dans le tableau
suivant, nous avons énuméré les différentes sources d’interruptions ainsi que les registres
associés.
Figure II-9 : Logigramme des interruptions
Source d’interruption Flag Registre Enable bit Registre Int. en PICC
Timer 0 T0IF INTCON T0IE INTCON int_rtcc Pour mettre une interruption en service, il faut :
Pin RB0 / INT INTF INTCON INTE INTCON int_ext
- mettre à 1 le bit de validation spécifique (T0IE = 1, dans le cas de Timer0),
Ch. RB4/RB7 RBIF INTCON RBIE INTCON int_rb
Convert. A/D ADIF PIR1 ADIE PIE1 int_ad - mettre à 1 le bit PEIE, s’il s’agit d’une interruption périphérique,
Rx USART RCIF PIR1 RCIE PIE1 int_rda - mettre à 1 le bit GIE, validation globale
Tx USART TXIF PIR1 TXIE PIE1 int_tbe Une fois le microcontrôleur a reconnu l’interruption, il remet à 0 le bit GIE, pour
Port série SSP SSPIF PIR1 SSPIE PIE1 int_ssp bloquer les interruptions, sauvegarde dans la pile l’adresse de retour et charge la
Module CCP1 CCP1IF PIR1 CCP1IE PIE1 int_ccp1
valeur 0004H dans le compteur de programme PC. Il incombe au service
Module CCP2 CCP2IF PIR2 CCP2IE PIE2 int_ccp2
Timer 1 TMR1IF PIR1 TMR1IE PIE1 int_timer1 d’interruption :
Timer 2 TMR2IF PIR1 TMR2IE PIE1 int_timer2 - d’identifier la source d’interruption en consultant les indicateurs (flags),
EEPROM EEIF PIR2 EEIE PIE2 int_eeprom - de remettre à 0 le flag qui a provoqué l’interruption.
SSP mode I2C BCLIF PIR2 BCLIE PIE2 int_i2c
- à la fin de la routine d’interruption l’instruction retfie, positionne à nouveau le bit
Port parallèle PSPIF PIR1 PSPIE PIE1 int_psp
GIE.
Les bits indicateurs ainsi que les bits de validation des interruptions Timer0, RB0/INT
Exemple de routine d’interruption en C (CCS compiler):
et RB, se trouvent dans le registre INTCON. Alors que les bits indicateur et de validation
des interruptions associées aux périphériques se trouvent dans les registres PIR1, PIR2,
PIE1 et PIE2 (voir annexe A).
En plus des bits de validation spécifiques; le bit GIE (Global Interrupt Enable) du
registre INTCON sert à masquer toutes les interruptions. Vous remarquer aussi que pour
les interruptions périphériques s’ajoute un autre bit de validation PEIE (PEripheral
- 22 - - 23 -
7.1.1. Registre INTCON
III - LES PORTS D’ENTREE/SORTIE
Ce registre contient les flags et les bits de validation des interruptions de débordement
du Timer0, de RB Port (RB4 /RB7) et l’interruption externe RB0/INT. Le microcontrôleur PIC16F877 est équipé de 33 lignes d’entrée/sortie réparties sur 5
Le bit GIE (Global Interrupt Enable), sert à masquer toutes les interruptions, si GIE vaut ports parallèles bidirectionnels.
0, aucune interruption n’est autorisée ; alors que le bit PEIE (Peripheral Interrupt Enable)
6 lignes sur le PORTA : RA0 .. RA5
masque les interruptions associées aux périphériques.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x 8 lignes sur le PORTB : RB0 .. RB7
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 8 lignes sur le PORTC : RC0 .. RC7
b7 b6 b5 b4 b3 b2 b1 b0 8 lignes sur le PORTD : RD0 .. RD7
3 lignes sur le PORTE : RE0 .. RE2
Bit 7 : GIE : Global Interrupt Enable.
GIE = 1 : validation de toutes les interruptions non masquées Chaque port a un registre de direction des données TRIS (TRansfert Input Set) ; les
GIE = 0 : désactive toutes les interruptions registres TRISA, TRISB, TRISC, TRISD et TRISE correspondent respectivement aux PORTA,
Bit 6 : PEIE : Peripheral Interrupt Enable PORTB, PORTC, PORTD et PORTE. La mise à 1 ou à 0 d’un bit du registre TRISx,
PEIE = 1 : validation de toutes les interruptions périphériques non masquées
configure la broche correspondante du PORTx en entrée ou en sortie.
PEIE = 0 : désactive toutes les interruptions périphériques
bit 5 : T0IE : Timer TMR0 Overflow Interrup Enable bit. La plupart des broches des PORTs sont partagées avec des périphériques. En
T0IE = 1 : autorise l’interruption TIMER0 général si un périphérique est utilisé, les broches correspondantes ne peuvent pas être
T0IE = 0 : désactive l’interruption TIMER0 utilisées comme broches d’entrée/sortie.
Bit 4 : INTE : RB0/INT External Interrup Enable bit.
Après un RESET, tous les ports sont configurés en entées.
INTE = 1 : autorise les interruptions externes sur la broche RB0
INTE = 0 : désactive les interruptions externes sur la broche RB0
Bit 3 : RBIE : RB Port Change Interrup Enable bit. 1. PORTA
RBIE = 1 : autorise les interruptions par changement d’état sur les broches La broche RA4 est multiplexé avec l’entrée
RB4 à RB7 du PORTB d’horloge externe du timer0 (RA4/T0CKI). Cette
RBIE = 0 : désactive les interruptions RB4/RB7
Bit 2 : T0IF : Timer TMR0 Overflow Interrup Flag bit. broche est une entrée de type trigger de schmitt, à
T0IF = 1 : Le Timer a débordé. Ce flag doit être remis à zéro par soft. drain ouvert. Les autres broches sont multiplexées,
T0IF = 0 : Le Timer n’a pas débordé avec les entrées du convertisseur analogique-
Bit 1 : INTF = RB0/INT External Interrup Flag bit
numérique (AN0 .. AN4) .
INTF = 1 : Une interruption sur la broche RB0 est survenue
INTF = 0 : Pas d'interruption sur la broche RB0 Après un reset les broches du PORTA sont configurée en entées analogiques. Si vous
Bit 0 : RBIF : RB Port Change Interrup Flag bit voulez utiliser ses broches en tant qu’entrées/sorties TOR, il faut charger le registre
RBIF = 1 : au moins une entrée du port B (de RB4 à RB7) a changé d'état. ADCON1 par la valeur Binaire ’0000011x’.
RBIF = 0 : Aucune entrée de RB4 à RB7 n'a changé d'état.
L’exemple suivant configure les trois broches du PORTA RA0, RA1 et RA2 en entrée et
les autres en sortie :
- 24 - - 25 -
En langage C de données et le PORTE les signaux de contrôle (RD\, WR\ et CS\). Le registre TRISE
dispose de certains bits supplémentaires pour la gestion du mode PSP.
Le PORTE peut être aussi, configuré en mode analogique pour former avec le PORTA
2. PORTB les 8 entrées du convertisseur analogique numérique. Par défaut, le PORTE est configuré
Toutes les broches du PORTB possèdent des comme port analogique, et donc, comme pour le PORTA, vous devrez placer la valeur
résistances de tirage (pull-ups). Ces résistances sont “0000011x” dans ADCON1 pour pouvoir l’utiliser comme port E/S numérique.
mises en œuvre par la mise à 0 du bit RBPU\ du
registre OPTION_REG ; elles sont automatiquement
désactivées quand le port est configuré en sortie.
Les broches RB7/PGD, RB6/PGC et RB3/PGM
sont utilisé pour la programmation du circuit.
Les broches RB4:RB7 peuvent affecter le flag RBIF en cas de changement d'état de
Exemple : Ecrire un programme en langage C permettant d’incrémenter le
l’une des 4 broches, et éventuellement générer une interruption si, celle-ci est autorisée.
contenu du PORTC à chaque appui sur le bouton BP connecté à la ligne RB0.
Il faut bien noter, que seules les broches qui sont configurées en entrées peuvent 1ère Solution
déclencher l’interruption.
La broche RB0, représente l’interruption externe du PIC (RB0/INT). Cette interruption
peut être générée, sur front montant ou descendant selon l’état du bit INTEDG du
registre OPTION_REG. Ce registre sera détaillé dans le chapitre TIMERS.
3. PORTC
Le PORTC est multiplexé avec plusieurs périphériques ; on se limite ici à donner
les fonctions des différentes broches.
- 26 - - 27 -
IV - LES TIMERS
1. Introduction
Les Timers/compteurs sont des périphériques de gestion de temps. Ils permettent des
réaliser les fonctions suivantes :
- comptage des évènements
- synchronisation des signaux
- fixer le débit d’une liaison série synchrone ou asynchrone
- génération des événements périodiques (échantillonnage des signaux
analogiques, rafraichissement des afficheurs multiplexés …)
- génération des signaux périodiques (carré, MLI …)
- mesure de temps…
2. Timer 0
Ce Timer est implanté dans tous les versions des microcontrôleurs Microchip, son
ancienne appellation était RTC (Real Time Clock). Il est formé d’un pré-diviseur
programmable (Programmable Prescaler) suivi d’un registre compteur 8 bits (TMR0).
- 28 - - 29 -
Le prédiviseur est partagé entre le Wtachdog et le Timer 0. Le bit PSA permet donc 3. Timer 1
d’allouer le prédivisieur au Wtachdog ou bien au Timer 0. Les bits PS2, PS1 et PS0 La sructure du timer 1 est semblable à celle du Timer 0, cependant il présente des
servent à fixer valeur de pré division. différences notables :
Quand le contenu du TMR0 passe de FF à 00 le bit T0IF du registre INTCON passe à - il est formé d’une paire de registres de 8 bits TMR1H et TMR1L montés en cascade
1 pour signaler un débordement, si le bit T0IE est à 1 alors une interruption timer 0 est formant ainsi un registre compteur 16 bits.
déclenchée. Tous les bits de configuration du Timer0 sont implantés dans le registre - Le prédiviseur programmable permet la division de fréquence par 1, 2, 4 ou 8.
OPTION_REG. - Le timer 1 peut, tout comme le timer 0, fonctionner en mode Timer ou en mode
Registre OPTION_REG compteur avec la possibilité de connecter un Quartz entre les broches RC0 et RC1.
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
- Fonctionnement en mode synchrone ou asynchrone. Le mode asynchrone permet
RBPU\ INTEDG T0CS T0SE PSA PS2 PS1 PS0
b7 b6 b5 b4 b3 b2 b1 b0 au timer 1 de compter en mode veille (Sleep).
Bit 7 : RBPU\ : PORTB Pull Up Enable bit. - Possibilité de bloquer le comptage.
RBPU\ = 1 : Pull up désactivé sur le PORTB. - Tous les bits de configuration associés au timer1 se trouvent dans le registre T1CON.
RBPU\ = 0 : Pull up activé
Le bit indicateur de débordement TMR1IF et le bit de validation de l’interruption TMR1IE
Bit 6 : INTEDG : Interrupt Edge Select bit
INTEDG = 1 : déclenchement de l’interruption RB0 sur front montant. se trouvent respectivement dans les registres PIR1 et PIE1.
INTEDG = 0 : déclenchement de l’interruption RB0 sur front descendant.
Bit 5 : T0CS : TMR0 Clock Source Select bit
T0CS = 1 : fonctionnement en mode compteur (horloge externe)
T0CS = 0 : fonctionnement en mode Timer (horloge interne Fosc/4)
bit 4 : T0SE TMR0 Source Edge Select bit.
T0SE = 1 : incrémentation sur transition positive de l’horloge externe
T0SE = 0 : incrémentation sur transition négative de l’horloge externe
Bit 3 : PSA : Prescaler Assignment bit.
PSA = 1 : Prédiviseur assigné au Watchdog (WDT)
PSA = 0 : Prédiviseur assigné au Timer0
Bit 2..0 : PS2, PS1, PS0 : Prescaler Rate Select bits. Figure IV-2: schéma bloc du Timer 1
- 30 - - 31 -
T1OSCEN = 0 : oscillateur stoppé Bit 7 : Non implementé .
bit 2 : T1SYNC\: Timer1 External Clock Input Synchronization Control bit Bit 6..3 : TOUTPS3..TOUTPS0: Timer2 Output Postscale Select bits
T1SYNC\ = 1 : Pas de synchronisation de l’horloge externe TOUTPS3 TOUTPS 2 TOUTPS 1 TOUTPS0 Prédivision
T1SYNC\ = 0 : Synchronisation de l’horloge externe 0 0 0 0 1
Bit 1 : TMR1CS: Timer1 Clock Source Select bit 0 0 0 1 2
TMR1CS = 1 : horloge externe
0 0 1 0 3
TMR1CS = 0 : horloge interne
: :
Bit 0 : TMR1ON: Timer1 On bit
: :
TMR1ON = 1 : Timer 1 débloqué
TMR1ON = 0 : Timer 1 bloqué 1 1 1 1 16
Bit 2 : TMR2ON: Timer2 On bit
4. Timer 2 TMR2ON = 1 : Timer 2 ON (mise en service)
TMR2ON = 0 : Timer 2 OFF (mise hors service)
Le timer 2 comporte un registre compteur 8 bits (TMR2) avec un prédivideur et un bit 1..0 : T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
postdiviseur. Ce timer admet uniquement une horloge interne (Fosc/4). Le prédiviseur
peut être paramétré par l’une de trois valeurs : 1, 4 ou 16 ; tant disque le postdiviseur T2CKPS1 T2CKPS0 Prédivision
permet des divisions de 1 à 16 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ou 16. 0 0 1
Le principe de fonctionnement du timer 2 est différent à ces précédents. Le 0 1 4
débordement du compteur n’aura pas lieu lorsque celui-ci dépasse sa valeur maximale 1 x 16
(FFH), mais lorsqu’il dépasse une valeur prédéfinie mémorisée dans le registre PR2. La
période totale de débordement est donnée par la formule suivante : Exemple : On veut incrémenter le contenu du PORTD à chaque demi-seconde. Le
T Tosc u 4 u Pré div u ( PR 2 1) u Postdiv . microcontrôleur PIC6F877 est piloté par un quartz de 4 Mhz.
Chaque débordement entraine le positionnement de l’indicateur TMR2IF et pourra Utilisation de la fonction delay
générer une interruption si le bit TMR2IE est positionné.
- 32 - - 33 -
4 4
Th 4 Tosc 10 6 s 1μs
f osc 4 10 6
- 34 - - 35 -
Le module ADC dispose de trois registres :
V - CONVERTISSEUR ANALOGIQUE NUMERIQUE
F ADRESL : A/D RESult Low register
F ADRESH : A/D RESult High register
1. Présentation F ADCON0 : A/D CONtrol register 0
Le convertisseur analogique numérique des microcontrôleurs PIC fonctionne sur le F ADCON1 : A/D CONtrol register 1
principe des approximations successives avec une résolution de 10 bits. Le 1.1. Registre ADCON1
microcontrôleur PIC16F876 dispose de 5 canaux d’entrées analogiques dénommés Ce registre permet essentiellement de définir la fonction de chaque broche du port ;
AN0 à AN4. Ces entées sont reparties sur les lignes RA0, RA1, RA2, RA3 et RA5 du configurer les broches du port en entrées analogiques (RA2 et RA3 peuvent être utilisées
PORTA. Le microcontrôleur PIC16F877, quant à lui, dispose en plus du PIC16F876 de pour les tensions de références) ou entrées/sorties numériques.
trois autres entrées analogiques (AN5 à AN7) multiplexés avec les trois broches du R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
PORTE (RE0 à RE2). ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0
b7 b6 b5 b4 b3 b2 b1 b0
Les tensions de référence Vref+ et Vref- du module ADC peuvent être choisies de Bit 7 : ADFM : A/D Result format select. Définie la façon de charger le résultat de
manière logicielle par combinaison des lignes VDD, VSS, RA2 ou RA3. conversion dans les registres ADRESL et ADRESH (figure 2).
ADFM = 1 : Justifié à droite. ADRESH ne contient que les 2 bits MSB du
résultat. Les 6 MSB bits de ce registre sont lus comme des "0".
ADFM = 0 : Justifié à gauche. ADRESL ne contient que les 2 bits LSB du
résultat. Les 6 LSB bits de ce registre sont lus comme des "0".
Bits 6 ..4 : Non implémentés
bits 3..0 : PCFG3..PCFG0 : A/D Port ConFiGuration control bits.
PCFG AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
3 .. 0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
0000 A A A A A A A A
0001 A A A A Vref+ A A A
0010 D D D A A A A A
0011 D D D A Vref+ A A A
0100 D D D D A D A A
0101 D D D D Vref+ D A A
0110 D D D D D D D D
0111 D D D D D D D D
1000 A A A A Vref+ Vref- A A
1001 D D A A A A A A
1010 D D A A Vref+ A A A
1011 D D A A Vref+ Vref- A A
1100 D D D A Vref+ Vref- A A
1101 D D D D Vref+ Vref- A A
1110 D D D D D D D A
1111 D D D D Vref+ Vref- D A
- 36 - - 37 -
- 38 - - 39 -
Démarrage de la Nouvelle
et la résistance de la source connectée à l’entrée de l’ADC. Ce temps est augmenté du Conversion Go = 1 Conversion
temps de réaction des circuits et d’un temps qui dépend de la variation de la Tcy à Tad Tad
Tacq Tad Tad Tad Tad Tad Tad Tad Tad Tad Tad 2Tad
température. b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Tacq = Tamp + Tc + Tcoff
Tamp : temps de réaction des circuits Choix du Début de conversion Fin de conversion :
canal - Résulat chargé dans ADRESH et ADRESL
Tc : temps de charge du condensateur Déconnxion de la capacité de
- Bit Go = 0
- bit ADIF = 1
Tcoff : temps qui dépend du coefficient de température. charge typiquement 100μs
- connexion de la capacité de charge à
l’entrée analogique
Le temps de réaction est fixé à 2Ps ; de même Tcoff est limité à une valeur maximale
Figure V-4 : Cycles de conversion A/N
de 1,25Ps.
La résistance interne totale (composée de RIC et RSS) varie de 6Kohms sous 6V pour 3. Etapes de programmation
arriver à 12Kohms sous 3V, en passant par 8Kohms sous 5V. De plus Microchip
1) Configurez ADCON1 en fonction des pins utilisées en mode analogique, ainsi que
recommande que la résistance de la source doit être inférieure à 10 Kohms.
les registres TRISA et TRISE si nécessaire.
Tc = CHOLD (RIC + RSS + RS) In(1/2047)
2) Validez, si souhaité, l’interruption du convertisseur (ADIE)
3) Paramétrez sur ADCON0 le diviseur utilisé
4) Choisissez le canal en cours de digitalisation sur ADCON0
5) Positionnez, si ce n’est pas déjà fait, le bit ADON du registre ADCON0
6) Attendez le temps Tacq (typiquement 19,7Ps sous 5V)
7) Démarrez la conversion en positionnant le bit GO du registre ADCON0
8) Attendez la fin de la conversion (test sur le GO/ DONE ou ADIF)
Figure V-3 : schéma de modélisation d'une entrée analogique
9) Lisez les registres ADRESH et si nécessaire ADRESL
10) Attendez un temps équivalent à 2Tad (typiquement 3,2Ps)
Dans les conditions normale et pour une tension de 5V, Tc = 16,47Ps.
11) Recommencez au point 7 (ou 4 si vous changez le canal).
Le temps d’acquisition Tacq = 19,72Ps | 20Ps.
- 40 - - 41 -
Le module CCP est spécialement utilisé pour la commande des machines électriques CCPxM du registre CCPxCON. La capture peut avoir lieu à chaque front descendant, à
(génération des signaux PWM, mesure de vitesse, génération des signaux logiques …) chaque front montant, tous les 4 ou 16 fronts montants. Quand la capture aura lieu, le
Le microcontrôleur PIC16F876/877 dispose de deux modules CCP identiques CCP1 flag CCPxIF sera positionné et une interruption pourra être générer si le bit de validation
et CCP2. Ces modules sont liés au timer1 pour le mode Capture, Compare et au timer2 CCPxIE du registre PIEx est mis à 1. Si une nouvelle capture survient alors que la valeur
pour la mode PWM. Puisque ces modules sont identiques, on utilise dans ce qui suit le dans CCPRx n'a pas été lue, l'ancienne valeur sera écrasée.
suffixe « x », pour désigner le module 1 ou 2. Il est donc impératif de configurer la broche CCPx en entrée via le registre TRISC
Chaque module est constitué de deux registres CCPRxH et CCPRxL, pour former un avant de pouvoir utiliser le module CCPx en mode capture.
- 42 - - 43 -
faut bien noter que la valeur écrite dans CCPRxL ne doit pas dépasser le contenu du
registre PR2.
Un signal PWM est caractérise par sa période (T) et son rapport cyclique (Th).
Au niveau des microcontrôleurs PIC, la période de la porteuse est fixée par le timer2.
T = Th * Prédiv * (PR2+1) et le rapport cyclique par le registre CCPRxL. Figure VI-3 : schéma bloc du mode PWM
Le signal de sortie PWM passe à 1 lors du débordement du registre TMR2 et repasse
à 0 lorsque le contenu du registre TMR2 coïncide avec CCPRxH. Le contenu de registre
CCRxL est chargé dans CCPxH au début de chaque période. Cela implique qu’un
changement du rapport cyclique ne prend effet qu’au début de la prochaine période. Il
- 44 - - 45 -
Bit de STOP
RX RX
détection de parité)
Unité 1 Unité 2 TX - Un seul bit de stop.
ou
TX TX RX D0 D1 D2 D3 D4 D5 D6 D7 P Le port série USART du microcontrôleur PIC16F87x possède 5 registres :
t
- La vitesse de transmission : elle est définie en bits par seconde ou bauds. Elle peut Le Baud Rate Generator est un registre 8 bits qui contient le facteur de division de
prendre des valeurs allant de 110 à 115 200 bps. l'horloge interne (N), afin de fixer le débit de la liaison. Le facteur de division est calculé
- Parité : le mot transmis peut être suivi ou non d'un bit de parité qui sert à détecter par une relation simple selon la valeur du bit BRGH.
les erreurs éventuelles de transmission.
- Bit de start : la ligne au repos est à l'état logique 1 pour indiquer qu'un mot va être BRGH = 0 (basse vitesse) BRGH = 1 (haute vitesse)
Fosc Fosc
transmis la ligne passe à l'état bas avant de commencer le transfert. Ce bit permet de débit débit
64 u ( N 1) 16 u ( N 1)
synchroniser l'horloge du récepteur.
Fosc Fosc
- Bit de stop : après la transmission, la ligne est positionnée au repos pendant 1, 2 ou N 1 N 1
64 u débit 16 u débit
1,5 périodes d'horloge selon le nombre de bits de stop.
- Niveau de tension : Un “0” logique est matérialisé par une tension comprise entre 3 Le nombre N est le nombre entier, arrondi de la valeur trouvée par les équations ci
et 25V, un “1” par une tension comprise entre -25 et -3 V. Des circuits spécialisés dessus. Il est recommandé d'utiliser si possible les vitesses hautes (BRGH=1), même pour
comme le MAX 232 réalise la conversion à partir de niveau TTL. des vitesses faibles, car dans ce cas on minimise l'erreur, en obtenant un nombre N plus
grand.
- 46 - - 47 -
2.2. Registre TXSTA Non utilisé en mode Asynchrone
Mode Synchrone - Maitre
R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0
SREN = 0 : Réception d’un seul octet est désactivé
CSRC TX9 TXEN SYNC - BRGH TRMT TX9D
b7 b6 b5 b4 b3 b2 b1 b0
SREN = 1 : Réception d’un seul octet est activé.
Ce bit est mis à 0 lorsque la réception est terminée.
Bit 4 : CREN: Continuous Receive Enable bit
Bit 7 : CSRC : (Clock Source Select bit)
CREN = 0 : désactive la réception en continu.
En mode Asynchrone : non utilise
CREN = 1 : autorise la réception en continu.
En mode Synchrone
En mode synchrone, CREN écrase SREN.
CSRC = 0 : Mode Esclave : horloge à partir d’une source externe
Bit 3 : ADDEN: Address Detect Enable bit
CSRC = 1 : Mode Maitre : horloge générée en interne par BRG
En mode Asynchrone 9 bits (RX9 = 1)
Bits 6 : TX9 : Autorisation du 9ème bit
ADDEN = 1 : valide la détection d’adresse. Charge le registre RCREG quand le
TX9 = 0 : Emission sur 8 bits ème
9 bit reçu vaut 1.
TX9 = 1 : Emission sur 9 bits
ADDEN = 0 : désactive la détection d’adresse. Tout octet reçu sera transférer
Bit 5 : TXEN: Transmit Enable bit
dans RCREG.
TXEN = 0 : Emission non autorisé
Bit 2 : FERR: Framing Error bit
TXEN = 1 : Emission autorisé.
FERR = 1 : Erreur de cadrage est détectée (bit de STOP lu comme 0).
Bit 4 : SYNC: USART Mode Select bit
FERR = 0 : Pas d’erreur de cadrage
SYNC = 0 : Mode Asynchrone
Bit 1 : OERR: Overrun Error bit
SYNC = 1 : Mode synchrone.
OERR = 1 : Erreur de débordement (remis à 0 par la mise à 0 du bit RCEN).
Bit 3 : Non implémenté
OERR = 0 : Pas d’erreur de débordement.
Bit 2 : BRGH: High Baud Rate Select bit
Bit 0 : RX9D: 9th bit of received data.
En mode Asynchrone
Ce bit peut être utilisé comme bit de parité
BRGH = 1 : haute vitesse.
BRGH = 0 : basse vitesse 2.4. Module d’émission
Bit 1 : TRMT: Transmit Shift Register Status bit
TRMT = 1 : registre de sérialisation TSR vide. L'émission est autorisée par la mise à 1 du bit TXEN du registre TXSTA. La donnée à
TRMT = 0 : registre de sérialisation TSR plein. transmettre est mise dans le registre TXREG. Ce registre prévient qu'il est vide en
Bit 0 : TX9D: 9th bit of transmit data. mettant le flag TXIF à 1 (bit 4 de PIR1) ; il passe à 0 dés que l'on charge un octet dans le
Ce bit peut être utilisé comme bit de parité
registre TXREG ; et repasse à 1 quand le registre est vidé par transfert de son contenu
2.3. Registre RCSTA dans le registre à décalage TSR (Trensmit shift Register). Si on charge alors un 2ème octet
R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0 dans le registre TXREG le flag TXIF va passer à 0 et y reste tant que le registre TSR
SPEN RX9 SREN CREN ADDEN FERR OERR RTX9D
n'aura pas complètement sérialisé l'octet précédent. Dés que le bit STOP de l'octet
b7 b6 b5 b4 b3 b2 b1 b0
précédent a été transmis, le contenu du registre TXREG est transféré dans TSR et le flag
Bit 7 : SPEN : Serial Port Enable bit TXIF repasse à 1 signalant ainsi que le registre de transmission TXREG est vide et peut
SPEN = 0 : Port série désactivé donc recevoir un nouvel octet à transmettre.
SPEN = 1 : Port série valide, les broches RC6 et RC7 sont utilisées par le port
Le bit TRMT du TXSTA informe sur l'état du registre TSR. Quand le registre TSR n'a pas
série.
Bits 6 : RX9 : Autorisation du 9ème bit fini la sérialisation, TRMT=0. Ce flag repasse à 1 quand le registre est vide, c'est à dire
TX9 = 0 : Réception sur 8 bits quand le stop a été émis.
TX9 = 1 : Réception sur 9 bits
Bit 5 : SREN: Single Receive Enable bit
- 48 - - 49 -
Le flag TXIF permet aussi de générer une interruption, à condition qu'elle soit La donnée reçue est mise dans le registre RCREG. Ce registre prévient qu'il est plein
autorisée par mise à 1 du bit TXIE du registre PIE1. Il ne faut pas oublier mettre aussi à 1 en mettant le flag RCIF à 1 (bit 5 de PIR1). Une interruption de réception pourra être
les bits de validation PEIE et GIE du registre INTCON. générée si les bits RCIE, PEIE et GIE sont mis à 1 ; la lecture du registre RCREG remet
automatiquement le flag RCIF à 0.
Il est possible de recevoir deux octets dans le FIFO RCREG. Si un 3ème octet survient
alors que le registre RCREG n'a pas été vidé, une erreur OVERRUN se produit ; elle est
signalée par le passage à 1 du bit OERR du RCSTA. L'octet dans le registre de dé-
sérialisation RSR (Receive Shift Register) est alors perdu.
De même, une erreur de format peut être détectée par la mise à un du bit FERR du
registre RCSTA. La remise à 0 des bits d’erreur, se fait indirectement par la mise à 0 du
bit CREN.
- 50 - - 51 -
2.5.1. Procédure de réception
- Initialiser SPBRG par la vitesse désirée et mettre le bit BRGH à 1 si la haute vitesse a Bibliographie
été choisi.
- Autoriser le mode Asynchrone en mettant le bit SYN à 0 et SPEN à 1. [1] CHRISTIAN TAVERNIER. Les microcontrôleurs PIC Recueil d’applications. Dunod ,
- si une réception par interruption est désirée, mettre alors le bit RCIE à 1. Paris, 2005.
- Eventuellement mettre RX9 à 1 si une réception sur 9 bits est désirée. [2] CHRISTIAN TAVERNIER. Programmation en C des PIC. Dunod , Paris, 2005
- Autoriser la réception par la mise à 1 du bit RCEN. [3] CHRISTIAN TAVERNIER. Les microcontrôleurs PIC Description et mise en œuvre.
- Test du Flag RCIF (ou attente d’une interruption) pour savoir si un octet a été reçu. Dunod, Paris, 2000
- Lire éventuellement le 9ème bit de donnée dans RCSTA, et vérifiez les bits FERR et [4] CHRISTIAN TAVERNIER. Les MICROCONTROLEURS PIC 10, 12, 16 Description et
OERR pour déterminer les erreurs éventuelles. mise en œuvre. Dunod , Paris, 2007
- Lecture du registre RCREG pour récupérer l'octet reçu. [5] Bert VAN DAM. 50 nouvelles applications des microcontrôleurs PIC. Elector, 2010
- Si une erreur est survenue, remettre les bits d’erreur à 0 en mettant le bit CREN à 0 [6] Datasheet PIC16F87X , 1999 Microchip Technology Inc. DS30292B
puis CREN=1. [7] H. Lilen. Microprocesseurs – Du CISC au RISC. Dunod, Paris, 1995.
Webographie
[1] BIGONOFF (2002). La gomme MID-RANGE par l’étude des 16F87X (16F876-
16F877), Consulté le 6 Nov. 2003.
[Link]
[2] Datasheet PIC16F87X , 1999 Microchip Technology Inc. DS30292B. Consulté 10
Sep. 2003.
[Link]
[3] Philippe LETENNEUR (2003). Les microcontrôleurs PIC16F87X. Consulté en 2006
[Link]
[4] D. MENESPLIER (2001). Microcontrôleurs PIC16F876 et 16F877. Consulté le 21 Oct.
2011.
[Link]/Doc/PIC%[Link]
[5] Compilateur C pour PIC (PCWH). Custom Computer Services, inc.
[Link]
- 52 - - 53 -