Interruptions

 

Il est possible de repérer la survenance d'un événement extérieur en scrutant régulièrement un port d'entrée, mais un événement bref peut être manqué s'il se produit entre deux scrutations, l'utilisation des interruptions évite ce risque, par contre, l'événement arrivant à n'importe quel moment, il faut gérer sa gestion et une reprise correcte du programme

Principe:

Lorsqu'une interruption est provoquée:

Pendant la routine d'interruption, les autres interruptions éventuelles ne sont pas traitées

 

Les interruptions, quelles qu'elles soient, ne sont autorisées que si le bit 7 (GIE) du registre INTCON (0Bh) est à 1

Les interruptions

Sauvegarde des registres:

La seule chose dont le programme se souvient après être parti en interruption, est l'instruction à laquelle il doit revenir, tout ce qui est nécessaire doit donc être sauvegardé dans la routine d'interruption, y compris l'état des registres (au moins STATUS et W), sans modifier leur contenu.

Il faut sauvegarder W en premier sans modifier STATUS:

Puis on sauvegarde STATUS

Interruption externe: (RB0/Int)

L' interruption se produit sur le front montant ou descendant d'une impulsion appliquée sur la broche 6: RB0/INT

Il s'agit du front montant si le bit 6 (INTEDG) du registre OPTION_REG (81h) est à 1

Il s'agit du front descendant si le bit 6 (INTEDG) du registre OPTION_REG (81h) est à 0

L' interruption est autorisée si le bit 4 (INTE) du registre INTCON (0Bh) est à 1

Après un reset ce bit est à 0

Il faut le mettre à 0 avant de le mettre à 1

L'interruption n'agira pour une sortie de SLEEP que si ce bit a été mis à 1 avant d'entrer en mode SLEEP

Lorsqu'une interruption valide a eu lieu, le bit 1 (INTF) du registre INTCON (0Bh) passe à 1, penser à le remettre à 0

 

Interruption par dépassement du Timer (Timer overflow):

L'Interruption est provoquée quand le registre TMR0, c'est à dire le compteur, passe de FFh à 00h

L'interruption est autorisée si le bit 5 T0IE du registre INTCON (0Bh) est à 1

Ce bit doit être mis à 0 avant de ré-autoriser l'interruption

Après un reset ce bit est à 0

Cette interruption ne peut pas être utilisée pour sortir du mode SLEEP

Lorsqu'une interruption valide a eu lieu, le bit 2 (T0IF) du registre INTCON (0Bh) passe à 1, penser à le remettre à 0

 

Interruption par changement d'état (Interrupt on change):

Les ports RB4 RB5 RB6 et RB7 sont concernés, il faut qu'ils soient configurés en entrées.

L' interruption se produit lorsque le signal sur une de ces entrées change pendant une durée au moins égale à la durée d'un cycle

L' interruption est autorisée si le bit 3 (RBIE) du registre INTCON (0Bh) est à 1

Après un reset ce bit est à 0

Lorsqu'une interruption valide a eu lieu, le bit 0 (RBIF) du registre INTCON (0Bh) passe à 1, penser à le remettre à 0

 

Data EEPROM write complete:

Cette interruption peut être générée à la fin de la procédure d'écriture de l'EEPROM

L' interruption est autorisée si le bit 6 (EEIE) du registre INTCON (0Bh ou 8Bh) est à 1

Lorsque l'écriture a eu lieu, le bit 4 (EEIF) du registre EECON1 (88h) passe à 1

Penser à le remettre à 0 avant de lancer une écriture dans l'EEPROM

 

Interruption concernée:

Les registres ayant étés sauvegardés, il faut ensuite vérifier si les interruptions sont autorisées et quelle est celle qui a eu lieu par des btfsc et btfss :

CasRB0

CasTimer

CasRB4

CasEEPROM

Récupération des registres:

Il faut d'abord récupérer le registre STATUS, sachant que NOT_TO et NOT_PD ne sont pas inscriptibles:

Puis récupérer le registre W sans modifier STATUS; il y aurait un risque si W contenait h'00', dans ce cas le bit Z de STATUS passerait à 1 s'il n'y est déja; il faut donc utiliser une instruction qui ne touche pas à Z; c'est le cas de swapf qu'il faut donc utiliser deux fois:

Retour au sommaire

© 1999-2009 A. Ducros F5AD