Notions sur les interruptions du microcontrôleur PIC16F877A

Principe : 

Afin d’agir en réponse à un événement extérieur sans nécessiter de test continue (test de la disponibilité d’un événement externe) et gagner en temps d’exécution , les processeur possèdent un mécanisme d’interruption. Celui-ci offre la possibilité de modifier le déroulement du programme lors de l’occurrence de l’événement extérieur. L’adjonction au cette ligne d’interruption permet, lorsque cette ligne devient active, d’engendrer une requête d’interruption. Le processeur  appelle alors automatiquement une procédure appelée routine d’interruption qui se trouve à une position prédéfinie indiquée via le vecteur d’IT.

On distingue deux type d’interruptions :

  • les interruptions provenant de périphériques ouvert sur le monde extérieur (reset, bouton poussoir, clavier, changement d’état d’un signal extérieur, communication série,…
  • les interruptions provenant de périphériques internes (timer,passage par zero d’un compteur interne, ADC, ..)

Plus de détails sur les interruptions (PDF1 & PDF2)

Les sources d’interruptions du microcontrôleur 16F877A

Le microcontrôleur 16F877A possède 15 sources d’interruptions :

  1. Timer 0
  2. Timer 1
  3. RB0 du port B
  4. Changement d’état du port B
  5. Port parallèle (lecture/ecriture)
  6. Convertisseur ADC
  7. Transmission sur UART
  8. Réception sur UART
  9. Synchronisation du port série
  10. CCP1 (Capture, Compare, PWM)
  11. CCP2 (Capture, Compare, PWM)
  12. Timer 2
  13. Comparateur
  14. Opération d’écriture dans la mémoire EEPROM
  15. Collusion de bus

Dans cet article on va s’intéresser au registre INTCON ( interrupt configuration register ) pour la configuration des interruptions externes. C’est un registre de bits configurables en lecture ou écriture.

 registre INTCON 16F877A

  •  GIE (Global Interrupt Enable) – Bit 7
    • ‘1’ : Activer toutes les interruptions
    • ‘0’ : Désactiver toutes les interruptions
  • PEIE (Peripheral Interrupt Enable ) – Bit 6
    • ‘1’ : Activer toutes les interruptions des périphériques
    • ‘0’ : Désactiver toutes les interruptions des périphériques
  • TMR0IE (Timer 0 Interrupt Enable) – Bit 5
    • ‘1’ : Activer  l’interruption du TIMER0
    • ‘0’ : Désactiver l’interruption du TIMER0
  • INTE (RB0/INT External Interrupt Enable) – Bit 4
    • ‘1’ : Activer  l’interruption externe
    • ‘0’ : Désactiver l’interruption externe
  • RBIE (RB Port change Interrupt Enable) – Bit 3
    • ‘1’ : Activer  l’interruption de changement du port B
    • ‘0’ : Désactiver l’interruption de changement du  port B
  • TM0IF (Timer 0 Overflow Interrupt Flag) – Bit 2
    • ‘1’ : Indicateur d’interruption de débordement du Timer 0 (active)
    • ‘0’ : Indicateur d’interruption de débordement du Timer 0 (non active)
  • INTF (RB0/INT External Interrupt Flag) – Bit 1
    • ‘1’ : Indicateur d’interruption externe  (active)
    • ‘0’ : Indicateur d’interruption externe  (non active)
  • RBIF (RB Port Change  Interrupt Flag) – Bit 0
    • ‘1’ : Indicateur de d’interruption  du changement du port B (active)
    • ‘0’ : Indicateur de d’interruption  du changement du port B (non active)

Le bit INTEDG de registre OPTION_REG Permet de sélectionner le type du front de l’interruption externe (RB0/INT) :

  • ‘1’ : Front montant
  • ‘0’ : front descendant

 

Revenir au projet afficheur graphique GLCD 64×128 à base du PIC16F877A