Vous êtes sur la page 1sur 7

12.

Les interruptions
Voil un chapitre qui fera certainement peur beaucoup de futurs programmeurs. Pourtant, le mcanisme des interruptions est trs ais comprendre, et galement mettre en uvre, pour autant que lon travaille de manire propre et structure.

12.1 Quest-ce quune interruption ? Imaginez une conversation normale : Chaque interlocuteur prend la parole quand vient son tour de parler. Survient alors un vnement extrieur dont le traitement est urgent. Par exemple, un piano tombe du 3me tage de limmeuble au pied duquel vous discutez. Vous imaginez bien que votre interlocuteur ne va pas attendre la fin de votre phrase pour vous signaler le danger. Il va donc vous INTERROMPRE durant le cours normal de votre conversation., afin de pouvoir TRAITER IMMEDIATEMENT lEVENEMENT extrieur.

Les interlocuteurs reprendront leur conversation o elle en tait arrive, sitt le danger cart (sils ont vit le piano, bien sr). Et bien, pour les programmes, cest exactement le mme principe : Votre programme se droule normalement. Survient un vnement spcifique. Le programme principal est interrompu (donc, subit une INTERRUPTION), et va traiter lvnement, avant de reprendre le programme principal lendroit o il avait t interrompu.

Linterruption est donc une RUPTURE DE SEQUENCE ASYNCHRONE, cest dire non synchronise avec le droulement normal du programme. Vous voyez ici lopposition avec les ruptures de squences synchrones, provoques par le programme lui-mme (goto, call, btfss).

12.2 Mcanisme gnral dune interruption Nous pouvons dire, sans nous tromper de beaucoup, quune routine dinterruption est un sous-programme particulier, dclench par lapparition dun vnement spcifique. Cela a lair un peu ardu, mais vous allez voir que cest trs simple. Voici donc comment cela fonctionne : Le programme se droule normalement Lvnement survient Le programme achve linstruction en cours de traitement Le programme saute ladresse de traitement de linterruption Le programme traite linterruption

107

Le programme saute linstruction qui suit la dernire excute dans le programme principal. Il va bien sr de soi que nimporte quel vnement ne peut pas dclencher une interruption. Il faut que 2 conditions principales soient remplies : Lvnement en question doit figurer dans la liste des vnements susceptibles de provoquer une interruption pour le processeur sur lequel on travaille Lutilisateur doit avoir autoris linterruption, cest dire doit avoir signal que lvnement en question devait gnrer une interruption.

Organigramme gnral de lexcution dune interruption. Que pouvons-nous dire en voyant cet ordinogramme ? Et bien, nous pouvons dj nous dire que le programme principal ne sait pas quand il est interrompu, il est donc crucial de lui remettre ses registres dans ltat o ils taient avant linterruption. En effet, supposons que linstruction xxx ait positionn un flag (par exemple, le bit dindicateur Z). Si par malheur, la routine dinterruption a modifi ce bit, le programme ne pourra pas se poursuivre normalement. Nous voyons galement que linstruction xxx termine son excution avant de se brancher sur la routine dinterruption. Une instruction commence nest donc jamais interrompue.

12.3 Mcanisme dinterruption sur les PIC Bien entendu, les PIC rpondent au fonctionnement gnral ci-dessus, mais ils ont galement leurs particularits. Voyons maintenant le principe des interruptions sur les PIC -

Tout dabord, ladresse de dbut de toute interruption est fixe. Il sagit toujours de ladresse 0x04. Toute interruption provoquera le saut du programme vers cette adresse. Toutes les sources dinterruption arrivant cette adresse, si le programmeur utilise plusieurs sources dinterruptions, il faudra quil dtermine lui-mme laquelle il est en train de traiter. Les PIC en se connectant cette adresse, ne sauvent rien automatiquement, hormis le contenu du PC, qui servira connatre ladresse du retour de linterruption. Cest donc lutilisateur de se charger des sauvegardes. Le contenu du PC est sauv sur la pile interne (8 niveaux). Donc, si vous utilisez des interruptions, vous ne disposez plus que de 7 niveaux dimbrication pour vos sousprogrammes. Moins si vous utilisez des sous-programmes dans vos interruptions. Le temps de raction dune interruption est calcul de la manire suivante :

Le cycle courant de linstruction est termin. Le flag dinterruption est lu au dbut du cycle suivant.
108

Celui-ci est achev, puis le processeur sarrte un cycle pour charger ladresse 0x04 dans PC. Le processeur se connecte alors ladresse 0x04 o il lui faudra un cycle supplmentaire pour charger linstruction excuter. Le temps mort total sera donc compris entre 3 et 4 cycles. Remarquez que :

Une interruption ne peut pas tre interrompue par une autre interruption. Les interruptions sont donc invalides automatiquement lors du saut ladresse 0x04 par leffacement du bit GIE (que nous allons voir). Les interruptions sont remises en service automatiquement lors du retour de linterruption. Linstruction RETFIE agit donc exactement comme linstruction RETURN, mais elle repositionne en mme temps le bit GIE. Les interruptions sur les PIC

109

12.4 Les sources dinterruptions du 16F84 Le 16F84 est trs pauvre ce niveau, puisquil ne dispose que de 4 sources dinterruptions possibles (contre 13 pour le 16F876 par exemple). Les vnements susceptibles de dclencher une interruption sont les suivants : TMR0 : Dbordement du timer0 (tmr0). Une fois que le contenu du tmr0 passe de 0xff 0x00, une interruption peut tre gnre. Nous utiliserons ces proprits dans le chapitre sur le timer 0. EEPROM : cette interruption peut tre gnre lorsque lcriture dans une case EEPROM interne est termine. Nous verrons ce cas dans le chapitre sur lcriture en zone eeprom. RB0/INT : Une interruption peut tre gnre lorsque, la pin RB0, encore appele INTerrupt pin, tant configure en entre, le niveau qui est appliqu est modifi. Nous allons tudier ce cas ici. PORTB : De la mme manire, une interruption peut tre gnre lors du changement dun niveau sur une des pins RB4 RB7. Il nest pas possible de limiter linterruption une seule de ces pins. Linterruption sera effective pour les 4 pins ou pour aucune.

12.5 Les dispositifs mis en uvre Comment interdire ou autoriser les interruptions, comment dtecter quel est lvnement dclencheur, et comment les grer ? Nous allons aborder ceci dabord de manire symbolique, pour vous aider bien visualiser la procdure. Imaginons un htel. Le groom de service reprsente notre programme. Lhtel comporte 4 chambres, et chaque chambre est quipe dun bouton-poussoir. Chaque bouton-poussoir servant appeler le groom, est reli une lampe laccueil de lhtel. Chaque lampe a la possibilit de faire rsonner une sonnette si linterrupteur gnral de la sonnette est positionn sur ON, et si linterrupteur particulier reliant chaque lampe la sonnette est enclench. Voil donc le schma obtenu (attention, cest un schma symbolique, pas lectrique, les lignes reprsentent la circulation de linformation, pas un courant lectrique) :

110

Quand vous comprendrez bien ce petit schma symbolique, vous aurez compris les interruptions. Vous voyez tout de suite quil y a deux mthodes pour que le groom soit prvenu. Soit via la lampe, soit via la sonnette. Pour la premire mthode, le groom doit venir voir les lampes intervalles rguliers pour vrifier si personne na appel. Il doit donc venir SCRUTER le tableau de signalisation. Cest la mthode de SCRUTATION. Avec la sonnette, le groom est INTERROMPU dans son travail par celle-ci. Il na pas besoin de venir scruter inutilement, mais il sera drang dans son travail par la sonnette. Cest la mthode des INTERRUPTIONS Notez dj les points suivants : Le locataire de la chambre ne peut dcider quelle mthode sera utilise, cest le groom qui dcide de valider ou non les sonnettes. Le groom peut inhiber toutes les sonnettes en une seule fois, ou dcider quelle chambre va pouvoir actionner la sonnette. Les interrupteurs de validation nagissent pas sur les lampes. Si le groom est interrompu dans son travail par la sonnette, il doit de toute faon aller regarder les lampes pour voir qui a sonn. Sauf sil sait quil na autoris quune seule chambre actionner la sonnette. Ce qui napparat pas sur ce schma simplifi, mais quil faut savoir, cest que, une fois la lampe allume, elle le reste. Cest le groom qui doit lteindre manuellement.

111

Mettons donc tout ceci en pratique sur le 16F84. Vous avez dj compris que lampes et interrupteurs taient, dans le 16F84, des bits de registres particuliers. Voici maintenant le registre principal de gestion des interruptions pour le 16F84.

12.6 Le registre INTCON (INTerrupt CONtrol) Ce registre se situe ladresse 0x0B, dans les 2 banques. Il est donc toujours accessible. Il est dtaill figure 4-5 page 17. Cest un registre de bits, donc, chaque bit a une fonction particulire. Voici le dtail de ces bits : b7 : GIE Global Interrupt Enable bit. Il permet de valider ou dinvalider toutes les interruptions dune seule fois. Ce bit correspond donc notre interrupteur de validation gnrale. b6 : EEIE Eeprom write complete Interrupt Enable bit. Ce bit permet de valider linterruption de fin dcriture en eeprom (nous tudierons plus tard le mcanisme dcriture eeprom). b5 : T0IE Tmr0 Interrupt Enable bit : Valide linterruption gnre par le dbordement du timer0. b4 : INTE INTerrupt pin Enable bit : Valide linterruption dans le cas dune modification de niveau de la pin RB0. ATTENTION : rappelez-vous le bit 6 du registre OPTION, qui dtermine quel est le sens de transition qui provoque linterruption. On pourra donc choisir si cest une transition 0->1 ou 1->0 qui provoque linterruption, mais pas les deux ensemble. b3 : RBIE RB port change Interrupt Enable bit : Valide les interruptions si on a changement de niveau sur une des entres RB4 RB7. b2 : T0IF Tmr0 Interrupt Flag bit. Cest un Flag, donc il signale. Ici cest le dbordement du timer0 b1 : INTF INTerrupt pin Flag bit : signale une transition sur la pin RB0 dans le sens dtermin par INTEDG du registre OPTION (b6) b0 : RBIF

112

Port Interrupt Flag bit : signale quune des entres RB4 RB7 a t modifie. Remarque Rappelez-vous que les flags ne se remettent pas 0 tout seuls. Cest votre programme qui doit sen charger, sous peine de rester indfiniment bloqu dans une routine dinterruption. Nous dirons que ces flags sont des FLAGS REMANENTS. Prenez garde que le reset de RBIF doit tre prcd dune lecture ou dune criture du PORTB afin de mettre fin la condition de gnration du flag dinterruption. Remarquez dj que tous les bits dont le nom se termine par E (Enable) sont en fait des commutateurs de validation (ce sont les interrupteurs de notre schma symbolique). Les bits dont le nom se termine par F sont des Flags (indicateurs). Ils sont reprsents par des lampes sur notre schma symbolique. Sur celui-ci nous avons 5 interrupteurs et 4 ampoules. Or nous navons que 8 bits dans INTCON0. Que nous manque-t-il ? Si vous regardez attentivement, il nous manque le bit EEIF. Mais, rassurez-vous, ce bit existe bien, il est tout simplement dans le registre EECON1, que nous verrons dans la leon sur les accs EEPROM. Nous allons donc transformer notre schma symbolique pour quil corresponde la ralit dun PIC 16F84.

Aprs ces explications dtailles, trop diront les habitus des processeurs, vous devez maintenant avoir compris le fonctionnement des interruptions sur le 16F84. Analysons maintenant quelques points de la routine dinterruption en elle-mme. Pour rester concrets, nous allons mlanger thorie et pratique.

113

Vous aimerez peut-être aussi