Chapitre 2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 18

Chapitre 2:

MICROCONTROLEURS
Par: Dr NDJE

LE PIC 16F876/877
1 Introduction

La densité croissante des circuits programmables actuels, notamment les


microcontrôleurs, permet le prototypage rapide des circuits numériques à grande complexité.
Aussi, il est possible de tester rapidement la validité de concepts architecturaux nouveaux :
l'implémentation complète d'un processeur sur des microcomposants est aujourd'hui à notre
portée, entraînant ainsi plus de possibilités d'évaluation que celles offertes par des
microprocesseurs. La part de marché des microcontrôleurs dans le marché global des circuits
matériels pour l’électronique numérique ne cesse d’augmenter. Les évolutions technologiques
et architecturales qui ont eu successivement lieu depuis ces deux dernières décennies ont fait
de ces circuits de réelles et rentables alternatives aux outils classiques. Avec ces évolutions,
c’est tout un nouveau domaine de l’électronique numérique qui s’est ouvert. Aujourd’hui les
microcontrôleurs sont utilisés dans tous les domaines, des systèmes embarqués aux systèmes
de communications, ils sont au cœur d’un important champ de recherche académique et
industrielle. Ce chapitre présente une généralité sur les microcontrôleurs tout en mettant un
accent particulier sur le microcontrôleur 16F877 de microchip. Il a pour but de comprendre et
de connaitre les fonctions et la constitution du microcontrôleur, ses différentes variantes, sa part
du marché, la place qu’il occupe dans l’industrie des systèmes microprogrammés, et les
paramètres qui influences son choix face à un projet.

2 Définition

Un microcontrôleur (en notation abrégée µc, ou uc ou encore MCU en anglais) est un


circuit intégré qui rassemble les éléments essentiels d'un ordinateur : processeur, mémoires
(mémoire morte et mémoire vive), unités périphériques et interfaces d'entrées-sorties,
permettant d’exécuter des programmes (Connaissances Informatiques, 2019). Les
microcontrôleurs se caractérisent par un plus haut degré d'intégration, une plus faible
consommation électrique, une vitesse de fonctionnement plus faible (de quelques mégahertz
jusqu'à plus d'un gigahertz) et un coût réduit par rapport aux microprocesseurs polyvalents
utilisés dans les ordinateurs personnels (UVT, 2019).

Par rapport à des systèmes électroniques à base de microprocesseurs et autres


composants séparés, les microcontrôleurs permettent de diminuer la taille, la consommation

1
Dr NDJE
électrique et le coût des produits. Ils ont ainsi permis de démocratiser l'utilisation de
l'informatique dans un grand nombre de produits et de procédés.

Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués, comme
les contrôleurs des moteurs automobiles, les télécommandes, les appareils de bureau,
l'électroménager, les jouets, la téléphonie mobile, etc.

La plus grande partie des systèmes électroniques complexes utilisés de nos jours sont
des systèmes embarqués : téléphones mobiles, horloges, baladeurs, récepteurs GPS,
électroménager, automobile, transport aérien/maritime/fluvial. Les systèmes embarqués se
démarquent des systèmes informatiques traditionnels selon plusieurs aspects :

• Ils sont soumis à des contraintes de taille (intégration), de consommation électrique


(autonomie) et de coût importants (grande série) ;
• Ils sont en général affectés à une tâche bien précise. La taille des programmes et la
quantité de mémoire (vive et morte), dont ils disposent, sont modestes (face à un micro-
ordinateur) ;
• Ils doivent communiquer avec des dispositifs d'entrées-sorties (IO) : boutons, relais,
résistances variables, optocoupleurs, moteurs électriques, LED, circuits intégrés
logiques, etc. ;
• Ils n'ont parfois aucun dispositif d'interface homme-machine : ni clavier, ni écran, ni
disque, ni imprimante, etc. Par exemple, le contrôleur d'injection de carburant du moteur
d'une automobile est totalement invisible pour le conducteur.

Figure 3.1. Exemple d’un microcontrôleur 16F877 de Microship (Microship, 2019)

3 Bref historique du microcontrôleur

Le microcontrôleur a été mis sur pied par Texas Instruments (TI) au début des années
1970, dans le même temps que le premier microprocesseur a été par Intel. Les premiers

2
Dr NDJE
microcontrôleurs étaient simplement des microprocesseurs avec mémoire tels que RAM et
ROM. Plus tard, les microcontrôleurs ont évolué dans un large éventail de dispositifs adaptés
pour les applications de systèmes embarqués spécifiques tels que les voitures, les téléphones
sans fil et les appareils ménagers.

En 1971, le premier microcontrôleur a été « inventé » par deux ingénieurs de Texas


Instruments. Gary Boone et Michael Cochran ont créé le TMS 1000, qui était un
microcontrôleur 4 bits avec haut- ROM et RAM. 1972 à 1974, le TMS 1000 était uniquement
utilisé en interne chez TI dans ses calculatrices pour effectuer ses calculs et a été affiné au fil
des ans. en 1974, TI a offert le TMS 1000 pour la vente à l'industrie électronique. Le TMS 1000
est disponible en différentes configurations RAM et ROM. À partir de 1983, environ 100
millions de TMS 1000 ont été vendu dans des appareils.

En plus de produire le premier microprocesseur, Intel a également développé de


nombreux microcontrôleurs importants : le 8048 et 8051. Introduit en 1976, le 8048 a été l'un
des premiers microcontrôleurs d'Intel et a été utilisé comme le processeur dans le clavier de
l'ordinateur personnel d'IBM. On a estimé à plus d'un milliard d’appareils à microcontrôleur
8048 vendus. Le 8051 a suivi en 1980 et est devenu l'une des familles de microcontrôleurs les
plus populaires. Les variantes de l'architecture 8051 sont toujours produits aujourd'hui, rendant
le 8051 l'un des modèles électroniques les anciennes.

Durant les années 90s, les microcontrôleurs avec ROM (EEPROM) mémoires
programmables et effaçables électriquement, comme la mémoire flash, sont devenus
disponibles. Ces microcontrôleurs pourraient être programmés, effacé et reprogrammé en
utilisant uniquement des signaux électriques. Avant les dispositifs électriquement
reprogrammables, les microcontrôleurs nécessitaient souvent la programmation spécialisée et
de matériel d'effacement qui exigeait que le dispositif soit retiré de son circuit. Ce qui ralentit
le développement des logiciels et augmente le coût de fabrication. Avec cette limitation retirée,
microcontrôleurs ont pu être programmé et reprogrammé. Ainsi, les circuits et les appareils à
microcontrôleurs pourraient désormais être mis à jour avec de nouveaux logiciels sans avoir à
retourner au fabricant. Beaucoup de microcontrôleurs actuels, tels que ceux disponibles auprès
de Microchip et Atmel, incorporer la technologie de mémoire flash.

En plus de dispositifs à usage général, les microcontrôleurs spécialisés sont produits


dans des domaines tels que l'automobile, l'éclairage, les communications et les appareils grand

3
Dr NDJE
public de faible puissance. Les microcontrôleurs sont également devenus plus petits et plus
puissants. Par exemple, en 2010, Atmel a annoncé un microcontrôleur flash dans un boîtier
mesurant 2 mm par 2 mm. Ces minuscules microcontrôleurs sont assez petits et assez pas cher
pour être utilisé dans des produits tels que des jouets et brosses à dents.

4 Du microprocesseur au microcontrôleur

Le processeur est l'élément central d'un système informatique : il interprète les


instructions et traite les données d'un programme. Il a besoin de certains éléments externes pour
fonctionner :

• Une horloge pour le cadencer (en général à quartz ou Boucle à verrouillage de phase
(PLL : Phase-Locked Loop) ;
• De la mémoire pour stocker les variables durant l’exécution du programme (mémoire
vive RAM) et le programme d’une mise sous tension à l’autre (mémoire morte ROM).
Si l'on conçoit un système affecté à une tâche bien particulière (ce qui est généralement
le cas des systèmes embarqués), le programme n'est pas amené à changer. Il peut donc
être stocké dans une mémoire morte (ROM) ;
• Des périphériques (pour interagir avec le monde extérieur).

Ces éléments sont reliés par 3 bus :

• Le bus d'adresse qui permet au microprocesseur de sélectionner la case mémoire ou le


périphérique auquel il veut accéder pour lire ou écrire une information (instruction ou
donnée) ;
• Le bus de données qui permet le transfert des informations entre les différents éléments
; ces informations seront soit des instructions, soit des données en provenance ou à
destination de la mémoire ou des périphériques ;
• Le bus de contrôle qui indique si l'opération en cours est une lecture ou une écriture, si
un périphérique demande une interruption pour faire remonter une information au
processeur, etc.

4
Dr NDJE
Figure 3.2. Structure d'un système à microprocesseur

Traditionnellement, ces composants sont intégrés dans des circuits distincts (Connaissances
Informatique, 2019). Le développement d'un tel système à base de microprocesseur se trouve
donc pénalisé par (liste non exhaustive) :

• La nécessité de prévoir l'interconnexion de ces composants (bus, câblage, nappes de


connexion) ;
• La place occupée physiquement par les composants et les moyens d'interconnexion ;
• La consommation énergétique ;
• La chaleur dégagée ;
• Le coût financier.

Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la


réalisation) d'un système à base de microprocesseur en rassemblant ces éléments essentiels dans
un seul circuit intégré. Un microcontrôleur est donc un composant autonome, capable
d'exécuter le programme contenu dans sa mémoire morte dès qu'il est mis sous tension. Selon
les modèles et les conditions de fonctionnement, les microcontrôleurs peuvent avoir besoin de
quelques composants externes (quartz, quelques condensateurs, parfois une ROM), mais ceci
reste très limité.

Lorsque toutes les fonctions du système informatique sont regroupées dans un unique
circuit intégré, y compris les fonctions logiques, analogiques, radiofréquence, d'interface (USB,
Ethernet, etc.), on parle alors de System on Chip (système sur puce ou système mono-puce).
Ces composants sont basés sur un ou plusieurs cœurs de microcontrôleur, microprocesseur,
processeur graphique, DSP, contrôleur de périphériques, etc.

5
Dr NDJE
5 Constitution du microcontrôleur

Un microcontrôleur intègre sur un unique die (UVT, 2019) :

• Un processeur (CPU), avec une largeur du chemin de données allant de 4 bits pour les
modèles les plus basiques à 32 ou 64 bits pour les modèles les plus évolués ;
• De la mémoire vive (RAM) pour stocker les données et variables ;
• De la mémoire morte (ROM) pour stocker le programme. Différentes technologies
peuvent être employées : EPROM, EEPROM, mémoire flash (la plus récente) ;
• Souvent un oscillateur pour le cadencement. Il peut être réalisé avec un quartz, un circuit
RC ou encore une PLL ;
• Des périphériques, capables d'effectuer des tâches spécifiques. On peut mentionner
entre autres :
➢ Des convertisseurs analogiques-numériques (CAN) (donnent un nombre
binaire à partir d'une tension électrique),
➢ Des convertisseurs numériques-analogiques (CNA) (effectuent l'opération
inverse),
➢ Des générateurs de signaux à modulation de largeur d'impulsion (MLI, ou en
anglais, PWM pour Pulse Width Modulation),
➢ Des timers/compteurs (compteurs d'impulsions d'horloge interne ou
d'événements externes),
➢ Des chiens de garde (watchdog),
➢ Des comparateurs (comparent deux tensions électriques),
➢ Des contrôleurs de bus de communication (UART, I2C, SSP, CAN, FlexRay,
USB, etc.).

Le fonctionnement des périphériques peut être paramétré et commandé par le


programme et/ou les entrées-sorties. Les périphériques peuvent générer une interruption qui
contraint le processeur à quitter le programme en cours pour effectuer une routine de traitement
de l’interruption, lorsque l’événement qui la déclenche survient.

Les microcontrôleurs peuvent généralement se placer dans un état de sommeil, dans lequel ils
présentent une très faible consommation électrique. Un signal envoyé par l'un de leurs
périphériques (timer, broche d'entrée-sortie, watchdog, etc.) permet de les faire sortir de cet état
de sommeil.

6
Dr NDJE
Certains microcontrôleurs ont un nombre très restreint de broches, si bien qu'une broche
donnée peut correspondre à plusieurs périphériques internes. La fonction choisie doit alors être
sélectionnée par logiciel.

Le choix des périphériques à intégrer dans un microcontrôleur est délicat. Les fabricants
doivent réaliser un compromis entre des besoins contradictoires : utiliser des fréquences
élevées, réduire la taille du circuit, apporter des fonctionnalités nombreuses, élaborer une
architecture flexible, assurer des coûts modérés, etc

6 Architecture du microcontrôleur

Un microcontrôleur peut effectuer la plupart des instructions machine habituelles, avec


certaines restrictions liées à son caractère embarqué (taille restreinte des mots machine, petite
taille disponible, etc.). On note cependant quelques particularités (Tavernier, 2010).

Les capacités mathématiques sont en général particulièrement limitées, réduites à des


additions, soustractions et décalages sur des octets pour les plus simples d'entre eux. Les calculs
mathématiques évolués doivent donc être ramenés à une succession d'opérations simples
portant seulement sur des octets. Des routines mathématiques (petits programmes permettant
de réaliser les calculs complexes) ont été développées pour la plupart des microcontrôleurs
populaires.

Les instructions d'entrée-sortie sont bien développées, de façon à pouvoir :

• Lire l'état d'un port d'entrée ;


• Écrire une information dans le registre d'un port de sortie, qui maintient l'information à
la disposition des circuits extérieurs.

Les microcontrôleurs disposent généralement de nombreuses instructions destinées aux


opérations sur les bits, de façon à rendre les programmes plus compacts, notamment lorsqu'ils
agissent sur une entrée-sortie donnée. Ainsi, un processeur généraliste peut avoir besoin de
plusieurs instructions pour tester la valeur d'un bit d'un registre et effectuer un saut si le bit vaut
vrai. Cette fonction courante est assurée par une seule instruction dans certains
microcontrôleurs.

7
Dr NDJE
Les modes d'adressage utilisables sont en général semblables à ceux des autres processeurs. De
façon générale, les instructions et modes d'adressage disponibles varient fort selon les familles
de microcontrôleurs.

Certains microcontrôleurs suivent une architecture Harvard : ils possèdent des bus
séparés pour la mémoire de programme et la mémoire de données, ce qui permet aux accès
d'avoir lieu en même temps (on parle d'accès concurrent). Lorsqu'on utilise une architecture
Harvard, les mots de programme peuvent avoir une largeur (nombre de bits) différente de celle
des mots de la mémoire de données et des registres. Par exemple, il peut y avoir des instructions
de 12 bits et des registres de données de 8 bits.

7 Domaines d’application des microcontrôleurs

Les microcontrôleurs sont très utilisés dans tous les systèmes embarqués évoqués en
introduction. Ils sont également très prisés en robotique amateur (robots autonomes) et en
modélisme (automatismes des maquettes de réseaux ferroviaires par exemple). Les
microcontrôleurs représentent la plus grosse partie des ventes dans le marché des
microprocesseurs. En effet, un foyer moyen d'un pays développé est susceptible d'être équipé
de seulement un ou deux microprocesseurs généralistes (ordinateurs), mais d'une ou deux
douzaines de microcontrôleurs (appareils électroménagers). Une automobile de milieu de
gamme est équipée d'au moins 50 microcontrôleurs.

Les fabricants proposent souvent des versions spéciales de leurs microcontrôleurs pour
faciliter le développement matériel et logiciel des applications. Par exemple, lorsque les
mémoires mortes utilisées étaient des EPROM, il existait des variantes des microcontrôleurs
équipés de fenêtres sur le dessus, qui permettaient d'effacer le programme grâce à de la lumière
ultraviolette. Ceci permettait de recommencer une programmation après un cycle
programmation-test.

Pour de petites séries (quelques milliers d'unités ou moins), les microcontrôleurs


programmables une seule fois (OTP, one-time programmable) sont économiques. Ils sont basés
sur la même puce que la version UV-EPROM, se programment avec le même matériel, mais le
boîtier n'est pas équipé de la fenêtre qui permet l'effacement (et qui est onéreuse).

Il peut exister des versions de microcontrôleurs dépourvus de mémoire morte interne. La


mémoire morte est alors située dans un boîtier extérieur, par exemple une EPROM. Il suffit

8
Dr NDJE
alors d'un simple programmateur d'EPROM pour réaliser la programmation, mais des broches
du microcontrôleur sont requises pour la communication avec la mémoire externe, et ne peuvent
donc pas être utilisées pour les entrées-sorties. Ces versions sont plus coûteuses, mais peuvent
se révéler intéressantes si les quantités visées sont faibles.

Plus rarement, on rencontre une variante de l'approche précédente, le piggy back. Le


microcontrôleur ne dispose pas non plus de mémoire morte interne, mais la communication
avec l’EPROM se fait non pas par des broches d'entrée-sortie, mais par des broches spéciales
situées sur le dessus du boîtier. L’EPROM se fixe alors au-dessus du microcontrôleur, et ne
monopolise pas de port d'entrée-sortie. Ces versions sont souvent onéreuses et peu pratiques,
sauf pour les phases de développement et les très petites séries.

Le recours à la programmation sur place, dans le circuit applicatif, permet de mettre à


jour le programme après la fabrication du produit. On parle alors de flashage. Cette opération
peut être effectuée via un programme situé en ROM, ou passer par l'utilisation d'un connecteur
physique particulier. Dans tous les cas, on évite ainsi un retour en usine pour effectuer la mise
à jour.

Lorsqu'il s'agit de produire de plus grandes séries (plusieurs milliers et plus), le coût de
réalisation d'un masque pour la fabrication de mémoire morte non programmable est facilement
amorti sur tous les exemplaires produits. On peut alors fixer le contenu de la mémoire morte
lors de la réalisation du circuit intégré, et non plus lors du montage du produit. Cependant, ces
mémoires présentent l'inconvénient de ne pouvoir être mises à jour. Si l'on envisage néanmoins
de telles mises à jour, on peut prévoir de monter le microcontrôleur sur un support, ce qui permet
de le faire remplacer par un technicien en cas de nécessité.

8 Environnements de programmation du microcontrôleur

Le programme d'un microcontrôleur est généralement appelé micro logiciel. À l'origine,


les microcontrôleurs se programmaient en assembleur. Fortement bas niveau (et donc,
intrinsèquement optimisé), l'assembleur posa et pose toujours d'énormes problèmes pour la
maintenance et l'évolution des logiciels embarqués. Désormais, on utilise de plus en plus des
langages de haut niveau, notamment le langage C, capable de faciliter la programmation de
microcontrôleurs toujours plus puissants. Ces compilateurs C présentent généralement certaines
restrictions liées aux spécificités des microcontrôleurs (mémoire limitée, par exemple). Le
compilateur GCC peut produire du code pour certains microcontrôleurs4. Avec l’augmentation
9
Dr NDJE
de la puissance et de la quantité de mémoire de stockage (FLASH) disponible dans les
microcontrôleurs, les programmes de ces derniers peuvent désormais être écrits en C++. Il
existe même des frameworks et plateformes en C++ destinés à l’embarqué, comme Qtopia,
mais l'utilisation de ceux-ci restera limitée aux microcontrôleurs les plus puissants.

Certains microcontrôleurs disposent également de firmware réalisant l'interprétation


d'un langage évolué. Ainsi, l’Intel 8052 et le Zilog Z8 ont pu être programmés en BASIC dès
leurs débuts. Plus récemment, le BASIC Stamp dispose d'un interprète BASIC en mémoire
morte.

Il existe des environnements pour aider au développement de certaines applications. Par


exemple, LabVIEW et son langage G permettent de programmer les microcontrôleurs Blackfin
d'Analog Devices.

Des simulateurs sont disponibles pour certains microcontrôleurs, comme


l'environnement MPLAB de Microchip. Les développeurs peuvent ainsi analyser le
comportement du microcontrôleur et du programme, comme s'il s'agissait du composant réel.
Un simulateur montre l'état interne du processeur, ainsi que celui de ses sorties. Bien que la
plupart des simulateurs ne proposent pas de simuler les autres composants d'un système, ils
permettent de spécifier les entrées à volonté. On peut de cette façon créer des conditions qui
seraient sans cela difficiles à reproduire dans une implémentation physique. Cela facilite donc
l'analyse et la résolution des problèmes. De la même façon, certains logiciels de CAO simulent
le comportement du microcontrôleur et des composants qui l'entourent. On peut ainsi afficher
les états des entrées et sorties des différents composants au cours de l'exécution d'un
programme.

Une fois le programme compilé, le fichier binaire doit être envoyé au microcontrôleur.
On utilise soit :

• Un programmateur, pour microcontrôleurs et souvent également d’EEPROM. On parle


alors de programmateur universel ;
• Un programmateur ISP qui a l'avantage de ne pas nécessiter de sortir le microcontrôleur
du système électronique complet. Ce type de programmation pourra se faire via le bus
de communication standard JTAG ou un autre bus, souvent propriétaire (Microchip par
ex. avec sa série PIC16F) et, malheureusement, inadapté au test des cartes lors de la
phase de production.

10
Dr NDJE
Toutefois, le programme qui a été envoyé peut comporter des bogues (bugs), aussi, pour
parvenir à les détecter on peut utiliser un émulateur in-circuit.
Le projet μCLinux vise à faire fonctionner Linux sur des microcontrôleurs et des
microprocesseurs dépourvus de MMU. Il est par exemple disponible sur Motorola ColdFire,
Blackfin, Intel i960, Motorola QUICC, ARM7-TDMI, NEC V850.

9 Familles des microcontrôleurs

Selon les fabriquant, les microcontrôleurs sont classés en plusieurs familles (Intel,
2019 ; UVT, 2019). Nous pouvons citer :

• Les familles ARM Cortex-M et ARM Cortex-R ;


• La famille Atmel AT91 ;
• La famille Atmel AVR (utilisée par des cartes Wiring et Arduino) ;
• Le C167 de Siemens/Infineon ;
• La famille des Infineon AURIX TC3x, Infineon AURIX TC2x, Infineon TriCore TC1x,
Infineon XMC, XC2000 de Infineon Technologies ;
• La famille Hitachi H8 ;
• La famille Intel 8051, qui ne cesse de grandir ; de plus, certains processeurs récents
utilisent un cœur 8051, qui est complété par divers périphériques (ports d’E/S,
compteurs/temporisateurs, convertisseurs A/N et N/A, chien de garde, superviseur de
tension, etc.) ;
• L’Intel 8085, à l'origine conçu pour être un microprocesseur, a en pratique souvent été
utilisé en tant que microcontrôleur ;
• Le Freescale 68HC11 ;
• La famille Freescale 68HC08 ;
• La famille Freescale 68HC12 ;
• La famille Freescale Qorivva MPC5XXX ;
• La famille des PIC de Microchip ;
• La famille des dsPIC de Microchip ;
• La famille ADuC d'Analog Devices ;
• La famille PICBASIC de Comfile Technology ;
• La famille MSP430 de Texas Instruments ;

11
Dr NDJE
• La famille 8080, dont les héritiers sont le microprocesseur Zilog Z80 (désormais utilisé
en tant que contrôleur dans l'embarqué) et le microcontrôleur Rabbit ;
• La famille PSoC de Cypress ;
• La famille LPC21xx ARM7-TDMI de Philips ;
• La famille V800 de NEC ;
• La famille K0 de NEC ;
• La famille des ST6, ST7, ST10, STR7, STR9, de STMicroelectronics ;
• La famille STM32 de STMicroelectronics ;
• La famille STM8 de STMicroelectronics ;
• La famille Quark d’Intel.

12
Dr NDJE
6

I.1 Les PICs de Microchip

Les PICs sont des microcontrôleurs à architecture RISC (Reduce Instructions Construction
Set), ou encore composant à jeu d’instructions réduit. L'avantage est que plus on réduit le nombre
d’instructions, plus leur décodage sera rapide ce qui augmente la vitesse de fonctionnement du
microcontrôleur.
La famille des PICs est subdivisée en 3 grandes familles : La famille Base-Line, qui utilise des
mots d’instructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font
partie la 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits.
Les PICs sont des composants STATIQUES, Ils peuvent fonctionner avec des fréquences
d’horloge allant du continu jusqu’à une fréquence max spécifique à chaque circuit. Un PIC16F876-
04 peut fonctionner avec une horloge allant du continu jusqu’à 4 MHz.
Nous nous limiterons dans ce document à la famille Mid-Range et particulièrement au PIC
16F876/877, sachant que si on a tout assimilé, on pourra facilement passer à une autre famille, et
même à un autre microcontrôleur.

PIC FLASH RAM EEPROM I/O A/D Port // Port Série


16F870 2K 128 64 22 5 NON USART
16F871 2K 128 64 33 8 PSP USART
16F872 2K 128 64 22 5 NON MSSP
16F873 4K 192 128 22 5 NON USART/MSSP
16F874 4K 192 128 33 8 PSP USART/MSSP
16F876 8K 368 256 22 5 NON USART/MSSP
16F877 8K 368 256 33 8 PSP USART/MSSP
Tableau I.1 : différents circuit de la famille 16F87X

Les éléments essentiels du PIC 16F876 sont :


• Une mémoire programme de type EEPROM flash de 8K mots de 14 bits,
• Une RAM donnée de 368 octets,
• Une mémoire EEPROM de 256 octets,
• Trois ports d'entrée sortie, A (6 bits), B (8 bits), C (8 bits),
• Convertisseur Analogiques numériques 10 bits à 5 canaux,
• USART, Port série universel, mode asynchrone (RS232) et mode synchrone
• SSP, Port série synchrone supportant I2C
• Trois TIMERS avec leurs Prescalers, TMR0, TMR1, TMR2
• Deux modules de comparaison et Capture CCP1 et CCP2
• Un chien de garde,
• 13 sources d'interruption,
• Générateur d'horloge, à quartz (jusqu’ à 20 MHz) ou à Oscillateur RC
• Protection de code,
• Fonctionnement en mode sleep pour réduction de la consommation,
• Programmation par mode ICSP (In Circuit Serial Programming) 12V ou 5V,
• Possibilité aux applications utilisateur d’accéder à la mémoire programme,
• Tension de fonctionnement de 2 à 5V,
• Jeux de 35 instructions
7

PORTE PORTD PORTC PORTA 14 bits : config


PORTB

96 registres Mémoire
DAC
système programme
10 bits timer 0
TMR0 de type Flash
CCP1 368 registres
Capture/Comparaison utilisateur 8 x 1024
timer 1
TMR1 mots de 14 bits
CCP2
Capture/Comparaison
timer 2 W
TMR2
MSSP
(I2C/SPI) Chien de ALU
garde
USART WDT EEPROM
Horloge
(RS232) 256 octets
système

Fig. I.1 : Les éléments constitutifs du PIC 16F877

Le port D (8 bits) et le port E (3 bits) ne sont pas disponibles sur tous les processeurs. (Voir
Tableau I.1)

II Les éléments de base du PIC 16F876/877


II.1 L'Horloge
L'horloge peut être soit interne soit
externe. L'horloge interne est constituée d'un
oscillateur à quartz ou d'un oscillateur RC.
Avec l'oscillateur à Quartz, on peut avoir
des fréquences allant jusqu'à 20 MHz selon le
type de µC. Le filtre passe bas (Rs, C1, C2)
limite les harmoniques dus à l’écrêtage et
Réduit l’amplitude de l’oscillation, il n'est pas
obligatoire.
Avec un oscillateur RC, la fréquence de
l'oscillation est fixée par Vdd, Rext et Cext.
Elle peut varier légèrement d'un circuit à
l'autre.
Dans certains cas, une horloge externe
au microcontrôleur peut être utilisée pour
synchroniser le PIC sur un processus
particulier.
Quelque soit l'oscillateur utilisé, l'horloge
système dite aussi horloge instruction est
obtenue en divisant la fréquence par 4. Dans
la suite de ce document on utilisera le terme
Fosc/4 pour désigner l'horloge système.

Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour
exécuter une instruction de 1µs.
29

IV Les ports d’E/S


Le PIC 16F877 dispose de 33 broches d’entrée sortie regroupés dans 5 ports PORTA, PORTB,
PORTC, PORTD et PORTE. Chaque broche d’un port peut être configurée soit en entrée soit en
sortie à l’aide des registres de direction TRISA, TRISB, TRISC et TRISD et TRISE:

Bit k de TRISx = 0 broche k de PORTx = SORTIE


Bit k de TRISx = 1 broche k de PORTx = ENTRÉE
Certains ports ont quelques particularités que nous allons détailler ci-desous,

IV.1 Le port d' E/S PORTA


Le port A désigné par PORTA est un port de 6 bits (RA0 à RA5). RA6 et RA7 ne sont pas
accessibles.
La configuration de direction se fait à l'aide du registre TRISA, positionner un bit de TRISA à 1
configure la broche correspondante de PORTA en entré et inversement. Au départ toutes les
broches sont configurées en entrée

IV.1.1 La broche RA4 V'dd (8.5Vmax)


En entrée, la broche RA4 peut être utilisée soit comme E/S
numérique normale, soit comme entrée horloge pour le Timer TMR0
1k
En sortie, RA4 est une E/S à drain ouvert, pour l'utiliser comme
sortie logique, il faut ajouter une résistance de pull-up externe. Le
schéma (Fig. IV.1) illustre (pour les non électroniciens) le principe
d'une sortie drain ouvert (ou collecteur ouvert) : si RA4 est positionnée RA4
à 0, l'interrupteur est fermé, la sortie est reliée à la masse, c'est un
niveau bas. Si RA4 est placée à 1, l'interrupteur est ouvert, la sortie
serait déconnectée s'il n'y avait pas la résistance externe qui la place au
niveau haut.
Fig. IV.1 : résistance de pull-up

Vdd Si on veut utiliser RA4 pour allumer une


LED, on peut utiliser le schéma de Fig. IV.2. Il faut juste remarquer que
la logique est inversée, si on envoie 0 sur RA4, l'interrupteur se ferme et
1k la LED s'allume. Si on envoie 1, l'interrupteur s'ouvre et la LED s'éteint.
Le schéma illustré sur Fig. IV.3 peut aussi être utilisé. La logique
LED n'est pas inversée mais il demande une précaution particulière. Il ne faut
pas positionner la sortie RA4 à l'aide d'une instruction qui réalise une
RA4 opération sur l'état actuel du port; genre IORWF, ANDWF, XORWF ou
COMF, ADDWF, INCF … Ces instructions réalisent Vdd
une lecture-écriture en commencent par lire l'état
du port pour ensuite faire une opération dessus.
Fig. IV.2 : LED sur RA4 Or, (sur Fig. IV.3) si la sortie était au niveau 1k
haut, l'interrupteur est ouvert, la LED est allumée RA4
et elle impose une tension de l'ordre de 1.5V qui sera considérée (à tort)
comme un niveau bas lors de la lecture du port par les instructions LED
précitées. La solution est d'utiliser des instructions qui positionnent le
PORT sans tenir compte de son état courant comme MOVWF, BSF ou BCF
Fig. IV.3 : LED sur RA4
30

IV.1.2 Les autres broches de PORTA


Les autres broches (RA0, RA1, RA2, RA3 et RA5) peuvent être utilisées soit comme E/S
numériques soit comme entrées analogiques. Au RESET, ces E/S sont configurées en entrées
analogiques.

• Pour les utiliser en SORTIES NUMERIQUES, il suffit de les configurer en sortie à l'aide du
registre de direction TRISA.
• Pour les utiliser en ENTRÉES NUMERIQUES, il faut les configurer en entrée à l'aide de
TRISA, en plus il faut les configurer en numérique en plaçant la valeur '00000110' dans le
registre ADCON1,
• Pour les utiliser en ENTRÉE ANALOGIQUE, voir chapitre sur le convertisseur Analogique
numérique.

Quelque soit le mode (Analogique ou Numérique), il faut utiliser le registre TRISA pour
configurer la direction des E/S :
• Bit i de TRISA = 0 bit i de PORTA configuré en sortie

• Bit i de TRISA = 1 bit i de PORTA configuré en entrée

IV.2 Le port d' E/S PORTB


• Le port B désigné par PORTB est un port bidirectionnel de 8 bits (RB0 à RB7). Toutes les
broches sont compatibles TTL.
• La configuration de direction se fait à l'aide du registre TRISB, positionner un bit de TRISB à 1
configure la broche correspondante de PORTB en entré et inversement. Au départ toutes les
broches sont configurées en entrée.
• En entrée, la ligne RB0 appelée aussi INT peut déclencher l’interruption externe INT.
• En entrée, une quelconque des lignes RB4 à RB7 peut déclencher l'interruption RBI. Nous
reviendrons là-dessus dans le paragraphe réservé aux interruptions.

IV.3 Le port d' E/S PORTC


• Le port C désigné par PORTC est un port bidirectionnel de 8 bits (RC0 à RC7). Toutes les
broches sont compatibles TTL.
• La configuration de direction se fait à l'aide du registre TRISC, positionner un bit de TRISC à 1
configure la broche correspondante de PORTC en entré et inversement. Au départ toutes les
broches sont configurées en entrée.
• Toutes les broches du port C peuvent être utilisées soit comme E/S normales soit comme
broches d'accès à différents modules comme le timer 1, les modules de comparaison et de
capture CCP1/2, le timer 2, le port I2C ou le port série, ceci sera précisé au moment de l'étude
de chacun de ces périphériques.
• Pour l’utilisation d’une broche du port C comme E/S normale, il faut s’assurer qu’elle n’a pas
été affectée à un de ces modules. Par exemple, si TIMER1 est validé, il peut utiliser les broches
RC0 et RC1 selon sa configuration.
31

IV.4 Le port d' E/S PORTD


• Le port D désigné par PORTD est un port bidirectionnel de 8 bits (RD0 à RD7). Toutes les
broches sont compatibles TTL et ont la fonction trigger de Schmitt en entrée.
• Chaque broche et configurable en entrée ou en sortie à l’aide du registre TRISD. Pour
configurer une broche en entrée, on positionne le bit correspondant dans TRISD à 1 et
inversement.
• PORTD peut être utilisé dans un mode particulier appelé parallel slave port, pour cela il faut
placer le bit PSPMODE (bit 4) de TRISE à 1. Dans ce cas les 3 bits de PORTE deviennent les
entrées de control de ce port (RE, WE et CS)

Pour utiliser PORTD en mode normal, il faut placer le bit PSPMODE de TRISE à 0

IV.5 Le port d' E/S PORTE


• PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables en entrée ou en
sortie à l’aide des bits 0, 1 ou 2 du registre TRISE.
• Les 3 bits de PORTE peuvent être utilisés soit comme E/S numérique soit comme entrées
analogiques du CAN. La configuration se fait à l’aide du registre ADCON1.
• Si le bit PSPMODE de TRISE est placé à 1, Les trois bits de PORTE deviennent les entrées de
control du PORTD qui (dans ce cas) fonctionne en mode parallel Slave mode
• A la mise sous tension (RESET), les 3 broches de PORTE sont configurées comme entrées
analogiques.

Pour utiliser les broches de PORTE en E/S numériques normales :


- Placer 06h dans ADCON1
- Placer le bit PSPMODE de TRISE à 0

IV.6 Situation au démarrage


Au démarrage :
o Tous les ports sont configurés en entrée
o PORTD et PORTE sont configurés en mode normal
o PORTA et PORTE sont configurés en analogique

Vous aimerez peut-être aussi