Vous êtes sur la page 1sur 10

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
2

Page 1
THÈME 1 : 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 déroule
1 normalement.
Une interruption survient, le microcontrôleur
2 effectue les tâches suivantes :
Termine l’instruction en cours de traitement
3 (instruction Xn)
Saute vers la routine d’interruption (début
4 routine)
Exécute les instructions de la routine
5 (instructions : Y0 Yn )

Revient au programme principal et exécute


6 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:
Registre de configuration des interruptions
Le registre INTCON (INTerrupt CONtroller) est le registre principal de contrôle et de gestion des
interruptions.
Microcontrôleur 16F84A 16F628A 16F88 16F876A 16F877A
Nombre de Sources d’interruption 4 10 12 14 15
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 8 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
Page 2
– Bit 7 GIE (Global Interrupt Enable bit) 
‘1’ : Activer toutes les interruptions ‘0’ : Désactiver toutes les interruptions
– Bit 6 PEIE: PIC16F87x (Peripheral Interrupt Enable bit)
‘1’ : Activer toutes les interruptions des périphériques 
‘0’ : Désactiver toutes les interruptions des périphériques
– Bit 6 EEIE: PIC16F84A (EEPROM Interrupt Enable bit)
‘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.
– Bit 5 T0IE (Timer0 Interrupt Enable bit)
‘1’ : Activer l’interruption du Timer0.‘0’ : Désactiver l’interruption du Timer0.
– Bit 4 INTE (RB0/Int Interrupt Enable bit)
‘1’ :Activer l’interruption externe sur la broche RB0.
‘0’ :Désactiver l’interruption externe sur la broche RB0.
– Bit 3 RBIE (RB Port Change Interrupt Enable bit)
‘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).
– Bit 2 T0IF (Timer0 Interrupt Flag bit)
‘1’ : Indicateur d’interruption de débordement du Timer0 est actif.
‘0’ : Indicateur d’interruption de débordement du Timer0 est non actif.
– Bit 1 INTF (RB0/INT External Interrupt Flag)
‘1’ : Indicateur d’interruption externe sur RB0 est actif.
‘0’ : Indicateur d’interruption externe sur RB0 est non actif.

– Bit 0 RBIF (RB Port Change Interrupt Flag)


‘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

Page 3
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
TIMER/Compteur TIMER0 (8 bits) 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

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

Page 4
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).
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
/RBUP INTEDG TOCS TOSE PSA PS2 PS1 PS0

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

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

Page 5
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 Pour i cycles et initialement le TMR0 ≠ 0 :

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.

Page 6
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

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.

Entre les entrées analogiques du microcontrôleur et le convertisseur analogique numérique, on


trouve un multiplexeur analogique pour aiguiller le signal à convertir

Page 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

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;
}}

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

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’

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

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.

Page 9
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 VREFentre VSS et RA

5. Configuration des PORTs en fonction des 4 bits PCFG:


A = Entrée Analogique. D = I/O Digitale (numérique)

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.

Page 10

Vous aimerez peut-être aussi