Module 18 Les Microcontrôleurs
Module 18 Les Microcontrôleurs
Génie Électrique
Électronique,
Automatisme et
Robotique
Manuel de cours
Module 18
Les microcontrôleurs
Edition 2021
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 :
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
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
3
Génie Électrique / Manuel de Cours / GEEAR-18
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
Génie Électrique / Manuel de Cours / GEEAR-18
ENONCE DE LA COMPETENCE
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
5
Génie Électrique / Manuel de Cours / GEEAR-18
OBJECTIF OPÉRATIONNEL
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.
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
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.
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.
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.
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 :
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 :
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
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).
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)
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).
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.
● Gamme d'interfaces.
● Coût et disponibilité.
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).
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
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
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.
25
Génie Électrique / Manuel de Cours / GEEAR-18
Chapitre II
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
• EECON1
• EECON2
• EEDATA
• EEDATH
• EEADR
• EEADRH
27
Génie Électrique / Manuel de Cours / GEEAR-18
Chapitre II
4. Les périphériques du microcontrôleur PIC16F877 :
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.
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.
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.
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.
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
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
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.
- Dans le système multiprocesseur, les processeurs peuvent s'envoyer des interruptions pour
communiquer.
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.
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 :
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.
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
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.
- Le compilateur : Logiciel traduisant un programme écrit dans un langage donné (C, basic,
assembleur) en langage machine.
#define const1=0x00
char val1;
int val2;
float val3
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 :
• 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 :
44
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
45
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
4. Les structures en C :
- 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
47
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
48
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
On veut :
Réponse :
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();}
}
}
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++;
} }
}
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) ; }
} }}
52
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
53
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
54
Chapitre III
Génie Électrique / Manuel de Cours / GEEAR-18
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