06 PIC Les Interruptions

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 12

PIC : Les interruptions

Abdelilah KAHAJI : a.kahaji@uiz.ac.ma

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 1


Les interruptions :
Notion de sous-programme
Quand une partie du programme se répète souvent, on l’écrit à part en commençant par une étiquette (TEMPO par
exemple) et se terminant par RETURN. On l’appelle alors à l’aide de CALL autant de fois qu’on le désire.

Mécanisme
L'interruption permet de prendre
en compte des événements
extérieurs qui peuvent intervenir à
n’importe quel instant et de leur
associer un traitement spécifique.
La Figure donne le déroulement du
programme lors d'une interruption
en précisant que l’instruction en
cours n’est pas interrompue

2
30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir
Les interruptions : Cas du PIC 16F84

Différentes sources d'interruption

Dans le cas du PIC 16F84, il existe 4 sources d'interruption

• INT : Interruption externe, broche RB0/INT


• TMR0 : Fin de comptage
• PORTB : Changement d'état du port B (RB7-RB4)
• EEPROM : Fin d'écriture en EEPROM

3
30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir
Les interruptions : Cas du PIC 16F84

Validation des interruptions


Les interruptions sont configurées grâce au Registre de contrôle d'interruption du PIC – INTCON

• GIE : Validation générale des interruptions


• EEIE : Validation de l’interruption de l’EEPROM
• T0IE : Validation de l’interruption du Timer
• INTE : Validation de l’interruption RB0/INT
• RBIE : Validation de l’interruption des broches RB4 à RB7
• T0IF : Drapeau d’interruption du Timer
• INTF : Drapeau d’interruption de RB0/INT
• RBIF : Drapeau d’interruption RB4à RB7

4
30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir
Les interruptions : Cas du PIC 16F84
Validation des interruptions
Les interruptions sont configurées grâce au Registre de contrôle d'interruption du PIC – INTCON

• GIE : Validation générale des interruptions


• EEIE : Validation de l’interruption de l’EEPROM
• T0IE : Validation de l’interruption du Timer
• INTE : Validation de l’interruption RB0/INT
• RBIE : Validation de l’interruption des broches RB4 à RB7
• T0IF : Drapeau d’interruption du Timer
• INTF : Drapeau d’interruption de RB0/INT
• RBIF : Drapeau d’interruption RB4à RB7

Pour que le programme en cours soit interrompu, il faut qu'un des événements extérieurs soit détecté, que
l'interruption correspondante soit validée et que la validation générale soit activée.

5
30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir
Les interruptions : Cas du PIC 16F887

• 35 instructions
• Horloge : DC au 20MHz
• Mode faible consommation
• POR : Powe on Reset
• PWRT : Power up Timer
• Mémoire SRAM: 368
• Mémoire EEPROM 256
• Entrées/sorties : 35
• Convertisseur A/N : 14 canaux, 10 bits
• EUSART : 1
• MSSP : 1
• Comparateurs : 2
• Timers 8/16 bits : 2+1
• Standby Current: – 50 nA @ 2.0V, typical
• Operating Current: – 11 μA @ 32 kHz, 2.0V, typical – 220
μA @ 4 MHz, 2.0V, typical
• Watchdog Timer Current: – 1 μA @ 2.0V, typical

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 7


Etude du PIC 16F887 : Les interruptions

Sur le 16F887, l'es interruptions sont classées en deux catégories, les interruptions primaires et
les interruptions périphériques. Elles sont gérées par les registres :

• Toutes les interruptions peuvent être validées/interdites par le bit INTCON,GIE


• Toutes les interruptions périphériques peuvent être validées/interdites par le bit INTCON,PEIE
• Chaque interruption peut être validée/interdite par son bit de validation individuel

En résumé, pour valider une interruption périphérique (par exemple), il faut positionner 3 bits, GIE,
PEIE et le bit individuel de l’interruption

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 11


Les interruptions : Cas du PIC 16F887

Déroulement d'une interruption


Lorsque l'événement déclencheur d'une interruption intervient, alors son drapeau
passe à 1 (levé). Si l'interruption a été validée au préalable (bits de validations = 1),
elle est alors déclenchée: Le programme arrête ce qu'il est en train de faire et va
exécuter la procédure d'interruption qui se trouve à l'adresse 4. Le déroulement se
fait comme suit:
1. Le processeur termine l'instruction qu'il est en train d'exécuter,
2. Le bit GIE est placé "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas dérangé pendant
l'exécution de la procédure d'interruption).
3. l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis remplacée par la valeur
0004 (adresse de la routine d'interruption).
4. Le processeur exécute la routine d'interruption.
5. A la fin de la procédure d'interruption (instruction RETFIE), le bit GIE est remis à 1 (autorisant ainsi un autre
événement). Le contenu du PC est rechargé à partir de la pile ce qui permet au programme de reprendre là
où il s'est arrêté

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 12


Etude du PIC 16F887 : Les interruptions
Déroulement d'une interruption

Deux remarques importantes sont à faire :

• Le drapeau reste à l’état haut même après le traitement de l’interruption. Par


conséquent, il faut toujours le remettre à "0" à la fin de la routine
d'interruption sinon l'interruption sera déclenchée de nouveau juste après
l'instruction RETFIE

• Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W


et STATUS doivent être sauvegardés en RAM puis restaurés à la fin de la routine
pour que le microcontrôleur puisse reprendre le programme principal dans les
mêmes conditions où il l'a laissé

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 13


Etude du PIC 16F887 : Les interruptions Exemple de programme

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 14


Etude du PIC 16F887 : Les interruptions Exemple de programme

//Déclaration des variables


unsigned char seghex[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
int i;

//Routine d’interruption
//Initialisation des ports void interrupt INT_SERVICE(void)
{
void ProgPort() int j;
{ if(INTF==1) // Ensure check INTF flag
TRISD = 0x00 ; {
TRISC0 = 0 ; for(j=0;j<10;j++)
ANSELH = 0; {
ANSEL = 0; RC0=~RC0 ;
GIE=1 ; __delay_ms(500); //Temporisation de 5s
INTE=1 ;
INTEDG=0 ; }
} INTF=0; //Rénitialisation Flag interruption
}
}

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 15


Etude du PIC 16F887 : Les interruptions Exemple de programme

//Programme principale

void main(void)
{
ProgPort();
PORTD = 0x00; //Set Port D as output
RC0=0;

while(1)
{
//this loop sends all HEX VALUE TO PORTD
for (i=0;i < 10;i++)
{
PORTD = seghex[i];
__delay_ms(1000); //add delay of 0.2 second
}
}
return;
}

30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir 16

Vous aimerez peut-être aussi