You are on page 1of 41

Infotronique-

Master1

MICROCONTROLEURS

Les interruptions

F.Hocine V1-2010/2011
Les
interruptions

C’est quoi une interruption?

F.Hocine V1-
Les
interruptions
Mécanisme général d’une interruption sur le 16f84:

Programme principal

Instruction (1) L’adresse de la


routine
d’interruption
Déclancheur
d’interruption
Instruction (n-1)
Traitement de
l’interruption
(une ou
Instruction (n) plusieurs
instructions)

RETFIE
Suite du
programme

5. 6.
Le
7.4.
3.
Le
Le
1. programme
Le programme
programmetraite
2.L’événement
Le
programme
programme l’interruption
achève
saute se
achève
saute àdéroule
déclancheur normalement
àlel’instruction
l’adresse
traitement
l’instruction
d’interruption
dede
traitement
en
quil’interruption
cours
suit lasurvient
dedetraitement
l’interruption
dernièreavec RETFIE
exécutée
dans le programme principal.
F.Hocine V1-
Les
interruptions

Les sources d’interruption

Le 16F84 dispose de quatre sources d`interruption

Ø Une source externe via la broche RB0/INT


Ø Le débordement du TIMER0
Ø Un changement de l’état du PORTB (RB4:RB7)
Ø Fin d’écriture en EEPROM

F.Hocine V1-
Les
interruptions

Le registre INTCON (INTerrupt CONtrol)

Les interruptions peuvent être activées ou


désactivées (masquées) individuellement ou
globalement. Cela se fait via le registre de
commande d'interruption (INTCON.)

F.Hocine V1-
Les : Le registre INTCON (INTerrupt CONtrol)
interruptions

Global Interrupt Enable bit. Il permet de


valider ou d’invalider toutes les
interruptions en une seule fois.

Ce sont les bits de validation


d’interruptions

Les flag (les


indicateurs)

F.Hocine V1-
Les : Le registre EECON1
interruptions

fla
g

F.Hocine V1-
Les
interruptions

Sauvegarde et restauration de l’environnement

Ø Seul le PC est sauvegardé automatiquement

ØLes seuls registres à sauvarder obligatoirement


sont donc STATUS et W.

ØLes registres utilisés dans le sous programme


d’interruption doivent être sauvegardés

F.Hocine V1-
Les
interruptions

Sauvegarde w

movwf w_temp

Restauration

swapf w_temp,f
swapf w_temp,w

F.Hocine V1-
Les
interruptions

Sauvegarde de STATUS

swapf STATUS,w ; transfère STATUS dans W


movwf status_temp ; sauvegarde de STATUS

Restauration

movf status_temp,w ; charge le STATUS sauvegardé


movwf STATUS ; restaurer STATUS

F.Hocine V1-
Les
interruptions
Mécanisme général d’une interruption sur le 16f84:

Programme principal

L’adresse de
Déclancheur Instruction (1) d’interruption 0x04
d’interruption
GIE=1
Activation de Sauvegarde des
l’interruption Instruction (n-1) registres W, STATUS,
….
Flag de
l’interruption Effacer le flag
=1
Instruction (n) Executer le
programme
d’interruption
Suite du
Restaurer les
programme registres
sauvegardés

RETFIE
F.Hocine V1-
Structure d’un programme avec une routine d’interruption
LIST p=16F84
#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;Les declarations
ORG 0x00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOTO PRO_PRIN
;;
ORG 0x04
GOTO INTRP
INTERP movwf w_temp
swapf STATUS,w ; sauvegarder des registres
movwf status_temp
----------- ; traitement de l’interruption
-----------
bcf …..,……..F ;effacer le flag
swapf status_temp,w
movwf STATUS ; restaurer les registres
swapf w_temp,f
swapf w_temp,w
retfie
PRO_PRIN bsf INTCON, GIE ;enable interruption globale
bsf INTCON, …E ;enable et intialisation des parametres d’interruption
---------------
----------------
; les instruction du
end
p.p
F.Hocine V1-
Les
interruptions
Exemple d’interruption sur RB7

Un B.P sur RB4 pour piloter la LED

F.Hocine V1-
Les
interruptions( définitions
)

; ****** DEFINE *******************************************************

#DEFINE Bouton PORTB , 7 ; bouton poussoir


#DEFINE LED PORTA , 0 ; LED

F.Hocine V1-
Les interruptions(initialisation)

Autoriser l’interruption:
Avec le registre INTCON

INTCON
10 0 0 0 10 0 0 0 : D’136’

movlw D’136’
movwf INTCON

F.Hocine V1-
Les interruptions(initialisation)

Connecter les pull-up avec le registre


OPTION_REG

OPTION
01 1 1 1 1 1 1 1 : D’127’

movlw D’127’
movwf OPTION_REG

F.Hocine V1-
Les interruptions
(initialisation)

;*********INITIALISATION ********************************************
init
BANK1 ; passer banque1
movlw D'127'
movwf OPTION_REG ; initialiser registre option
clrf TRISA

BANK0
bcf LED ; initialiser RA2
movlw D'136'
movwf INTCON ; charger le registre de contrôle d'inter

F.Hocine V1-
Les interruptions (ROUTINE
D’INTERRUPTION)
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************

org 0x004 ; adresse d'interruption

;------sauvegarder les registres


movwf w_temp ; sauvegarder W
swapf STATUS,w
movwf status_temp ; sauvgarder status

call intrb7 ; traiter interrupt RB7

;------restaurer registres intrb7


movlw B'00000001'
swapf status_temp,w BANK0
movwf STATUS ; restaurer statusxorwf PORTA , f ; inverser RA0
swapf w_temp,f return
; restaurer w
retfie ; FIN interruption
simulateur
F.Hocine V1-
Les interruptions (ROUTINE
; ***************DEMARRAGE SUR RESET
D’INTERRUPTION) *
org 0x000 ; Adresse de départ après reset
goto init ; initialisation

; ROUTINE INTERRUPTION *
org 0x004 ;adresse d'interruption
;--------sauvgardes les registres
call intrb7 ; traiter interrupt RB7
bcf INTCON , RBIF ; effacer flag
;--------restaurer les registres
retfie ; fin de l’interruption
;************ INTERRUPTION RB7**********************
intrb7
movlw B'00000001'
BANK0
xorwf PORTA , f ; inverser RA0
return
;*********** INITIALISATIONS ***********************
init
;-------intialisation des registres
start
goto start
END ; fin de programme

V1-2010/2011
F.Hocine
Les interruptions
Exemple de deux interruptions

Serrure codée

F.Hocine V1-
Les interruptions

Organigramme

EEPROM

F.Hocine V1-
Accès à EEPROM
Ø Le 16F84 dispose de 64 emplacements
eeprom disponibles pour usage libre
Ø L’adresse physique de la zone eeprom pour le
PIC16f84 commence, à l’adresse 0x2100.
Ø Quatre registres utilisés
EEDATA
EEADR
EECON1
EECON2
F.Hocine V1-
Accès à EEPROM
Le registre EEDATA
Ø Il est situé à l’adresse 0x08 dans la BANK0.
Ø C’est dans ce registre que va transiter la donnée à
écrire vers (ou la donnée lue) de l’eeprom.
Le registre EEADR
Ø Il est situé à l’adresse 0x09 dans la BANK0.
Ø C’est dans ce registre que se trouve l ’adresse de la
donnée à écrire vers (ou la donnée lue) de l’eeprom.
Ø Utilisation de l’adresse relative va de 0x00 à 0x3F, soit
64 emplacements.

F.Hocine V1-
Accès à EEPROM
Le registre EECON1
Ø Il est situé à l’adresse 0x88 dans la BANK1.
Ø Il contient 5 bits qui définissent ou indiquent le
fonctionnement des cycles de lecture/écriture en
eeprom.

F.Hocine V1-
EECON1
Les interruptions

F.Hocine V1-
Accès à EEPROM
Le registre EECON2
Ø Il est situé à l’adresse 0x89 dans la BANK1.
Ø Ce registre n’existe pas physiquement, il est utilisé
lors de l’écriture dans EEPROM

F.Hocine V1-
Accès à EEPROM
Exemple de lecture
EEPROM

BANK0
movlw addr
movwfEEADR
BANK1
bsf EECON1,RD
BANK0
movf EEDATA,w

F.Hocine V1-
Accès à EEPROM
Exemple d’écriture sur
EEPROM
BANK0
movlw addr
movwf EEADR
movlw DATA
movwf EEDATA
BANK1
bcf INTCON, GIE ; Disable interrupts so we don’t mess with
sequence
bsf EECON1, WREN ; Enable a write
movlw 0x55 ; This is just what the rules say!
movwf EECON2 ; Write the 0x55 here
movlw 0xAA ; This is just what the rules say!
movwf EECON2 ; Write the 0xAA here
bsf EECON1, WR ; Define the action as a write – start it
F.Hocine
bsf INTCON, GIE ; Enable interrupts V1-
Initialisation de la zone
eeprom

L’initialisation se fait directement au moment de la


programmation. Ceci s’effectue à l’aide de la directive «
DE :Data Eeprom « 

Initialiser l’adresse de début d’écriture:


Org 0x2100

Début d’écriture:
DE 0x0F
DE ‘’ infotronique ’’

F.Hocine V1-
Le TIMER0
Le TIMER0 est un compteur, qui utilise le
registre TMR0 qui se localise à l’adresse 0x01
en Bank0
Ø Mode compteur

Ø Mode timer

ØLa sélection de mode de fonctionnement s’effectue


par le bit T0CS: Tmr0 Clock Source (5 bits du
registre OPTION ):
T0CS = 1 : Fonctionnement en mode compteur
T0CS = 0 : Fonctionnement en mode timer

F.Hocine V1-
Le mode
compteur
Ø Compte les impulsions reçues sur le pin
RA4/TOKI.
ØLe comptage peut être effectué selon une

transition de niveau « haut->bas » ou « bas-


>haut »
ØLa sélection de niveau de transition s’effectue par

le bit 4 du registre OPTION : T0SE pour Timer0


Source Edge select bit.

T0SE = 0 : comptage si l’entrée RA4/TOKI passe de 0


à1
T0SE = 1 : comptage si l’entrée RA4/TOKI passe de 1
à0
F.Hocine V1-
Mode timer

Ø Compte les cycles d’horloge du PIC

ØSupposons que nous travaillons avec un quartz


de 4MHz. Nous avons une incrémentation de
TMR0 chaque 1μs (il compte le temps).

ØPour modifier la base de temps Nous


disposons d’un PREDIVISEUR

F.Hocine V1-
PREDIVISEUR
ØLe PREDIVISEUR est un diviseur de fréquence
ØNous pourrons donc décider d’avoir incrémentation de

tmr0 toutes les 2 périodes par exemple, ou encore toutes


les 64 périodes. Cela dépend des bits PS0:PS2 du registre
OPTION, selon le tableau suivant:

PS2:PS
0
Le bit PSA indique la configuration de prédivision
PSA=0, indique que le prédivision est sur le timer0
PSA=1, indique que le prédivision est sur Watchdog

F.Hocine V1-
PREDIVISEUR

L’écriture dans le registre tmr0 efface le contenu du


prédiviseur. Les événements survenus au niveau du
prédiviseur sont donc perdus.

Exemple:
movf TMR0,1
clrf TMR0

faire clignoter une LED à la fréquence approximative de 1Hz.

F.Hocine V1-
Mode d’interruption sur le TMER0

Lorsque T0IE est positionné dans le registre


INTCON, chaque fois que le flag T0IF passe à 1,
une interruption est générée.

Application pratique du timer0


Faire clignoter une LED à une période 1s

F.Hocine V1-
WATCHDOG (Chien de
garde)
Le watchdog est lié à un timer interne (circuit
RC) qui oscille avec une période de 18 a 7 ms ,
qui n’est pas synchronisé au programme, ni à un
événement extérieur.
ØLa période l’oscillation varie en fonction de

différents paramètres comme la tension


d’alimentation et la température.

ØLa valeur minimale de 7ms est celle que vous


devrez utiliser dans la pratique.

F.Hocine V1-
Utilisation de WATCHDOG

Le watchdog est un mécanisme qui permet au


µC de reprendre la main (permet de faire un
RESET interne) en cas de plantage.

ØDans le cas d'une perturbation électrique


qui fait sauter le programme à une adresse
quelconque et inattendue

ØDans le cas d'un bug il faut corriger le


programme

F.Hocine V1-
Fonctionnement de WATCHDOG

La mise en service ou l’arrêt du watchdog se décide au


moment de la programmation avec la directive _CONFIG.
Ø Si « _WDT_OFF » le watchdog ne sera pas actif.

Ø Si « _WDT_ON », le watchdog sera actif.

Il faut ensuite placer correctement dans le programme


l'instruction CLRWDT.
L'instruction CLRWDT :
- met à 1 le bit TO le 4 bit du
registre STATUS
- met à 1 le bit PD le 3 bit du registre
STATUS
En cas de débordement du watchdog :
- le bit TO est mis à 0
 

F.Hocine V1-
Fonctionnement de WATCHDOG
Si le timer watchdog dépasse une certaine durée, le
programme est réinitialisé (adresse H'0000' de la mémoire de
programme). Cette durée dépend des bits PSA, PS2, PS1 et
PS0 du registre OPTION_REG :
  PS2, PS1, prédivision Durée indicative
PSA
PS0 sur Watchdog  
0 XXX 1 18 ms (7ms)
1 000 1 18 ms (7ms)
1 001 2 36 ms (14ms)
1 010 4 72 ms (28ms)
1 011 8 144 ms (56ms)
1 100 16 288 ms (112ms)
1 101 32 576 ms (224ms)
1 110 64 1,15 s (448ms)
1 111 128 2,3 s (896ms)

F.Hocine V1-
F.Hocine V1-

You might also like