06 PIC Les Interruptions
06 PIC Les Interruptions
06 PIC Les Interruptions
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
3
30/12/2021 Programmation des microcontrôleurs PIC ENSA -Agadir
Les interruptions : Cas du PIC 16F84
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
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
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 :
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
//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
}
}
//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;
}