Académique Documents
Professionnel Documents
Culture Documents
Les interruptions
I. Introduction
Une interruption est un évènement qui provoque la rupture du programme principal et
l’exécution d’une procédure d'interruption. A la fin de cette procédure, le pic reprend
l’exécution du programme principal à l’endroit où il l’a laissé.
L’évènement déclencheur de l’interruption peut être une impulsion électrique externe ou une
interruption logicielle interne au pic.
Lorsqu’une interruption survient, le pic termine d’abord l'instruction en cours d’exécution
ensuite il lance l’exécution du sous-programme d'interruption.
1
II. Mécanisme de fonctionnement
La séquence classique de fonctionnement d'une interruption est la suivante :
Remarques
Le pic interdit qu’un autre évènement (interruption) vienne interrompre une
procédure d’interruption en cours d’exécution. Cependant le programmeur peut
autoriser les interruptions à l’intérieure d’une procédure d’interruption.
PC : registre de 13 bits qui pointe la mémoire flash, donc il contient l’adresse de
l’instruction qui sera exécutée.
5. Sauvegarde de l’environnement :
La procédure d’interruption commence toujours par la sauvegarde de certains
registres. C’est au programmeur de sauvegarder l’environnement de travail, c’est-à-
dire les registres qui sont utilisés dans le programme principal mais aussi dans le
sous-programme d’interruption. Le contenu de ces registres est sauvegardé en
mémoire RAM.
6. Identification de l’évènement survenu :
A l’intérieur du sous-programme d’interruption on identifie la source de
l’interruption qui a causée la rupture de l’exécution du programme principal. Nous
verrons qu’il y a plusieurs sources d’interruption.
2
7. Une fois la source identifiée, on répond au service de cette interruption, c’est-à-dire
on exécute le programme correspondant.
8. Restauration de l’environnement :
Une fois l’exécution du programme correspondant à la source d’interruption
terminée, on doit restaurer c’est-à-dire transférer les contenus des registres
sauvegardés en RAM vers les registres respectifs.
Résumé
Apparition d’un évènement déclencheur d’une interruption, alors le pic exécute les actions
suivantes :
1. Sauvegarde le registre PC (adresse N+1) dans la pile, puis charge l’adresse 0x04 dans
le PC.
2. Interdiction d’autres interruptions : bit GIE = 0 (registre INTCON)
Fin procédure (retfie) :
1. L’adresse N+1 est transférée de la pile vers le PC
2. Autorisation des interruptions : bit GIE = 1 (registre INTCON)
C’est au programmeur:
1. d’identifier la source de l’interruption en testant les bits flag
2. de remettre à 0 le bit flag qui a provoqué l’interruption
3. de sauvegarder et de restituer les registres
Les bits flag (drapeau) passent à 1 lors de la survenue d’une interruption. C’est au
programmeur de remettre ce bit à 0.
3
Le registre INTCON
L'interruption T0I
Le débordement du registre TMR0 déclenche cette interruption. Les bits associés sont T0IE
(validation) et T0IF (drapeau).
L'interruption EEI
La fin de l’écriture dans la mémoire EEPROM génère cette interruption. Les bits associés
sont EEIE (validation) et EEIF (drapeau).
Lorsque les interruptions sont utilisées, le bit GIE doit être mis à 1 au début du programme
principal : GIE=1. A l’arrivée d’une interruption quelconque, le pic force GIE à 0 : GIE = 0 et
le remis à 1 à la sortie de la procédure d’interruption. Si le programmeur veut autoriser les
interruptions à l’intérieur de la procédure d’interruption, il doit mettre à 1 GIE: GIE=1.
4
IV. Reconnaissance de l'interruption active
Il n'existe qu'une adresse d'interruption, 0004h, pour les différentes sources. Les bits 0 à 2 du
registre INTCON et le bit 4 du registre EECON1 permettent de savoir quel événement a
déclenché une interruption. Ainsi, au début du programme d'interruption, si plusieurs sources
ont été validées, il faut impérativement aller tester ces différents bits pour connaître la source
active et dérouler le programme correspondant. On propose le code assembleur suivant
d’identification de la source d’interruption :
Exemple
Soit les sources T0I et INT, avec T0I la plus prioritaire. A l’identification on procède comme
suit :
..
..
org 0x04
; sauvegarde contexte
..
..
; identification
btfsc INTCON, 2 ; test de bit T0IF
call Int_Timer ; appel sous-programme si T0IF=1
btfsc INTCON, 1 ; test du bit INTF
call Int_Ext ; appel sous-programme si INTF=1
..
..
5
Même s’il y a l’arrivée d’une seule interruption, le pic exécute toujours cette identification
dans cet ordre.
La première instruction movf modifie le bit Z du registre STATUS, on doit donc l’éviter.
La solution consiste à utiliser l'instruction swapf qui intervertit les 4 bits de poids fort et de
poids faible d'un registre, sans modifier le registre STATUS.
6
Principe
Soit input = 0x0F
swapf input, f
ou bien
On utilise swapf :
7
Application
On propose le schéma de la figure suivante:
Chaque action sur BP déclenche l’interruption INT sur le front montant de l’impulsion.
Le programme principal s’arrête et le pic exécute le sous-programme d’interruption qui
inverse l’état de la led : d’allumer elle devient éteinte et vice-versa.
Programme
list p=16F84
#include <p16F84.inc>
cblock 0x0C
w_save :1
status_save : 1
output: 1
counter:1
endc
org 0x00
goto init
8
; restitution registres
swapf status_save, w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_save, f ; swap ancien w sans modifier STATUS
swapf w_save, w ; restitution w original
retfie ; retour de l’interruption vers le programme principal
Commentaires
1. La variable output est une image du contenu du PORTB, l’état du PORTB est mémorisé
dans output.
2. Au reset le pic démarre à l’adresse 0x00 et exécute le programme principal. L’instruction
goto init évite l’exécution du sous-programme d’interruption. Le pic entre dans une boucle
infinie appelée la tache de fond. L’action du bouton poussoir BP déclenche l’interruption
INT, l’exécution de la tache de fond est suspendue et le pic démarre l’exécution du sous-
programme d’interruption à l’adresse 0x04. A l’exécution de l’instruction retfie il revient à la
tache de fond.
3. Un système sous interruption exécute un programme en continu, ce programme peut être
interrompu à tout moment. On appelle un tel programme tache de fond. En générale dans
une tache de fond on réalise des traitements de données, transmission de fichiers de données,
affichage de résultats, etc.
9
Exercice
Un local est placé sous surveillance à l’aide de 4 détecteurs D1 à D4 TOR (Tout-Ou-Rien).
En cas d’infraction (passage de 1 à 0 de Di) le détecteur déclenche une interruption du
pic16f84 sur le front descendant. Le pic allume alors la led Li correspondant au détecteur Di
activé. Les anodes des led sont portées au + 5V. L’utilisateur peut éteindre les led par un
reset manuel.
Questions
2) Les deux sources d’interruptions RBI et INTR sont actives. La source RBI est la plus
prioritaire. Ecrire les instructions d’identification de ces deux interruptions.
3) Citer dans l’ordre les 2 actions exécutées par le pic lorsqu’il détecte un évènement
d’interruption.
4) Comment appelle-t-on les bits d’identification des interruptions.
6) Quel est l’intérêt de faire fonctionner le pic sous interruption ; expliquer en 3 lignes.
10) Citer dans l’ordre les 2 actions exécutées par le pic lorsqu’il quitte la routine
d’interruption
10