Vous êtes sur la page 1sur 46

CHAPITRE I GENERALITES SUR LES MICROPROCESSEURS

1-Introduction
Les ordinateurs modernes sont proposés sous différentes formes et dimensions et sont utilisés
dans différentes tâches allant des plus sérieuses telles que le contrôle du trafic aérien aux
« moins sérieuses » comme les jeux vidéo. Mais, malgré leurs diversités de formes et
d'applications, les ordinateurs sont similaires dans leurs fonctionnements de base.

Pour fonctionner proprement, un ordinateur doit au minimum comporter les éléments


suivants :

• Un microprocesseur (CPU : Central Processing Unit), qui est un circuit intégré


pouvant contenir des milliards de transistors et où sont effectués tous les calculs
et sont prises toutes les décisions.
• Une RAM (Random Access Memory) ou mémoire vive :c’est une mémoire
volatile, accessible en lecture et en écriture, son rôle est de stocker les résultats
de calcul ainsi les données intermédiaires.
• Une ROM ( Read Only Mémory) : mémoire à lecture seule, son rôle est de
stocker les instruction du programme.
• Des interfaces d’entrée/sorties : ce sont les circuits qui assurent la
communication entre le microprocesseur et les périphériques (écran,
imprimante….)
• Des bus : un bus est un ensemble de lignes transportant le même type
d’informations. Dans un ordinateur on retrouve trois types de bus :
▪ Le bus de données : bus bidirectionnel assurant la circulation des
données binaires entre le microprocesseur et les autres éléments de
l’ordinateur.
▪ Le bus d’adresses : bus unidirectionnel fournissant l’adresse à la mémoire
à opération de lecture ou d’écriture ; en outre, il sert à adresser les
entrées et les sorties.
▪ Le bus de commande :ici le terme bus perd son sens puisque le bus de
commande est constitué de lignes « solitaires » assurant la
synchronisation des flux d’information sur les bus données et adresses.

DRIHMI F. Cours Microcontrôleurs Page 6


MICROPROCESSEUR RAM ROM

BUS D’ADRESSE

BUS DE DONNEES

BUS DE COMMANDE

ENTREES SORTIES

SYSTÈME MINIMAL A MICROPROCESSEUR

Figure I-1 : système minimal à microprocesseur

Pour des raisons de simplicité le système a été présenté selon le modèle de Van Neumann.

2-Le microprocesseur
Le microprocesseur a pour rôle de rechercher les instructions qui sont en mémoire, de
les décoder et de les exécuter. Il est construit autour de deux éléments principaux : L’unité de
commande et l’unité de traitement.

DRIHMI F. Cours Microcontrôleurs Page 7


BUS DE DONNEES

MÉMOIRE PROGRAMME
MICROPROCESSEUR

UNITE DE
UNITE DE
COMMANDE
TRAITEMENT
BUS DE BUS DE COMMANDE
COMMANDE

MÉMOIRE DONNEES

BUS D’ADRESSE

ELEMENTS CONSTUTITIFS D’UN MICROPROCESSEUR


Les mémoires ont été ajoutés dans le but de montrer
leurs positions par rapport au microprocesseur

Figure I-2 : éléments constitutifs d’un microprocesseur

• L’unité de commande : elle permet de séquencer le déroulement des instructions. Elle


effectue la recherche en mémoire de l’instruction codée en binaire, la décode et pilote
son exécution. L’unité de commande est constitué de :
▪ Le compteur de programme (PC : program counter) c’est un pointeur de
mémoire, il est formé d’un registre dont le contenu est initialisé avec l’adresse
de la première instruction du programme et contient toujours l’adresse de
l’instruction à exécuter ; une fois l’instruction est lue, le PC est incrémenter
assurant ainsi le séquencement des instructions.
▪ Le registre d’instruction : l’instruction à exécuter est déposée dans le registre
d’instruction afin d’être décoder ; il retiendra l’instruction durant son décodage
et son exécution.
▪ Le décodeur d’instruction : c’est une sorte de convertisseur de code qui accepte
l’instruction provenant de la mémoire, la décode pour en extraire des « micro-
instructions » compréhensibles par le bloc logique de commande ou séquenceur
(câblé ou microprogrammé).

DRIHMI F. Cours Microcontrôleurs Page 8


▪ Bloc logique de commande (séquenceur) : il prend en charge les micro-
instructions fournies par le décodeur d’instruction pour en dégager les
opérations élémentaires nécessaires pour l’exécution d’une instruction.

BUS DE DONNEES
REGISTRE DECODEUR
D’INSTRUCTION D’INSTRUCTION

BLOC LOGIQUE DE COMMANDE


BUS DE COMMANDE
(SEQUENCEUR) BUS DE COMMANDE

BUS D’ADRESSE

PC

BUS D’ADRESSE

L’UNITE DE COMMANDE
REGISTRE D’ADRESSE

Figure I-3 : schéma fonctionnel de l’unité de commande

• L’unité de traitement : elle est constituée des circuits qui assurent les traitements
nécessaires à l’exécution des instructions, ces circuits sont :

▪ L’Unité Arithmétique et Logique (ALU(en) ou UAL(fr)) capable de faire,


comme son nom l’indique, des opérations arithmétiques (addition,
soustraction…) et logiques (ET, OU…).
▪ Le registre d’état (Flag Register) : composé de quelques bits dont le
nombre dépend du type du microprocesseur ; l’état de chacun de ces
bits, à considérer individuellement, dépend de la dernière opération de
l’ALU et détermine le déroulement de la suite du programme. Exemple
de bits souvent rencontrés :retenu(carry :C), signe(sign :S),
débordement(overflow :OV), zéro(zero :Z), parité(parity :P).

DRIHMI F. Cours Microcontrôleurs Page 9


▪ Les accumulateurs : ce sont des registres de travail, sollicités dans toute
opération de calcul, ils servent à stocker un opérande au début de
l’opération arithmétique et le résultat à sa fin.

REGISTRE DONNEES

BUS DE COMMANDE

ALU

REGISTRE D’ETAT

ACCUMULATEUR

UNITE DE TRAITEMENT

Figure I-4 : schéma fonctionnel de l’unité de traitement

Les instructions et leurs opérandes (paramètres) sont stockés en mémoire principale. La taille
totale d’une instruction (nombre de bits nécessaires pour la représenter en mémoire) dépend
du type d’instruction et aussi du type d’opérande. Chaque instruction est toujours codée sur un
nombre entier d’octets afin de faciliter son décodage par le processeur. Une instruction peut
contenir les information suivantes : le type d’opération (opération code ou opcode), le type des
opérandes (qui sont-ils, source et cible) , la localisation des opérandes et le type d’accès
(adressage)

CODE OPERATION TYPE OPERANDE OPERANDE 1 …..

Figure I-5 : différents champs d’une instruction

DRIHMI F. Cours Microcontrôleurs Page 10


3- architectures d’un microprocesseur
3-1 en rapport avec le jeu d'instructions
a-Architecture CISC (Complex Instruction Set Computer) : C’est une architecture avec
un grand nombre d’instructions où le microprocesseur doit exécuter des tâches complexes par
instruction unique. Pour une tâche donnée, une machine CISC exécute ainsi un petit nombre
d’instructions mais chacune nécessite un plus grand nombre de cycles d’horloge. Le code
machine de ces instructions varie d’une instruction à l’autre et nécessite donc un décodeur
complexe.

b- Architecture RISC (Reduced Instruction Set Computer) : C’est une architecture dans
laquelle les instructions sont en nombre réduit (chargement, branchement, appel sous-
programme). Chacune de ces instructions s’exécutent souvent en un seul cycle d’horloge. Les
accès à la mémoire s’effectuent seulement à partir de deux instructions (Load et Store). Par
contre, les instructions complexes doivent être réalisées à partir de séquences basées sur les
instructions élémentaires, ce qui nécessite un compilateur très évolué dans le cas de
programmation en langage de haut niveau.
3.2 en rapport avec l'organisation des mémoires

a-Architecture VON NEUMANN : dans ce type d’architecture, il n’y a qu’un seul chemin
à la mémoire (un bus de données pour les programmes et les données et un bus d’adresses
pour ROM et RAM) .
Cette architecture est souvent choisie pour les microprocesseurs à usage général.

MÉMOIRE PROGRAMME ET
CPU
BUS
DONNEES

Architecture VON NEUMANN


Figure I-7 : architecture VON NEUMANN

b-Architecture HARVARD : dans ce type d’architecture la CPU discerne entre mémoire


programme et mémoire données, ainsi il existe, pour chaque type de mémoire (ROM et RAM),
un bus programme et un bus de données, ce qui permet l’accès en parallèle aux deux types de
mémoire.

DRIHMI F. Cours Microcontrôleurs Page 11


BUS
MÉMOIRE PROGRAMME

CPU
MÉMOIRE DONNEES
BUS

Architecture HARVARD
Figure I-8 : architecture HARVARD

3.3 le pipeline
Dans un microprocesseur classique, les instructions sont exécutés l’une après l’autre sans
chevauchement, c’est-à-dire que l’instruction suivante ne commence à être traité que lorsque
toutes les étapes de traitement de l’instruction précédente sont achevées.
Exemple pour trois instructions successives traitées chacune sur quatre étapes (la quatrième
étape est pour la sauvegarde).

Recherche → Décodage → Exécution → Sauvegarde →

Traitement instruction 1 Traitement instruction 2 Traitement instruction 3


Recher1 Recher2 Recher3
Décod1 Décod2 Décod3
Exécut1 Exécut2 Exécut3
Sauv1 Sauv2 Sauv3
Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 Cycle9 Cycle10 Cycle11 Cycle12

Figure I-9 : traitement d’instructions successives dans un microprocesseur classique

L’architecture PIPELINE permet d’augmenter le rendement du microprocesseur en exploitant


les ressources libérés par le microprocesseur lorsqu’il passe d’une étape à une au cours du
traitement d’une instruction, par exemple entre les étapes « recherche1 » et « recherche2 »
(figure précédente) le bus d’adresse peut être libre, en lançant « recherche2 » juste après
« recherche1 » on économise du temps.

DRIHMI F. Cours Microcontrôleurs Page 12


Recher1 Rech2 Rech3 Rech4 Rech5 Rech6 Rech7 Rech8 Reche9
Décod1 Décod2 Décod3 Décod4 Décod5 Décod6 Décod7 Décod8 Décod9
Exéc1 Exéc2 Exéc3 Exéc4 Exéc5 Exéc6 Exéc7 Exéc8 Exéc9
Sauv1 Sauv2 Sauv3 Sauv4 Sauv5 Sauv6 Sauv7 Sauv8 Sauv9
Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 Cycle9 Cycle10 Cycle11 Cycle12

Figure I-9 : traitement d’instructions successives dans un microprocesseur pipeline

Dans cet exemple il est possible de traiter neufs instructions (architecture PIPELINE) au lieu de
trois (architecture classique).

DRIHMI F. Cours Microcontrôleurs Page 13


CHAPITRE II LE MICROCONTROLEUR

1-Définition
Le microcontrôleur au sens le plus réduit est un système minimal à microprocesseur,
intégré sur une seule puce.
De nos jours on rencontre des microcontrôleurs incorporant, en plus des mémoires,
plusieurs types de périphérique comme les timers, les convertisseurs analogiques/numérique
et numériques/analogique, des modules de communication séries et parallèles, des
générateurs de signaux, des comparateurs analogiques… . Une spécialisation des
microcontrôleurs s’est instaurée suivant les besoins, ainsi on retrouve des microcontrôleurs
spécialisés dans l’acquisition des données, d’autres dans la commande des moteurs….

DRIHMI F. Cours Microcontrôleurs Page 14


HORLOGE

MÉMOIRE PROGRAMME

COMMUNICATION VIA USB MÉMOIRE DONNEES

WATCHDOG EEPROM

CONVERTISSEUR A/N (ADC) COMMUNICATION SERIE


SYNCHRONE

MICROPROCESSEUR

COMPARATEURS ANALOGIQUES COMMUNICATION SERIE


ASYNCHRONE

TIMERS COMMUNICATION VIA BUS


ETHERNET

PORTS E/S
COMMUNICATION VIA BUS CAN

CONVERTISSEUR N/A (DAC)


MODULE PWM

MICROCONTRÔLEUR

Figure II-1 : structure générale d’un microcontrôleur

2-Les microcontrôleurs PIC18F

Microchip a mis sur le marché six différentes familles 8 bit :


▪ PIC12XXX, longueur d’instruction 12 ou 14 bit.
▪ PIC14000, longueur d’instruction 14 bit.

DRIHMI F. Cours Microcontrôleurs Page 15


▪ PIC16C5X, longueur d’instruction 12 bit.
▪ PIC16CXX, longueur d’instruction 14 bit.
▪ PIC17, longueur d’instruction 16 bit.
▪ PIC18, longueur d’instruction 16 bit.

Chaque famille vient avec un nombre d’instructions différent, avec des formats d’instructions
différents et même avec des périphériques ayant des architectures différentes, ce qui rend ces
familles incompatibles entre elles. Les membres de la famille PIC 18F utilisent le même jeu
d’instruction et utilisent des périphériques possédant les mêmes architectures assurant ainsi la
compatibilité entre ces microcontrôleurs.

Les PIC18 ont les caractéristiques suivantes :

▪ Un jeu de 77 instructions (architecture RISC)


▪ Une architecture adaptée à la programmation avec le langage C
▪ Supportent des fréquences allant du DC à quelques dizaines de Mhz
▪ Des interruptions avec deux niveaux de priorité
▪ Un multiplieur 8 bit câblé

Les PIC18 peuvent contenir les périphériques suivants :

▪ Des ports d’entrées/sorties parallèles


▪ Des timers
▪ Des modules de capture/comparaison/PWM
▪ Des interfaces séries SPI et I2C
▪ Un USART
▪ Un convertisseur analogique/numérique 10 bits
▪ Des comparateurs analogiques
▪ Une EEPROM
▪ Un module pour bus CAN
▪ …

DRIHMI F. Cours Microcontrôleurs Page 16


Figure II-2 : schéma bloc des PIC18F4420/4520

DRIHMI F. Cours Microcontrôleurs Page 17


3-Organisation mémoire
Chaque zone mémoire possède une adresse qui doit être fournie pour y avoir accès. La
CPU communique avec la mémoire en identifiant l’adresse de la zone mémoire à accéder puis
en mettant cette adresse sur le bus d’adresse. Les données sont transférées de la CPU vers la
mémoire et inversement via le bus de données.

4-Séparation entre mémoire programme et mémoire données


Les PIC ont une architecture HARVARD, c’est à dire que les mémoires programmes et
données sont séparées et chacune de ces mémoires possède ses propres bus d’adresse et de
données ce qui les rends accessibles simultanément.

B. ADR B. ADR

MÉMOIRE PIC18 MÉMOIRE


PROGRAMME CPU DONNEES

B. DON B. DON

Figure II-3 : champs mémoire d’un PIC18

Le PIC18 possèdent un PC de 21 bit offrant la possibilité d’adresser théoriquement 2 21 cases


mémoires soit 2Moctet, pratiquement, seuls quelques dizaines de koctets sont implémentés.

5-Organisation de la mémoire de données :


La mémoire données du PIC18 est implémentée sous forme de SRAM subdivisée en 16 banques
de 256 octet, chaque octet représente un registre ; la mémoire données est adressée par un
bus d’adresses de 12 lignes, offrant une capacité d’adressage maximale de 4Koctet.

DRIHMI F. Cours Microcontrôleurs Page 18


Figure II-4 : mémoire de données des PIC18F4420/4520

DRIHMI F. Cours Microcontrôleurs Page 19


La mémoire de données contient les registres SFR (Special Function Registers) et les
registres GPR (General Purpose Registers). Les SFR sont utilisés pour commander les
périphériques et les options de la CPU. Les GPR sont essentiellement utilisés pour le stockage
des données dynamiques lors de l’exécution d’un programme. Le tableau suivant donne
l’ensemble des SFR des PIC18F2420/25204420/4520 ainsi que leurs adresses mémoire .

6-La mémoire de données EEPROM


DRIHMI F. Cours Microcontrôleurs Page 20
C’est une mémoire non volatile qui permet entre autre de sauvegarder des données
devant être absolument conservées même après une coupure d'alimentation, elle n’est
accessible que via les SFR.

7-Organisation de la mémoire programme:


Comme déjà indiqué, la capacité d’adressage du PIC18 est de 2Moctet dont seulement
quelques dizaines de Koctet (suivant le PIC) sont réellement exploités, l’accès à une zone
mémoire non adressée renvoi des zéros.

Le PIC18 possède 31 piles utilisées pour sauvegarder les adresses de retour des sous
programmes et des interruptions. Les piles ne font pas parties ni de la mémoire de données ni
de la mémoire programme, elles sont accessibles en lecture et en écriture.

Figure II-6 : Mémoire programme du PIC18F4520/2520

DRIHMI F. Cours Microcontrôleurs Page 21


La figure précédente montre que l’adresse 000000h est affecté au vecteur RESET, qui
est l’adresse de début du programme au démarrage ou après un RESET. L’adresse 000008h est
l’adresse de début du programme d’interruption de haute priorité. L’adresse 000018h est
l’adresse de début du programme d’interruption de basse priorité.

8-Le cycle instruction du PIC18


a-L’horloge
L’horloge, qu’elle soit interne ou externe est divisée par quatre pour générer quatre
signaux horloge en quadrature (Q1, Q2, Q3 et Q4). Par conséquent, les étapes d’exécution
d’une instruction sont répartie sur ces quatre phases, ainsi, le PC est incrémenté chaque Q1,
la recherche de l’instruction et son transfert vers le registre d’instruction se fait durant Q4,
l’instruction est décodé et exécuté durant le cycle machine suivant (de Q1 à Q4), voir figure
suivante.

Un cycle instruction consiste en 4 Q cycles ( de Q1 à Q4), ce qui implique que si Fosc est la fréquence
de l'oscillateur et si Fcy et la fréquence en terme de nombre de cycle machine par seconde, alors
Fcy=Fosc/4 et Tcy=4/Fosc=4Tosc

b-Le pipeline
La recherche et l’exécution de l’instruction sont « pipelinisées » de façon que la
recherche de l’instruction est faite dans un cycle alors que le décodage et l’exécution sont fait
dans le cycle suivant ,mais, tout compte fait, et du à l’utilisation du pipeline , l’instruction est
totalement exécuté en un cycle (sauf pour les instruction de branchement).

DRIHMI F. Cours Microcontrôleurs Page 22


DRIHMI F. Cours Microcontrôleurs Page 23
CHAPITRE III LES PORTS PARALLELES

1-Introduction
Le nombre de ports d’entrées/sorties dépend du PIC choisi, le 18F4520 en possède cinq.
Des lignes d’entrées /sorties peuvent être multiplexées avec d’autre fonctions.
Chaque port est géré par trois registres :
▪ Le registre TRIS pour commander la direction (entrée ou sortie).
▪ Le registre PORT pour lire les niveaux de tension au niveau des broches.
▪ Le registre LAT pour imposer (écrire) les niveaux de tension sur les broches.

Ci-joint le schéma d’un port d’entrées/sorties générique (pour une seule broche)

FIGURE III-1: GENERIC I/O PORT


OPERATION

RD LAT

Data
Bus D Q
WR LAT I/O pin(1)
or Port
CK
Data

WR TRIS
CK
TRIS Latch

RD TRIS

EN
RD Port

Note 1: I/O pins have diode protection to VDD and VSS.

Figure III-1 : port d’E /S générique

DRIHMI F. Cours Microcontrôleurs Page 24


TRISX7
TRISX TRISX0

RX0

LATX

Données destinées à la
sortie

RX7
Bascules de sorties

Bascule d éntrées
PORTX

Données lues

2- LE REGISTRE TRISx
(x pouvant être un des différents ports du 18F4520 :A, B, C, D ou E)

C'est le registre responsable sur le sens du flux des données (entrées ou sorties)
mettre à 1 un bit de ce registre revient à configurer la broche correspondante en
entrée et inversement, mettre à 0 un bit de ce registre revient à configurer la
broche correspondante en sortie.

DRIHMI F. Cours Microcontrôleurs Page 25


TRISx PORTx

bit0 0 bit0 sortie


bit1 0 bit1 sortie
bit2 1 bit2 entrée
bit3 0 bit3 sortie
bit4 1 bit4 entrée

bit5 1 bit5 entrée


bit6 0 bit6 sortie
bit7 1 bit7 entrée

Figure III-2 : effet du registre TRISx

3- LE REGISTRE PORTx
(x pouvant être un des différents ports du 18F4520 :A, B, C, D ou E)

C’est un port bidirectionnel de largeur 8bit (sauf pour le port E) le registre de direction qui lui
est associé est le registre TRISx. La mise à 1 d’un bit de ce registre oblige la broche
correspondante du PORTx à fonctionner en entrée et inversement, mettre à 0 un bit de ce
registre transforme la broche correspondante du PORTx en sortie. Cependant, l'utilisation du
registre PORTx en sortie peut causer certains problèmes. En effet, certaines instructions suivent
le schéma READ MODIFY WRITE, ainsi, en essayant de modifier l'état d'une seule broche d'un
port donné, la CPU commence par lire (READ) l'état actuel de toutes les broches du port, les
modifient (MODIFY) puis les envoient vers la sortie (WRITE). Le problème se pose lorsqu'on
essai de manipuler une broche à forte charge capacitive et/ou avec une fréquence élevée.

DRIHMI F. Cours Microcontrôleurs Page 26


100% --->5V
16%--->0,8V niveau bas

16%

READ MODIFY WRITE RESULTAT CORRECT


0 0 RC0=1; 0 1 1 1
0 0 0 0 0 0
0 RC2=1; 1 0 0 0 1
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

Lorsque le registre PORTx est utilisé en sortie, l'étape de lecture (read) se fait directement aun
niveau de la broche qui peut être dans un régime transitoire à cause de la charge capacitive,
ainsi, le niveau lu peut être faux, ce qui faussera le résultat final.

4- LE REGISTRE LATx
Ce registre vient résoudre le problème read write modify décrit ci-haut, en effet, l'utilisation
du registre LATx en sortie oblige la CPU à lire (read) directement au niveau de data latch qui
n'est pas affectée par la charge de la broche.

Pour conclure

Comme le montre le schéma suivant

DRIHMI F. Cours Microcontrôleurs Page 27


INTERNAL DATA BUS

write PORTx
write LATx Read LATx Read PORTx

LATx regiter
(PORTx output laches)

PORTx I/O pins

Schéma explicatif de la différence entre PORTx et LATx


X pouvant être l’un des différents port d’E/S

Figure III-3 : différences entre PORTx et LATx

La lecture du PORTx donne l’état des broches de sorties alors que l’écriture dans ce même port
revient à écrire dans les latches qui lui sont associées.

La lecture du registre LATx donne l’état des latches associées et l’écriture dans ce même registre
revient à écrire dans les latches.

Par conséquent il est recommandé d'utiliser le registre PORTx exclusivement en


entrée et le registre LATx exclusivement en sortie.
Hormis les alimentations, toutes les broches des ports A, B, C, D et E sont multiplexées
avec d’autres fonctions telle que les entrées analogiques ou les entrées/sorties des
comparateurs analogiques.

DRIHMI F. Cours Microcontrôleurs Page 28


DRIHMI F. Cours Microcontrôleurs Page 29
DRIHMI F. Cours Microcontrôleurs Page 30
DRIHMI F. Cours Microcontrôleurs Page 31
DRIHMI F. Cours Microcontrôleurs Page 32
Figure IV-4 : fonctions des broches d’E /S

5-Programmation des entrées/sorties en mode digital


Pour exploiter des entrées/sorties en mode digital, il faut commencer par configurer le
sens des données (entrées ou sorties) ensuite configurer ces E /S en mode digital (les bits <0 :4>
du PORTB, sont par défaut des entrées analogiques) et enfin lire ou écrire suivant l’application .

▪ Configuration des lignes en mode digital : les ports C et D sont numériques au


reset, pour les ports A, B et E il est possible de les configurer en utilisant le
registre ADCON1 (voir convertisseur A/D) ou utiliser l’option «configuration
bits » dans mplab en plus de la possibilité d’utiliser les directives #pragma (voir
manuel compilateur).
▪ Configuration du sens des données : se fait en configurant les registres TRISx
comme déjà expliqué.

Exemple :

TRISC=0 ; //configurer tout le port C en sortie.

TRISC4=1 ; // configurer la broche 4 en entrée.

TRISB=0b11010001 ;// bits 0, 4, 6 et 7 en entrées et le reste en sorties

TRISC=255 ; //configure tout le port C en entrée

DRIHMI F. Cours Microcontrôleurs Page 33


▪ Accès aux lignes :
▪ En entrée :
Exemples :
o variable1=RD7 ; //lire l’état du bit 7 du port D et le mettre
dans variable1 (dans ce cas il sera placé dans le LSB de
variable1).
o if(RB2==1)
{……….
▪ En sortie :

Exemple : LATA6=1 ; //mettre le bit 6 du port A à 1 (5V) .

DRIHMI F. Cours Microcontrôleurs Page 34


CHAPITRE IV LES INTERRUPTIONS
1-Définition
Les interruptions sont un mécanisme permis par le microprocesseur pour synchroniser
les opérations d’entrées/sorties, gérer les erreurs et évènements urgents, coordonner
l’utilisation des ressources partagées etc….

L’interruption en elle-même est un évènement qui oblige le microprocesseur à suspendre


l’exécution du programme normal pour se consacrer à l’accomplissement de certains services
relatifs à l’évènement. Une interruption peut être interne ou externe. Une interruption interne
est générée soit par les circuits internes du microcontrôleur (les périphériques), soit par soft
(due à des situations anormales comme la division par zéro ou le débordement…) ; une
interruption externe est provoquée par un évènement extérieur au microcontrôleur (
changement d’état au niveau de certaines broches spécifiques).

Les interruptions peuvent être utilisées dans plusieurs situations :

▪ Coordonner les activités des entrées/sorties et libérer ainsi le microprocesseur de la


tâche de transfert de données, en effet, sans l’emploi de l’interruption, le
microprocesseur aura à vérifier périodiquement l’état du module d’entrées/sorties, le
mécanisme d’interruption est utilisé par le module d’entrées/sorties pour informer le
microprocesseur qu’il est prêt à la transmission des données par exemple.
▪ Répondre à des évènements urgents nécessitant une prise de décision immédiate par le
microprocesseur comme les arrêts d’urgences. Le mécanisme d’interruption oblige dans
ce cas le microprocesseur à laisser momentanément le programme normal pour
exécuter le programme le plus urgent.
▪ Les interruptions peuvent fournir un bon moyen de sortir d’une application lorsqu’il y a
une erreur software.
▪ Les interruptions peuvent rappeler le microprocesseur d’exécuter des tâches
routinières comme la mise à jour tu temps, en effet, sans l’utilisation d’un timer en mode
interruption le microprocesseur devra compter le temps avec des boucles ce qui le rend
incapable d’exécuter d’autres tâches.

2-Masquage des interruptions


Suivant l’application, une interruption peut être indésirable et doit être empêché d’interrompre
le microprocesseur. La plupart des microcontrôleurs ont la possibilité d’ignorer ces interruptions ; on dit
que ces interruptions sont mascables ; le masquage ou l’autorisation d’une interruption se fait
moyennant le bit d’autorisation (enable bit - bit dont le nom fini toujours par IE).

3-Priorité des interruptions

DRIHMI F. Cours Microcontrôleurs Page 35


Si un microcontrôleur possède plusieurs sources d’interruption, il se peut que certaines
d’entre elles demandent à être servies au même moment, dans ce cas le microprocesseur doit
décider quelle interruption doit servir en premier, la solution réside dans l’affectation d’un
niveau de priorité à chaque interruption.

Les PIC18 possèdent deux niveaux de priorité : la haute priorité et la basse priorité.

4-Le service d’interruption


Le microprocesseur traite une interruption en exécutant un programme d’interruption
appelé ISR (Interrupt Service Routine). Après l’exécution de l’ISR, le microprocesseur doit
retourner au programme normal. L’arrêt de l’exécution du programme normal, l’exécution de
l’ISR et enfin le retour au programme normal se fait en sauvegardant le contexte dans une pile
avant d’exécuter l’ISR puis en le restituant après l’exécution de l’ISR.

5-Cycle de traitement d’une interruption :


▪ Termine l’exécution de l’instruction en cours (celle du programme normal)
▪ Sauvegarde du contexte du microprocesseur ( au moins le PC et le registre d’état) dans
la pile
▪ Identification de la source d’interruption
▪ Identification de l’adresse de début de l’ISR (du programme d’interruption)
▪ Exécution de l’ISR
▪ Restitution du contexte du microprocesseur à partir de la pile
▪ Retour au programme normal

6-Vecteurs d’interruption
Pour exécuter une ISR le microprocesseur doit identifier de l’adresse de début de l’ISR
ces adresses sont appelées vecteurs d’interruption. Les PIC18 possèdent deux vecteurs
d’interruption : le premier est situé à l’adresse 0008h de la mémoire programme et est réservé
aux interruptions prioritaires et le second est situé à l’adresse 0018h et est réservé aux
interruptions non prioritaires.

DRIHMI F. Cours Microcontrôleurs Page 36


PROGRAMME ISR NON
ISR PRIORITAIRE
NORMAL PRIORITAIRE
• Identification source d interruption
• Identification vecteur d interruption DEBUT ISR DEBUT ISR
• Sauvegarde du contexte da la CPU
• Saut à l adresse en question si
conditions remplies Vecteur d interruption
Non prioritaire • Identification source d interruption
• Identification vecteur d interruption
Adresse 0018h • Sauvegarde du 2ème contexte da la
CPU
Vecteur d interruption • Saut à l adresse en question si
prioritaire conditions remplies
Adresse 0008h
Évènement provenant
d une source
d interruption (non Poursuite exécution
prioritaire dans ce cas de du programme normal
figure)

Poursuite exécution
de l ISR
Évènement provenant • Restauration 2ème contexte
d une source • Retour à l adresse du 2ème saut
d interruption prioritaire

• Restauration 1er contexte


• Retour à l adresse du 1er saut

FIN ISR FIN ISR

Figure IV-1 : déroulement de l’exécution d’une ISR

7-Les interruptions du PIC18F4520


Les interruptions du 18F4520, sont soit internes provoquées par les périphériques intégrés,
soit externes provoquées par un changement de niveau sur l’une des entrées d’interruption

▪ Matérielles externes :
o Déclenchées par un front actif sur l'une des entrées INT0, INT1 et INT2;
o Déclenchée par le changement d’état d’une des entrées RB4 à RB7 du portB
▪ Matérielles internes : Déclenchées par certaines ressources intégrés :
o Débordements du Timer 0, du Timer1 ou du Timer2.
o Le Comparateur Analogique.
o L’USART en Emission ou Réception de données.
o Le Convertisseur Analogique Digital.
o Le circuit de Capture et de Comparaison CCP.
o Le port série synchrone ou SSP.
o Ecriture dans la mémoire EEPROM
o ….

DRIHMI F. Cours Microcontrôleurs Page 37


8-Les registres associés aux interruptions
Le PIC18F4520 utilise 10 registres pour contrôler les interruptions :

• RCON
•INTCON
• INTCON2
• INTCON3
• PIR1, PIR2
• PIE1, PIE2
• IPR1, IPR2

Dans le cas général les interruptions sont contrôlées par trois types de bit :

▪ Le bit de flag passe à 1 pour indiquer qu’un évènement d’interruption a eu lieu


(forme :XXIF)
▪ Le bit d’autorisation de l’interruption, autorise l’exécution de l’ISR lorsque le flag bit passe
à 1 (forme :XXIE)
▪ Le bit de priorité pour choisir la priorité haute ou basse (forme :XXIP)

En plus de ces bits spécifiques à chaque interruption, les bits GIE (Global Interrupt Enable) et PEIE
(Peripheral Interrupt Enable) permettent de masquer toutes les interruptions à la fois (cas de GIE) ou
de masquer une catégorie d’interruptions (toutes les interruptions internes peuvent être masquer par
PEIE).

Tout ces bits sont réparties dans les registres cités en haut.

DRIHMI F. Cours Microcontrôleurs Page 38


Figure IV-2 : schéma logique (explicatif) des interruptions du PIC18F4520

Les registres INTCON et INTCON1 qui regroupent, entre autres, les bits de configuration des
interruptions externes, ont en plus quelques spécificités : le registre INTCON contient les bits
responsables sur l’autorisation globale des interruptions (GIE/GIEH, PEIE/GIEL) ; le registre
INTCON2 contient des bits pour sélectionner le type de fronts actifs sur les interruptions
externes, montants ou descendant (INTEDGx).

Les autres registres contiennent les trois types de bit de contrôle d’interruption déjà vus.

Les figures suivantes sont des extraits du document constructeur décrivant les registres de
contrôles des interruptions.

DRIHMI F. Cours Microcontrôleurs Page 39


a-Le registre RCON
Seul le bit 7 (IPEN) intervient dans le contrôle des interruptions.

Figure IV-3 : le registre RCON

IPEN : bit d’autorisation de la priorité des interruptions

Si IPEN=1, les niveaux de priorité des interruptions sont autorisés

Si IPEN=0, les niveaux de priorité des interruptions sont désactivés ( mode de


compatibilité avec la famille 16F).

DRIHMI F. Cours Microcontrôleurs Page 40


b-Le registre INTCON

Figure III-4 : le registre INTCON

DRIHMI F. Cours Microcontrôleurs Page 41


c-Le registre INTCON2

Figure III-5 : le registre INTCON2

DRIHMI F. Cours Microcontrôleurs Page 42


d-Le registre INTCON3

Figure III-6 : le registre INTCON3

DRIHMI F. Cours Microcontrôleurs Page 43


e-Le registre PIR1

Figure III-7 : le registre PIR1

DRIHMI F. Cours Microcontrôleurs Page 44


f-Le registre PIR2

Figure III-8 : le registre PIR2

DRIHMI F. Cours Microcontrôleurs Page 45


g-Le registre PIE1

Figure III-9 : le registre PIE1

DRIHMI F. Cours Microcontrôleurs Page 46


h-Le registre PIE2

Figure III-10 : le registre PIE2

DRIHMI F. Cours Microcontrôleurs Page 47


i-Le registre IPR1

Figure III-11 : le registre IPR1

DRIHMI F. Cours Microcontrôleurs Page 48


j-Le registre IPR2

Figure III-12 : le registre IPR2

9-Programmation de l’interruption
La programmation d’une ISR doit de faire sur trois étapes :

▪ Etape 1 : tester qui a déclenché l’interruption, ce qui revient à tester le bit de flag
XXXIF (exemple ADIF pour le bit de flag du convertisseur A/D).
Une bonne pratique consiste à tester aussi le bit d’autorisation de l’interruption
▪ Etape 2 : exécuter le programme d’interruption
▪ Etape 3 : acquitter manuellement l’interruption, ce qui revient à remettre le bit
de flag à 0 (XXXIF=0) .

DRIHMI F. Cours Microcontrôleurs Page 49


a-Modèle général
void interrupt nom_interruption1(void)

{
Test du flag
Exécution de l’ISR
Remise à zéro du bit de flag
}

void interrupt low_priority nom_interruption2(void)


{
Test du flag
Exécution de l’ISR
Remise à zéro du bit de flag
}

Main
{
séquence d'initialisation;
.....;
autorisation des interruptions;
while(1)
{
tâche n°1;
tâche n°2;
.....;
tâche n°N;
}
}

L’autorisation des interruptions qui figure dans le programme principal varie suivant si l’on veut
utiliser la priorité ou non.

▪ Mode avec priorité


1. Autorisation de la priorité : IPEN = 1 ;
2. Validation des interruptions de haute priorité : GIEH = 1 ;
3. Validation des interruptions de basse priorité : GIEL = 1 ;
4. Pour chaque source d’interruption, affecter la priorité choisie :
si prioritaire XXXIP = 1 ;
si non prioritaire XXXIP = 0 ;
5. Validation individuelle des interruptions : pour valider l’interruption XXX mettre
XXXIE = 1 ;
6. Mettre à 0 le bit de flag : XXXIF = 0 ;
▪ Mode compatibilité (pas de priorité)
1. Pas de priorité : IPEN = 0 ;
2. Validation globale des interruptions : GIE = 1 ;

DRIHMI F. Cours Microcontrôleurs Page 50


3. Validation de l’interruption des périphériques : PEIE = 1 ;
4. Validation individuelle des interruptions : pour valider l’interruption XXX mettre
XXXIE = 1 ;
5. Mettre à 0 le bit de flag : XXXIF = 0 ;

b-Exemple :

Changement des états de deux leds branchées sur RC0 et RC1 chaque fois qu’un front
descendant arrive sur l’une des interruptions INT1 et INT2 .

#include <xc.h>
void interrupt led1(void) //déclaration interruption prioritaire
{
if(INT1IF==1) // test du flag
{
LATC0=!LATC0; //inversion d’état de la sortie RC0
}
INT1IF=0; //acquitement du bit de flag
}

void interrupt low_priority led2(void) //déclaration interruption non prioritaire


{
if(INT2IF==1) // test du flag
{
LATC1=!LATC1; //inversion d’état de la sortie RC0
}
INT2IF=0; //acquitement du bit de flag
}

void main(void)
{
TRISC=0; //config port C en sorties
TRISB=255; //config port B en entrées

ADCON1=15; // entrées port B digitales


IPEN=1; //interruptions avec priorités
INT1IP=1; // INT1 prioritaire
INT2IP=0; // INT1 non prioritaire
INT1IE=1; //autorisation interruption INT1
INT2IE=1; //autorisation interruption INT2
INTEDG1=0; //activation interruption INT1 sur front descendant
INTEDG2=0; //activation interruption INT2 sur front descendant
GIEH=1; //autorisation globale des interruptions prioritaires
GIEL=1; //autorisation globale des interruptions non prioritaires
while(1) {} // boucle infinie
}

DRIHMI F. Cours Microcontrôleurs Page 51

Vous aimerez peut-être aussi