Vous êtes sur la page 1sur 13

THÈME 1 : MICROCONTRÔLEURS

Sommaire
Page
Séquence 1 :
SOURCES D’INTERRUPTION
1. Définition d’une interruption ................................................................................. 2
2. Étapes de déroulement d’une interruption .......................................................... 2
3. Registre de configuration des interruptions......................................................... 3
4. Schéma synoptique du registre INTCON du PIC 16F84A .................................. 4
Séquence 2 :
TIMERS
1. Introduction........................................................................................................... 5
2. Timer0 ................................................................................................................... 5
2.1. Schéma du timer0 ................................................................................................ 5
2.2. Fonctionnement ................................................................................................... 5
2.3. Registre de contrôle : OPTION_REG.................................................................. 6
2.4. TIMER0 en mode temporisation ou contrôle du temps ...................................... 7
2.4.1 Principe de fonctionnement ................................................................................ 7
2.4.2 Exemple .............................................................................................................. 7
2.5. TIMER0 en mode comptage ................................................................................ 8
Séquence 3 :
CONVERTISSEUR ANALOGIQUE NUMERIQUE (C.A.N)
1. Définition .............................................................................................................. 9
2. Symbole ............................................................................................................... 9
3. Principe de conversion......................................................................................... 9
4. Registre ADCON1.............................................................................................. 12
5. Configuration des PORTS en fonctions des 4 bits PCFG ................................ 13

1
THÈME 1 : MICROCONTRÔLEURS
SEQUENCE 1 : SOURCES D’INTERRUPTION
1. Définition d’une interruption
Une interruption est un évènement imprévisible qui provoque l’arrêt d’un programme
en cours d’exécution pour exécuter un autre programme appelé programme (ou
routine) d’interruption. A la fin du programme d’interruption, le microcontrôleur reprend
le programme principal à l’endroit où il s’est arrêté.

2. Étapes de déroulement d’une interruption


Le programme principal se
1 déroule normalement.

Une interruption survient, le


2 microcontrôleur effectue les
tâches suivantes :

Termine l’instruction en cours de


3 traitement (instruction Xn)

Saute vers la routine


4 d’interruption (début routine)

Exécute les instructions de la


5 routine (instructions : Y0 Yn )

Revient au programme principal


6 et exécute l’instruction Xn+1
Figure 1 : déroulement d’une interruption

En MikroC, le sous-programme d’interruption (routine) est déclaré en tant que fonction


avec le nom spécifique «Interrupt». Cette fonction s’exécute automatiquement en
réponse aux évènements déclencheurs des interruptions activées par l’utilisateur.
On distingue deux types d’interruption :
 Interruptions externes : ce sont des interruptions provenant des périphériques
ouvertes sur le monde extérieur (reset, bouton poussoir, clavier, changement
d’état d’un signal extérieur, communication série, etc…).

 Interruptions internes : ce sont des interruptions provenant des périphériques


internes (timer, EEPROM, ADC, etc…).

Le nombre de sources d’interruptions dépend du microcontrôleur utilisé.

Exemple:

Microcontrôleur 16F84A 16F628A 16F88 16F876A 16F877A


Nombre de Sources 4 10 12 14 15
d’interruption

2
3. Registre de configuration des interruptions
Le registre INTCON (INTerrupt CONtroller) est le registre principal de contrôle et de
gestion des interruptions.
Le registre INTCON est parfois différent d’un PIC à un autre. Il est impératif de revenir
au document constructeur pour chaque type de microcontrôleur.
Dans cette partie on s’intéresse au registre INTCON pour la configuration des
interruptions externes. C’est un registre de bits configurables en lecture ou écriture.
Registre INTCON pour PIC16F84A

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF


Registre INTCON pour PIC16F87x
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

Au reset : INTCON = 0000000X


GIE (Global Interrupt Enable bit) – Bit 7
 ‘1’ : Activer toutes les interruptions
 ‘0’ : Désactiver toutes les interruptions
PEIE: PIC16F87x (Peripheral Interrupt Enable bit) – Bit 6
 ‘1’ : Activer toutes les interruptions des périphériques
 ‘0’ : Désactiver toutes les interruptions des périphériques
EEIE: PIC16F84A (EEPROM Interrupt Enable bit) – Bit 6
 ‘1’ : Activer toutes les interruptions causées par la fin d’écriture dans
l’EEPROM.
 ‘0’ : Désactiver toutes les interruptions causées par la fin d’écriture dans
l’EEPROM.

T0IE (Timer0 Interrupt Enable bit) – Bit 5


 ‘1’ : Activer l’interruption du Timer0.
 ‘0’ : Désactiver l’interruption du Timer0.

INTE (RB0/Int Interrupt Enable bit) – Bit 4


 ‘1’ :Activer l’interruption externe sur la broche RB0.
 ‘0’ :Désactiver l’interruption externe sur la broche RB0.
RBIE (RB Port Change Interrupt Enable bit) – Bit 3
 ‘1’ : Activer l’interruption par changement d’état du PortB (RB4 à RB7).
 ‘0’ : Désactiver l’interruption par changement d’état du PortB (RB4 à RB7).

T0IF (Timer0 Interrupt Flag bit) – Bit 2


 ‘1’ : Indicateur d’interruption de débordement du Timer0 est actif.
 ‘0’ : Indicateur d’interruption de débordement du Timer0 est non actif.

INTF (RB0/INT External Interrupt Flag) – Bit 1


 ‘1’ : Indicateur d’interruption externe sur RB0 est actif.
 ‘0’ : Indicateur d’interruption externe sur RB0 est non actif.

3
RBIF (RB Port Change Interrupt Flag) – Bit 0
 ‘1’ : Indicateur d’interruption du changement de RBI est actif.
 ‘0’ : Indicateur d’interruption du changement de RBI est non actif.

REMARQUES

 Les drapeaux (T0IF, INTF, RBIF) doivent être remis à zéro par le programme
de traitement de l’interruption.
 Le bit INTEDG (bit 6) du registre OPTION_REG permet de sélectionner le
type du front de l’interruption externe (RB0/INT) :
 ‘1’ : Front montant
 ‘0’ : front descendant

Registre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


OPTION_REG
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

À l'issue d’un Reset, tous les bits du registre OPTION_REG sont à 1 :


l’interruption par RB0 est alors par défaut sur front montant.

4. Schéma synoptique du registre INTCON du PIC 16F87XA

Figure 2

4
THÈME 1 : MICROCONTRÔLEURS
SEQUENCE 2 : TIMERS
1. Introduction
Les timers sont des modules intégrés dans les microcontrôleurs. Ils assurent la fonction
comptage. Il existe 3 types de timers : TIMER0, TIMER1 et TIMER2. Le nombre de
timers intégrés varie d’un microcontrôleur à un autre. Le PIC 16F84A par exemple ne
comporte qu’un seul TIMER exprimé sur 8 bits (timer0), contrairement à d’autres PIC
(voir tableau ci-dessous).

Microcontrôleur 16F84A 16F628A 16F876A 16F877A


TIMER0 (8 bits)
TIMER/Compteur TIMER0 (8 bits) TIMER1 (16 bits)

TIMER2 (8bits)

On se limite dans ce cours à l’étude du TIMER0.

2. TIMER0
Le TIMER0 est incrémenté en permanence soit par une horloge interne (mode TIMER) soit
par une horloge externe appliquée à la broche RA4 (mode compteur).
2.1. Schéma du TIMER0

Figure 3

2.2. Fonctionnement
Le bit T0CS permet de choisir l’horloge interne (Fosc/4) ou externe RA4/T0CKI dont
l’incrémentation du TIMER0 peut se faire sur front montant ou descendant suivant la valeur
du bit T0SE du registre OPTION_REG.
Quelle que soit l'horloge choisie, on peut pré-diviser la fréquence correspondante par un
rapport, allant de 2 à 256. Ce rapport est fixé par les bits PS0, PS1 et PS2.

L'affectation ou non du pré-diviseur se fait à l'aide du bit PSA.


Quand le contenu du TMR0 passe de 0xFF à 0x00 le bit T0IF passe à 1 pour signaler un
débordement. Si le bit T0IE est à 1 alors une interruption TIMER0 est déclenchée.

5
Le contenu du TMR0 est accessible dans le fichier de registres aussi bien en lecture qu’en
écriture.
Remarque importante: Lorsque le bit T0IF passe à 1 lors du passage de la valeur 0xFF à
0x00 du registre TMR0, on doit le remettre à 0 de façon logicielle par une instruction du type
INTCON.T0IF=1.

2.3. Registre de contrôle : OPTION_REG


Le tableau suivant résume les huit bits du registre OPTION_REG:

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0


/RBUP INTEDG TOCS TOSE PSA PS2 PS1 PS0
Chacun de ces bits à une signification et une fonction :
Bit7: /RBUP = Pull up Enable bit on PortB.
 1 = Pull up désactivé sur le PortB. (Pas de résistances)
 0 = Pull up activé. (Résistances de tirage reliées à +VDD)

Bit6 : INTEDG = Interrupt Edge select bit.


 1 = Interruption si front montant sur RB0/INT
 0 = Interruption si front descendant sur RB0/INT.

Bit5 : TOCS = Timer TMR0 Clock Source select bit.


 1 = L’horloge du Timer est l’entrée RA4/Clk
 0 = Le Timer utilise l’horloge interne du PIC.

Bit4 : TOSE = Timer TMR0 Source Edge select bit.


 1 = Le Timer s’incrémente à chaque front descendant sur RA4/Clk.
 0 = Le Timer s’incrémente à chaque front montant sur RA4/Clk.

Bit3 : PSA = Prescaler Assignement bit.


 1 = Le pré-diviseur est affecté au watchdog.
 0 = Le pré-diviseur est affecté au Timer TMR0.
Bits 2,1 et 0: PS2 PS1 PS0 = Prescaler Rate Select bits.
PS2 PS1 PS0 DIV
0 0 0 2
0 0 1 4
0 1 0 8
0 1 1 16
1 0 0 32
1 0 1 64
1 1 0 128
1 1 1 256

NB : Quand le pré-diviseur est attribué au watchdog (PSA=1), le TMR0 est pré-divisé par 1
(sans pré-division).

6
2.4. TIMER0 en mode temporisation ou contrôle du temps
En mode temporisateur, l’entrée d'incrémentation du module TIMER0 est l'horloge
interne de fréquence (Fosc/4). Il est possible dans ce cas d'utiliser un pré-diviseur de
fréquence que nous verrons dans la suite.

2.4.1 Principe de fonctionnement


Composition générale d'un TIMER0 sur un microcontrôleur PIC :

Oscillateur Fosc= 4MHz Oscillateur Fint= 1MHz Fp=(Fint/DIV) Tc= (256*DIV) us


Pré-diviseur Timer0
Externe Interne
Tint = 1 us (DIV) Tp= 1DIV us (DIV 256)
(Quartz) (DIV 4)

Figure 4

F ORMULE GENERALE :
 Pour un cycle et TMR0 initialisé à 0 :

Avec :
DIV: valeur de pré-diviseur ;
TMR0 : valeur initiale pré-chargée (ou initiale) dans le registre TMR0 ;
Fosc : fréquence de l’oscillateur ;
Tc = temps écoulé pour un cycle.

2.4.2 Exemple
Supposons que le TIMER0 utilise l’horloge interne à base d’un quartz de 4 MHz. Calculons
alors le temps de débordement du TIMER correspondant à une pré-division de 2.

Le TIMER TMR0 est un compteur de 8 bits qui compte 256 périodes d’horloge. Puisque la
période d’horloge est multipliée par 2, alors le temps de débordement du TIMER est égal à
256*2*1 μs soit 512 μs.

Avec un pré-diviseur de 256, on aura un temps de débordement égal à 256*256*1 μs soit


65536 μs.

Si ce temps est insuffisant, on pourrait utiliser un compteur de boucle « i ».

 Pour i cycles et TMR0 initialisé à 0 : DIV: valeur de pré-diviseur ;


TMR0 : valeur initiale pré-chargée (ou
initiale) dans le registre TMR0 ;
i : nombre de cycles = nombre de
 Pour i cycles et initialement le TMR0 ≠ 0 : boucles = nombre de débordements
(nombre de passages du TMR0 de
255 à 0) ;
Fosc : fréquence de l’oscillateur ;
Tc = temps écoulé pour i cycles.

7
2.5. TIMER0 en mode comptage
Pour configurer le module TMR0 en mode compteur, il faut au préalable que :

T0CS = 1 (bit 5 du registre OPTION_REG)

Le contenu du registre TMR0 est alors incrémenté à chaque front du signal présent sur la
broche RA4/T0CKI :

 front montant si T0SE = 0 (bit 4 du registre OPTION_REG)


 front descendant si T0SE = 1
En toute rigueur, cela est vrai si le taux de pré-division (prescaler) est réglé à 1 (bit 3 du
registre OPTION_REG : PSA = 1).

A titre d’exemple, avec un taux de pré-division de 32 (PSA = 0, PS2 = 1, PS1 = 0, PS0 = 0),
le contenu du registre TMR0 est incrémenté toutes les 32 impulsions sur la broche
RA4/T0CKI.

8
THÈME 1 : MICROCONTRÔLEURS
SEQUENCE 3 : CONVERTISSEUR ANALOGIQUE NUMERIQUE (C.A.N)
1. Définition
Un Convertisseur Analogique Numérique (C.A.N) est un dispositif électronique
permettant la conversion d’un signal analogique (souvent une tension Ve) en un signal
numérique (nombre N).
Dans la plupart des microcontrôleurs, la conversion est réalisée avec un convertisseur
interne (module intégré).
2. Symbole

Figure 5
3. Principe de conversion
La conversion implémentée sur les PICs a une résolution de 10 bits c’est à dire le
résultat de la conversion est codé sur 10 bits, ce qui permet un nombre « N » allant de 0
à 1023, proportionnel aux valeurs de référence, qui sont par défaut 0 volts et 5 volts.

Cependant, il est à noter que le microcontrôleur a un seul module interne de conversion,


et plusieurs canaux de lecture des tensions analogiques mais pas simultanément.
Le microcontrôleur PIC est constitué d'un module convertisseur à 5 entrées pour le
boîtier 28 broches (16F876A) et à 8 entrées pour le boîtier 40 broches (16F877A).
Les 5 premières entrées sont sur le PortA en RA0/AN0, RA1/AN1, RA2/AN2, RA3/AN3
et RA5/AN4.
Les 3 entrées supplémentaires du boîtier 40 broches sont sur le PortE en RE0/AN5,
RE1/N6 et RE2/AN7.

Figure 6
Entre les entrées analogiques du microcontrôleur et le convertisseur analogique
numérique, on trouve un multiplexeur analogique pour aiguiller le signal à convertir.
9
Figure 7
Les tensions de référence haute et basse peuvent être choisies par programmation
parmi: Vdd ou la broche RA3 pour Vref + et Vss ou la broche RA2 pour Vref -.
Les 4 registres utilisés par le module convertisseur Analogique/Numérique sont :
- ADRESH: contient les MSB des 10 bits du résultat de la conversion.
- ADRESL: contient les LSB des 10 bits du résultat de la conversion.
- ADCON0: registre de contrôle des opérations de la fonction conversion analogique
numérique (ne fera pas l’objet d’étude).
- ADCON1: registre de contrôle de configuration du portA (et du portE pour le PIC
16F877A) en mode analogique ou numérique.

Le résultat de la conversion sera stocké dans les registres « ADRESH » et « ADRESL »,


respectivement pour la partie haute et basse.
Pour effectuer ces conversions, le compilateur MikroC PRO offre une bibliothèque
prédéfinie : ADC pour faire la conversion.
Cette bibliothèque contient les fonctions suivantes :

Unsigned int N ; // Déclaration d’une variable à 2 octets


ADC_Init() ; // Initialisation du module convertisseur
N = ADC_Read (2) ; // Lecture après initialisation de la valeur du convertisseur sur le canal 2
N = ADC_Get_Sample(2) ; // Lecture de la valeur du convertisseur sur le canal 2

10
Pour utiliser cette bibliothèque, on peut observer, simuler et analyser le programme
suivant :
//Déclaration d’une variable à 2 octets
Unsigned int valeur;

void main ( )
{
//Configurations et Initialisation des ports
TRISB = 0;
TRISC = 0;
PORTB = 0;
PORTC = 0;
ADC_Init() ; // Initialisation du module convertisseur

while(1) //Boucle infinie.


{
valeur = ADC_Read(0); //Conversion sur le canal 0.
//Affichage des 8 bits de poids le plus faible sur le port B.
PORTB = valeur;
// Affichage des 2 bits de poids le plus fort sur le port C.
PORTC = valeur>>8;
}
}

Figure 10

11
4. Registre ADCON1
C’est un registre qui permet le contrôle de la configuration du portA et du portE en mode
analogique ou numérique.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0

Résultat Bits non implantés Bits de contrôle de la


format configuration des Ports.

Au reset : ADCON1 = 00000000 ;

 Bit 7: ADFM = A/D Result format.

ADFM = 1: Le résultat de la conversion est justifié à droite. ADRESH ne contient que les
2 bits MSB du résultat. Les 6 autres bits de ce registre sont lus comme des "0".

ADRESH ADRESL

0 0 0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

10 Bits du résultat

ADFM = 0: Le résultat de la conversion est justifié à gauche. ADRESL ne contient que


les 2 bits LSB du résultat. Les 6 autres bits de ce registre sont lus comme des "0".

ADRESH ADRESL

B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 0 0 0 0 0 0

10 bits du résultat

 Bit 6, bit 5 et bit 4 : bits non implantés

 Bit 3, bit 2, bit 1 et bit 0 : PCFG3 ; PCFG2 ; PCFG1 et PCFG0. Bits de contrôle de la
configuration des Ports.
Ces bits permettent de configurer les entrées analogiques ou digitales sur le portA et le
portE. Ils permettent également de choisir pour VREF+ entre VDD et RA3 et pour VREF-
entre VSS et RA2.

12
5. Configuration des PORTs en fonction des 4 bits PCFG:
A = Entrée Analogique.
D = I/O Digitale (numérique).

PIC 16F876
Tensions
PIC 16F877 de
4 bits PCFG références
PORTE PORTA
PCFG3 PCFG2 PCFG1 PCFG0 AN7/RE2 AN6/RE1 AN5/RE0 AN4/RA5 AN3/RA3 AN2/RA2 AN1/RA1 AN0/RA0 Vref+ Vref
0 0 0 0 A A A A A A A A VDD VSS
0 0 0 1 A A A A Vref+ A A A RA3 VSS
0 0 1 0 D D D A A A A A VDD VSS
0 0 1 1 D D D A Vref+ A A A RA3 VSS
0 1 0 0 D D D D A D A A VDD VSS
0 1 0 1 D D D D Vref+ D A A RA3 VSS
0 1 1 X D D D D D D D D VDD VSS
1 0 0 0 A A A A Vref+ Vref- A A RA3 RA2
1 0 0 1 D D A A A A A A VDD VSS
1 0 1 0 D D A A Vref+ A A A RA3 VSS
1 0 1 1 D D A A Vref+ Vref- A A RA3 RA2
1 1 0 0 D D D A Vref+ Vref- A A RA3 RA2
1 1 0 1 D D D D Vref+ Vref- A A RA3 RA2
1 1 1 0 D D D D D D D A VDD VSS
1 1 1 1 D D D D Vref+ Vref- D A RA3 RA2

Remarques :

 Au reset, le registre ADCON1 est initialisé à 0x00. Cela signifie que les 5 bits du
PortA et les 3 bits du PortE sont configurés en entrées analogiques.
 Pour récupérer les 5 bits du PortA et les 3 bits du PortE en tant que I/O digitales il
faut écrire la valeur 0x86 ou la valeur 0x87 dans le registre ADCON1.

13

Vous aimerez peut-être aussi