Vous êtes sur la page 1sur 21

Chapitre 1

Introduction aux Microcontrôleurs


Du microprocesseur au microcontrôleur…
La partie principale d’un micro-ordinateur est la « carte mère » sur laquelle sont montés le
microprocesseur, les contrôleurs de périphériques et les lignes qui les connectent entre eux
sous forme de circuit imprimé. Avec les progrès de la miniaturisation, et la généralisation de
l’utilisation des ordinateurs, les besoins les plus courants se sont standardisés et on a pu
disposer toute une carte mère au sein d’une seule et même puce, appelée microcontrôleur.
L’usage de microcontrôleurs est actuellement en plein développement dans toute
l’informatique industrielle.
Un système informatique complet regroupe autour d'un microprocesseur un ensemble de
composants qui lui permettent de fonctionner telles que les mémoires et les contrôleurs de
périphériques. Alors que la tâche du processeur consiste à exécuter un programme, c'est à
dire une suite d'instructions pointées par le pointeur de programme.
Du point de vue soft, les composants extérieurs au processeur sont vus comme des adresses
avec lesquelles il communique par des opérations d'écriture ou de lecture. L'exécution du
programme comporte les phases suivantes :
 Lire en mémoire l'octet dont l'adresse est contenue dans le pointeur de programme,
 Analyser l'octet pour trouver le nombre d'octets qui complètent l'instruction,
 Incrémenter le pointeur de programme et lire ces octets,
 Interpréter le code et exécuter l'instruction, qui peut ou non comporter une lecture et
une écriture à une adresse.
Il y a donc sans cesse communication entre le processeur et les composants périphériques.
Physiquement, le processeur utilise pour cette communication :
 Le bus de données,
 Le bus d'adresses,
 Des lignes de contrôle qui permettent d'assurer les échanges d'information selon des
protocoles temporels précis (chronogrammes) spécifiques au microcontrôleur. Les
lignes principales sont la ligne R/W qui indique le sens de transfert des données, et la
ligne E, horloge interne du processeur, qui cadence toutes les opérations.
La conception d'un système complet se décompose schématiquement en plusieurs phases :
 Choix de composants compatibles avec le processeur (signaux et chronogrammes). Les
fabricants de processeurs proposent en général une famille de composants périphériques
directement adaptables à leur processeur.
 Choix de la carte mémoire du système. Il s'agit d'attribuer une adresse ou une zone
d'adresses à chaque composant, et de réaliser les décodages d'adresse correspondants.
 Réalisation matérielle du système : implantation des divers composants, des alims, des
logiques de décodage et des bus sur un support matériel (routage).
 Mise au point des liaisons matérielles pour un fonctionnement correct de la carte.
Ces opérations représentent un investissement lourd en temps et en matière grise. En outre, on
constate que les systèmes se ressemblent et utilisent les mêmes types de composants :
 De la mémoire ROM et RAM au moins pour implanter le programme de gestion et
tenir à jour ses variables et ses données.
 Un moyen de communication logiciel avec l'extérieur en entrée et en sortie (transfert
de données, téléchargement de programmes ou de paramètres de gestion), très souvent
liaison série asynchrone ou synchrone.
 Les autres périphériques varient suivant la tâche à exécuter, mais on retrouve très
souvent des entrées et sorties logiques, des entrées et sorties analogiques et une
gestion du temps (timer et horloge temps réel).
Il est donc naturel qu'on ait cherché à économiser du temps de mise au point en réalisant des
cartes standard répondant à des demandes standard elles aussi. Il existe depuis longtemps déjà
dans les catalogues une grande variété de cartes d'entrées-sorties adaptables à une grande
variété de matériels avec une grande variété de destinations et de performances.
Les progrès de l'intégration des circuits permettent actuellement de réaliser toute une carte de
développement sur un seul composant. Cette idée est à l'origine de tous les microcontrôleurs.
Notions de microcontrôleur
Le principe de base des microcontrôleurs repose sur l’intégration dans le même boîtier le
microprocesseur et divers périphériques, de manière à avoir un composant autonome. Les bus
de données et d’adresses sont internes au composant, ainsi que les décodages d’adresse
relatifs à chaque « périphérique interne ». Les registres de contrôle des périphériques sont
regroupés dans la zone d’adresse « registres du microcontrôleur ». On trouve également dans
cette zone divers registres de personnalisation du microcontrôleur. Les pattes du composant se
réduisent alors essentiellement à des lignes d’entrée-sortie tant logiques qu’analogiques.
L'étude d'un tel composant est beaucoup plus longue et donc beaucoup plus coûteuse que celle
d'une carte. Pour être rentable, le produit doit répondre aux besoins du plus grand nombre
d'applications pour un prix le plus modeste possible. Les fabricants proposent en général toute
une gamme de microcontrôleurs construits à partir du même microprocesseur. De plus, on
peut personnaliser chaque microcontrôleur par programmation de registres internes pour
encore plus de flexibilité. Toutes les fonctions ne sont pas disponibles à la fois, on aura
toujours affaire à un compromis.
Les avantages d’un microcontrôleur sont les mêmes que ceux des cartes toutes faites qu'on
trouve dans le commerce : une utilisation quasi immédiate, sans problème de conception, de
réalisation et de mise au point. On peut y ajouter son faible encombrement, son prix modéré et
une plus grande fiabilité du fait que les lignes de contrôle sont toutes internes.
Les inconvénients sont ceux du « tout compris ». On doit travailler avec les périphériques
grand public choisis par le fabricant, qui ne donnent pas toujours la souplesse d'utilisation
souhaitée. Les microcontrôleurs proposent en général une option qui permet un interfaçage
par bus externe, comme avec les microprocesseurs. On peut ainsi rajouter au microcontrôleur
un ou plusieurs composants tout en continuant à utiliser certains de ses composants internes.
Définition d'un microcontrôleur
Ainsi un microcontrôleur peut être considéré comme une unité de traitement de l’information
de type microprocesseur à laquelle on a ajouté des périphériques internes permettant de
faciliter l'interfaçage avec le monde extérieur sans nécessiter l’ajout trop de composants
externes, donc un processeur de traitement de l’information plus au moins autonome. Il est
généralement moins puissant qu’un microprocesseur en terme de rapidité ou de taille
mémoire. En effet, 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. Alors que 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. Alors qu'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
Certaines restrictions des microcontrôleurs sont liées à leurs caractères d'embarquement et se
contentent le plus souvent d’un bus 8 ou 16 bits. Ceci en fait des microcontrôleurs des
composants très bon marche parfaitement adaptés pour piloter les applications embarquées
dans de nombreux domaines d’application telles que:
 informatique et télécommunication
 Vidéo (Appareil photos numérique, camera numérique …)
 Contrôle des processus industriels (régulation, pilotage)
 Appareil de mesure (affichage, calcul statistique, mémorisation)
 Automobile (ABS, injection, GPS, airbag)
 MultiMedia (téléviseur, carte audio, carte vidéo, MP3, magnétoscope)
 Téléphonies (fax, portable, modem)
 Électroménager (lave-vaisselle, lave-linge, four micro-onde
Un microcontrôleur peut être programmé une fois pour toutes afin qu'il effectue une ou des
tâches précises au sein d'un appareil électronique. Mais les μC récents peuvent être
reprogrammés et ceci grâce a leur mémoire permanente de type FLASH (d’ou le terme flasher
quelque chose)
Qu'est-ce que Flash
Flash est l'une des technologies de mémoire non volatile (NVME) utilisées pour stocker des
données dans des appareils électroniques.
La mémoire flash a été développée comme une alternative à la mémoire en lecture
programmable et effaçable électriquement (EEPROM).
Il est très bon en termes de performances de mémoire, de vitesse et d'accessibilité. La
mémoire flash peut stocker les données plus rapidement et conserver les données même
lorsque l'alimentation est désactivée.
Pour cette raison, la mémoire flash est utilisée dans divers appareils tels que les appareils
photo numériques, les smartphones, les tablettes, les lecteurs USB et les disques à semi-
conducteurs (SSD).
La mémoire flash a une vitesse élevée, un faible coût et une grande capacité de stockage par
rapport à l'EEPROM.
Cependant, la mémoire flash a une limitation en ce qu'il faut du temps pour effacer et réécrire
un bloc entier à la fois. Cette limitation peut entraîner des problèmes d'applications qui
nécessitent des changements de données fréquents.
Cependant, avec le développement récent de la technologie Flash, diverses technologies sont
en cours d'élaboration pour surmonter ces limites.
Les périphériques intégrés au microcontrôleur sont des circuits électroniques capables
d'effectuer des tâches spécifiques. On peut mentionner entre autres :
 les convertisseurs Analogique/Numérique (donnent un nombre binaire à partir d'une
tension électrique) ;
 les convertisseurs Numérique/Analogique (opération inverse) ;
 les générateurs de signaux à modulation de largeur d'impulsion (MLI, ou en Anglais,
PWM pour Pulse Width Modulation) ;
 les timers (compteurs de temps ou d'événements) ;
 les comparateurs (comparent deux tensions électriques) ;
 les contrôleurs de bus (UART, IIC, SSP) ;
 les oscillateurs (servent de base de temps aux timers).
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 principal pour effectuer une routine d'interruption.
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.
Plusieurs Constructeurs se partagent le marche des microcontrôleurs, citons INTEL,
MOTOROLA, AMTEL, ZILOG, PHILIPS et enfin MICROCHIP avec ses PICs très
populaires qui nous intéresse ici dans ce cours.
Quelque soit leurs constructeurs, les microcontrôleurs ont des architecture très similaires et
sont constitués de modules fondamentaux assurant les mêmes fonctions : UAL, Ports d’E/S,
interfaces de communications série, Interfaces d’E/S analogiques, Timers et horloge temps
réels; on peut dire que seul le langage de programmation (Assembleurs) constitue la
différence majeure entre deux microcontrôleurs (similaires) venant de deux constructeurs
différents.
Utilisations et marché des microcontrôleurs
Les microcontrôleurs sont très utilisés dans tous les systèmes embarqués évoqués
précédemment. Ils représentent la plus grosse partie des ventes dans le marché des
microprocesseurs.
Les fabricants proposent souvent des versions spéciales de leurs microcontrôleurs pour
faciliter le développement matériel et logiciel des applications. 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 ce qui devient chère.
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
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, l'objectif est d'évite la nécessité de retourner en usine.
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é.
Programmation des microcontrôleurs
Le programme d'un microcontrôleur est généralement appelé micrologiciel. À 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 ou 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). 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é. Comme l’Intel 8052 et le Zilog Z8 qui ont pu être programmés en BASIC
dès leurs apparitions.
D'autres proposent 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 en simulant le comportement du microcontrôleur et les
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.

Programmateur de microcontrôleur PIC.


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

Les PICs de Microchip


À propos de Microchip Technology
Microchip Technology est une entreprise américaine de semi-conducteurs fondée en 1989. La
société fournit une large gamme de microcontrôleurs, de produits analogiques, de mémoire et
de sécurité pour diverses applications sur les marchés automobiles, industriels et
consommateurs. Microchip est l'un des plus grands fournisseurs de microcontrôleurs au
monde et est connu pour son expertise dans la conception de faible puissance et son accent sur
les technologies d'économie d'énergie. L'entreprise fournit également des outils de
développement et des logiciels pour aider les clients à concevoir et à prototyper leurs produits.
Microchip a des opérations dans plus de 70 pays et ses produits sont utilisés dans
Caractéristiques principales des microcontrôleurs Microchip:
Les PIC de Microchip sont tous réalisés en technologie CMOS
 La technologie CMOS ayant une faible consommation en énergie assure
• Haute vitesse pour la technologie Flash/EEPROM
• Large éventail de tension de travail (2.0V to 5.5V)
• Éventail de température commercial et industriel
 Séparation des mémoires de programme et de données (architecture Harvard) : On
obtient ainsi une possibilité d'accès en même temps aux instructions et aux données pas
forcément codées sur le même nombre de bits.
 Communication avec l'extérieur seulement par des ports : il ne possède pas de bus
d'adresses, de bus de données et de bus de contrôle comme la plupart des
microprocesseurs.
 Utilisation d'un jeu d'instructions réduit, d'où le nom de son architecture : RISC
(Reduced Instructions Set Construction). Les instructions et les opérandes sont codées sur
un seul mot puisque les instructions sont codées sur un nombre réduit de bits, ce qui
accélère l'exécution (1 cycle machine par instruction sauf pour les sauts qui requirent 2
cycles). 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 puisque
celles-ci peuvent être câblées. En revanche, leur nombre limité oblige à se restreindre à
des instructions basiques.
Un PIC est identifié par un numéro de la forme suivant : xx(L)XXyy –zz
- xx : Famille du composant (12, 14, 16, 17, 18)
- L : Tolérance plus importante de la plage de tension
- XX : Type de mémoire de programme
C - EPROM ou EEPROM
CR - PROM
F - FLASH
- yy : Identification
- zz : Vitesse maximum du quartz
Par exemple, si nous utiliserons un PIC 16F84 –10, soit :
- 16 : Mid-Line
- F : FLASH
- 84 : Type
- 10 : Quartz à 10MHz au maximum
Les PICs sont des composants STATIQUES, Ils peuvent fonctionner avec des fréquences
d’horloge allant du continu jusqu’a une fréquence max spécifique a 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 assimile, on pourra facilement passer à une autre famille,
et même à un autre microcontrôleur.
Caractéristiques générales de la famille 16F87x

Description et structure interne du PIC 16F876 :


Un microcontrôleur se présente sous la forme d’un circuit intégré réunissant tous les éléments
d’une structure à base de microprocesseur qui sont:
 Une mémoire programme de type EEPROM flash de 8K mots de 14 bits,
 Une RAM données 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 a 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’ a 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 a 5V,
 Jeux de 35 instructions
Schématisation des éléments constitutifs du PIC 16F877

Description externe
Le PIC16F877 est un circuit intégré de 40 broches où Certaines pattes ont plusieurs fonctions:
On dit que les fonctions sont multiplexée

Certaines pattes ont plusieurs fonctions: On dit que les fonctions sont multiplexée
L’Alimentation
L’alimentation du circuit est assurée par les pattes VDD et VSS. Elles permettent à
l’ensemble des composants électroniques du PIC de fonctionner. Pour cela on relie VSS (patte
12/31) à la masse (0 Volt) et VDD (patte 11/32) à la borne positive de l’alimentation qui doit
délivrer une tension continue comprise entre 3 et 6 Volts.
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 a Quartz, on peut
avoir des fréquences allant jusqu'a
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, on
utilisera le terme Fosc/4 pour
designer l'horloge système.

Note:
Le PIC 16F877A peut fonctionner en 4 modes d’oscillateur.
 LP : Low Power crystal : quartz à faible puissance.
 XT : Crystal/Resonator : quartz/résonateur en céramique.
 HS : High Speed crystal/resonator : quartz à haute
fréquence/résonateur en céramique HF.
 RC : Circuit RC (oscillateur externe).

Circuit Reset MCLR


La broche MCLR (Master Clear) a pour effet de provoquer la réinitialisation du
microprocesseur lorsqu’elle est connectée à 0. Lorsque le signal de “RESET” est activé, tous
les registres sont initialisé et le compteur programme se place à une adresse spécifique
appelée “Vecteur de RESET”.
Exemple de connexion de circuit RESET et oscillateur d'un PIC 16F877

Structure interne du microcontrôleur PIC 16F877


 Caractéristiques de la CPU
 CPU à architecture RISC (8 bits) avec un accumulateur W de 8 bits.
 Mémoire programme de 8 Kmots de 14 bits (Flash),
 Mémoire donnée de 368 Octets,
 EEPROM donnée de 256 Octets,
 14 sources interruptions
 Générateur d'horloge de type RC ou quartz (jusqu'à 20 MHz)
 05 ports d'entrée sortie
 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
 Caractéristiques des périphériques
 Timer0 : Timer/Compteur 8 bits avec un prédiviseur 8 bits
 Timer1 : Timer/Compteur 16 bits avec une prédivision de 1, 2, 4, ou 8 ; il peut
être incrémenté en mode veille (Sleep), via une horloge externe,
 Timer2 : Timer 8 bits avec deux diviseurs (pré et post diviseur)
 Deux modules « Capture, Compare et PWM » :
- Module capture 16 bits avec une résolution max. 12,5 ns,
- Module Compare 16 bits avec une résolution max. 200 ns,
- Module PWM avec une résolution max. 10 bits,
 Convertisseur Analogiques numériques multi-canal (8 voies) avec une conversion
sur 10 bits, Synchronous Serial Port (SSP) SSP, Port série synchrone en mode I2C
(mode maitre/escalve),
 Universel Synchronous Asynchronous Receiver Transmitter (USART) : Port série
universel, mode asynchrone (RS232) et mode synchrone
Exemple : l’architecture interne du PIC16F874/PIC16F877
Ports d’entrées/sortie
Le PIC 16F877 dispose de 5 ports :
 Port A : 6 pins I/O numérotées de RA0 à RA5.
 Port B : 8 pins I/O numérotées de RB0 à RB7.
 Port C : 8 pins I/O numérotées de RC0 à RC7.
 Port D : 8 pins I/O numérotées de RD0 à RD7.
 Port E : 3 pins I/O numérotées de RE0 à RE2.
À chaque port correspondent deux registres:
 Un registre direction pour programmer les lignes soit en entrée, soit en sortie TRISA,
TRISB, TRISC, TRISD et TRISE.
 Un registre de données pour lire ou modifier l’état des broches. PORTA, PORTB,
PORTC, PORTD et PORTE
Pour déterminer les modes des ports (I/O), il faut sélectionner leurs registres TRISX:
 Le positionnement d’un bit à « 1 » place le pin en entrée.
 Le positionnement de ce bit à « 0 » place le pin en sortie.
La plupart des broches des PORTs sont partagées avec des périphériques. En général si un
périphérique est utilisé, les broches correspondantes ne peuvent pas être utilisées comme
broches d’entrée/sortie.
Au reset, les lignes des ports A et E sont configurées en entrées analogiques, les autres lignes
sont configurées en entrées digitales. Le courant absorbé ou fourni peut atteindre 25 mA.
Port A
Les broches port A, excepté RA4, sont multiplexées, avec les entrées du convertisseur
analogique numérique (AN0 .. AN4) .
La broche RA4 est multiplexé avec l’entrée d’horloge externe du timer0 (RA4/T0CKI).
Port B
Le port B peut être programmé pour un tirage à 5V (pull up) de toutes ses lignes que l'on peut
mettre ou non en service en mode entrée uniquement. Elles sont automatiquement désactivées
quand le port est configuré en sortie.
En mode entrée, chaque broche du PORTB doit être maintenue à un niveau haut par
l'intermédiaire de résistances de 10 k pour ne pas déclencher d'interruptions imprévues.
Cette possibilité d'interruption sur un changement d'état associé à la fonction de tirage
configurable sur ces 4 broches, permet l'interfaçage facile avec un clavier. Cela rend possible
le réveil du PIC en mode SLEEP par un appui sur une touche du clavier.
Port C
Le port C est partagé avec liaisons, les timers 1 et 2 et les modules CCP.
Port D et E
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 de données
et le PORTE les signaux de contrôle (RD\, WR\ et CS\).
Le PORTE peut être aussi, configuré en mode analogique pour former avec le PORTA les 8
entrées du convertisseur analogique numérique. Par défaut, le PORTE est configuré comme
port analogique, et donc, comme pour le PORTA.
Chien de garde
Un chien de garde est un circuit électronique ou un logiciel utilisé en électronique numérique
pour s'assurer qu'un automate ou un ordinateur ne reste pas bloqué à une étape particulière du
traitement qu'il effectue. C'est une protection destinée généralement à redémarrer le système,
si une action définie n'est pas exécutée dans un délai octroyé. Dans le PIC, il s’agit un
compteur 8 bits incrémenté en permanence (même si le μC est en mode sleep) par une horloge
RC intégrée indépendante de l'horloge système. Lorsqu’il déborde, deux situations sont
possibles :
 Si le μC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci
permet d’éviter de rester planté en cas de blocage du microcontrôleur par un processus
indésirable non contrôlé
 Si le μC est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'exécution du
programme continue normalement là où elle s'est arrêtée avant de rentrer en mode
SLEEP. Cette situation est souvent exploitée pour réaliser des temporisations
Organisation de la mémoire RAM
L’espace mémoire RAM adressable est de 512 positions de 1 octet chacune :
 96 positions sont réservées au SFR (Special Function Registers) qui sont les registres de
configuration du PIC.
 Les 416 positions restantes constituent les registres GPR (General Propose Registers) ou
RAM utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16 octets chacun ne sont pas
implantes physiquement d’ou une capacité de RAM utilisateur de 368 GPR.
Pour accéder a la RAM, on dispose de deux modes d’adressage:
Accès à la RAM par adressage direct
Avec ce mode d’adressage, on précise dans l’instruction la valeur de l’adresse a laquelle on
veut accéder. Par exemple, pour copier le contenu de l'accumulateur W dans la case mémoire
d'adresse 50, on utilise l'instruction MOVWF 50. Cette instruction sera codée sur 14 bits, la
partie adresse est codée sur 7 bits ce qui va poser quelques petits problèmes. En effet, 7 bits
permettent d’adresser seulement 128 positions. Pour pouvoir adresser les 512 positions
accessibles, il faut 9 bits d’adresse. Pour avoir ces 9 bits, le PIC complète les 7 bits venant de
l’instruction par deux bits situes dans le registre de configuration STATUS. Ces bits sont
appelés RP0 et RP1 et doivent être positionnés correctement avant toute instruction qui
accède a la RAM par l’adressage direct.

𝐑𝐏𝟏 𝐑𝐏𝟎 . . . . . . .
𝟕𝐛𝐢𝐭𝐬
𝟗 𝐛𝐢𝐭𝐬

La RAM apparait alors organisée en 4 banks de 128 octets chacun. L'adresse instruction
permet d'adresser a l'intérieur d'un bank alors que les bits RP0 et RP1 du registre STATUS
permettent de choisir une bank. La Figure ci-dessous montre l’organisation de la RAM avec
les zones allouée au SFR et aux GPR. Les zones hachurées ne sont pas implantées
physiquement. Si on essaye d’y accéder, on est aiguille automatiquement vers la zone
[70h,7Fh] appelée zone commune.
Même si on précise une adresse supérieure a 127 (+ de 7 bits) dans une instruction, elle est
tronquée a 7 bits puis complétée par les bits RP0 et RP1 pour former une adresse 9 bis. Par
exemple, pour copier l’accumulateur W dans la case mémoire d’adresse 1EFh, il faut d’abord
placer les bits RP0 et RP1 à 1 (bank 3), ensuite on utilise soit l’instruction MOVWF 6Fh soit
l’instruction
MOVWF 1EFh, qui donne le même résultat. En effet, que l’on écrive 6Fh = 0110 1111 ou
1EFh = 0001 1110 1111, le PIC ne prend que 7 bits soit : 1101111 = 6Fh et complète avec les
bits RP1,RP0 pour obtenir 11 1101111 = 1EFh
Organisation de la RAM du 16F876/877

Accès à la RAM par l’adressage indirect


Pour accéder a une position de la RAM en utilisant l’adressage indirect, on passe toujours par
une position fictive appelée INDF (Indirect File).
Exemple : l’instruction CLRF INDF signifie : mettre à zéro la case mémoire d’adresse INDF.
Mais quelle est l’adresse de cette position appelée INDF ? La réponse est :
INDF est la case mémoire pointée par le pointeur IRP/FSR.
IRP est un bit qui se trouve dans STATUS et FSR est un registre accessible dans tous les
bancs. On peut se demander pourquoi on ajoute le bit IRP. En effet, le registre de pointage
FSR est un registre 8 bits, il peut donc adresser au maximum 256 positions mémoire (de 00h a
FFh), c’est seulement la moitie de la RAM dont on dispose. Il nous manque un bit pour avoir
les 9 bits nécessaires. On utilise le bit IRP qui se trouve dans le registre STATUS.
Exemple : Si on place 74h dans le registre FSR et on positionne le bit IRP à 1, alors,
l’instruction CLRF INDF signifie : remettre à zéro la case mémoire d’adresse 174h.

Donc en résumé, chaque fois que le PIC rencontre le mot INDF dans un programme, il sait
qu’il s’agit de la case mémoire dont l’adresse (9 bits) se trouve dans le registre FSR complété
par le bit IRP du registre STATUS

Quelques registres de configuration et leurs bits

Ces détails concernent les états des registres SFR au démarrage


Les instructions du 16F876/877
 Tous les PICs Mid-Range ont un jeu de 35 instructions,
 Chaque instruction est codée sur un mot de 14 bits qui contient le code opération (OC)
ainsi que l'opérande,
 Toutes les instructions sont exécutées en un cycle d'horloge, a part les instructions de
saut qui sont exécutées en 2 cycles d’horloge. Sachant que l’horloge système est égale
a fosc/4, si on utilise un quartz de 4MHz, on obtient une horloge fosc/4 = 1000000
cycles/seconde, cela nous donne une puissance de l’ordre de 1MIPS (1 Million d’
Instructions Par Seconde). Avec un quartz de 20MHz, on obtient une vitesse de
traitement de 5 MIPS.
Les instructions « orientées Registre»
Ce sont des instructions qui manipulent un octet se trouvant dans la RAM. Ca peut être un
registre de configuration SFR ou une case mémoire quelconque (Registre GPR)
Les instructions « orientées bits »
Ce sont des instructions destinées a manipuler directement un bit d’un registre que se soit un
registre de configuration SFR ou une case mémoire quelconque (registre GPR). Tous les bits
de la RAM peuvent être manipule individuellement.
Les instructions opérant sur une constante
Ce sont les instructions entre l’accumulateur W est une constante K
Les instructions de saut et appel de procédures
Ce sont les instructions qui permettent de sauter à une autre position dans le programme et de
continuer l’exécution du programme a partir de cette position.
Remarque :
 Les instructions qui agissent sur un registre ou un bit d’un registre contiennent toutes
la lettre F dans le nom de l’instruction. Ceci vient du fait que chez Microchip, la RAM
est appelée registre File (Fichier des registres).
 Les instructions qui agissent sur une constante contiennent toutes la lettre L, parce que
chez Microchip, on appelle ≪ Literal ≫ ce genre d’adressage, chez d’autres
constructeurs, on parle d’adressage immédiat

Le jeu d'instructions
{W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f
Les paramètres des instructions agissant sur registre
Pour les instructions qui agissent sur registre, le paramètre F représente l’adresse du registre
considéré. Le paramètre d (destination) joue un rôle important, si on prend d = 0 ou w, le
résultat de l’opération sera placé dans l’accumulateur W, si on prend d = 1 ou f, le résultat de
l’opération sera placé dans le registre précisé par F.
Exemple:
ADDWF 70h,1 ou ADDWF 70h,f
Signifie : additionner le contenu de W avec le contenu de la case mémoire d’adresse 70h et
placer le résultat dans la case mémoire 70h
Exemple:
XORWF 35h,0 ou XORWF 35h,w
Signifie : faire un ou exclusif entre W et le contenu de la case mémoire d’adresse 35h et
placer le résultat dans l’accumulateur W
Les paramètres des instructions agissant sur bit
Pour les instructions agissant sur un bit, le paramètre F indique le registre qui contient le bit à
modifier et le paramètre b indique le numéro du bit à modifier; on compte à partir de zéro en
commençant à droite
7 6 5 4 3 2 1 0

Exemple:
BSF STATUS,2
Signifie : placer à 1 le bit 2 (3ème bit à partir de la droite) du registre STATUS .
Exemple:
BCF 45h,6
Signifie : placer à 0 le bit 6 (7ème bit à partir de la droite) du registre de la case mémoire
d’adresse 45h
Les instructions MOVWF et MOVF (Ce sont les instructions les plus utilisées)
MOVWF permet de copier l’accumulateur W dans un registre (SFR ou GPR):
Exemple:
MOVWF STATUS
Signifie : Copier le contenu de W dans le registre STATUS

Exemple:

MOVWF 55h
Signifie : Copier le contenu de W dans la case mémoire d’adresse 55h
MOVF signifie : permet de copier le contenu d’un registre (SFR ou GPR) dans
l’accumulateur W, le paramètre d doit être = 0
Exemple:
MOVF STATUS,0
Signifie : copier le contenu du registre STATUS dans l’accumulateur W
Exemple:
MOVF 35h,0
Signifie :copier le contenu de la case mémoire d’adresse 35h dans l’accumulateur W
Avec le paramètre d=1, l’instruction MOVF semble inutile car elle permet de copier un
registre sur lui-même ce qui a priori ne sert a rien.
MOVF STATUS,1
Copier le contenu du registre STATUS dans lui même
En réalité cette instruction peut s’avérer utile car, comme elle positionne l’indicateur Z, elle
permet de tester si le contenu d’un registre est égal à zéro
Les instructions btfss et btfsc
Ces instructions permettent de tester un bit et de sauter ou non une ligne de programme en
fonction de la valeur du bit.
btfsc F,b : bit test skip if clear
Signifie : teste le bit b du registre F et saute l’instruction suivante si le bit teste est nul
btfss F,b : bit test skip if set
Signifie : teste le bit b du registre F et saute l’instruction suivante si le bit teste est egal a 1

Les instructions incfsz et decfsz


Ces instructions permette d’incrémenter ou de décrémenter un registre et de sauter si le
résultat est nul.
Exemples:
Incfsz F,1 : increment skip if Z : incrémente le registre F et sauter une ligne si le résultat =0.
Le paramètre 1 indique que le résultat de l’incrémentation doit aller dans F.
deccfsz F,1 : decrement skip if Z : décrémente le registre F et sauter une ligne si le
résultat=0. Le paramètre 1 indique que le résultat de la décrémentation doit aller dans F.
L’instruction goto
Permet de transférer l’exécution à une autre position du programme repérée par une étiquette.
L’instruction call
L’instruction call permet d’appeler une fonction. Une fonction est un sous programme écrit à
la suite du programme principal. Sa première ligne doit comporter une étiquette et elle doit se
terminer par return.

La différence entre call et goto est que,


quand le processeur rencontre
l’instruction call, il sauvegarde
l’adresse de la ligne suivante avant
d’aller exécuter les instructions
constituant la fonction. Comme ca,
quand il rencontre l’instruction return,
il sait ou il doit retourner pour
continuer l’exécution du programme
principal. Alors que le goto est sans
retour

Les indicateur d’état (drapeaux)


Les bits Z, DC et C situes dans le registre STATUS sont des indicateurs qui permettent de
savoir comment une instruction s’est terminée. Toutes les instructions n’agissent pas sur les
indicateurs, voir liste des instructions ci-dessous.
Z : passe à 1 quand le résultat d’une instruction est nul
C : passe à 1 quand l’opération a généré une retenue
DC : passe à 1 quand le 4eme bits génère une retenue
Ces bits peuvent être utilise très astucieusement par les instructions btfsc et btfss qui
permettent de tester un bit et de réaliser un saut conditionnel. Nous aurons l’occasion d’en
reparler.

STATUS
Les indicateurs, la soustraction et la comparaison
Les instructions SUBWF et SUBLW positionne les drapeaux Z et C. Remarquons seulement
que la retenue B (Borrow) de la soustraction correspond à C,
F - W = 0 ==> Z=1 , C=1 , B=0 => pas de retenue de soustraction
F - W > 0 ==> Z=0 , C=1 , B=0 => pas de retenue de soustraction
F - W < 0 ==> Z=0 , C=0 , B=1 => il ya retenue de soustraction
Pour réaliser une comparaison entre F et W, on fait F – W et on observe Z et C
 Z=1 ==> égalité
 C=1 ==> F sup ou égal à W
 C=0 ==> F inferieur a W

Vous aimerez peut-être aussi