Computers">
Chapitre IV
Chapitre IV
Chapitre IV
LE PIC16F877:
1-Introduction
Fig9.Brochage du 16f877
Comme pour tout microcontrôleur, le 16F877 a besoin d’une horloge pour fixer la
vitesse d’exécution des instructions. On utilise pour ce faire un quartz dont le rôle est de créer
une impulsion de fréquence élevée.
Le microcontrôleur se base sur cette fréquence pour son fonctionnement interne.
Notons que le 16F877 exécute une instruction élémentaire du langage assembleur en 4 cycles
d’horloge. Il va donc pouvoir exécuter 1millions d’opérations élémentaires par seconde. Le
quartz est connecté sur les 2 broches OSC1 et OSC2.
- le port A (6 broches)
- le port B (8 broches)
- le port C (8 broches)
- le port D (8 broches)
- le port E (3 broches)
On a donc 33 broches d’entrées-sorties (E/S) disponibles. C’est l’un des grands avantages
du 16F877. Mais toutes ces broches ne seront pas forcément disponibles en tant que broche
E/S car presque toutes sont également utilisées par l’un ou l’autre des modules internes du
16F877. Elles ne seront pas disponibles en tant que broche E/S si le module concerné est
activé.
Toutes les broches de ces ports sont des broches E/S, on peut donc les configurer en
entrée ou en sortie.Les caractéristiques électriques de ces broches sont spécifiées dans le
datasheet du micrcontrôleur Chaque port est configuré par un registre nommé TRIS, suivi de
la lettre du port. Ainsi le port A est configuré par le registre TRISA. Chaque bit de ces
registres (TRIS) détermine le sens Entrée ou Sortie des broches du port.
2.1 Le PORTA :
Le port A contient 6 pins I/O (input/output) numérotées de RA0 à RA5. On a donc 6 bits
dans le registre PORTA et 6 bits dans le registre TRISA. Les bits 6 et 7 de ces registres ne sont
pas implémentés. Le port A est configuré comme un ensemble d’entrées analogiques. Donc,
il faut forcer une valeur dans le registre ADCON1 dans la routine d’initialisation pour pouvoir
utiliser ce port comme port d’entrée/sortie de type général.
2.2 Le PORTB :
2.3 Le PORTC :
Ce port utilise un registre TRISC localisé dans la banque 1, qui permet de décider
quelles sont les entrées et quelles sont les sorties. le positionnement d’un bit à « 1 » place la
pin en entrée, le positionnement de ce bit à « 0 » place pin en sortie.
2.4 Le PORTD :
Le registre TRISD comporte 8 bits de direction, pendant que le registre PORTD
correspond aux pins I/O concernées.
2.5 Le PORT E :
Il ne comporte que 3 pins, RE0 à RE2 ces pins peuvent également être utilisées comme
pins d’entrées analogiques. Le registre ADCON1 détermine si ce port sera utilisé comme port
I/O ou comme port analogique.
2.5.1 Le registre TRISE :
Le bit 4 (PSPMODE) est le bit qui détermine si le PORTD sera utilisé en port I/O. Si On
place ce bit a 1, le PORTD sera considéré comme un port d’interfaçage parallèle avec un
microprocesseur (fonctionnement esclave).
C’est la mémoire programme proprement dite. Chaque « case » mémoire unitaire fait 13
bits. La mémoire FLASH est un type de mémoire stable, qu’on peut reécrire à volonté cette
mémoire flash fait 8Koctet.
5) 16 octets communs aux 4 banques, soit 0x70 à 0x7F ; 0xF0 à 0xFF ; 0x170 à 0x17F ; 0x1F0
à 0x1FF.
La signification de ces octets communs est que si on accéde au registre (adresse mémoire
RAM) 0x70 ou au registre 0XF0, en réalité on accéde au même emplacement. Ceci à
l’avantage de permettre d’utiliser ces emplacements sans devoir connaître l’état de RP0, RP1,
et IRP.
5. Une USART
7. Un « chien de garde »
L’intérêt des modules de comptage, c’est qu’ils permettent de tenir compte d’évènements
qui surviennent de façon répétée sans que le microprocesseur soit monopolisé par cette tâche.
Dans la plupart des cas, une interruption a lieu que lorsque le compteur déborde (overflow).
4.1.1. Le timer 0 : fonctionne exactement comme décrit dans la partie du microcontroleur
16F84.
4.1.2. Le timer 1 :c’est un compteur 16 bits qui peut compter (de 0 à 65535) :
- soit les impulsions de l’horloge
- soit les impulsions externes, et en particulier les impulsions d’un quartz externe.
Le débordement provoque aussi une interruption.
Ce timer est capable de compter sur 16 bits, il sera donc capable de compter de D’0’ à
D’65535’. Le Comptage avec le timer 16 bits nécessite 2 registres. Ces registres se nomment
TMR1L et TMR1H.
Le contenu de TMR1L et de TMR1H n’est pas remis à 0 lors d’un reset. Donc, pour compter à
partir de 0, il faut remettre à 0 les deux registres.
Pour que le timer 1 génère une interruption les conditions suivantes doivent etre satisfaites :
- Il faut que le bit d’autorisation d’interruption du timer 1 (TMR1IE) soit mis à 1. Ce bit se
- Pour que le registre PIE1 soit actif, il faut que le bit PEIE d’autorisation des interruptions
périphériques soit positionné dans le registre INTCON.
- Il faut que le bit d’autorisation générale des interruptions (GIE) soit positionné dans le
registre INTCON.
Une interruption sera alors générée à chaque débordement du timer1. Cet événement sera
indiqué par le positionnement du flag TMR1IF dans le registre PIR1.
On a la possibilité, au niveau du timer 1, d’utiliser un quartz sur les pins T1OSI et T1OSO afin
de disposer d’une horloge séparée de l’horloge principale.
- Compteur synchrone
- Compteur asynchrone.
b7 : Inutilisé
b6 : Inutilisé
0 0 1
0 1 2
1 0 4
1 1 8
T1OSCEN : ce bit permet de mettre en service l’oscillateur interne, et donc permet d’utiliser
un second quartz pour disposer d’un timer précis travaillant à une fréquence distincte de la
fréquence de fonctionnement du PIC.
T1SYNC : permet de choisir si le comptage des événements sera effectué de façon synchrone
ou asynchrone avec l’horloge principale du PIC. Lorsque TMR1 est utilisé en mode « timer ».
4.2.9. Le registre ADCON0 :
- b1 : Inutilisé : lu comme « 0 »
0 0 0 0 AN0/RA0
0 0 1 1 AN1/RA1
0 1 0 2 AN2/RA2
0 1 1 3 AN3/RA3
1 0 0 4 AN4/RA5
1 0 1 5 AN5/RE0
1 1 0 6 AN6/RE1
1 1 1 7 AN5/RE2
Cette partie ne comporte aucune difficulté particulière. En effet, l’interruption générée par
le convertisseur est une interruption périphérique, et doit donc être traitée comme telle. Les
Moyennant quoi, toute fin de conversion analogique entraînera une interruption. Il vous
Arrivé à ce stade, vous disposez de toutes les informations pour effectuer votre mesure de
grandeur analogique. Voici un résumé des opérations concrètes à effectuer pour
échantillonner votre signal :
1) Configurez ADCON1 en fonction des pins utilisées en mode analogique, ainsi que les
vous pouvez relancer l’acquisition directement, à votre charge d’attendre non pas le temps
Tacq pour la fin de l’acquisition, mais le temps Tacq + 2Tad. Ceci vous épargne une
temporisation. En effet, 2 temporisations qui se suivent peuvent être remplacées par une
Si donc, nous prenons un PIC cadencée à 20Mhz, sous une tension d’alimentation de
1) Configurez ADCON1 en fonction des pins utilisées en mode analogique, ainsi que les
(B’10xxx001’)
5) Attendez le temps (Tacq+2Tad), soit 19,7µs + 3,2µs = 22,9µs
9) Recommencez au point 4
Notez que vous pouvez, comme montré, réaliser plusieurs opérations en même temps.
Cependant, fort logiquement, vous ne pouvez pas positionner les bits ADON et
GO/DONE en même temps, puisque le temps Tacq doit impérativement les séparer.
Remarque :
Lorsque vous disposez de beaucoup de temps entre 2 lectures de la valeur analogique, nous
Il est pratique dans ce cas d’effectuer un nombre de mesures qui est une puissance de 2 (2
mesures, 4,8,16…). Ainsi, pour effectuer votre moyenne, il suffira d’effectuer la somme de
Ce module est très puissant pour créer des impulsions à des fréquences élevées. On pourra
définir la période, la durée du niveau haut pendant cette période.
Le 16F877 dispose de deux modules CCP. CCP signifie Capture, Compare, and PWM.
Ces modules CCP sont fortement liés et dépendant des timers 1 et 2. Ils sont également liés
au convertisseur A/D.
Les 2 modules CCP1 et CCP2 sont strictement identiques, excepté la possibilité, pour le
module CCP2, de démarrer automatiquement la conversion A/D.
Ces registres ont la même fonction, CCP1CON concerne le module CCP1, tandis que
CCP2CON concerne le module CCP2.
b7 : Inutilisé : Lu comme « 0 »
b6 : Inutilisé : Lu comme « 0 »
Les bits CCPxX et CCPxY. Ces bits sont en fait les 2 bits de poids faible qui complètent le
nombre de 10 bits utilisé pour le mode de fonctionnement PWM. Dans les autres modes, ces
bits sont donc inutilisés.
Les bits CCPxM3 à CCPxM0 servent à déterminer quel sera le mode de fonctionnement
CCPM Fonctionnement
1011 Mode compare, positionne CCPxIF sans affecter la sortie, et génère le trigger
Ce mode fait intervenir un pin comme événement déclencheur. Il s’agit donc d’une
entrée. Il est donc impératif de configurer le pin CCPx en entrée via le registre TRISC avant de
pouvoir utiliser le module CCPx en mode « capture ».
Principe de fonctionnement :
Le mode capture est en étroite liaison avec les pins RC1/CCP2 et RC2/CCP1 du PIC. le
principe est le suivant :
- Simultanément, le bit CCP1IF du registre PIR1 est validé, et une interruption intervient si
elle est configurée.
L’événement déclencheur est une variation du signal sur le pin CCP1/RC2 pour le module
CCP1, et sur le pin CCP2/RC1 pour le module CCP2. L’événement qui provoque la capture
dépend des bits CCPxM3 à CCPxM0.
PWM signifie « Pulse Width Modulation », ce qu’on pourrait traduire par modulation de
largeur d’impulsion. Il s’agit d’un signal binaire de fréquence fixe dont le rapport cyclique
peut être modulé par logiciel.
Le rapport cyclique d’un signal binaire à fréquence fixe peut être défini comme étant le
rapport entre le temps où il se trouve à l’état « 1 » par rapport au temps total d’un cycle. Un
cycle n’étant constitué, par définition, que d’un état « 1 » suivi d’un état « 0 », la somme des
temps des 2 états étant constante.
Donc, si on pose :
Alors :
- Tc = Th + Tb (Durée d’un cycle en secondes = durée de l’état haut + durée de l’état bas)