0% ont trouvé ce document utile (0 vote)
8 vues6 pages

Interruptions et Timers en Microcontrôleurs

Transféré par

mohamedseddikslimane
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)
8 vues6 pages

Interruptions et Timers en Microcontrôleurs

Transféré par

mohamedseddikslimane
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

THÈME 1 : MICROCONTRÔLEURS THÈME 1 : MICROCONTRÔLEURS

SEQUENCE 1 : SOURCES D’INTERRUPTION


Sommaire 1. Définition d’une interruption
Page 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
Séquence 1 : routine) d’interruption. A la fin du programme d’interruption, le microcontrôleur reprend
SOURCES D’INTERRUPTION le programme principal à l’endroit où il s’est arrêté.

1. Définition d’une interruption.................................................................................2 2. Étapes de déroulement d’une interruption

2. Étapes de déroulement d’une interruption ..........................................................2 Le programme principal se


1 déroule normalement.
3. Registre de configuration des interruptions ........................................................3
Une interruption survient, le
4. Schéma synoptique du registre INTCON du PIC 16F87xA ................................4 2 microcontrôleur effectue les
tâches suivantes :
Séquence 2 :
TIMERS Termine l’instruction en cours de
3 traitement (instruction Xn)
1. Introduction ..........................................................................................................5
Saute vers la routine
2. Timer0 ..................................................................................................................5 4 d’interruption (début routine)
2.1. Schéma du timer0 ...............................................................................................5
Exécute les instructions de la
2.2. Fonctionnement ...................................................................................................5 5 routine (instructions : Y0 Yn )
2.3. Registre de contrôle : OPTION_REG .................................................................6
Revient au programme principal
2.4. TIMER0 en mode temporisation ou contrôle du temps ......................................7 6 et exécute l’instruction Xn+1
2.5. TIMER0 en mode comptage ...............................................................................7 Figure 1 : déroulement d’une interruption

Séquence 3 : 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
CONVERTISSEUR ANALOGIQUE NUMERIQUE (C.A.N)
réponse aux évènements déclencheurs des interruptions activées par l’utilisateur.
1. Définition ..............................................................................................................8 On distingue deux types d’interruption :
 Interruptions externes : ce sont des interruptions provenant des périphériques
2. Symbole ...............................................................................................................8
ouvertes sur le monde extérieur (reset, bouton poussoir, clavier, changement
3. Principe de conversion ........................................................................................8 d’état d’un signal extérieur, communication série, etc…).
4. Registre ADCON1 .............................................................................................11
 Interruptions internes : ce sont des interruptions provenant des périphériques
5. Configuration des PORTS en fonctions des 4 bits PCFG ................................12 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

1 2
3. Registre de configuration des interruptions RBIF (RB Port Change Interrupt Flag) – Bit 0
Le registre INTCON (INTerrupt CONtroller) est le registre principal de contrôle et de  ‘1’ : Indicateur d’interruption du changement de RBI est actif.
 ‘0’ : Indicateur d’interruption du changement de RBI est non actif.
gestion des interruptions.
Le registre INTCON est parfois différent d’un PIC à un autre. Il est impératif de revenir REMARQUES
au document constructeur pour chaque type de microcontrôleur.
Dans cette partie on s’intéresse au registre INTCON pour la configuration des  Les drapeaux (T0IF, INTF, RBIF) doivent être remis à zéro par le programme
interruptions externes. C’est un registre de bits configurables en lecture ou écriture. de traitement de l’interruption.
 Le bit INTEDG (bit 6) du registre OPTION_REG permet de sélectionner le
Registre INTCON pour PIC16F84A type du front de l’interruption externe (RB0/INT) :
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0  ‘1’ : Front montant
 ‘0’ : front descendant
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
Registre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Registre INTCON pour PIC16F87x
OPTION_REG
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF


À 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.
Au reset : INTCON = 0000000X
GIE (Global Interrupt Enable bit) – Bit 7
 ‘1’ : Activer toutes les interruptions 4. Schéma synoptique du registre INTCON du PIC 16F87XA
 ‘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 Figure 2


 ‘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 4
THÈME 1 : MICROCONTRÔLEURS Le contenu du TMR0 est accessible dans le fichier de registres aussi bien en lecture qu’en
écriture.
SEQUENCE 2 : TIMERS 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
1. Introduction INTCON.T0IF=1.
Les timers sont des modules intégrés dans les microcontrôleurs. Ils assurent la fonction
2.3. Registre de contrôle : OPTION_REG
comptage. Il existe 3 types de timers : TIMER0, TIMER1 et TIMER2. Le nombre de
Le tableau suivant résume les huit bits du registre OPTION_REG:
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 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
/RBUP INTEDG T0CS T0SE PSA PS2 PS1 PS0
(voir tableau ci-dessous).
Chacun de ces bits à une signification et une fonction :
Bit7: /RBUP = Pull up Enable bit on PortB.
Microcontrôleur 16F84A 16F628A 16F876A 16F877A
 1 = Pull up désactivé sur le PortB. (Pas de résistances)
TIMER0 (8 bits)  0 = Pull up activé. (Résistances de tirage reliées à +VDD)
TIMER/Compteur TIMER0 (8 bits) TIMER1 (16 bits) Bit6 : INTEDG = Interrupt Edge select bit.
TIMER2 (8bits)  1 = Interruption si front montant sur RB0/INT
 0 = Interruption si front descendant sur RB0/INT.
On se limite dans ce cours à l’étude du TIMER0. Bit5 : TOCS = Timer TMR0 Clock Source select bit.
 1 = L’horloge du Timer est l’entrée RA4/Clk
2. TIMER0  0 = Le Timer utilise l’horloge interne du PIC.
Le TIMER0 est incrémenté en permanence soit par une horloge interne (mode TIMER) soit Bit4 : TOSE = Timer TMR0 Source Edge select bit.
par une horloge externe appliquée à la broche RA4 (mode compteur).  1 = Le Timer s’incrémente à chaque front descendant sur RA4/Clk.
2.1. Schéma du TIMER0  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
Figure 3 1 0 1 64
2.2. Fonctionnement 1 1 0 128
Le bit T0CS permet de choisir l’horloge interne (Fosc/4) ou externe RA4/T0CKI dont 1 1 1 256
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 NB : Quand le pré-diviseur est attribué au watchdog (PSA=1), le TMR0 est pré-divisé par 1
rapport, allant de 2 à 256. Ce rapport est fixé par les bits PS0, PS1 et PS2. (sans pré-division).

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 6
2.4. TIMER0 en mode temporisation ou contrôle du temps THÈME 1 : MICROCONTRÔLEURS
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
SEQUENCE 3 : CONVERTISSEUR ANALOGIQUE NUMERIQUE (C.A.N)
fréquence que nous verrons dans la suite. 1. Définition
Un Convertisseur Analogique Numérique (C.A.N) est un dispositif électronique
Principe de fonctionnement permettant la conversion d’un signal analogique (souvent une tension Ve) en un signal
Composition générale d'un TIMER0 sur un microcontrôleur PIC : numérique (nombre N).
Oscillateur Fosc= 4MHz Oscillateur Fint= 1MHz Fp=(Fint/DIV) TC= (256*DIV) µs Dans la plupart des microcontrôleurs, la conversion est réalisée avec un convertisseur
Pré-diviseur Timer0
Externe Interne interne (module intégré).
Tint = 1µs (DIV) Tp= 1µs*DIV (DIV 256)
(Quartz) (DIV 4)
2. Symbole
𝟐𝟐𝟐𝟐𝟐𝟐∗𝐃𝐃𝐃𝐃𝐃𝐃
 Pour un cycle et TMR0 initialisé à 0 : 𝐓𝐓𝐓𝐓 = 
𝐟𝐟𝐟𝐟𝐟𝐟𝐟𝐟/𝟒𝟒

Figure 5
 Pour i cycles et TMR0 initialisé à 0 : T i = TC * i ⇒  3. Principe de conversion
FORMULE GENERALE : 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
 Pour i cycles et initialement le TMR0 ≠ 0 :  à 1023, proportionnel aux valeurs de référence, qui sont par défaut 0 volts et 5 volts.
Avec :
DIV: valeur du pré-diviseur ;
TMR0 : valeur initiale pré-chargée (ou initiale) dans le registre TMR0 ;
i : nombre de cycles = nombre de boucles = nombre de débordements (nombre de passages
du TMR0 de 255 à 0) ;
Fosc : fréquence de l’oscillateur ;
TC = temps écoulé pour un cycle Cependant, il est à noter que le microcontrôleur a un seul module interne de conversion,
Ti = temps écoulé pour i cycles. 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).
2.5. TIMER0 en mode comptage Les 5 premières entrées sont sur le PortA en RA0/AN0, RA1/AN1, RA2/AN2, RA3/AN3
Pour configurer le module TMR0 en mode compteur, il faut au préalable que : et RA5/AN4.
T0CS = 1 (bit 5 du registre OPTION_REG) Les 3 entrées supplémentaires du boîtier 40 broches sont sur le PortE en RE0/AN5,
RE1/N6 et RE2/AN7.
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.

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

Figure 7
Les tensions de référence haute et basse peuvent être choisies par programmation while(1) //Boucle infinie.
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. valeur = ADC_Read(0); //Conversion sur le canal 0.
- 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 //Affichage des 8 bits de poids le plus faible sur le port B.
numérique (ne fera pas l’objet d’étude). PORTB = valeur;
- ADCON1: registre de contrôle de configuration du portA (et du portE pour le PIC // Affichage des 2 bits de poids le plus fort sur le port C.
16F877A) en mode analogique ou numérique.
PORTC = valeur>>8;
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

Figure

9 10
4. Registre ADCON1 5. Configuration des PORTs en fonction des 4 bits PCFG:
C’est un registre qui permet le contrôle de la configuration du portA et du portE en mode A = Entrée Analogique.
analogique ou numérique. D = I/O Digitale (numérique).

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


PIC 16F876
ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0 PIC 16F877 Tensions
4 bits PCFG de références
PORTE PORTA

Résultat Bits non implantés Bits de contrôle de la PCFG3 PCFG2 PCFG1 PCFG0 AN7/RE2 AN6/RE1 AN5/RE0 AN4/RA5 AN3/RA3 AN2/RA2 AN1/RA1 AN0/RA0 Vref+ Vref-

format configuration des Ports. 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
Au reset : ADCON1 = 00000000 ;
0 1 0 0 D D D D A D A A VDD VSS

 Bit 7: ADFM = A/D Result format. 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

ADFM = 1: Le résultat de la conversion est justifié à droite. ADRESH ne contient que les 1 0 0 0 A A A A Vref+ Vref- A A RA3 RA2

2 bits MSB du résultat. Les 6 autres bits de ce registre sont lus comme des "0". 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
ADRESH ADRESL 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
0 0 0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 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
10 Bits du résultat
Remarques :

ADFM = 0: Le résultat de la conversion est justifié à gauche. ADRESL ne contient que  Au reset, le registre ADCON1 est initialisé à 0x00. Cela signifie que les 5 bits du
les 2 bits LSB du résultat. Les 6 autres bits de ce registre sont lus comme des "0".
PortA et les 3 bits du PortE sont configurés en entrées analogiques.

ADRESH ADRESL  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.
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.

11 12

Vous aimerez peut-être aussi