0% ont trouvé ce document utile (0 vote)
115 vues14 pages

Cours Microcontrôleurs PIC16F877

Le document décrit l'architecture et le fonctionnement des microcontrôleurs PIC16F877. Il explique les différentes parties d'un microprocesseur comme l'unité arithmétique et logique, les registres, l'unité de contrôle. Il détaille également le jeu d'instructions, le cycle d'exécution, les interruptions, l'organisation de la mémoire avec la mémoire programme, mémoire données et les registres spéciaux. Finalement, le document se concentre sur les caractéristiques et l'architecture interne du microcontrôleur PIC16F877.

Transféré par

boucheneb
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
115 vues14 pages

Cours Microcontrôleurs PIC16F877

Le document décrit l'architecture et le fonctionnement des microcontrôleurs PIC16F877. Il explique les différentes parties d'un microprocesseur comme l'unité arithmétique et logique, les registres, l'unité de contrôle. Il détaille également le jeu d'instructions, le cycle d'exécution, les interruptions, l'organisation de la mémoire avec la mémoire programme, mémoire données et les registres spéciaux. Finalement, le document se concentre sur les caractéristiques et l'architecture interne du microcontrôleur PIC16F877.

Transféré par

boucheneb
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TABLE DES MATIERES

Ministère de l’enseignement supérieur et de la recherche scientifique


Institut Supérieur des Etudes TechnologiqueV de Sousse
I- INTRODUCTION AU MICROPROCESSEUR .............................................. 4

Département Génie Electrique 1. Structure de base d’un calculateur ....................................................................................................... 4

Spécialité : Automatisme Informatique 2. Architecture d’un CPU .......................................................................................................................... 5


Industrielle – 2ème Année 2.1. Unité arithmétique et logique .......................................................................................................... 5

2.2. Les registres .................................................................................................................................... 6


2.3. L’unité de contrôle (UC) ................................................................................................................. 6

3. Fonctionnement d’un microprocesseur ................................................................................................ 6


Support de cours 3.1. Jeu instructions ................................................................................................................................ 6

3.2. Cycle d’exécution d’une instruction ................................................................................................ 7

Microcontrôleur
3.3. Les interruptions .............................................................................................................................. 9

4. Système à microprocesseur .................................................................................................................... 9


4.1. Microprocesseur et Microcontrôleur ............................................................................................... 9

4.2. Architecture des microprocesseurs .................................................................................................. 9

II - LES MICROCONTROLEURS PIC16F876/877 .......................................... 11

1. Présentation ........................................................................................................................................... 11

2. Caractéristiques du PIC16F877........................................................................................................... 11
2.1. Caractéristique de la CPU ............................................................................................................. 11

2.2. Caractéristiques des périphériques ................................................................................................ 12

Ali HMIDENE 2.3. Brochage ....................................................................................................................................... 12

3. Architecture interne du microcontrôleur PIC16F877 ....................................................................... 12


Agrégé en Génie Electrique
4. Traitement des Instructions ................................................................................................................. 13
Technologue à l’ISET de Sousse
5. Organisation de la mémoire ................................................................................................................. 14
5.1. Mémoire programme ..................................................................................................................... 14

20010/2011 5.2. Mémoire données .......................................................................................................................... 14

-1-

5.3. Registres Spéciaux (SFR) .............................................................................................................. 16 1. Présentation ........................................................................................................................................... 42

6. Les Instructions ..................................................................................................................................... 18 2. Module CCP en mode capture ............................................................................................................. 43


6.1. Les modes d’adressage .................................................................................................................. 19
3. Module CCP en mode Compare .......................................................................................................... 43

7. Les Interruptions .................................................................................................................................. 22


4. Module CCP en mode PWM ................................................................................................................ 44

III - LES PORTS D’ENTREE/SORTIE.............................................................. 25


VII - L’INTERFACE SERIE ............................................................................ 46
1. PORTA .................................................................................................................................................. 25
1. Présentation ........................................................................................................................................... 46

2. PORTB .................................................................................................................................................. 26
2. Port série du microcontrôleur PIC ...................................................................................................... 47
3. PORTC .................................................................................................................................................. 26 2.1. Registre SPBRG ............................................................................................................................ 47

2.2. Registre TXSTA............................................................................................................................ 48


4. PORTD et PORTE ............................................................................................................................... 26
2.3. Registre RCSTA............................................................................................................................ 48
2.4. Module d’émission ........................................................................................................................ 49
IV - LES TIMERS .............................................................................................. 29
2.5. Module de réception ...................................................................................................................... 50

1. Introduction .......................................................................................................................................... 29

2. Timer 0................................................................................................................................................... 29

3. Timer 1................................................................................................................................................... 31

4. Timer 2................................................................................................................................................... 32

V- CONVERTISSEUR ANALOGIQUE NUMERIQUE .................................... 36

1. Présentation ........................................................................................................................................... 36
1.1. Registre ADCON1 ........................................................................................................................ 37

1.2. Registre ADCON0 ........................................................................................................................ 38

2. Conversion A/N ..................................................................................................................................... 39


2.1. Temps d’acquisition ...................................................................................................................... 39

2.2. Temps de conversion ..................................................................................................................... 40

3. Etapes de programmation .................................................................................................................... 41

VI - MODULE CAPTURE COMPARE PWM (CCP).......................................... 42

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

- l’architecture Harvard, sépare systématiquement la mémoire de programme de la


II - LES MICROCONTROLEURS PIC16F876/877
mémoire des données : l'adressage de ces mémoires est indépendant. Ce type
d’architecture est utilisé sur des microcontrôleurs qui ont connu un développement
important ces dernières années. 1. Présentation
L’architecture généralement utilisée par les microprocesseurs est la structure Von Les microcontrôleurs PICs sont des composants dits RISC (Reduce Instructions
Neuman (exemples : la famille Motorola 68XXX, la famille Intel 80x86). L’architecture Set Computing), ou encore composants à jeu d’instructions réduit. Tous les PICs Mid-
Harvard est plutôt utilisée dans des microprocesseurs spécialisés pour des applications Range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot de
temps réels, tel que les DSP, les microcontrôleurs PIC, les AVR... programme, et exécutent chaque instruction (sauf les sauts) en un cycle machine. On
atteint donc des très grandes vitesses.
Bus d’adresses Mémoire
L’horloge fournie au PIC est divisée par 4. C’est cette base de temps qui donne le
de données
Microprocesseur temps d’un cycle. Si on utilise par exemple un quartz de 4MHz, on obtient donc
et mémoire
programme 1000000 de cycles/seconde ; or, comme le PIC exécute pratiquement une instruction
Bus de données

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-2 : Architecture interne

4. Traitement des Instructions


00H
L'UAL reçoit les arguments (opérandes) constante
MUX
de l’unique registre de travail (Work) et la
mémoire de données (File). Le résultat de
traitement pourra être stocké, selon la ALU

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

Avec cette structure le microcontrôleur PIC utilise trois modes d’adressage :

- 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

:
:

Vect. Interruption 0004H

Page 0
13
0800H

call, return Page 1

retfie, retlw
1000H

Page 2

Pile 8 niveaux
1800H

Page 3

1FFFH

Figure II-4 : Adressage de la mémoire programme

5.2. Mémoire données


La mémoire de données (File Registers) compte au total 512 octets, reparties sur 4
banques (0, 1, 2 et 3); dans chacune des banques vous trouvez des cases mémoires
spéciales appelées «SPECIAL FUNCTION REGISTRES (SFR) », et des cases mémoires à
usage général appelées GENERAL PURPOSE REGISTER (GPR).
Figure II-5 : Mémoire de données
La zone des registres SFR comporte les registres du CPU et celles des périphériques.

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

5.3.2. Le registre PCON


U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-1
POR\ BOR\
b7 b6 b5 b4 b3 b2 b1 b0
Figure II-6 : Adressage de la RAM file Bit 1 : POR\ : Power-on Reset Status bit.
POR\ = 1 : Pas de Power-on Reset.
5.3. Registres Spéciaux (SFR) POR\ = 0 : Power-on Reset est survenue (ce bit doit être mis à 1 après un
Les SFR « Special Function Registers » sont implémentés en RAM statique (File) et POR).
Bit 0 : BOR\ : Brown-out Reset Status bit.
occupent les parties basses des banques. Ces registres sont classés en deux
BOR\ = 1 : Pas de Brown-out Reset Une.
catégories ; certains liés au CPU et les autres pour le contrôle des périphériques. Nous BOR\ = 0 : Brown-out Reset est survenue (ce bit doit être mis à 1 après un
allons décrire dans cette partie les registres attachés au CPU. BOR).
Associés au bit TO\ du registre STATUS, ces permettent de déterminer la source de
5.3.1. Le registre STATUS RESET.
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
IRP RP1 RP0 TO\ PD\ DC Z C
b7 b6 b5 b4 b3 b2 b1 b0

- 16 - - 17 -

5.3.3. Le Compteur de Programme (PC : PCLATH et PCL)


Le compteur de programme PC a une largeur de 13 bits (8Kmots). La partie basse de
l’adresse se trouve dans le registre PCL, alors que la partie haute (b12 .. b8) se trouve
dans le registre PCH. Ce dernier n’est pas accessible, mais il peut être modifié
indirectement à travers le registre PCLATH.
Deux cas possibles permettent de modifier le contenu du registre PC :
- Instruction de saut calculé en cours d’exécution du programme ; cette instruction
permet de parcourir un tableau constant en ajoutant à PCL le contenu du registre W.
Dans ce cas le contenu de PCLATH est chargé automatiquement dans PCH.
- Instructions de branchement (call et goto). Le 11 bits d’adresse sont fournit par
l’instruction de branchement. Le deux bits restants (b12 et b11) seront chargé depuis le
registre PCLATH.

Figure II-8 : Table des instructions


Figure II-7 : Registre PCLATH
6.1. Les modes d’adressage
6. Les Instructions Les instructions utilisent différentes méthodes pour accéder aux informations qu’elles
La famille Mid-Range, possède 35 instructions codées sur des mots de 14 bits. Ces manipulent. Ces méthodes s’appellent les « modes d’adressage ».
instructions comportent le code opératoire « OPCODE » pour spécifier le type de
l’instruction et un ou deux opérandes. Microchip a regroupée ses instructions en trois 6.1.1. Adressage inhérent ou implicite

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,

6.1.2. Adressage immédiat ou Littéral


Dans ce mode d’adressage, l’instruction comporte le code opératoire suivi de la
donnée à manipuler. L’adressage immédiat ne s’applique qu’au registre W ;

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

6.1.3. Adressage direct


L’instruction comporte le code opératoire suivi de deux opérandes : l’adresse de la
donnée à manipuler et le bit de destination.
Syntaxe : MNEMONIQUE f, d
6.1.5. Instructions de manipulation des bits
f : désigne l’adresse de la case mémoire « file register » codée sur 7 bits (soit 128
Ces instructions font partie de l’adressage direct. L’adresse comporte le code
octets). L’adresse effective (réelle) est complétée par les bits RP1 et RP0 du registre
opératoire suivi de l’adresse de la case mémoire contenant le bit à manipuler ainsi que
STATUS.
le numéro du bit.
d : désigne le bit de destination
Syntaxe : MNEMONIQUE f, b
si d = 0 : le résultat est chargé dans W
f : l’adresse de la case mémoire
si d = 1 : le résultat est chargé dans la mémoire file.
b : le numéro du bit, b est compris entre 0 et 7.
Format de l’instruction
Format de l’instruction
Instruction
Instruction
Code-op b f
Code-op d f
b13 b10 b9 b7 b6 b0
b13 b8 b7 b6 b0

Exemple :

6.1.6. Instructions de branchement


Les instructions call et goto, utilisent un adressage absolu sur 11 bits. Ces instructions
Å ne permettent pas de réaliser des sauts au delà de 2 kmots. Pour les sauts inter-pages
(au-delà de 2kmots), il faut positionner correctement les bits 4 et 3 du registre PCLATH
avant d’utiliser l’instruction call ou goto.
Å
Syntaxe : MNEMONIQUE k (adresse sur 11 bits)
Format de l’instruction
6.1.4. Adressage indirect Instruction

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.

RC0/T1OSO/T1CKI : Input/output port pin or Timer1 oscillator output/Timer1 clock input


RC1/T1OSI/CCP2 : Input/output port pin or Timer1 oscillator input or Capture2
input/Compare2 output/PWM2 output
RC2/CCP1 : Input/output port pin or Capture1 input/Compare1 output/PWM1output
RC3/SCK/SCL : RC3 can also be the synchronous serial clock for both SPI and I2C modes.
RC4/SDI/SDA : RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode). -
RC5/SDO : Input/output port pin or Synchronous Serial Port data output (SPI mode)
RC6/TX/CK : Input/output port pin or Asynchronous Transmit or Synchronous Clock
RC7/RX/DT : Input/output port pin or Asynchronous Receive or Synchronous Data -
2ème Solution
4. PORTD et PORTE
En plus de leur utilisation comme PORTS E/S; les ports D et E, permettent au
microcontrôleur de travailler en mode PSP (Parallel Slave Port) c’est-à-dire, qu’il peut
être interfacé avec un autre microprocesseur. Dans ce cas le PORTD représente le bus

- 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…

1.1.1. Fonctionnement du Timer


Les timers sont des compteurs formés généralement d’un pré-diviseur suivi d’un
registre compteur de 8 ou 16 bits. L’entrée d’horloge peut être interne (mode timer) ou
externe (mode compteur d’événements). Lorsque le registre compteur atteint sa valeur
maximale et repasse à 0, un bit indicateur (flag) sera positionné et une interruption
pourra être générée, informant ainsi la CPU du débordement du timer. Il faut bien noter
que le programmeur devra remettre à zéro cet indicateur après chaque débordement.
Le microcontrôleur PIC16F877 dispose de trois timers appelés Timer0, Timer1 et
Timer2.

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

Figure IV-1 : Schéma bloc du Timer 0


Le bit T0CS permet de choisir l’horloge, interne (Fosc/4) ou externe RA4/T0CKI.
Dans ce dernier cas l’incrémentation du timer 0 peut se faire soit sur front montant ou
descendant suivant la valeur du bit T0SE.

- 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

PS2 PS1 PS0 Prédiv Timer0 Prédiv. WDT Registre T1CON


U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
0 0 0 2 1
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC\ TMR1CS TMR1ON
0 0 1 4 2 b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 8 4 Bit 7..6 : Non implementés.
Bit 5..4 : T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits
0 1 1 16 8
T1CKPS1 T1CKPS0 Prédivision
1 0 0 32 16
0 0 1
1 0 1 64 32
0 1 2
1 1 0 128 64
1 0 4
1 1 1 256 128
1 1 8
Bit 3 : T1OSCEN: Timer1 Oscillator Enable Control bit
T1OSCEN = 1 : oscillateur autorisé

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

Figure IV-3 : schéma bloc du Timer 2


L’utilisation de la fonction « delay » est simple à mettre en œuvre, cependant l’ajout
Le registre T2CON permet la configuration du timer 2. d’autres tâches au programme affecte la précision.
Utilisation des Timers
Registre T2CON
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
- TOUTPS3 TOUTPS 2 TOUTPS 1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
b7 b6 b5 b4 b3 b2 b1 b0

- 32 - - 33 -

4 4
Th 4 ˜ Tosc 10 6 s 1μs
f osc 4 ˜ 10 6

T1max Th ˜ Pr édivmax ˜ TMR1max 1μs ˜ 8 ˜ 65536 524288μs | 524ms

T 0 max Th ˜ Pr édivmax ˜ TMR 0 max 1μs ˜ 256 ˜ 256 65536 μs | 65ms

- 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

Figure V-1 : schéma bloc du Convertisseur A/N


A : Analogique D : Digital

- 36 - - 37 -

Bits 7..6 : ADCS1 ..ADCS0 : A/D Conversion Clock Select bits.


ADCS1 ADCS0 Diviseur Fréquence maximale du Quartz
0 0 Fosc/2 1,25Mhz
0 1 Fosc/8 5Mhz
1 0 Fosc/32 20Mhz
1 1 - FRC(horloge dérivée d’un oscillateur RC)

Bit 5..3 : CHS2..CHS0 : Analog Channel Select bits.


CHS2 CHS1 CHS0 Canal Broche
0 0 0 0 RA0/AN0
0 0 1 1 RA1/AN1
Figure V-2 : Format de résultat de conversion A/N 0 1 0 2 RA2/AN2
0 1 1 3 RA3/AN3
1.2. Registre ADCON0
1 0 0 4 RA5/AN4
On contrôle à travers se registre toutes les opérations du module ADC : 1 0 1 5 RE0/AN5
- La fréquence d’horloge du convertisseur A/D, celle-ci est dérivée de la fréquence 1 1 0 6 RE1/AN6
1 1 1 7 RE2/AN7
principale du microcontrôleur Fosc. Pour des raisons électroniques, la période d’horloge
de l’ADC, Tad ne doit pas descendre 1,6Ps. Donc en fonction des fréquences utilisées
bit 2 : GO/ DONE : A/D Conversion Status bit.
pour le quartz du PIC, il faudra choisir le diviseur le plus approprié. Pour cela GO/ DONE = 1 : la conversion progresse (la mise à 1 de ce bit démarre la
Microchip a divisé la plage de fréquence en 3 intervalles, afin de garantir un temps conversion)
Tad t 1,6Ps. Dans le cas d’une horloge à base du circuit RC, Tad devrait être entre 2 et GO/ DONE = 0 : Conversion terminée (ce bit est remis automatiquement à
0 à la fin de conversion)
6Ps (4Ps typique).
Bit 1 : Non implémenté.
20MHz 5MHz 1,25MHz 200KHz Bit 0 : ADON : A/D On bit
Fosc
1,6μs 6,4μs 25,6μs 160μs ADON = 1 : Convertisseur A/D en service
Tad = Tosc *32
ADON = 0 : Converitisseur A/D hors service
0,4μs 1,6μs 6,4μs 40μs
Tad = Tosc * 8
0,1μs 0,4μs 1,6μs 10μs 2. Conversion A/N
Tad = Tosc * 2
La conversion d’un signal analogique en équivalent numérique passe par deux
Valeurs de Tad optimales Valeurs inacceptables, Tad <1,6μs Valeurs acceptables, mais non optimales
phases :
- La sélection de l’entrée à convertir. - l’échantillonnage blocage (sample and hold). Cette opération consiste à connecter
- le début de conversion est assuré par la mise à 1 du bit GO/ DONE du registre l’entrée à convertir à un condensateur interne, qui va se charger à travers une résistance
ADCON0 ou par le module CCP en mode compare. La fin de conversion est signalée interne jusqu'à la tension appliquée.
par le retour à zéro du bit GO/ DONE ou la mise à 1 du bit ADIF du registre PIR1. - Une fois le condensateur est chargé, déconnecté la tension appliquée, pour
procéder à la phase ce conversion.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0
ADCS1 ADCS0 CHS2 CHS1 CHS0 G0 / DONE - ADON 2.1. Temps d’acquisition
b7 b6 b5 b4 b3 b2 b1 b0
C’est le temps nécessaire pour que le condensateur interne atteigne une tension
proche de la tension à convertir. Cette charge s’effectue à travers une résistance interne

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

2.2. Temps de conversion


C’est le temps nécessaire pour convertir le signal analogique en équivalent
numérique. Il dépend de l’horloge interne Tad (Typiquement 1,6Ps).
Le microcontrôleur PIC nécessite un temps Tad avant le démarrage effectif de la
conversion, et un temps supplémentaire Tad à la fin de la conversion. Soit au total 12
Tad. Donc dans les meilleurs conditions Tconv = 12*1,6Ps = 19,2Ps.
Il faut bien note qu’un temps équivalent à 2 * Tad est nécessaire avant de pouvoir
effectuer une nouvelle conversion.

- 40 - - 41 -

2. Module CCP en mode capture


VI - MODULE CAPTURE COMPARE PWM (CCP)
En mode capture, le contenu du registre TMR1 (TMR1H : TMR1L) est capturé par les
registres CCPRx (CCPRxH :CCPRxL) lorsque un événement extérieur apparaît sur la
1. Présentation broche RC2/CCP1 ou RC1/CCP2. Cet événement est programmable par les 4 bits

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.

registre de 16 bits et d’un registre de configuration CCPxCON.


Registre CCPxCON (CCP1CON ou CCP2CON)
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
- - CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0
b7 b6 b5 b4 b3 b2 b1 b0
bits 7..6 : Non implémenté.
bits 5..4 : CCPxX et CCPxY : PWM Least Significant bits.
Bits non utilisés en modes Capture et Compare.
Ce sont les 2 bits LSB pour le Duty cycle (Rapport Cyclique) en mode PWM. Les 8
bits MSB se trouvent dans le registre CCPRxL.
Figure VI-1 : Schéma bloc du mode CAPTURE
bits 3..0 : CCPxM3 et CCPxM0 : CCPx Mode Select bits.
0000 : Module CCP à l’arrêt.
01 00 : Mode Capture à chaque front descendant.
01 0 1 : Mode Capture à chaque front montant.
3. Module CCP en mode Compare
01 1 0 : Mode Capture tous les 4 fronts montants. En mode compare, les 16 bits du registre CCPRx (CCPRxH : CCPRxL) sont
01 1 1 : Mode Capture tous les 16 fronts montants. constamment comparés avec le contenu du registre TMR1 (TMR1H : TMR1L). L’égalité
1 000 : Mode Compare, broche de sortie mise à 1 et Flag CCP1IF = 1 à
met à 1 le flag CCPxIF et entraine l’une des actions suivantes :
l’égalité.
- Mise à 1 de la sortie RC2/CCP1 ou RC1/CCP2
1 00 1 : Mode Compare, à l’égalité le Flag CCP1IF est positionné et
- Mise à 0 de la sortie RC2/CCP1 ou RC1/CCP2
broche de sortie CCPx est mise à 0.
- Sortie reste inchangée, avec la possibilité de générer une interruption
1 01 0 : Mode Compare, à l’égalité le Flag CCP1IF est positionné, une
- Evénement Spécial, ce mode ne change pas la sortie, mais il remet à 0 le
interruption pourra être générée, la broche CCPx est inaffectée.
contenu du registre TMR1. Le module CCP2 lance automatiquement la conversion
10 1 1 : Mode Compare. Evénement spécial généré (CCP1IF = 1, la
A/N (GO = 1) si le module ADC est en service.
broche CCPx inaffectée) le module CCP1 remet TMR1 à 0 ; le CCP2 remet TMR1
à 0 et démarre la conversion A/N si le module ADC est en service. Les broches RC2 ou RC1 doivent être configurées en sortie via le registre TRISC.
11 x x : Mode PWM. En mode Special Event (Evénement Spécial), la remise à zéro du registre TMR1 ne
positionne pas le flag TMR1IF.

- 42 - - 43 -
faut bien noter que la valeur écrite dans CCPRxL ne doit pas dépasser le contenu du
registre PR2.

Figure VI-2 : schéma bloc du mode COMPARE

4. Module CCP en mode PWM


La modulation MLI (Modulation en Largeur d’Impulsion), PWM (Pulse Width
Pour atteindre une résolution de 10 bits Microchip a compété le registre CCPxH par
Modution en anglais) est utilisée dans la variation de la vitesse des moteurs électriques.
les deux bits CCPxX et CCPXY du registre CCPxCON.
Le signal PWM est obtenu par modulation d’un signal triangulaire ou dents de scie
avec un signal de référence, dont la fréquence est très faible par rapport à la porteuse.

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 -

2. Port série du microcontrôleur PIC


VII - L’INTERFACE SERIE
Le port série asynchrone du microcontrôleur présente les caractéristiques suivantes :
1. Présentation - La Port série du microcontrôleur PIC est appelé USART, qui peut fonctionner soit
en mode synchrone ou asynchrone, le mode asynchrone peut travailler en mode
Ce type d’interface permet au microcontrôleur de communiquer avec d’autres adressable.
systèmes à base de microprocesseur. Les données envoyées ou reçues se présentes - Fonctionnement en mode full duplex (émission et réception des données en
sous la forme d’une succession temporelle (sur un seul bit) de valeurs binaires images même temps)
- Transmission sur 8 ou 9 bits.
d’un mot. Il y a deux types de liaison série : synchrone et asynchrone. Nous traitons
- Réception en mode Adressable, ceci permet au microcontrôleur PIC de
dans ce chapitre la liaison série asynchrone. fonctionner en mode réseau (utilisation de la norme RS485)
- Pas de bit de parité (le 9ème bit peut être utilisé de manière logicielle pour la
Bit de PARITE
Bit de START

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

TXSTA : Registre de contrôle et d’état en mode transmission


Figure VII-1 : Protocole série asynchrone
RCSTA : Registre de contrôle et d’état en mode réception
La liaison série asynchrone ne possède pas un signal d’horloge de synchronisation.
SPBRG : USART Baud Rate Generator (permettant de fixer le débit)
Les unités en liaison possèdent chacune une horloge interne cadencée à la même
TXREG : buffer d’émission,
fréquence. Lorsqu’une unité veut émettre un mot binaire, elle génère un front
RCREG : buffer de réception,
descendant sur sa ligne émettrice. A la fin de l’émission de ce mot, la ligne repasse au
Le module USART utilise les broches RC6 pour la transmission TX, et RC7 pour la
niveau haut. La donnée à transmettre peut contenir un bit supplémentaire appelé “bit de
réception RX. Donc pour que le module soit fonctionnel, il faut configurer la broche RC6
parité” servant à la correction d’erreurs.
en sortie et RC7 en entrée.
Paramètres entrant en jeu pour la norme RS232 :
- Longueur des mots : 7 bits (ex : caractère ASCII) ou 8 bits 2.1. Registre SPBRG

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

Figure VII-2 : schéma bloc du module de transmission

Figure VII-3 : Chronogramme de transmission

2.4.1. Procédure d’émission Figure VII-4 : Schéma bloc en mode réception

- Initialiser le registre SPBRG par la vitesse désirée et mettre le bit BRGH à 1 si la


haute vitesse a été choisie.
- Activer le module série SPEN = 1 et Autoriser le mode Asynchrone SYN = 0.
- Eventuellement faire TX9 = 1 si une émission sur 9 bits est désirée.
- Autoriser l'émission TXEN = 1.
- Vérifier si le buffer d’émission est vide (TXIF = 1)
- Si une transmission 9 bits a été choisie, mettre le 9ème bit dans TX9D.
- Mettre l'octet à transmettre dans TXREG.
Figure VII-5 : Chronogramme de réception
2.5. Module de réception
La réception est autorisée par la mise à 1 du bit CREN du registre RCSTA.

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

Vous aimerez peut-être aussi