Вы находитесь на странице: 1из 11

Architecture et programmation

des MiCrocontrôleurs (AMC)


Master Informatique Industrielle (M1)

Les interruptions du PIC


16F877

Université Abdelhamid Ibn Badis de Mostaganem


Faculté des Sciences et de la Technologie
Département de Génie Électrique
1
Responsable du module : Bentoumi Mohamed
Les interruptions du PIC 16F877
Définition
Une interruption provoque l’arrêt du programme principal pour aller exécuter
une procédure d'interruption. A la fin de cette procédure, le microcontrôleur
reprend le programme principal à l’endroit où il l’a laissé.
A chaque interruption sont associés deux bits :
 un bit de validation : permet d'autoriser ou non l'interruption
 un drapeau (Flag) : permet au programmeur de savoir de quelle
interruption il s'agit
Sur le 16F877, l'es interruptions sont classées en deux catégories :
1) les interruptions primaires :
 Une interruption externe, action sur la broche INT/RB0
 Débordement du TIMER0
 Changement d’état logique sur une des broches du PORTB (RB4 à
RB7)

2
Les interruptions du PIC 16F877
2) les interruptions périphériques :
- Fin de programmation d’une case mémoire de l’EEPROM.
- Changement d’état sur le PORTD (PSPIE).
- Fin de conversion analogique numérique (ADIE).
- Réception d’une information sur la liaison série (RCIE).
- Fin d’émission d’une information sur la liaison série (TXIE).
- Interruption SPI ou I2C du module MSSP (SSPIE).
- Interruption du registre de capture et/ou de comparaison 1 (CCPI1E).
- Interruption du registre de capture et/ou de comparaison 2 (CCPI2E).
- Débordement du TIMER1 (TMR1E).
- Débordement du TIMER2 (TMR2E).
- Collision de BUS (BCLIE)
Elles sont gérées par les registres :

3
Les interruptions du PIC 16F877
 Toutes les interruptions peuvent être validées/interdites par le bit INTCON.GIE
 Toutes les interruptions périphériques peuvent être validées/interdites par le bit
INTCON.PEIE
 Chaque interruption peut être validée/interdite par son bit de validation individuel

4
Les interruptions du PIC 16F877
Lors d’une interruption valide et autorisée, le programme en cours d’exécution est
interrompu et le microcontrôleur exécute le programme d’interruption à partir de
l’adresse 0x0004. Au début de celui-ci il faut que le logiciel vérifie quel source a
déclenché l’interruption.
Rem :
Seul le registre PC est empilé automatiquement. Si cela est nécessaire, le sous
programme d’interruption doit sauvegarder le contexte et le restituer à la fin, c’est
à dire les valeurs des registres W, PCLATCH et STATUS, pour que le
microcontrôleur puisse reprendre le programme principal dans les mêmes
conditions où il l'a laissé.

L'interruption INT (Entrée RB0 du port B)


Cette interruption est provoquée par un changement d'état sur l'entrée RB0 du port B quand
elle est programmée en entrée. En plus de son bit de validation INTE et son drapeau INTF,
elle est gérée aussi par le bits INTEDG (OPTION_REG) qui détermine le front sur lequel
l'interruption se déclenche, 1=montant, 0=descendant.

5
Exemple de programmation d’interruption
Par interruption, pour chaque action sur le BP1 , on incrémente le port C

Ecrire un programme qui réalise cette fonctionnalité !!

6
Exemple de programmation d’interruption
Le programme

; Directives !!
list p=16f877A
#include "p16f877A.inc"

__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF &
_BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

;------------ Définitions ---------------


;**
W_TEMP EQU h‘60‘ ;adresse de sauvegarde de W
STATUS_TEMP EQU h’61’ ; adresse de sauvegarde de STATUS
PCLATH_TEMP EQU h’62’ ; adresse de sauvegarde de PCLATH

;------------ Programme principal ---------------

ORG 0 ; l'adresse du début du programme est toujours '0‘

GOTO Start ; par ce que à l’adresse 0x0004 c’est le sous programme


d’interruption

7
Programme principal
;------------ Programme principal ---------------
ORG 0x100 ; l'adresse du début du programme est toujours '0'
Start
bsf STATUS,5 ; vers page 1 de la RAM

CLRF TRISC ; le port C est programmé en sortie


MOVLW 0xFF ;
MOVWF TRISB ; le port B est programmé en entrée

MOVLW h'06' ; le convertisseur AD désactivé !!!


MOVWF ADCON1

BCF OPTION_REG, RBPU ; validé les résistances Pull-up du portB


BCF OPTION_REG, INTEDG ; interruption sur front descendant !!
bcf STATUS,5 ; revenir à la page 0 de la RAM

BSF INTCON, INTE ; autoriser l’interruption extérieur sur RB0


BSF INTCON, GIE ; autorisation globale des interruptions

CLRF PORTC ; on met 0 sur le port C ( leds )


loop
NOP
goto loop
8
Sous programme d’interruption
ORG 0x0004 ;adresse du sous programme d’interruption
BCF INTCON, GIE , interdire toute les interruption
; sauvegarde du contexte
MOVWF W_TEMP ; Copie W dans le registre W_TEMP
SWAPF STATUS,W ; copie STATUS dans W
CLRF STATUS ; BancRam 0, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP ; sauvegarde STATUS dans bank zero STATUS_TEMP !!
MOVF PCLATH, W ; nécessaire seulement si les pages 1, 2 et/ou 3 sont utilisés
MOVWF PCLATH_TEMP ; Save PCLATH into W
CLRF PCLATH ; Page zero, regardless of current page
;

BCF INTCON, INTF ; effacer l’interruption !!


INCF PORTC, 1
;
;restauration du contexte
MOVF PCLATH_TEMP, W ; Restaurer PCLATH
MOVWF PCLATH ;
SWAPF STATUS_TEMP,W ; Restaurer STATUS (remise le BancRam à l’état original)
MOVWF STATUS ;
SWAPF W_TEMP,F ; Restaurer W
SWAPF W_TEMP,W ;

RETFIE ; retour au programme principal et validation de GIE automatique


END
9
Une seule interruption

10
Interruptions multiples

11

Вам также может понравиться