0% ont trouvé ce document utile (0 vote)
57 vues56 pages

Module 18 Les Microcontrôleurs

Transféré par

Yurjrjr Jkfkfkf
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)
57 vues56 pages

Module 18 Les Microcontrôleurs

Transféré par

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

Technicien Spécialisé

Génie Électrique
Électronique,
Automatisme et
Robotique

Manuel de cours
Module 18
Les microcontrôleurs

Edition 2021

Direction de la Recherche et Ingénierie de la Formation


Génie Électrique / Manuel de Cours / GEEAR-18

Avant-propos
Les manuels de cours, de travaux pratiques et le guide e-learning sont téléchargeables à partir de la
plateforme e-learning moyennant les codes QR suivants :

Manuel de cours Manuel des travaux pratiques

Guide e-learning

2
Génie Électrique / Manuel de Cours / GEEAR-18

SOMMAIRE

AVANT-PROPOS ................................................................................................................ 2
SOMMAIRE ....................................................................................................................... 3
COMPETENCES-CIBLES ET OBJECTIFS OPERATIONNELS ...................................................... 5
CHAPITRE I........................................................................................................................ 7
1. ARCHITECTURE D’UN SYSTÈME À BASE DE MICROPROCESSEUR .................................. 9
2. ARCHITECTURE D’UN CPU......................................................................................... 11
2.1 Les registres : ................................................................................................................................. 11
2.2 L’unité arithmétique et logique (UAL) : .......................................................................................... 12
2.3 Unité de contrôle et commande :................................................................................................... 12

3. FONCTIONNEMENT D’UN SYSTÈME À BASE DE MICROPROCESSEUR : ........................ 14


3.1 Les interruptions : .......................................................................................................................... 14
3.2 L’écriture en mémoire (Write) :...................................................................................................... 15
3.3 La lecture de la mémoire (READ) : .................................................................................................. 15
3.4 Wait Stat( temps d’attente pour la synchronisation) :.................................................................... 16
3.5 Communication avec les entrées/sorties : ..................................................................................... 17
3.6 Accès direct à la mémoire (DMA) : ................................................................................................. 18

1. INTRODUCTION ........................................................................................................ 20
2. ARCHITECTURE D’UN MICROCONTRÔLEUR PIC 16F877 : .......................................... 22
3. ORGANISATION DE LA MÉMOIRE DU MICROCONTRÔLEUR PIC16F877 : .................... 24
3.1 Mémoire programme : ................................................................................................................... 24
3.2 Mémoire de données : ................................................................................................................... 25
3.3 Mémoire EEPROM et FLASH: .......................................................................................................... 27

4. LES PÉRIPHÉRIQUES DU MICROCONTRÔLEUR PIC16F877 : ........................................ 28


4.1 Les ports d’entrée/sortie du microcontrôleur PIC16F877 : ............................................................. 28
4.2 Le Timer: ........................................................................................................................................ 33
4.3 Les convertisseurs analogiques/numériques:................................................................................. 34
4.4 Le compteur : ................................................................................................................................. 35
4.5 Les interruptions du microcontrôleur PIC16F877 : ......................................................................... 35

5. LES DIFFÉRENTS MODES D’ADRESSAGE ET INSTRUCTION : ........................................ 39


5.1 Mode d’adressage inhérent ou implicite : ...................................................................................... 39
5.2 Mode d’adressage immédiat : ........................................................................................................ 39
5.3 Mode d’adressage direct : .............................................................................................................. 39
5.4 Mode d’adressage indexé ou indirect : .......................................................................................... 39

3
Génie Électrique / Manuel de Cours / GEEAR-18

5.5 Mode d’adressage relatif : ............................................................................................................. 39


5.6 Mode d’adressage étendu : ............................................................................................................ 39

CHAPITRE III.................................................................................................................... 40
1. INTRODUCTION SUR LA PROGRAMMATION EN C D’UN MICROCONTRÔLEUR : .......... 41
2. LES VARIABLES EN C :............................................................................................... 43
3. LES OPÉRATEURS EN C : ............................................................................................ 44
3.1 Les opérateurs arithmétiques : ...................................................................................................... 44
3.2 Les opérateurs logiques : ............................................................................................................... 44
3.3 Les opérateurs de tests conditionnels : .......................................................................................... 45
3.4 Les opérateurs de comparaison : ................................................................................................... 45

4. LES STRUCTURES EN C : ............................................................................................ 46


4.1 Les structures répétitives : ............................................................................................................. 46
4.2 Les structures conditionnelles : ...................................................................................................... 47
4.3 La structure Switch … case : ........................................................................................................... 47

5. EXEMPLES DE PROGRAMME EN C POUR UN MICROCONTRÔLEUR PIC16F877 : .......... 49


5.1 Programmation des entrées/sorties : ............................................................................................. 49
5.2 Commande d’un afficheur 7 segments : ......................................................................................... 50
5.3 Commande de plusieurs afficheurs 7 segments :............................................................................ 51
5.4 Affichage sur un écran LCD par un microcontrôleur : ..................................................................... 52
5.5 Implémentation d’un Grafcet dans un microcontrôleur PIC16F877 : .............................................. 54

4
Génie Électrique / Manuel de Cours / GEEAR-18

COMPETENCES-CIBLES ET OBJECTIFS OPERATIONNELS


Module 18 : Les microcontrôleurs

Code : GEEAR 18 Durée : 45 heures

ENONCE DE LA COMPETENCE

Programmer un microcontrôleur pour la commande d’un système industriel

CONTEXTE DE REALISATION

 Individuellement

 À partir de :
- Directives ;
- Manuels et Fiches techniques ;
- Schémas ;
- Normes et standards
- Procédures de sécurité

 À l’aide de:
- Ordinateur PC,
- Kit de développement à base de microcontrôleur
- Logiciel de programmation de microcontrôleur
- Logiciel de simulation
- Matériaux d’assemblage ;
- Appareils de mesure (multimètre, oscilloscope …)
-
CRITÈRES GÉNÉRAUX DE PERFORMANCE

 Pertinence de la terminologie utilisée.


 Utilisation appropriée de l’outillage et de l’équipement
 Montage soigné et propre.
 Utilisation correcte des instruments de mesures.
 Utilisation appropriée d’un logiciel de simulation
 Respect des tolérances
 Respect des règles de santé et de sécurité au travail.

5
Génie Électrique / Manuel de Cours / GEEAR-18

OBJECTIF OPÉRATIONNEL

ÉLEMENTS DE LA COMPETENCE CRITÈRES PARTICULIERS DE PERFORMANCE


 Identification correcte des différents éléments
A. Interpréter le fonctionnement d’un d’une application à base de microprocesseur
microprocesseur  Identification correcte des adresses des
différents interfaces et zones mémoires
 Interprétation juste de l’information
technique sur le fonctionnement d’un
microprocesseur
 Interprétation correcte des modes de
communication entre un microprocesseur et
la mémoire
 Identification correcte des éléments un
B. Interpréter le fonctionnement d’un système à base de microcontrôleur
microcontrôleur  Identification correcte de l’organisation de la
mémoire d’un microcontrôleur
 Interprétation juste de l’information
technique sur le fonctionnement d’un
microcontrôleur
 Interprétation correcte des différents modes
d’adressage d’un microcontrôleur
 Interprétation correcte du schéma de
C. Réaliser une application industrielle sur une montage
plateforme à base d’un microcontrôleur  Connexion correcte des composants de
commande et des actionneurs
 Respect de la technique de montage
 Description correcte des structures du langage
de programmation
 Programmation correcte du microcontrôleur
 Compilation correcte d’un programme en
langage C
 Conformité des tests de fonctionnement au
programme établi
 Respect des règles de santé et de sécurité
 Rangement et nettoyage approprié de l’aire
de travail.
 Rédaction correcte du rapport d’installation
ou de la fiche d’intervention.

6
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
INTRODUCTION SUR LES SYSTEMES A BASE DE MICROPROCESSEUR

7
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
L'apparition des microprocesseurs date du début des années 1970. A cette époque, deux
événements favorables sont apparus :
- le concept de "LSI (Large Scale Integration)" permettant d'intégrer plusieurs milliers de
portes sur un même substrat.
- l'arrivée à maturité de la technologie MOS caractérisée par sa faible consommation.

La conjugaison de ces événements a permis de regrouper une unité centrale d'ordinateur


dans un seul circuit intégré appelé "microprocesseur". Depuis, une multitude de composants
de ce type sont apparus au sein de familles provenant essentiellement de grands
constructeurs américains : Intel, Motorola, Advanced Micro Devices (AMD), Texas
Instruments,... et japonais : NEC, Mitsubishi,...
Grâce aux progrès de l’intégration, l'augmentation des performances a porté sur :
- la vitesse de fonctionnement.
- la largeur des mots traités (8, 16, 32, 64 bits).
- le nombre et la complexité des opérations réalisables.

L’intégration a également permis de rassembler le microprocesseur et les éléments associés


(mémoire, organes d’entrée-sortie,...) au sein d’un seul circuit appelé "microcontrôleur". Ce
type de composant s’est répandu dans un très grand nombre de domaines
(télécommunications, télévision, électroménager, hifi...).

L'objectif de ce cours est double : présenter les notions de base nécessaires à la


compréhension des systèmes utilisant des microprocesseurs et réaliser des travaux
pratiques permettant de programmer en langage machine (assembleur) une application
d’acquisition de données.

8
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
1. Architecture d’un système à base de microprocesseur
Un système à base de microprocesseur est formé des trois éléments :
- Une unité CPU (central processing unit )
- Une mémoire (ROM et RAM)
- Des ports d’entrées/sorties.
Les trois modules sont interconnectés comme le montre la figure suivante autour de
trois bus : bus de données, bus d’adresses et bus de contrôles et commandes
Bus : Il s’agit de plusieurs pistes électroniques qui sont reliées au microprocesseur.
Ces bus assurent la communication interne et externe du microprocesseur.

périphérie
Bus de données
Écran
Clavier
Impri
CPU RAM ROM Interface Souris
D’E/S ETC
.
.
Bus d’adresses .
Bus de contrôles

- Le bus de données : c’est un ensemble de fils bidirectionnels qui va permettre le


transfert de données entre les différents éléments du système. C'est par ce bus que sont
transmises les données qui doivent être traitées par le microprocesseur. A l'inverse, c'est
également par ce bus que transitent les résultats en sortie du microprocesseur. Autrement
dit, toutes les données entrantes et sortantes du microprocesseur sont véhiculées par le bus
de données qui fixe la longueur du mot échangé avec la mémoire.
- Le bus d’adresses : il permet d’adresser un élément par le microprocesseur .il est
unidirectionnel .il détermine la capacité maximale d'adressage du système, c'est à dire le
nombre maximum de mots de la mémoire associée (ex : 16 bits "adressent" 64 Kmots).
- Le bus de commandes et de contrôle : c’est un bus qui permet de véhiculer les
signaux de contrôles et de commandes tels que l’horloge les signaux Rd/Wr etc … Ce bus
sert à coordonner tous les échanges d'informations décrits précédemment. Il véhicule des
données qui valident la mémoire et les ports d'entrées / sorties. Il introduit des délais
d'attente lorsque des informations sont envoyées à un périphérique qui présente une
vitesse de traitement réduite. Le bus de commandes évite les conflits de bus lorsque deux
éléments cherchent à communiquer en même temps.

9
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
Remarque :
Dans certains cas, le bus de données et le bus d’adresses sont multiplexés sur un seul
bus. Une logique externe doit alors effectuer le démultiplexage.

-La mémoire sert au rangement de deux types d’informations :


-Des données : les informations traitée par le microprocesseur.
-Des instructions : ensemble d’informations codées qui gère l’activité du
microprocesseur.

Remarque :
La mémoire morte (ROM : Read Only Memory) range en général le programme
d’initialisation du système (exemple dans le PC elle range le BIOS : Basic Input Ouput
systeme ) .
La mémoire vive (RAM : Random Axes Memory ) sert au rangement des programmes
utilisateurs c’est une mémoire volatile .
- Les interfaces d’entrées sorties vont permettre au microprocesseur de communiquer
avec le monde extérieur , Nous trouvons des ports utilisés exclusivement pour l'entrée, et
d'autres ports exclusivement pour la sortie. Il existe aussi des ports bidirectionnels. Donc le
microprocesseur peut lire des données à partir d’un interface d’entrée ( exemple souris ,
clavier disque dur , etc … ) de même il peut restituer le résultat de son traitement au monde
extérieur en adressent des interfaces de sortie (tel que les imprimantes le clavier etc …) donc
les interfaces d’entrées / sorties vont soulager le microprocesseur pour la communication
avec le monde extérieur .

Le microprocesseur doit Donc contrôler les fonctions effectuées par les autres
modules, il doit chercher ainsi que décoder des instructions ranger en mémoire, et il doit
adresser des interfaces d’entrées/sorties pour lire des données du monde extérieur, et
restituer le résultat de son traitement.

10
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
2. Architecture d’un CPU
Une CPU est formée par les trois éléments fonctionnels interconnectés suivants :
► Registres.
► UAL : Unité arithmétique et logique.
► Circuit de contrôle.

2.1 Les registres


2.1.1 L’accumulateur
Il s'agit d’un registre d'usage général recevant des opérandes, des résultats
intermédiaires ou des résultats provenant de l’unité arithmétique et logique. Ils évitent des
appels fréquents à la mémoire, réduisant ainsi les temps de calcul. Donc la plupart des
opérations arithmétiques et logiques se font dans l’accumulateur.

2.1.2 Le compteur de programme :


Le compteur de programme contient l’adresse (décalage ou offset) de l'instruction
suivante en mémoire qui doit être exécutée. Autrement dit, il doit indiquer au processeur la
prochaine instruction à exécuter. Le registre compteur de programme est constamment
modifié après l'exécution de chaque instruction afin qu'il pointe sur l'instruction suivante.
Les microprocesseurs de la famille x86 dépendent entièrement du registre compteur de
programme pour connaître l'instruction suivante.

2.1.3 Registre d’instruction et décodeur d’instruction :


[Link]. Le registre d’instruction :
Chaque opération que le microprocesseur va effectuer est codée (c'est-à-dire pour chaque
instruction on assigne un code qui ne peut pas être modifié ni changé par un autre code)
appelé « instruction code » ou « operation code » , pour exécuter une instruction le
microprocesseur transmet l’adresse se trouvant dans le registre compteur de programme à
la mémoire , la mémoire retourne au microprocesseur l’octet adresse par ce dernier ( le
code de l’instruction) celui-ci sera stocker dans un registre appelé registre d’instructions
(RI) , donc Le registre d'instructions contient la prochaine instruction à être exécutée par le
processeur. Cette instruction sera acheminée (par un bus de données) au décodeur
d'instructions qui sera chargé de l'interpréter.

[Link]. Le décodeur d’instruction :


C'est lui qui va interpréter l'instruction contenue dans le registre
d'instruction (RI). C'est-à-dire qu’elle est l'opération à effectuer (addition, branchement
etc...) et comment aller chercher les opérandes requises pour cette opération (par exemple,
les nombres à additionner). Le décodeur d'instructions communique alors avec l'unité de
commandes et de contrôles qui pourra déclencher les événements en conséquence. Par

11
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
exemple, si le décodeur d'un 8086 reçoit l'octet 10000001 (le "Add mem/reg data"), il sait
que le processeur doit aller chercher 3 autres octets en mémoire vive pour compléter
l'instruction.

2.1.4 Registre d’adresses :


Ces registres servent à gérer l'adressage de la mémoire. En effet le processeur peut
utiliser un registre ou une paire de registres pour accéder à un emplacement mémoire, et
puisque les registres peuvent être incrémenté ou décrémenter donc on peut accéder
facilement à des données qui se trouvent en mémoire d’une manière adjacente (tel que les
tableaux)

2.1.5 Registre d’état (FLAGS):


Le registre d'état FLAG sert à contenir l'état de certaines opérations effectuées par le
processeur. Par exemple, quand le résultat d'une opération est trop grand pour être contenu
dans le registre cible (celui qui doit contenir le résultat de l’opération), un bit spécifique du
registre d'état (le bit OF) est mis à 1 pour indiquer le débordement.

2.2 L’unité arithmétique et logique (UAL) :


Comme son nom l'indique, cette unité peut exécuter deux types d'opérations.
- Opérations arithmétiques
Elles incluent l'addition et la soustraction qui sont des opérations de base (une soustraction
est une addition avec le complément à deux), la multiplication et la division. Les données
traitées sont considérées dans des représentations entières.
- Opérations logiques
Ces opérations sont effectuées bit à bit sur les bits de même poids de deux mots, tel que ET,
OU, NOT OU EXCLUSIF, de même les opérations de rotation et de décalage (arithmétique et
logique)
Elle reçoit ses opérandes (les octets qu'elle manipule) du bus de données. Celles-ci
peuvent provenir de registres ou de la mémoire. A la fin d'une opération, l'UAL peut aller
modifier certains bits du registre d'état (FLAG). Par exemple, dans le cas du débordement
d'une addition (que le résultat de l'addition est trop grand pour entrer dans un registre),
l'UAL va mettre le bit de débordement du FLAG à 1.

2.3 Unité de contrôle et commande :


Synchronisée par le signal de l'horloge, c'est elle qui déclenche les événements dans
le processeur (on peut remarquer à ce sujet qu'elle est connectée à toutes les autres
composantes du processeur). Par exemple, quand une information passe dans un bus, cette
information est destinée à un seul endroit (par exemple, un registre). C'est donc l'unité de
commande et de contrôle qui va "déverrouiller" l'entrée de cette destination pour que
l'information qui circule sur le bus puisse y entrer (et ne pas entrer ailleurs en même temps).

12
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
Il s'agit donc essentiellement d'un automate exécutant les différentes séquences
propres à chaque instruction. Cet automate peut être réalisé de plusieurs façons (câbler ou
micro-programmer et dans les deux cas le jeu d’instructions est fixe). La plupart des unités
de traitement sont micro-programmées et donc à jeux d'instructions fixes.

13
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
3. Fonctionnement d’un système à base de microprocesseur :

3.1 Les interruptions :


Les interruptions permettent au matériel (périphérique) de communiquer avec le
processeur. Dans certains cas, on désire que le processeur réagisse rapidement à un
évènement extérieur : arrivée d’un paquet de données sur une connexion réseau, frappe
d’un caractère au clavier, modification de l’heure. Les interruptions sont surtout utilisées
pour la gestion des périphériques de l’ordinateur, en effet les systèmes à base de
microprocesseurs peuvent comporter plusieurs éléments matériels tels que l’écran, les
lecteurs de CD, lecteurs de DVD, les ADC (Analog to digital converter) et DAC (digital to
analog converter ) etc…mais la majorité de ces périphériques n’ont besoin du
microprocesseur qu’à certains moments . Si un périphérique nécessite une intervention, il
génère lui-même une demande d'interruption.

Une interruption est signalée au processeur par un signal électrique sur une borne
spéciale. Lors de la réception de ce signal, le processeur “traite” l’interruption dès la fin de
l’instruction qu’il était en train d’exécuter. Le traitement de l’interruption consiste soit :

– à l’ignorer et passer normalement à l’instruction suivante : c’est possible uniquement


pour certaines interruptions, nommées interruptions masquables. Il est en effet
parfois nécessaire de pouvoir ignorer les interruptions pendant un certain temps,
pour effectuer des traitements très urgents par exemple. Lorsque le traitement est
terminé, le processeur démasque les interruptions et les prend alors en compte.

– à exécuter un traitant d’interruption (interrupt handler). Un traitant d’interruption


est un programme qui est appelé automatiquement lorsqu’une interruption survient.
L’adresse de début du traitant est donnée par la table des vecteurs d’interruptions
(voir chapitre interruption).

Remarque :
Parfois le microprocesseur est sollicité par plusieurs interruptions en même temps,
pour répondre à ces appels un ordre de priorité est souvent pris en compte pour leurs
traitements.
Les interruptions augmentent considérablement l’efficacité du processeur.
Les interruptions sont de deux types :
 Interruption matérielle.
 Interruption logicielle.

14
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
3.2 L’écriture en mémoire (Write) :
Pour écrire une donnée dans la mémoire le microprocesseur doit placer l’adresse de
la donnée sur le bus d’adresses (son emplacement dans la mémoire) puis il place la donnée
sur le bus de données et enfin génère le signal WRITE (ordre d’écriture dans la mémoire).

Mémoire

1000H

Adresse

CPU 55 1000H
WRITE = 0

55

Données

3.3 La lecture de la mémoire (READ) :


Pour lire une donnée de la mémoire le microprocesseur doit connaître son
emplacement, en effet il dépose son adresse sur le bus d’adresses puis génère le signal
READ (il demande une opération de lecture de la mémoire) alors la donnée sera acheminée
vers le microprocesseur à travers le bus de données. La donnée sera stockée dans un
registre dans le microprocesseur.

15
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
Mémoire

1000H

Adresse

CPU 55 1000H
READ = 0

55

Données

Remarque :
Si la donnée est un code opératoire d’une instruction alors elle sera logée dans le
registre d’instructions sinon elle sera logée dans un registre de données (en général
l’accumulateur).

3.4 Wait Stat (temps d’attente pour la synchronisation) :

Le Wait Stat n’est qu’un temps d’attente qu’il faut donner à certains périphériques
pour terminer leurs opérations (Notamment la mémoire), en effet en général dans la plupart
des systèmes à base de microprocesseur on trouve toujours des circuits intermédiaires entre
la CPU et la mémoire comme le montre la figure suivante :

16
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
5 ns a travers le décodeur

Mémoire
D

Adresses C

O
CPU
D
B

U
Données Données
F

5 ns a travers le Buffeur

Ces circuits entraînent toujours des temps de retard supplémentaires ce qui oblige le
microprocesseur à utiliser des Wait Stat (temps de retard) pour synchroniser les transferts
entre la mémoire et la CPU .la figure précédente montre que le microprocesseur perd
environ 10 ns pour avoir l’information à cause du décodage et la bufférisation du bus.

Remarque :
Parfois le microprocesseur utilise plus qu’un seul Wait Stat pour synchroniser avec
ces périphériques (tout dépend du temps que le périphérique demande pour achever son
fonctionnement)

3.5 Communication avec les entrées/sorties :


Il peut s’agir d’un flux d’informations de l’extérieur vers l’ordinateur (acquisition via le
clavier, une connexion réseau, un disque dur, etc...), ou d’un flux de l’ordinateur vers
l’extérieur (écran, réseau, disque, etc…).
Les données échangées entre un périphérique et le processeur transitent par
l’interface (ou contrôleur) associé à ce périphérique .L’interface possède de la mémoire
tampon pour stocker les données échangées (suivant le type d’interface, cette mémoire
tampon fait de 1 seul octet à quelques méga-octets).L’interface stocke aussi des
informations pour gérer la communication avec le périphérique :

17
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre I
– des informations de commande, pour définir le mode de fonctionnement de l’interface:
sens de transfert (entrée ou sortie), mode de transfert des données (par scrutation ou
interruption), etc. Ces informations de commandes sont communiquées à l’interface lors de
la phase d’initialisation de celle-ci, avant le début du transfert.
– des informations d’état, qui mémorisent la manière dont le transfert c’est effectué (erreur
de transmission, réception d’informations, etc). Ces informations sont destinées au
processeur.
Lors de l’exécution des instructions d’entrées/sorties, le processeur met à 1 sa borne
IO/M et présente l’adresse E/S sur le bus d’adresse. Le signal IO/M indique aux circuits de
décodage d’adresses qu’il ne s’agit pas d’une adresse en mémoire principale, mais de
l’adresse d’une interface d’entrées/sorties.
Remarque :
La communication entre le microprocesseur et les interfaces d’entrées/sorties peut
être série (sur un seul fil bit par bit) ou parallèle (sur plusieurs fils).

3.6 Accès direct à la mémoire (DMA) :


Lorsqu'un transfert en mémoire est nécessaire de la mémoire RAM à un port d'E/S, la
CPU lit le premier octet en mémoire et le charge dans l'un des registres du microprocesseur.
La CPU écrit ensuite l'octet rangé précédemment sur le port d'E/S approprié.
Il en résulte que le microprocesseur effectue des opérations de lecture et d'écriture
répétées. Ainsi un certain temps est perdu entre le traitement de chaque octet. Pour
remédier à ce problème, une procédure est mise au point pour l'accès direct à la mémoire
(Direct Memory Acess), qui permet de transférer des données de la mémoire RAM au port
d'E/S sans passer par le microprocesseur. Pour cela, un contrôleur DMA, qui reprend le rôle
de la CPU, c'est à dire qu'il gère les transferts de la RAM aux ports d'E/S.

18
Génie Électrique / Manuel de Cours / GEEAR-18

CHAPITRE II
LE MICROCONTROLEUR PIC16F877

19
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
1. Introduction
Un microcontrôleur est un système informatique complet intégré sur une seule
puce. C'est plus qu'un simple microprocesseur : il contient également une mémoire morte
(ROM), une mémoire en lecture-écriture (RAM), des ports d'entrée/sortie et certains
périphériques, tels que des compteurs/minuteries, des convertisseurs
analogique/numérique et des ports de communication série. , ils constituent un élément
essentiel de plus grands systèmes, tels que les automobiles, les robots et les systèmes
industriels. Désormais, même des produits très simples, comme une carte d'anniversaire
musicale ou une étiquette de prix électronique, peuvent inclure un MCU. Ils sont un facteur
important dans la numérisation des systèmes analogiques.

L'ordinateur ou le contrôleur numérique comporte trois éléments principaux : des


dispositifs d'entrée et de sortie, qui communiquent avec le monde extérieur ; un processeur,
pour effectuer des calculs et gérer des opérations de données ; et la mémoire, pour stocker
les programmes et les données. Contrairement au système de microprocesseur
conventionnel (tel qu'un PC), qui a des puces séparées sur une carte de circuit imprimé, le
microcontrôleur contient tous ces éléments dans une seule puce. Le MCU est
essentiellement un ordinateur sur puce ; cependant, il a toujours besoin de périphériques
d'entrée et de sortie, tels qu'un clavier et un écran, pour former un système fonctionnel.

La gamme de microcontrôleurs désormais disponible s'est développée parce que les


fonctionnalités du microcontrôleur utilisé dans un circuit particulier doivent être aussi
proches que possible des besoins réels de l'application. Certaines des principales
caractéristiques à considérer sont :

● Nombre d'entrées et de sorties.

● Taille de la mémoire programme.

● Taille de la RAM de données.

● Mémoire de données non volatile.

● Vitesse d'horloge maximale.

● Gamme d'interfaces.

● Support système de développement.

● Coût et disponibilité.

Le PIC16F877A est utile comme dispositif de référence car il possède un jeu


d'instructions minimal mais une gamme complète de fonctionnalités périphériques.
L'approche générale de la conception d'applications de microcontrôleur suivie ici consiste à
développer une conception à l'aide d'une puce disposant d'une capacité de réserve, puis à

20
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
sélectionner ultérieurement un périphérique associé présentant l'ensemble de
fonctionnalités correspondant le mieux aux exigences de l'application. Si nécessaire, nous
pouvons descendre à une gamme inférieure (série PIC10/12), ou s'il devient clair que plus de
puissance est nécessaire, nous pouvons passer à une puce de spécification plus élevée (série
PIC18/24). Cela est possible car tous les MCU ont la même architecture de base et des jeux
d'instructions compatibles.

21
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
2. Architecture d’un microcontrôleur PIC 16F877 :
La puce à 8 k (8096 14 bits) de mémoire de programme flash ROM, qui doit être
programmée via les broches de programmation série PGM, PGC et PGD. Les instructions de
longueur fixe contiennent à la fois le code d'opération et l'opérande (données immédiates,
registre adresse ou adresse de saut). Le PIC de milieu de gamme a un nombre limité
d'instructions (35) et est donc classé comme un processeur RISC (ordinateur à jeu
d'instructions réduit).

Figure 2.1 : Les pines du microcontrôleur 16F877

En regardant l'architecture interne, nous pouvons identifier les blocs impliqués dans
l'exécution du programme. La mémoire programme ROM contient le code machine, dans
des emplacements numérotés de 0000h à 1FFFh (8 k). Le compteur de programme contient
l'adresse de l'instruction en cours et est incrémenté ou modifié après chaque étape. A la
réinitialisation ou à la mise sous tension, il est remis à zéro et la première instruction à
l'adresse 0000 est chargée dans le registre d'instructions, décodée et exécutée. Le
programme se déroule ensuite en séquence, opérant sur le contenu des registres de fichiers
( 000–1FFh ), exécutant des instructions de mouvement de données pour transférer des
données entre les ports et les registres de fichiers ou des instructions arithmétiques et
logiques pour les traiter. La CPU a un registre de travail principal (W), à travers lequel toutes
les données doivent passer.

Si une instruction de branchement (saut conditionnel) est décodée, un test de bit est
effectué ; et si le résultat est vrai, l'adresse de destination incluse dans l'instruction est
chargée dans le compteur de programme pour forcer le saut. Si le résultat est faux, la
séquence d'exécution continue inchangée. En langage assembleur, lorsque CALL et RETURN
sont utilisés pour implémenter des sous-programmes, un processus similaire se produit.

22
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
L’architecture interne du microcontrôleur est donnée par la figure 2.2

Figure 2.2 : Architecture interne du PIC 16F877

23
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
3. Organisation de la mémoire du microcontrôleur PIC16F877 :
La mémoire d'un PIC 16F877 est divisée en 3 sections :

- Mémoire programme
- Mémoire de données
- EEPROM de données

3.1 Mémoire programme :


La mémoire programme contient les programmes écrits par l'utilisateur. Le compteur
de programme (PC) exécute ces commandes stockées une par une. Habituellement, les
microcontrôleurs PIC16F877 ont un compteur de programme de 13 bits qui est capable
d'adresser un espace mémoire de programme de 8K × 14 bits. Cette mémoire est
principalement utilisée pour stocker les programmes qui sont écrits (gravés) pour être
utilisés par le PIC. Ces microcontrôleurs disposent également de 8K*14 bits de mémoire
flash qui peuvent être effaçables/reprogrammés électriquement. Chaque fois que nous
écrivons un nouveau programme sur le contrôleur, nous devons supprimer l'ancien. La figure
ci-dessous montre la mapping de la mémoire programme ainsi que la pile.

Figure 2.3 : organisation de la mémoire programme

24
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
Le compteur de programme (PC) est utilisé pour garder la trace de l'exécution du
programme en conservant l'adresse de l'instruction en cours. Le compteur est
automatiquement incrémenté à l'instruction suivante pendant l'exécution de l'instruction en
cours.

La famille PIC16F87XA dispose d'une pile matérielle de 8 niveaux de profondeur x 13 bits de


large. L'espace de pile ne fait pas partie de l'espace de programme ou de données et les
pointeurs de pile ne sont ni lisibles ni inscriptibles. Dans les microcontrôleurs PIC, il s'agit
d'un bloc spécial de mémoire RAM utilisé uniquement à cette fin.

3.2 Mémoire de données :


La mémoire de données du PIC16F877 est séparée en plusieurs banques qui contiennent les
registres à usage général (GPR) et les registres de fonctions spéciales (SPR). Selon le type de
microcontrôleur, ces bancs peuvent varier. La puce PIC16F877 n'a que quatre banques
(BANK 0, BANK 1, BANK 2 et BANK4) comme le montre la figure 2.4. Chaque banque contient
128 octets de mémoire adressable.

25
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II

Figure 2.4 : Mapping de la mémoire

La disposition en banque est nécessaire car il n'y a que 7 bits disponibles dans le mot
d'instruction pour l'adressage d'un registre, qui ne donne que 128 adresses. La sélection des
banques est déterminée par les bits de contrôle RP1, RP0 dans le registre STATUS, les bits
RP1, RP0 et les 7 bits spécifiés forment effectivement une adresse de 9 bits. Les 32 premiers
emplacements des banques 1 et 2 et les 16 premiers emplacements des banques 2 et 3 sont
réservés au mappage des registres de fonctions spéciales (SFR). La sélection se fait comme le
montre le tableau 2.1

26
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
Bank RB0 RB1
0 0 0
1 0 1
2 1 0
3 1 1
Tableau 2.1 : Sélection des Bank

3.3 Mémoire EEPROM et FLASH:


L'EEPROM de données et la mémoire de programme Flash sont lisibles et inscriptibles
pendant le fonctionnement normal. Cette mémoire n'est pas directement mappée dans
l'espace fichier du registre. Au lieu de cela, il est adressé indirectement via les registres de
fonctions spéciales. Il y a six SFR utilisés pour lire et écrire dans cette mémoire :

• EECON1

• EECON2

• EEDATA

• EEDATH

• EEADR

• EEADRH

La mémoire de données EEPROM permet la lecture et l'écriture sur un seul octet. La


mémoire programme Flash permet la lecture d'un seul mot et l'écriture d'un bloc de quatre
mots. Les opérations d'écriture en mémoire programme effectuent automatiquement une
écriture avant effacement sur des blocs de quatre mots. Une écriture d'octet dans la
mémoire EEPROM de données efface automatiquement l'emplacement et écrit les nouvelles
données (effacement avant écriture). Le temps d'écriture est contrôlé par un temporisateur
intégré. Les tensions d'écriture/effacement sont générées par système conçue pour
fonctionner sur une plage définie.

27
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4. Les périphériques du microcontrôleur PIC16F877 :

4.1 Les ports d’entrée/sortie du microcontrôleur PIC16F877 :


La série PIC 16F877 a normalement cinq ports d'entrée/sortie. Ils sont utilisés pour
l'interface d'entrée/sortie avec d'autres appareils/circuits. La plupart de ces broches de port
sont multiplexées pour gérer une fonction alternative pour les fonctionnalités périphériques
sur les appareils. Tous les ports d'une puce PIC sont bidirectionnels. Lorsque l'action
périphérique est activée dans une broche, elle ne peut pas être utilisée comme ses fonctions
générales d'entrée/sortie. La puce PIC 16F877 possède essentiellement 5 ports
d'entrée/sortie. Les cinq ports d'entrée/sortie et leurs fonctions sont indiqués ci-dessous.

4.1.1 PORTA et le registre TRISA


Le PORT A est un port bidirectionnel de 6 bits de large, la direction de ce port est
contrôlée par le registre de direction des données TRIS A. La définition d'un TRIS A (= 1) fait
de la broche PORT A correspondante une entrée, la suppression du TRIS A (= 0) fait de la
broche PORTA correspondante une sortie

La broche RA4 est multiplexée avec l'entrée d'horloge du module "Timer0" pour devenir la
broche RA4/T0CKI et fonctionne soit en fonctionnement entrée/sortie, soit en
fonctionnement du module d'horloge Timer 0. La broche RA4/T0CKI est une entrée Schmitt
Trigger et une sortie à drain ouvert. Toutes les autres broches du PORT A ont des niveaux
d'entrée TTL et des pilotes de sortie CMOS complets.

Autres broches PORTA dans ce microcontrôleur multiplexées avec des entrées analogiques
et l'entrée analogique VREF pour les convertisseurs A/N et les comparateurs. Le
fonctionnement de chaque broche est sélectionné en effaçant/définissant les bits de
commande appropriés dans les registres ADCON1 et/ou CMCON. Le registre TRIS A contrôle
la direction des broches PORT même lorsqu'elles sont utilisées comme entrées analogiques.
L'utilisateur doit s'assurer que les bits du registre TRISA sont maintenus définis lors de leur
utilisation comme entrées analogiques.

Le schéma fonctionnel du registre PORTA est illustré dans les figures ci-dessous.

Les fonctions et les registres associés au registre PORT A sont donnés dans le tableau ci-
dessous.

28
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.1.2 PORTB et le registre TRISB
Le PORTB est également un PORT bidirectionnel 8 bits. Sa direction est contrôlée et
maintenue par le registre de direction de données TRISB. Le réglage du TRISB en logique "1"
fait de la broche "PORTB" correspondante une entrée. La suppression du bit TRISB fait du
PORTB une sortie. Trois broches du PORTB sont multiplexées avec la fonction de débogage
en circuit et de programmation basse tension : RB3/PGM, RB6/PGC et RB7/PGD pour
exécuter ses fonctions alternatives.

Le schéma fonctionnel du registre PORTB est donné dans la figure ci-dessous.

Le tableau de fonctionnement du PORTB et les registres associés au PORTB sont donnés


dans le tableau ci-dessous.

29
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.1.3 PORTC et le registre TRISC
Le PORTC est un PORT bidirectionnel de 8 bits de large qui est contrôlé et maintenu
par le registre de direction de données TRISC. La définition d'un bit TRISC(= 1) fera de la
broche PORTC correspondante une entrée (c'est-à-dire, placera le pilote de sortie
correspondant en mode haute impédance). L'effacement d'un bit TRISC (= 0) fera de la
broche PORTC correspondante une sortie PORT C également multiplexée avec plusieurs
fonctions périphériques. Les broches du PORTC ont des tampons d'entrée Schmitt Trigger.

Lors de l'activation des fonctions périphériques, une plus grande attention doit être portée à
la définition des bits TRIS pour chaque broche PORTC par rapport aux autres. Certains
périphériques remplacent le bit TRIS pour faire d'une broche une sortie, tandis que d'autres
périphériques remplacent le bit TRIS pour faire d'une broche une entrée. Étant donné que le
remplacement du bit TRIS est en vigueur lorsque le périphérique est activé, les instructions
d'écriture de lecture-modification (BSF, BCF et XORWF) avec TRISC comme destination
doivent être évitées. L'utilisateur doit se référer à la section périphérique correspondante
pour les paramètres de bit TRIS corrects.

Le schéma fonctionnel du registre PORTC est illustré dans les figures ci-dessous.

Les fonctions et registres associés au registre PORTC sont donnés dans le tableau ci-dessous.

30
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.1.4 PORTD et le registre TRISD
Le PORTD est un PORT 8 bits à caractère bidirectionnel. Ce port est également doté
de tampons d'entrée Schmitt Trigger, chaque broche de ce PORTD étant configurable
individuellement en entrée ou en sortie. Le PORTD peut être configuré comme un PORT de
microprocesseur de 8 bits de large (fonctionnant comme PORT esclave parallèle) en
définissant le bit de contrôle, PSPMODE ((TRISE<4>). Dans ce mode, les tampons d'entrée
sont TTL.

Le schéma fonctionnel du PORTD est illustré dans la figure ci-dessous.

Les fonctions et le registre associés à PORTD sont donnés dans le tableau ci-dessous.

31
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.1.5 PORTE et le registre TRISE
Le PORT E n'a que trois broches (RE0/RD/AN5, RE1/WR/AN6 et RE2/CS/AN7) qui sont
configurables individuellement comme entrées ou sorties. Ces broches peuvent être
contrôlées en utilisant son registre de direction de données correspondant "TRISE". Ces
broches ont également des tampons d'entrée Schmitt Trigger. Les broches PORTE
deviennent les entrées de commande d'E/S pour le PORT du microprocesseur lorsque le bit
PSPMODE est défini. Dans ce mode, l'utilisateur doit s'assurer que les bits TRIS E sont activés
et que les broches sont configurées comme entrées numériques. Assurez-vous également
que ADCON1 est configuré pour les E/S numériques. Dans ce mode, les tampons d'entrée
sont TTL.

Registre TRISE qui contrôle également le fonctionnement du PORT esclave parallèle. Les
broches du PORT E sont multiplexées avec des entrées analogiques. Lorsqu'elles sont
sélectionnées pour l'entrée analogique, ces broches se liront comme des "0". TRISE contrôle
la direction des broches RE, même lorsqu'elles sont utilisées comme entrées analogiques.

Le schéma de principe du PORTE (en mode entrée/sortie) est représenté sur la figure ci-
dessous. Les fonctions du PORTE et les registres associés au PORTE sont donnés dans le
tableau ci-dessous.

32
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.2 Le Timer:
La plupart des microcontrôleurs fournissent des timer matériels qui permettent
d'effectuer une mesure ou un comptage d'intervalle de temps séparément de l'exécution du
programme. Par exemple, un train d'impulsions de sortie à période fixe peut être généré
pendant que le programme continue avec une autre tâche.

Le timer est le plus souvent exploité en le pilotant à partir de l'horloge d'instruction interne
pour former une minuterie. Ce signal fonctionne à un quart de la fréquence d'horloge ; c'est-
à-dire qu'une instruction prend quatre cycles pour s'exécuter. Lorsque le registre du
temporisateur déborde et revient à zéro, un bit d'indicateur de débordement est activé. Cet
indicateur peut être interrogé (testé) pour vérifier si un débordement s'est produit ou si une
interruption a été générée, afin de déclencher l'action requise.

Pour modifier la période de comptage, le registre du temporisateur peut être préchargé


avec un nombre donné. Par exemple, si un registre 8 bits est préchargé avec la valeur 156,
un timeout se produit après 256 156 100 horloges. De nombreux modules temporisateurs
permettent un préchargement automatique à chaque redémarrage, auquel cas la valeur
requise est stockée dans un registre de préchargement lors de l'initialisation du
temporisateur.

Un prédiviseur permet généralement de diviser la fréquence d'entrée du temporisateur par


2, 4, 8, 16, 32, 64 ou 128. Cela étend le nombre maximal proportionnellement, mais au
détriment de la précision du temporisateur. Par exemple, le temporisateur 8 bits piloté à 1
MHz avec une valeur de pré-échelle de 4 comptes jusqu'à 256 4 / 1024 μ s, à 4 μ s par bit.

33
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.3 Les convertisseurs analogiques/numériques:
Certaines broches PIC peuvent être configurées comme entrées d'un convertisseur
analogique-numérique (ADC). Le PIC16F877 possède huit entrées analogiques, qui sont
connectées au port A et au port E. Lorsqu'elles sont utilisées dans ce mode, elles sont
appelées AD0–AD7. Les registres de contrôle nécessaires sont initialisé au début d’un
programme à l'aide d'un ensemble de fonctions permettant de sélectionner le mode de
fonctionnement et les entrées du CAN.

le PIC16F877 possèdent un convertisseur analogique numérique sur 10 bits, ce dernier


permet de convertir une tension analogique comprise entre Vref- et Vref+ en une valeur
numérique comprise entre 0 et 1023.
La configuration du microcontrôleur est assurée par les registres suivant :

 ANSEL (adresse 0x9B, banque 1)


 ADCON0 (adresse 0x1F, banque 0)
 ADCON1 (adresse 0x9F, banque 1)
 ADRESH (adresse 0x1E, banque 0)
 ADRESL (adresse 0x9E, banque 1)

On peut utiliser jusqu'à 7 canaux d'entrées (mais à un instant donné, un seul canal est relié à
l'ADC).
Numéro du canal pines
0 RA0/AN0
1 RA1/AN1
2 RA2/AN2/Vref-
3 RA3/AN3/Vref+
4 RE0/AN4
5 RE1/AN5
6 RE2/AN6
Tableau 2.2 : Les entrées analogiques

Pour exploiter ce convertisseur il est nécessaire de configurer certains registres dans le


microcontrôleur, dans la suite on s’intéressera uniquement au registre ADCON1 pour
sélectionner et activer les entrées analogiques multiplexées avec le port A et le port E du
PIC16F877.
ADCON1

Les bits PCFG3 … PCFG0 permettent la sélection et la configuration des entrées analogiques
à utiliser conformément au tableau :

34
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
Tableau 2.3 : Sélection et configurations des entrées analogiques.

4.4 Le compteur :
Le comparateur (Figure 1.7 ) est un autre type d'entrée analogique que l'on trouve
dans certains microcontrôleurs. Il compare la tension sur une paire d'entrées et un bit d'état
est défini si la broche C est supérieure à C–. Le bit d'état du comparateur peut également
être surveillé au niveau d'une broche de sortie. Le PIC a deux tels modules de comparaison;
ils sont activés à l'aide d'une fonction système pour définir le mode de fonctionnement. Le
PIC 16F877 n'a pas de comparateurs, donc l'ADC doit être utilisé à la place.

Figure

4.5 Les interruptions du microcontrôleur PIC16F877 :


L'interruption est un signal envoyé au micro pour marquer l'événement qui nécessite
une intervention immédiate. L'interruption "demande" au processeur de s'arrêter pour
exécuter le programme en cours et de "prendre le temps" d'exécuter un code spécial. En
fait, la méthode d'interruption définit la possibilité de transférer les informations générées

35
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
par des systèmes internes ou externes à l'intérieur Une fois que le système a terminé la
tâche qui lui a été imposée, le processeur sera averti qu'il peut accéder et recevoir
l'information et l'utiliser.

L’interruption peut provenir de plusieurs sources :

- Périphériques matériels externes. Un exemple courant est d'appuyer sur la touche du


clavier, ce qui amène le clavier à envoyer une interruption au microcontrôleur pour lire les
informations de la touche enfoncée.

- Le processeur peut s'envoyer des interruptions à la suite de l'exécution du programme,


pour signaler une erreur dans le code. Par exemple, la division par 0 provoquera une
interruption.

- Dans le système multiprocesseur, les processeurs peuvent s'envoyer des interruptions pour
communiquer.

Il existe deux types d'interruptions pour le PIC :

4.5.1 Interruption logicielles


Proviennent d'un programme exécuté par le processeur et "demandent" au
processeur d'arrêter l'exécution du programme, d'effectuer une interruption, puis de revenir
pour continuer à exécuter le programme. Un exemple : lorsqu'il y a un appel de procédure,
le processeur arrête l'exécution du programme, saute à l'endroit de la mémoire réservé à
une procédure - exécute la procédure et seulement ensuite revient au programme et
continue à s'exécuter .

4.5.2 Interruption matérielles


Elles sont envoyées au microcontrôleur par des périphériques matériels en tant que
tiers ; certains d'entre eux peuvent être bloqués - (masquage) par le bit d'activation
d'interruption (IE). Lorsque l'interruption est "bloquée", le microcontrôleur PIC ne "voit" pas
la demande d'interruption et ne l'exécute pas. En fait l'interruption bloquée ne sera pas
exécutée tant qu'elle ne sera pas débloquée.

Par exemple : Le processeur est au milieu d'un calcul, et nous ne voulons pas écrire en
mémoire tant que le micro n'a pas terminé le calcul. Dans cette situation, nous allons
"bloquer" l'interruption "écrire dans la mémoire". Nous ne « débloquerons » l'interruption
qu'une fois que le processeur aura terminé le calcul, l'empêchant ainsi d'écrire dans la
mémoire tant qu'il sera au milieu de l'action. Certaines interruptions ne peuvent pas être
"masquées" / "bloquées" - NMI - Interruptions non masquables. Ils sont utilisés pour signaler
des problèmes matériels critiques, tels que la chute de tension. Dans cette situation, nous
sommes intéressés par une réponse immédiate du processeur sans la possibilité de les
ignorer.

36
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
4.5.3 Les sources d’interruptions du microcontrôleur PIC16F877
Le microcontrôleur 16F877A possède 15 sources d’interruptions :

- Timer 0
- Timer 1
- RB0 du port B
- Changement d’état du port B
- Port parallèle (lecture/ecriture)
- Convertisseur ADC
- Transmission sur UART
- Réception sur UART
- Synchronisation du port série
- CCP1 (Capture, Compare, PWM)
- CCP2 (Capture, Compare, PWM)
- Timer 2
- Comparateur
- Opération d’écriture dans la mémoire EEPROM
- Collusion de bus.
- Dans ce qui suit on va s’intéresser au registre INTCON ( interrupt configuration
register ) pour la configuration des interruptions externes. C’est un registre de bits
configurables en lecture ou écriture.

 GIE (Global Interrupt Enable) – Bit 7


o ‘1’ : Activer toutes les interruptions
o ‘0’ : Désactiver toutes les interruptions
 PEIE (Peripheral Interrupt Enable ) – Bit 6
o ‘1’ : Activer toutes les interruptions des périphériques
o ‘0’ : Désactiver toutes les interruptions des périphériques
 TMR0IE (Timer 0 Interrupt Enable) – Bit 5
o ‘1’ : Activer l’interruption du TIMER0
o ‘0’ : Désactiver l’interruption du TIMER0
 INTE (RB0/INT External Interrupt Enable) – Bit 4
o ‘1’ : Activer l’interruption externe
o ‘0’ : Désactiver l’interruption externe
 RBIE (RB Port change Interrupt Enable) – Bit 3
o ‘1’ : Activer l’interruption de changement du port B
o ‘0’ : Désactiver l’interruption de changement du port B
 TM0IF (Timer 0 Overflow Interrupt Flag) – Bit 2

37
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
o ‘1’ : Indicateur d’interruption de débordement du Timer 0 (active)
o ‘0’ : Indicateur d’interruption de débordement du Timer 0 (non active)
 INTF (RB0/INT External Interrupt Flag) – Bit 1
o ‘1’ : Indicateur d’interruption externe (active)
o ‘0’ : Indicateur d’interruption externe (non active)
 RBIF (RB Port Change Interrupt Flag) – Bit 0
o ‘1’ : Indicateur de d’interruption du changement du port B (active)
o ‘0’ : Indicateur de d’interruption du changement du port B (non active)

Remarque :

Le bit INTEDG de registre OPTION_REG Permet de sélectionner le type du front de


l’interruption externe (RB0/INT) :

o ‘1’ : Front montant


o ‘0’ : front descendant

38
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre II
5. Les différents modes d’adressage et instruction :
Les modes d’adressages sont les différents moyens qui permettent au microprocesseur
d’accéder à une opérande en vue de tester ou de modifier le contenu d’un registre ou d’une
mémoire.

5.1 Mode d’adressage inhérent ou implicite :


L’adressage inhérent concerne les instructions qui ne comportent pas d’opérande, cette
dernière étant implicite. Il s’agit généralement des opérations de mise à 0 et
d’incrémentation ou de dé calage de bits

5.2 Mode d’adressage immédiat :


Ce mode d’adressage permet de charger les registres internes du microprocesseur
directement avec la valeur de l’opérande.

5.3 Mode d’adressage direct :


Dans ce mode d’adressage l’opérande correspond à une adresse où est située la donnée
de l’opération.

5.4 Mode d’adressage indexé ou indirect :


Ce mode d’adressage s’applique aux registres d’index. Ces derniers contiennent une
adresse mémoire dans laquelle est placé e la donnée de l’opération.

5.5 Mode d’adressage relatif :


Ce mode d’adressage est réservé pour les instructions de rupture de séquence
conditionnelle. La condition provient généralement du résultat de l’opération précédente
(résultat nul, ayant entraîné une retenue ...) où de l’é tat d’un bit.

5.6 Mode d’adressage étendu :


Ce mode d’adressage permet d’effectué des ruptures de séquence sans condition
afin d’atteindre une adresse non successive dans la mémoire programme.

39
Génie Électrique / Manuel de Cours / GEEAR-18

Chapitre III
PROGRAMMATION EN C DU MICROCONTROLEUR

40
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

1. Introduction sur la programmation en C d’un microcontrôleur :

La programmation de microcontrôleurs en langage assembleur est très frustrante et


fastidieuse, pour ne pas dire archaïque. Au fil du temps, les développeurs ont commencé à
créer des compilateurs pour les langages de haut niveau, ciblés spécifiquement pour les
microcontrôleurs.

La programmation du microcontrôleur Pic à l'aide de Mikroc Pro pour PIC constitue l’objectif
essentiel de ce chapitre. MikroC Pro est un compilateur Embedded-C qui permet de
convertir un code écrit en langage C en langage machine. Il est utilisé pour la
programmation du microcontrôleur pic en C.

Comme toute solution programmable, le microcontrôleur nécessite un outillage


informatique et éventuellement un programmateur. A chaque microcontrôleur correspond
son outil de développement. Pour développer une application fonctionnant à l’aide d’un
microcontrôleur, il faut disposer d’un :

- Le compilateur : Logiciel traduisant un programme écrit dans un langage donné (C, basic,
assembleur) en langage machine.

- Le programmateur : Transfert le programme compilé (langage machine) dans la mémoire


du microcontrôleur. Il est constitué d’une plateforme branché sur le PC, et d’un logiciel
permettant d’assurer le transfert.

1. Structure d’un programme en C :

La structure d’un programme en C pour un PIC est donnée comme suit :

#include <LCD.h> // déclarations des bibliothéques

// déclarations d’équivalences sur des constantes

#define const1=0x00

// déclarations des variables

char val1;
int val2;
float val3

// déclarations de toutes les fonctions (sous-programme)

41
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

void fonction1(void) { }

void fonction2(void) { }
// programme principal
void main()
{


}

42
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

2. Les variables en C :
Les différents types de variables utilisées en C sont les suivantes :

Remarque : on notera les variables hexa et binaires comme suit :

• 0x : HEXA
• 0B : Binaire
• 0xff,0x55 etc…
• 0b01010101 / 0b10101110

43
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

3. Les opérateurs en C :

3.1 Les opérateurs arithmétiques :


Ces opérateurs permettent d’effectuer les opérations arithmétiques traditionnelles :
addition, soustraction, multiplication et division entière entre des variables.

1.1. Les opérateurs d’affectation

3.2 Les opérateurs logiques :

44
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

3.3 Les opérateurs de tests conditionnels :

3.4 Les opérateurs de comparaison :

45
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

4. Les structures en C :

4.1 Les structures répétitives :


On parle de boucles lorsqu'on répète l'exécution d'une série d'instructions à
l'intérieur d'un programme. La notion de boucle est une des notions à la base de
toute l'algorithmique. Le langage C propose trois structures différentes :

- La boucle While :
Elle permet de construire une structure pour laquelle le bloc d’instructions à répéter peut
´éventuellement n’être jamais exécute car la condition est vérifiée avant le bloc.

- La boucle Do …. While
Cette forme permet de construire une structure répétitive dans laquelle la condition de re-
bouclage est vérifiée `a la fin : on est donc certain d’exécuter au moins une fois le bloc
d’instruction à répéter.

- La boucle For :
Répète un nombre fixé de fois une suite d’instruction

46
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

4.2 Les structures conditionnelles :


La structure conditionnelle if permet de réaliser un test et d'exécuter une instruction ou non
selon le résultat de ce test.

4.3 La structure Switch … case :


Le langage C offre une instruction switch qui est un if généralisé.

47
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

48
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

5. Exemples de programme en C pour un microcontrôleur PIC16F877 :

5.1 Programmation des entrées/sorties :


On donne le schéma de la figure suivante :

On veut :

- Réaliser un clignotement des diodes led si on appuis sur RC1.


- Réaliser un chenillard si on appuis sur RC1 et RC0.
- Réaliser un allumage de toutes les diodes si on appuis sur RC0.
- Eteindre les diodes si RC0=RC1=0.

Réponse :

int entree at portc;


int diode at portb;
void marche(int etat)
{ portb=etat; }
void clignotement () // function de clignotement
{ portb=0x00;delay_ms(300);portb=0xff;delay_ms(300);}
void chenillard()
{int i;
diode=0b00000001; delay_ms(300);
for (i=0;i<8;i++) { diode=diode << 1;delay_ms(300);}
}

49
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

void main() {
trisb=0x00;trisc=0xff;
while(1) {
if (entree= =0) { marche(0);}
if (entree= =1) { marche(0xff);}
if (entree= =2) { clignotement();}
if (entree= =3) { chenillard();}
}
}

5.2 Commande d’un afficheur 7 segments :


On donne le schéma de la figure suivante :

O veut réaliser un compteur modulo 10 l’affichage sera assurée par l’afficheur 7 segments.

Réponse :
int i;
void main() {
trisb=0x00;i=0;
while (1) {

50
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

while (i<10)
{ portb=i;
delay_ms(500);
i++;
} }
}

5.3 Commande de plusieurs afficheurs 7 segments :


On donne le schéma de la figure suivante :

- Ecrire un programme qui permet d’afficher les chiffres de 0000 à 9999

Réponse :

int i,j;
unsigned short uni,dix,cent,mil ;
#define aucun_afficheur 0b1111;
#define afficheur1 0b1110;
#define afficheur2 0b1101;
#define afficheur3 0b1011;
#define afficheur4 0b0111;

51
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

void main() {
trisb=0x00; trisc=0x00; portc=0xff;portb=0x00;
while (1) {
for(i=0;i<9999;i++) {
uni = i % 10;
dix = (i / 10) % 10;
cent = (i / 100) % 10;
mil = (i / 1000);

for(j=0;j<10;j++) {
portc= aucun_afficheur; delay_ms(1);
portb=uni;
portc=afficheur1; delay_ms(10);
portc=aucun_afficheur ; delay_ms(1);
portb=dix;
portc=afficheur2; delay_ms(10);
portc=aucun_afficheur ; delay_ms(1);
portb=cent;
portc=afficheur3;
delay_ms(10);
portc=aucun_afficheur ; delay_ms(1);
portb=mil;
portc=afficheur4;
delay_ms(10) ; }
} }}

5.4 Affichage sur un écran LCD par un microcontrôleur :


On donne le montage suivant :

52
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

Ecrire un programme en C qui permet d’afficher le message « Bonjour » sur LCD

sbit LCD_RS at RB4_bit;


sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
void main() {
Lcd_Init();
lcd_out(1,1,"bonjour");
}

Ecrire un programme en C qui permet d’afficher la valeur numérique de la grandeur


analogique branchée sur AN0.

53
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

sbit LCD_RS at RB4_bit;


sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
char txt[5];
int valeur;
void main() { ADCON1 = 0x80;
Lcd_Init();
while(1) {
valeur=ADC_Read(0);
IntToStr(valeur,txt);
lcd_out(1,1,txt);
}
}

5.5 Implémentation d’un Grafcet dans un microcontrôleur PIC16F877 :


On donne le grafcet suivant :

54
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

Ecrire le programme en C qui traduit le fonctionnement du Grafcet précédant

Réponse :

sbit m at RA0_bit ;
sbit a0 at RA1_bit ;
sbit a1 at RA2_bit ;
sbit kM1 at RB0_bit ;
sbit kM2 at RB1_bit ;
sbit av at RB2_bit ;
sbit ar at RB3_bit ;
bit X0, X1, X2, X3 ,T;

void main() {
trisa = 0xff ;
trisb = 0x00 ;
kM1 = 0 ; kM2 = 0 ; AV = 0 ; AR = 0 ;
X0 = 1 ; X1 = 0 ; X2 = 0 ; X3 = 0 ; T=0;
while (1)
{ // traitement des étapes
if ((X0 == 1) && (m == 1)) {

55
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18

X0 = 0 ;
X1 = 1 ;
}
if ((X1 == 1) && (a1 == 0)) {
X1 = 0 ;
X2 = 1 ;
}
if ((X2 == 1) && (T == 1)) {
X2 = 0 ;
X3 = 1 ;
}
if ((X3 == 1) && (a0 == 0)) {
X3 = 0 ;
X0 = 1 ;
}
if ((X1 == 1) || (X3 == 1)) { KM1 = 1;} else {KM1 = 0;}
if ((X1 == 1) || (X3 == 1)) { KM2 = 1 ;} else {KM2 = 0 ;}
if (X1 == 1) { AV = 1;} else {AV = 0 ;}
if (X2 == 1) { T = 1;} else {T = 0 ;}
if (X3 == 1) { AR = 1;} else {AR = 0 ;}
// Traitement des temporisateurs
if (T == 1) { delay_ms(5000) ;}
}
}

56

Vous aimerez peut-être aussi