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

INSA GE IF3

TP MICROCONTROLEUR, FAMILLE PIC

Les interruptions

Thomas Grenier, Dominique Tournier, Olivier Bernard, David Lvque.

TP Microcontrleur

INSA GE

Objectifs de la sance
Connatre et savoir mettre en place un mcanisme dinterruption.

Pr requis :
Cours microcontrleur famille PIC16, 3GE IF2, o Connatre la structure et les principes de fonctionnement des microcontrleurs (registres, jeu dinstructions, mmoires, E/S, interruptions, ). TD microcontrleur PIC16 de 3GE, o Savoir concevoir et crire un programme assembleur. TP microcontrleur PIC16 de 3GE, o Savoir dvelopper une application PIC en utilisant le logiciel MPLAB et le kit ICD2. Cours sur les interruptions IF3, o Connatre les principes fondamentaux des interruptions et de leur mise en place.

2/39

TP Microcontrleur

INSA GE

Prsentation du matriel
1- Logiciel MPLAB de Microchip Il sagit de lenvironnement informatique de dveloppement pour PIC fourni par le constructeur Microchip. Il est gratuitement tlchargeable et utilisable. MPLAB permet dditer le code assembleur (reconnaissance des instructions), compiler le code (le lier des librairies si besoin), simuler le comportement dun PIC (ceci permet de tester le bon fonctionnement dun programme (dbogage) par simulation) et de piloter des outils de dveloppement supplmentaires comme MPLAB ICD 2. Ce programme est prsent sur chaque PC de la salle de TP

2- Kit MPLAB ICD 2 Ce kit permet de programmer et de dboguer un microcontrleur PIC via le logiciel MPLAB IDE. Ce kit est compos : Dun module ICD 2 (circulaire) contenant llectronique de communication, Dun cble USB permettant la communication entre le bloc circulaire et le PC, Un petit cble RJ11 permettant la communication entre le bloc et le PIC.

SB

1 RJ

Module ICD
Figure 1: Cblage du kit ICD 2

3/39

TP Microcontrleur

INSA GE

Figure 2: Les 3 lments du kit ICD 2 ; le cble RJ11 est en bas de limage Ne pas connecter dalimentation au module ICD 2 !!! Le module est aliment par USB.

3- Carte PIC Deux cartes sont ncessaires ce TP : la carte process et la carte mini . La carte process est la carte sur laquelle le PIC 16F877A est prsent. On trouve sur cette carte (Figure 22) : - lalimentation (il est ncessaire dalimenter cette carte), - un connecteur RJ11 pour le dbogage/programmation du PIC via le kit ICD, - un interrupteur permettant de basculer entre fonctionnement autonome du PIC (position basse) ou fonctionnement par ICD et programmation (position haute, la LED rouge est allume), - loscillateur quartz (20MHz) - un connecteur vers dautres cartes. Sur la carte Mini sont prsents : 8 LEDs, 4 boutons poussoir et un buzzer (voir schma Figure 20).

4/39

TP Microcontrleur Interruption

INSA GE

Travaux pratiques
Avant de commencer le TP, vrifier que vous disposez : - dun PC avec MPLAB IDE, - dun module MPLAB ICD 2, - des deux cartes, lune avec un PIC 16F877A ( 20MHz), lautre avec les 8 LEDs, les 4 boutons poussoirs et le buzzer, - dune alimentation (avec adaptateur) pour la carte PIC, - dun cble USB, - dun petit cble RJ11,

1- Prsentation de lapplication : Bouton-poussoir intelligent


Pour illustrer lintrt des interruptions, nous rutilisons lapplication boutonpoussoir intelligent vue en TP microcontrleur 3GE. Le but est de raliser la commande dun clairage partir dun simple bouton poussoir. En appuyant une premire fois sur le bouton poussoir, on allume lclairage. Une seconde pression lteindra. Cependant, si on ne pense pas teindre les lampes, une minuterie les teindra automatiquement. Voici lorganigramme, naf et sans interruptions, de lapplication (le code assembleur est prsent sur les PC et est fourni en annexe) :
Dbut Initialisation E/S Initialisation des variables Attendre 1s Attente BP Allumer clairage Eteindre clairage Attendre 1s tempo = 0 Attendre un premier appuie sur le BP

Appuie sur BP ?

Incrmenter tempo Fin temporisation ?

tempo = tempo + 1

tempo == temps dattente ?

Figure 3 : Organigramme sans interruption de lapplication Bouton-poussoir intelligent.

5/39

TP Microcontrleur Interruption

INSA GE

2- Etude de la solution nave


Le but de cette premire srie de manipulations est de dterminer les inconvnients du programme dcrit par lorganigramme prcdent et de se rafraichir la mmoire vis--vis de lutilisation de MPLAB Copie des fichiers Copier le rpertoire TPuC_IRQ du bureau vers le rpertoire C:\Temp. Supprimer sil le faut les versions prcdentes prsentes dans le rpertoire C:\Temp. Enlever la protection en criture Lancement du projet MPLAB IDE Ouvrir le rpertoire que vous venez de copier dans C:\Temp. Double cliquer sur le fichier TPuC_1.mcw . MPLAB se lance et charge les fichiers ncessaires au fonctionnement de lapplication. Construction du projet (Build) But de la construction La construction dun projet va crer le programme complet de lapplication en langage machine. Quand un projet contient plusieurs fichiers et quil existe des liens entre ces fichiers, il est ncessaire de construire ( Build ) le projet. La construction consiste compiler tous les fichiers puis rsoudre les liens ( link ) entre les diffrents fichiers et librairies utiliss. Sil ny a aucune erreur (pour la compilation et lditeur de liens) le langage machine de lapplication est gnr. Comment construire un projet Plusieurs solutions : - clic droit sur le nom du projet dans la fentre de gestion projet puis Build All (ou Make), - par le menu : Project Build All (ou Make), - par les raccourcis : ctrl+F10 pour Build All (F10 pour Make). Construire votre projet.

Excution avec dbogage sur les maquettes Alimentation des cartes process et Mini

Quitter MPLAB. Connecter lalimentation la carte process PIC. Mettre linterrupteur en position haute (la LED rouge est allume). Connexion PC, kit ICD 2, carte PIC Connecter le module ICD 2 la carte process avec le cordon RJ11. Connecter le PC au module ICD 2 avec le cordon USB 6/39

TP Microcontrleur Interruption Relancer MPLAB.

INSA GE

Rem : Si windows dtecte un nouveau priphrique : - Fermer MPLAB (sauvegarder votre travail). - Suivre les instructions de windows pour linstallation des pilotes. Les pilotes se trouvent dans le rpertoire : C:\ Program Files\Microchip\MPLAB IDE\ICD 2\Drivers - Relancer MPLAB IDE et ouvrir votre projet. Choisir ICD 2 comme outil de dbogage Dans le menu faire : Debugger Select Tool MPLAB ICD 2 (Si besoin, prciser que le kit est connect en USB.) De nouvelles options sont alors disponibles dans le menu Debugger. Commencer par initialiser la communication avec le module ICD 2 : Debugger Connect Si le kit est correctement configur et connect, on obtient laffichage suivant dans la fentre Output (sinon vrifier que linterrupteur est en position haute et qua la LED rouge est allume) :

Construction et programmation du PIC RE-construire de votre projet (Build All). Programmer le PIC : (interrupteur en position haute, LED rouge allume) Pour envoyer le code machine dans le PIC, procder ainsi : dans le menu Degugger Program Si la programmation sest correctement droule, on obtient laffichage suivant dans la fentre Output :

7/39

TP Microcontrleur Interruption

INSA GE

Le programme est maintenant charg dans le PIC mais le PC reste le superviseur de lexcution. Excution Pour excuter le programme : Degugger Run (F9) Pour arrter lexcution du programme faire Debugger Halt (F5)

Questions : analyse du programme naf

Q- Rappeler quel est ltat de repos des boutons poussoir ainsi que les niveaux logiques appliqus aux entres du PIC en fonction de ltat des boutons poussoir. Q- Donner le rle des temporisations de lorganigramme ainsi que les contraintes quelles crent. Q- Proposer une ou plusieurs solutions pour amliorer la gestion du bouton poussoir. Modifier lorganigramme. Q- Critiquer le code assembleur fourni (respect de lorganigramme, lisibilit (utilisation de fonctions, commentaires, astuces tordues), utilisation des ressources, ).

Maintenant, vous devez pouvoir justifier la navet de lorganigramme propos et critiquer la qualit du code fourni. Vous devez aussi pouvoir proposer des solutions plus adaptes.

8/39

TP Microcontrleur Interruption

INSA GE

3- Solution avec interruption sur TIMER1


Pour amliorer le comportement du programme, nous allons modifier la gestion du bouton poussoir et mettre en place une interruption sur le TIMER1. Rappel sur les interruptions : Lors d'une interruption, le microprocesseur sauve tout ou une grande partie de son tat interne, gnralement dans la pile systme, et saute ensuite la routine d'interruption (ISR), gnralement en suivant une table qui donne pour chaque type d'interruption la routine excuter. Une fois le traitement de l'interruption termin, la routine se finit gnralement par une (ou plusieurs) instruction de retour d'interruption, qui restaure l'tat sauv et fait repartir le processeur de l'endroit o il avait t interrompu. Organigramme du programme principal et de la routine dinterruption
Dbut ISR Sauvegarde du contexte

Dbut Initialisation E/S 0 Fin_Tempo

Dsactivation des IRQ IRQ TIMER1 ? Rarmement IRQ TIMER1 Tempo_1s -Tempo_1s = 0? Initialiser Tempo_1s et TIMER1 Tempo_Xs -Tempo_Xs = 0?

INTCON<GIE>

PIR1<TMR1IF> = 1 ? 0 PIR1<TMR1IF>

Attendre BP appuy Attendre BP relch Allumer clairage Eteindre clairage Attendre BP relch Arrter TIMER1 Dmarrer TIMER1

10d 76h 97h

Tempo_1s TMR1H TMR1L

Appuie sur BP ?
1 Fin_Tempo

Fin_Tempo = 1 ?

Arrt du TIMER1 Restauration du contexte Activation IRQ Fin : Retour dISR 1 INTCON<GIE>

Figure 4 : Organigramme principal et de la fonction dinterruption (TIMER1)

9/39

TP Microcontrleur Interruption

INSA GE

Questions

Q- Lors dune interruption, quelles sont les tapes fondamentales mises en place par le microcontrleur permettant de garantir le bon droulement du programme ? Q- Quels sont les tapes fondamentales mettre en place dans une fonction dinterruption pour garantir le bon fonctionnement du programme ? Q- Quand la routine dinterruption va-t-elle tre excute ? Q- Estimer le temps dexcution dans le pire des cas de la fonction dinterruption. Quelle est la diffrence entre cette fonction dinterruption et la fonction Tempo_Ws de la partie prcdente ? Q- Quel est le rle de la variable Fin_Tempo ? Quel nom dsigne de ce genre de variable ? O doit-elle tre stocke ? Q- Dans le cas du PIC utilis, dtailler le contenu des tapes effectues par le microcontrleur et celles mettre en place dans la fonction dinterruption (cf. Annexes). Modification du code Ouvrir le workspace : TPuC_1IRQ.mcw Reprer la fonction dinterruption. Q- Quel est le rle du code org 0x0004 plac avant cette fonction ? Complter le code de cette fonction : - Au dbut de la fonction : sauvegarde du contexte (cf. Annexes) - La fin de la fonction : - ractivation des interruptions, - restauration du contexte, - fin de fonction dinterruption. Vrifier le bon fonctionnement de votre programme.

Conclusions

Q- Quels sont les avantages et les inconvnients de la gestion par interruption, points de vue : Lisibilit de lorganigramme ? Lisibilit du programme ? Complexit de programmation ? Utilisation des ressources microcontrleur ?

10/39

TP Microcontrleur Interruption

INSA GE

4- Programmation avec deux interruptions


En gardant le mme fonctionnement du programme, on souhaite maintenant dclencher une interruption lorsquun front se produit du RB0. Linterruption sur le TIMER reste prsente. Avec le PIC utilis, il est possible de dclencher une interruption sur lun des fronts (montant ou descendant) de RB0.

Organigramme

Modifier les organigrammes prcdents afin de grer les deux interruptions. Prendre en compte les remarques suivantes : - la mme fonction dinterruption (ISR) est appele pour les deux interruptions (TIMER1 et RB0), - la fonction dinterruption ne mettra jour quune seule variable (smaphore), - linterruption sur le front de RB0 na pas besoin dtre arrte comme celle du TIMER1

Paramtrage du dclenchement dune interruption sur un front de RB0

Q- A partir des documents en annexe, donner les bits des registres modifier ainsi que la valeur de ces bits pour obtenir le dclenchement dune interruption sur les fronts montants de RB0. Donner aussi les banques dans lesquelles ces registres sont prsents. Aide : lire la documentation du PORTB (page 21), la documentation 14.11 commence page 27 Q- Lorsque le dclenchement dune interruption sur un front de RB0 est correctement paramtr, quel bit de quel registre est mis jour lors de lapparition dun front sur RB0 ? Q- Dans la fonction dinterruption, que faudra t il faire de ce bit ? (attention deux choses faire) Modification du code Procder par tapes ! A partir du projet prcdent : - ajouter de la fonction de paramtrage de linterruption (attention aux banques). - modifier la fonction dinterruption (en regard votre organigramme). - modifier le programme principal (en regard votre organigramme). Mise au point Pour la mise au point, il est recommand dutiliser le simulateur (MPLAB SIM) puis le dbuggeur (MPLAB ICD2).

11/39

TP Microcontrleur Interruption

INSA GE

Questions

Q- Si les deux interruptions se produisent en mme temps, quelle est linterruption traite en premier ? Q- Quand est traite la deuxime ? Proposer deux solutions pour pouvoir traiter la deuxime interruption. Q- Que se passe-t-il si une interruption se dclenche pendant lexcution de la fonction de gestion dinterruption (rentrance) ? Q- Comment valider la fiabilit du programme ?

Conclusions

Q- Dans le cadre de cette application quelle solution adopter ?

5- Autre application
On souhaite raliser un compteur dimpulsions. Pendant 10 secondes, on compte les impulsions sur RB0. Apres les 10 secondes, le nombre dimpulsions est affich en binaire sur les LEDs. Proposer une solution pour cette application (organigramme(s) et code assembleur).

12/39

Annexes : TP Microcontrleur

INSA GE

Annexes :

Extraits de la documentation du 16F877


- Organisation mmoire - Dtails des registres - Registre STATUS - Adressage indirect - Description du PORTA - Description du PORTB - Description du PORTC - Description du PORTD - Description TIMER1 - Interruptions : principes de base - Interruptions : dtails de OPTION_REG - Interruptions : dtails de INTCON - Interruptions : dtails de PIE1 - Interruptions : dtails de PIR1 - Jeu dinstructions 14 15 18 19 20 21 23 24 25 27 29 30 31 32 33

Schma des cartes Mini et process et Implmentation des cartes

Code assembleur TPuC_1.asm

13/39

Annexes : TP Microcontrleur

INSA GE

Figure 5 : Organisation mmoire

14/39

Annexes : TP Microcontrleur

INSA GE

Figure 6 : Description des registres

15/39

Annexes : TP Microcontrleur

INSA GE

16/39

Annexes : TP Microcontrleur

INSA GE

17/39

Annexes : TP Microcontrleur

INSA GE

Figure 7 : Description du registre STATUS

18/39

Annexes : TP Microcontrleur

INSA GE

Figure 8 : Adressage indirect

19/39

Annexes : TP Microcontrleur

INSA GE

Figure 9 : Description du PORTA

20/39

Annexes : TP Microcontrleur

INSA GE

Figure 10 : Description PORTB

21/39

Annexes : TP Microcontrleur

INSA GE

22/39

Annexes : TP Microcontrleur

INSA GE

Figure 11 : Description PORTC

23/39

Annexes : TP Microcontrleur

INSA GE

Figure 12 : Description PORTD

24/39

Annexes : TP Microcontrleur

INSA GE

Figure 13 : Description TIMER1

25/39

Annexes : TP Microcontrleur

INSA GE

26/39

Annexes : TP Microcontrleur

INSA GE

Figure 14 : Interruptions

27/39

Annexes : TP Microcontrleur

INSA GE

28/39

Annexes : TP Microcontrleur

INSA GE

Figure 15 :Dtails registre OPTION_REG

29/39

Annexes : TP Microcontrleur

INSA GE

Figure 16 : Dtails du registre INTCON

30/39

Annexes : TP Microcontrleur

INSA GE

Figure 17 : Dtails du registre PIE1

31/39

Annexes : TP Microcontrleur

INSA GE

Figure 18: Dtails du registre PIR1

32/39

Annexes : TP Microcontrleur

INSA GE

Figure 19: Jeu dinstructions des PIC 16

33/39

Annexes : TP Microcontrleur

INSA GE

Annexes : Schma des cartes Mini et process Implmentation des cartes

Figure 20 : Schma de la carte Mini

34/39

Annexes : TP Microcontrleur

INSA GE

35/39

Annexes : TP Microcontrleur

INSA GE

Figure 21 : Implantation de la carte Mini

Figure 22 : Implantation de la carte process

36/39

Annexe : code TP1

INSA GE

Annexes : Code assembleur TPuC_1.asm


(programme naf !!!)
#include <p16F877A.inc> ; processor specific variable definitions __CONFIG _HS_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF & _PWRTE_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF ;***** VARIABLE DEFINITIONS Tempo_Ws_value equ 0x0020 Tempo_Ws_mem equ 0x0021 tempo equ 0x0022 ;********************************************************************** ORG 0x0000 ; processor reset vector goto main ; go to beginning of program ORG 0x0010 Tempo_Ws: movwf ; INIT compteur bsf clrf bcf clrf movlw movwf movlw movwf movlw movwf bsf Tempo_Ws_value ;dans W temps en ms attendre STATUS, RP0 ; Bank1 PIE1 ; Disable peripheral interrupts STATUS, RP0 ; Bank0 PIR1 ; Clear peripheral interrupts Flags 0x30 ; Internal Clock source with 1:8 prescaler T1CON ; Timer1 is stopped and T1 osc is disabled 0x76 TMR1H ; 0x97 TMR1L ; T1CON, TMR1ON ; Timer1 starts to increment

; 20 MHz / 4 = 5MHz ; prescale de 8 : 5MHZ /8 = 625kHz soit 625 000 incrmentations = 1 s ; nombre de remplissage du compteur 16 bits : 625000/65536 = 9,53 ..(>9 it) ; pour 9 : 9 * 65536 = 589824 incrmentations ralises ; il manque 625000 - 589824 = 35176 incrmentations ; donc charger le compteur avec 65536 - 35176 = 30359 => 0x7697 ; il faut donc partir de cette valeur puis boucler 9 fois (1+9 = 10 it) Tempo_Ws_B1: movlw 0x0A movwf Tempo_Ws_mem Tempo_Ws_B2: Tempo_Ws_OVFL_WAIT: btfss PIR1, TMR1IF goto Tempo_Ws_OVFL_WAIT ; Timer has overflowed bcf PIR1, TMR1IF ; 9 * decfsz Tempo_Ws_mem, f; s goto Tempo_Ws_B2; Tempo_Wms_Value != 0 decfsz Tempo_Ws_value, f; s

37/39

Annexe : code TP1


goto Tempo_Ws_B1; bcf RETURN Tempo_Wms_Value != 0

INSA GE

T1CON, TMR1ON ; Timer1 stops to increment

; ****************************************************************** main: bsf bcf bsf bcf STATUS, RP0; Selection bank 1 TRISD, 0 ; mise 0 du bit 0 de TRISD TRISB, 0 ; mise 1 du bit 0 de TRISB STATUS, RP0 ; Selection bank 0

bcf PORTD, 0 main_prg: ; init tempo clrf tempo; ; touche ? btfsc PORTB, 0 goto main_prg ; allumage bsf

PORTD,0

main_attente: ; attendre 1s movlw .1 call Tempo_Ws ; touche ? btfss PORTB, 0 goto main_eteindre ; incrementer tempo : tempo = tempo + 1 incf tempo, f ; fin tempo ? movf tempo, W sublw .10 btfss STATUS, Z goto main_attente ; Z=0 main_eteindre: ; eteindre LED bcf PORTD, 0 ; attendre 1s movlw .1 call Tempo_Ws ; retour au debut goto main_prg END

; LED eteinte

; directive 'end of program'

38/39

Annexe : code TP2

INSA GE

Annexes : Code assembleur TPuC_IRQ.asm


AVEC LES ERREURS ncessaires au TP;)
; CODE INCOMPLET !!!! special TP IRQ... #include <p16F877A.inc> ; processor specific variable definitions __CONFIG _HS_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF & _PWRTE_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF

39/39

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