MPLAB

1. MPLAB IDE

2. Simulation

3. Simulation avec une interruption

1. MPLAB IDE

1.1. Présentation :

L’environnement de développement intégré (IDE = Integrated Development Environment) MPLAB regroupe tous les outils nécessaires à la mise au point d’applications avec les microcontrôleurs  PIC 16F84A et autres. Il présente l’énorme avantage d’être gratuit. On le télécharge sur le site http://www.microchip.com. Il contient :

- un éditeur

- un compilateur C et assembleur

- un simulateur

Il permet (voir figure de la page suivante):

- La rédaction du fichier source en langage assembleur (fichier.asm)

- Sa transformation en fichier objet (fichier.hex) prêt à être chargé dans la mémoire programme du microcontrôleur

- Exécuter le programme sur le PC



1.2. Utilisation :

Après avoir démarrer Windows, le premier élément que vous voyez est le bureau, la zone de l’écran dans laquelle vous travaillez. Essayez d’imaginer le bureau comme votre espace de travail personnalisé. Plusieurs icônes (ou petites images) sont rangées sur le côté gauche du bureau. Chaque icône représente un objet, par exemple un dossier ou un programme.

Dans notre cas, c’est l’icône de raccourci « MPLAB », si disponible,  qui nous intéresse.

1.3. Édition du programme

a) Double cliquez sur l’icône “MPLAB” si disponible. Sinon, allez dans : Démarrer => Tous les programmes => Microchip => MPLAB => MPLAB. L’application MPLAB s’ouvre.

MPLAB IDE est un logiciel de la compagnie Microchip qui vous permettra d’éditer (écrire) et d’assembler le programme (transformer votre texte en fichier prêt à être chargé dans la mémoire du microcontrôleur Pic 16F84A).



b) Fermez toutes les fenêtres ouvertes

c) Cliquez sur file => New file. Une fenêtre, nommée pour l’instant « Untitled », (celle où l’on doit écrire le programme en assembleur), s’ouvre.



d) Cliquez sur File puis sur Save As. Une nouvelle fenêtre “Save File As” ou « Enregistrez sous » s’ouvre. Dans la fenêtre « Enregistrer dans », pointez sur (votre clé USB) puis sélectionnez le répertoire Data. Dans la petite fenêtre « Nom de fichier », inscrivez le nom de votre programme (exemple : Lab1.asm). N’oubliez pas l’extension (.asm). Cliquez ensuite sur Enregistrer.

e) Allez dans le menu « Project » et sélectionnez « Project wizard… » qui est un assistant de projet.



La fenêtre suivante apparaît.



L’assistant est prêt à vous guider dans la création de votre projet. Cliquez sur suivant.



f) Dans la liste déroulante sous « Device », choisissez le microcontrôleur à votre disposition (ici le 16F84A) puis cliquez sur suivant.




g) Nous allons maintenant préciser quel langage nous allons utiliser, sachant que nous travaillons en assembleur, mais que différents compilateurs sont proposés. Dans le menu déroulant « Active Toolsuite », sélectionnez « Microchip MPASM toolsuite ». Dans la fenêtre du dessous, choisissez : MPASM Assembleur (mpasmwin.exe). MPASM est en effet l’assembleur par défaut de Microchip. Cliquez sur suivant.


h) Entrez «Lab1» comme nom de votre nouveau projet

i) Cliquez sur Browse puis sélectionnez le répertoire Data de votre clé USB dans lequel vous allez placer votre fichier Lab1.asm.

j) Entrez le nom de fichier Lab1.asm et cliquez sur enregistrer





k) Cliquez sur OK pour continuer







l) Dans la fenêtre de gauche, sélectionnez votre fichier Lab1.asm,  cliquez sur Add puis sur suivant.





m) Cliquez sur Terminer pour créer votre projet avec les paramètres que vous avez définis.


n) Une nouvelle fenêtre apparaît dans le coin supérieur gauche du bureau de MPLAB IDE.







Ici, il est important de bien comprendre que le fichier source choisi sera celui qui sera assemblé ou compilé. Autrement dit, si dans ce fichier se trouve une instruction « include » qui inclut un autre fichier, vous ne devez pas le sélectionner en supplément, il sera joint au projet au moment de l’assemblage.

Par contre, si vous désirez assembler simultanément deux fichiers, et que votre premier fichier ne fait pas référence au second, alors vous devez ajouter ce fichier à l’arborescence.

Tous nos projets ne nécessiteront d’ajouter qu’un seul fichier. Si votre projet nécessite un ou plusieurs fichier(s) supplémentaire(s), la directive « include » sera ajoutée au fichier source afin que l’assembleur intègre automatiquement ce ou ces autre(s) fichier(s).

o) Il nous reste un élément important à préciser, celui du système de numérotation utilisé par défaut. Sélectionnez le menu : «Project => build options => Lab1.asm».





p) Dans la fenêtre qui s’ouvre, cochez “Decimal” et “Disable case sensitivity”.





Comme nous avons décidé de numéroter l’hexadécimal sous la forme 0x--, et le binaire sous la forme B’--------’. Tout nombre sans préfixe sera considéré comme décimal, c’est pourquoi nous cochons la case «Decimal». La case «Disable sensitivity» cochée permet d’éviter des erreurs si on mélange des majuscules et des minuscules (exemple l’écriture de portb à une ligne et de Portb à une autre ligne n’engendrera pas d’erreur). Afin d’éviter tout oubli, je vous conseille cependant de TOUJOURS placer un préfixe devant vos nombres, ceci vous évitera bien des déboires. Utilisez par exemple les syntaxes suivantes :

0x10, H’10’, ou 10h pour la notation hexadécimale

B’00010000’ pour la notation binaire

D’18’ pour la notation décimale

.18 est une autre notation décimale (n’oubliez pas le point « . »)

Un nombre écrit sous une forme sans préfixe sera interprété selon le paramètre précédemment décrit, et donc risque de poser problème si vous intégrez votre fichier dans un autre projet, ou, simplement, si vous communiquez à autrui votre fichier source sans préciser la notation par défaut.

Maintenant, MPASM est prêt à assembler votre programme. Mais, il n’y a toujours rien à l’écran !

Effectivement, MPASM ne se préoccupe pas des fichiers affichés à l’écran, seuls comptent le fichier inscrit dans l’arborescence et les fichiers inclus à partir de ce fichier. Vous pouvez avoir autant de fichiers que vous voulez sur l’écran, ou ne pas en avoir du tout. MPLAB s’en moque.

Par contre, tous les fichiers ouverts lors de la sauvegarde de votre projet seront automatiquement rouverts lors de la prochaine ouverture du projet, même s’ils ne servent à rien. Cette propriété est pratique pour faire des “copier/coller” à partir d’un autre fichier ou pour voir tout en programmant ce qu’un autre a bien pu faire.

q) Double cliquez sur Lab1.asm pour faire réapparaître la fenêtre d’écriture de votre programme. Mettez-la à la taille appropriée.






L’édition de votre programme est terminée, il faut maintenant l’assembler.


1.4. Création du programme objet

Il s’agit de transformer ce fichier “.asm” en fichier “.hex” directement exploitable par le programmateur de PIC

a) Cliquer sur “Project

b) Cliquer sur “Make Project”. La transformation de Lab1.asm en Lab1.hex se fait.

S’il y a des erreurs dans le programme, le message “BUILD FAILED s’affichera.





Correction des erreurs : ouvrir le fichier Lab1.lst qui est fabriqué par l'assembleur et contient le fichier source avec les lignes d’erreurs détectées par l’assembleur. Il indique les erreurs de codes et de syntaxes. Repérez vos erreurs puis :

 





Placez le PIC 16F84A sur son support ZIF (Zero Insertion Force) comme indiqué sur l’image suivante:



Cliquez sur “Device Family” puis sur Midrange – Standard, le PIC 16 F84A
est reconnu comme le montre l’image suivante:




Charger le fichier.HEX en cliquant sur File Import. Dans la  fenêtre, on voit que le fichier à été importé avec succès.



Cliquez sur Write ou sur Programmer Write Device. Le programme est transféré dans le PIC et il est signalé par le succès de l’opération.



Le microcontrôleur PIC 16F84A est prêt à être utilisé. Fermez PICKit 3

1.6. Fichiers créés :

Le fichier Source (*.asm) : il contient le programme tel qu'il a été écrit dans un traitement de texte.

Le fichier liste (*.lst) : il est fabriqué par l'assembleur et contient le fichier source avec les lignes d’erreurs détectées par l’assembleur. Il indique les erreurs de codes et de syntaxes.

Le fichier objet (*.cod) : il contient le travail d'assemblage ou le code source créé par l’assembleur.

Le fichier hexadécimal (*.hex) : il contient le travail d'assemblage sous la forme binaire qui sera gravée dans le microcontrôleur

Le fichier des erreurs (*.err) : il indique les lignes où le compilateur n’a pas pu coder les instructions.

 1.7. Édition d’un autre programme

Pour éditer un autre programme, il n’est pas nécessaire de refaire toutes les étapes dans MPLAB.

a)    Insérez votre clé dans le port USB  de votre ordinateur.

b)   Double cliquez sur l’icône “MPLAB IDE”. Fermez toutes les fenêtres qui apparaissent.

c)    Allez dans le menu « File » et sélectionnez « New »

d)   La fenêtre « untitled » s’ouvre.

e)   Cliquez sur File puis sur Save As. Dans la fenêtre « Enregistrer dans », pointez sur votre clé USB puis sélectionnez le répertoire Data. Inscrivez le nom de votre programme (exemple : Lab2.asm). Cliquez ensuite sur Enregistrer.

f)     Écrivez votre programme en respectant la syntaxe.

g)   Sauvegardez votre programme.

1.8. Création d’un nouveau projet

a) Allez dans le menu « Project » et sélectionnez « New ». La fenêtre qui s’ouvre vous permet d’introduire le nom du projet et le répertoire de travail du dit projet. Pour le répertoire, vous disposez du bouton « Browse… » qui vous permet de pointer sur le bon répertoire sans risque de vous tromper.

b) Entrez le nom de votre nouveau projet, et sélectionnez le répertoire dans lequel vous avez placé votre fichier Lab2.asm.

c) Appuyez sur <OK> puis sur <New  project>. Une nouvelle fenêtre apparaît dans le coin supérieur gauche du bureau de MPLAB IDE.

d) Dans cette fenêtre, vous voyez le nom de votre projet (Lab2.mcp), ainsi que les fichiers liés à celui-ci. Pour l’instant, vous n’en avez aucun, c’est normal.

e) Cliquez avec le bouton droit sur « source files », puis sélectionnez « Add Files ». Notez que MPLAB pointe par défaut sur votre répertoire de travail, précédemment choisi.

f) Sélectionnez Lab2. Le nom du fichier apparaît dans l’arborescence.

g) Double cliquer sur Lab2.asm dans l’arborescence de la fenêtre Lab2.mcw et voici votre fichier de départ ouvert.


h) Il nous reste un élément important à préciser, celui du système de numérotation utilisé par défaut. Sélectionnez le menu : « Project => build options => project ». Une fenêtre s’ouvre. Cochez les deux cases comme à la figure suivante.


i) Écrivez votre programme respectant la syntaxe.

j) Enregistrez-le

k) Éditez-le

l) Enregistrez les données dans la mémoire du microcontrôleur

m) Fermez toutes les applications ouvertes

n) Nettoyez votre répertoire de travail.

2. Simulation :

Pour aider le programmeur à faire ses corrections, MPLAB fournit une possibilité de simulation qui permet de suivre le cheminement du programme, instruction par instruction.

Pour passer en mode simulation :

Dans MPLAB, éditer votre fichier auquel vous donnerez un nom avec une extension .asm.

Créer un projet à partir de ce fichier nom.asm et le compiler pour générer un fichier nom.hex nécessaire au microcontrôleur.

La compilation doit vous donner le message « Build succeeded » comme le montre la figure suivante sinon corriger les erreurs qui apparaissent dans le fichier nom.lst puis recommencer la compilation.

On testera le simulateur avec un petit programme qui fait clignoter une Led placée sur RB1 (bit 1 du port B)

 

;================================================================================ 

; Programme pour le pic 16F84A-04.

; Titre : Lab1

 

;=======================================ENTÊTE=================================== 

list                          p=16f84a, w=2    ; Définition de processeur PIC 16F84A

          ; Signaler seulement les erreurs

__config                 0x3FF1                 ; Pas de protection de lecture de la mémoire,

           ; Oscillateur à cristal, Watchdog à Off, Power up timer à On

 

;================================================================================

 

;Étiquette==Mnémonique=Opérande=================Commentaire============================

 

; Équivalence des registres

; *******************

 

portb                      equ         0x06                      ; Initialise le portb, indique que nous en avons besoin

trisb                        equ         0x86                      ; Initialise le registre “trisb” pour utilisation

status                     equ         0x03                       ; Initialise le registre d'état pour son utilisation

 

; Réservation mémoire

; ****************

 

compteur0            equ         0x0d                      ; Identifie un registre à l'adresse 0x0d au nom de compteur0

compteur1            equ         0x0e                      ; Identifie un registre à l'adresse 0x0e au nom de compteur1

compteur2            equ         0x0f                       ; Identifie un registre à l'adresse 0x0f au nom de compteur2

 

;================================================================================ 

; Initialisation du programme

; ***********************

 

org         0x00                                      ; Origine de départ (adresse sélectionnée après un reset)

goto       debut                                     ; L'adresse 04 est réservée aux interruptions, il faut

           ; donc sauter par dessus

debut     org       0x05                                      ; Origine du programme

bsf          status, 05                              ; Sélection de bank1 pour l'accès au trisb

clrf         trisb                                       ; Déclaration du portb en sortie

bcf         status, 05                              ; Sélection de bank0 pour accès au portb

clrf         portb                                     ; Place toutes les sorties du portb au niveau logique 0

 

;================================================================================ 

; Programme principal

; ****************

 

boucle              movlw   0x02                      ; Charge dans l'accumulateur la valeur b'00000010'

movwf  portb                      ; Place le contenu de w dans le registre portb pour allumer

       ; la led placée sur la sortie RB1 du portb

call         pause                    ; Appelle la routine étiquette pause

movlw   0x00                      ; Charge dans accumulateur la valeur b'00000000'

movwf  portb                      ; Place le contenu de w dans le registre portb pour éteindre

       ; la led placée sur la sortie RB1 du portb

call         pause                     ; Appelle la routine étiquette pause

goto       boucle                   ; Va à l'étiquette nommée boucle

;================================================================================ 

; Temporisation de 0.5 seconde =1/2 période

; **********************************

 

pause              movlw   0x05                      ; Charge dans l'accumulateur la valeur 05

movwf   compteur2            ; Transfert w dans le registre “compteur2”

 

load1              movlw   0xc8                      ; Charge l'accumulateur à c8 (200)

movwf   compteur1            ; Transfert w dans le registre “compteur1”

 

load0               movlw   0xa8                      ; Charge l'accumulateur à a8 (168)

movwf   compteur0             ; Transfert w dans le registre “compteur0”

 

dec                 decfsz    compteur0,1         ; Décrémente le registre “compteur0”, saute l'instruction

     ; suivante si le résultat est zéro

goto        dec                     ; Saute inconditionnellement à “dec”

      ; Un cycle d’instruction utilise quatre périodes d’horloge

      ; Décrémente = 1cycle, goto = 2 cycles soit au total 3 cycles

      ; ou 3 x 4 périodes d’horloge = 3 x 1 ms = 3 ms

     ; t = 3 µs x contenu du registre “compteur0” = 3µs x 168 = 0.5ms

 

decfsz    compteur1,1        ; Décrémente le registre “compteur1”, saute l'instruction

     ; suivante si le résultat est zéro

goto        load0                  ; Recharge le compteur 0 (t écoulé)

                                                                 ; Lorsque compteur 1 = 0, t écoulé est = 3µs x 168 x 200 = 0.1s:

decfsz    compteur2,1         ; Décrémente le registre “compteur2”, saute l'instruction

      ; suivante si le résultat est zéro

goto        load1                  ; Recharge les compteurs 1 et 0

                                         ; Lorsque compteur 2 = 0 t écoulé = 3µs x 168 x 200 x 5 = 0.5s

      ; Ceci correspond à une temporisation de 1/2 période = 0.5s => T=1s

 

return                                 ; Retour à la ligne suivant l'appel de l'étiquette “pause”

end

;================================================================================ 

 

Activer le simulateur : menu «Debugger / Select Tool / MPLAB SIM ».

Les icônes suivantes se rajoutent à la barre des outils.

Ouvrir la fenêtre de suivi de variables et de registres : View / Watch


Pour placer un registre ou une variable : on peut faire la sélection dans le menu déroulant puis on clique sur Add SFR ou Add symbol. Le registre ou la variable choisi apparaît dans la fenêtre du dessous.

On peut choisir tous les codes d'affichage possible : hexa, binaire, ascii, etc. en cliquant avec le bouton droit sur cette ligne.

Pour notre simulation, on a besoin de consulter les contenus des registres suivants: STATUS, TRISB, W et PORTB.

Commandes de base :

Run <F9>: Le programme se lance à vitesse max à partir de la position  actuelle du pointeur vert.

Step Into <F7>, Step Over <F8> (Pas à pas): Le programme s’exécute pas à pas pour les deux mais avec Step Over un appel “call” est exécuté en une fois sans entrer dans la routine. Le pointeur vert indique la ligne de la prochaine instruction à exécuter.

Step Out: Permet de sortir d’une routine de temporisation trop longue.

Reset <F6>: Le CPU est mis à zéro. Il est à l'arrêt et prêt à exécuter l'instruction à l'adresse 0000h.

Animate: Il s'agit d'un "pas à pas" automatique. Le rythme peut être réglé dans le menu : "Debugger/Settings" sous l'onglet Animation/realtime Updates »: paramètre "Animate step time" (par défaut à 300mS)



3. Simulation avec une interruption sur RB0 :

On prendra comme exemple le programme suivant :

;================================================================================ 

; Programme pour le pic 16F84A. Ce programme allume une lumière placée sur RA2 à l'aide d'un bouton

; poussoir  placé sur RB0/INT

; Titre : Télérupteur version 1 (Lab #7)

; Enseignant : Dany Amer 

; Remarque : Anti-rebond de 390 ms (temporisation) avec un quartz de 4MHz

 

; Fichier requis : p16f84a.inc

 

;====================================ENTÊTE====================================== 

list                          p=16f84a, w=2                   ; Définition de processeur, niveau d’erreur

#include                  <p16f84a.inc>                    ; Définition des constantes

__config                  0x3FF1 

;================================================================================

;  ASSIGNATIONS

;  **************

 

ValeurOption        equ         0xC0                        ; Valeur du registre "optio

                                                                         ; Résistances pull-ups "OFF"

               ; Interruption RB0/INT sur front montant

 

ValeurIntCon        equ         0x90                        ; Masque d'interruption. Autorisation générale

               ; d'interruption et permission de l'interruption RB0/INT

 

;================================================================================

; DÉFINITIONS

; ************

 

#define FINTRB0    intcon, 1                    ; Drapeau d'interruption pour temporisation contre les

               ; rebonds du bouton poussoir

 

;================================================================================

;  MACRO

;  *******

 

bank0    macro

    bcf         status, 5                ; Passer en banque0

    endm


 

 

bank1    macro

    bsf          status, 5                ; Passer en banque1

    endm

 

;================================================================================ 

;  DÉCLARATION DE VARIABLES

;  *****************************

 

cblock                   0x0c            ; Début de la zone variables

w_temp :1                                ; Emplacement de sauvegarde du registre W

status_temp : 1                          ; Emplacement de sauvegarde du registre STATUS

compteur0 : 1                            ; Emplacement du compteur

compteur1 : 1                            ; Emplacement du compteur1

compteur2 : 1                            ; Emplacement du compteur2

endc                                         ; Fin de la zone de stockage

 

;================================================================================ 

;  DÉMARRAGE SUR RESET

;  ***********************

 

org                    0x00                ; Adresse de départ après reset

goto                   init                  ; Aller à l'étiquette "init"

 

;================================================================================ 

;  ROUTINE INTERRUPTION

;  ***********************

 

;  sauvegarde des registres

;  -----------------------------

 

org                    0x04                   ; Adresse d'interruption

movwf               w_temp              ; Sauvegarder le registre W

swapf                 status, w            ; Swap status avec résultat dans w

movwf               status_temp        ; Sauvegarder status "swappé"

call                     BPRB0              ; Traiter l'interruption RB0/INT

 

;  Restauration des registres

;  -------------------------------

 

swapf                   status_temp, w    ; Swap ancien status, résultat dans w

movwf                  status                 ; Restaurer status

swapf                   w_temp, f           ; Inversion L et H de l'ancien W sans modifier Z

swapf                   w_temp, w          ; Réinversion de L et H dans W

      ; W restauré sans modifier status

 

retfie                                               ; Retour à la ligne suivant l'appel d'interruption

 

;================================================================================

;  INTERRUPTION RB0/INT

;  **********************

 

BPRB0

movlw                   0x04                     ; Bit à inverser

bank0                                                ; Passer en banque0

xorwf                    porta , f                 ; Inverser LED

bcf                        intcon, inte             ; Interdire une autre interruption sur RB0/INT

return                                                 ; Fin d'interruption RB0/INT

 

;================================================================================

;  INITIALISATION

;  ***************

 

init

bcf                        FINTRB0                 ; Effacer "flag" tempo

bank1                                                    ; Passer en banque1

movlw                   0x01

movwf                   trisb                          ; RB0 en entrée

movlw                   0x00

movwf                   trisa                          ; RA2 en sortie

movlw                   ValeurOption             ; Charger masque (pull-ups "OFF" et RBO/INT sur

             ; niveau haut)

movwf                   option_reg                 ; Initialiser le registre "option"

 

bank0                                                     ; Passer en banque0

movlw                   ValeurIntCon              ; Masque d'interruption (autorisation des interruptions

              ; GIE et INTE)

movwf                   intcon                        ; Charger le masque dans le registre "INTCON"

clrf                         porta                         ; Éteindre la Led

clrf                         portb

goto                       start                           ; Aller au programme principal

 

;================================================================================

;  PROGRAMME PRINCIPAL

;  ***********************

 

start

btfss                      FINTRB0                   ; Tester si le "flag" FINTRB0 est mis. Si oui sauter la

               ; prochaine instruction sinon exécuter la suivante

goto                       start                           ; Boucler

call                         Attente                      ; Exécuter la temporisation

 

bcf                         FINTRB0                  ; Effacer le "flag" FINTRB0

bsf                         intcon, inte                 ; Remettre RB0/INT en service

goto                       start

 

;================================================================================ 

;  TEMPORISATION DE 390 ms

;  **************************

 

Attente

movlw                   0x02                               ; Charge la valeur 2 dans l'accumulateur

movwf                  compteur2                       ; Transfert w dans le registre "compteur2"

 

load1

movlw                   0xff                                 ; Charge la valeur ff dans l'accumulateur

movwf                  compteur1                        ; Transfert w dans le registre "compteur1"

 

load0

movlw                   0xff                                 ; Charge la valeur ff dans l'accumulateur

movwf                  compteur0                        ; Transfert w dans le registre "compteur"

 

dec

decfsz                   compteur0, 1                     ; Décrémente le registre "compteur0", saute

                    ; l'instruction suivante si le résultat est zéro

goto                       dec                                  ; Décrémente = 1 cycle, goto = 2 cycles soit au total

                    ; 3 cycles d’instruction , t = 3 micro-secondes x

                    ; contenu du registre "compteur" = 3µs x 255 = 765ms

 

decfsz                   compteur1, 1                     ; Décrémente le registre "compteur1"

goto                       load0                               ; t = 3 x 255 x 255 = 195ms

 

decfsz                   compteur2, 1                     ; Décrémente le registre "compteur2"

goto                       load1                                ; t = 3µs x 255 x 255 x 2 = 390 millisecondes

 

return                                                             ; Retour à la ligne suivant l'appel de l'étiquette

                      ; "attente"

end                                                                 ; Directive fin de programme

;================================================================================

Avec le simulateur en service et la fenêtre des registres de fonctions spéciales, démarrer la simulation en cliquant sur “Animate”.

Une fois arrivé dans le programme principal, le programme boucle indéfiniment. Un événement extérieur (bouton-poussoir) est nécessaire pour provoquer le passage dans la routine d’interruption.

Pour simuler un événement extérieur, il faut aller dans le menu «Debugger / Stimulus /  New Workbook ».


La fenêtre suivante s’ouvre.

Nous allons définir le bouton poussoir et les actions qui lui seront associées à savoir <Niveau Haut> et <Niveau Bas>. Le bouton sera placé sur RB0.

Dans le menu “Asynchrone” de la fenêtre Stimulus, aller à la première ligne sous “Pin/SFR”. Dans le menu déroulant choisir RB0.

Dans le menu déroulant sous Action, choisir le niveau Haut (Set High)

À la deuxième ligne, faire la même chose que précédemment avec RB0 sous “Pin/SFR” et Niveau Bas (Set Low) sous Action.

La fenêtre Stimulus sera conforme à la suivante.

Cette fenêtre Stimulus n’a pas de nom (Untitled). Nous allons lui en donner un.

Aller dans le menu Debugger / Stimulus / Save Workbook


La fenêtre suivante apparait.

Inscrire le nom à donner à cette fenêtre Stimulus puis cliquer sur Enregistrer.

La nouvelle fenêtre porte maintenant le nom qu’on lui a assigné.

Cliquer sur “Fire” de la ligne “RB0 SetLow” pour mettre le programme au repos. Si on clique sur “Animate”, il ne se passe rien (aucun changement sur les deux ports AetB)

Cliquer sur “Fire” de la ligne “RB0 SetHigh” pour simuler un appui sur le bouton poussoir. En exécutant le programme pas à pas, on voit d’abord RB0 du portb qui passe à 1.


Lorsque le programme rentre dans la routine d’interruption, il allume la Led placée sur RA2. On voit sur la figure suivante que RA2 du port A passe à 1.


Programme dans la routine d’interruption, on clique sur “Fire” de la ligne “RB0 SetLow” pour simuler le relâchement du bouton poussoir. On voit que la Led reste allumée même si on continue l’exécution du programme.

Cliquer une nouvelle fois sur “Fire” de la ligne “RB0 SetHigh” pour simuler un autre appui sur le bouton poussoir. En exécutant le programme pas à pas, on voit que la Led sur RA2 s’éteint.

Cliquer sur “Fire” de la ligne “RB0 SetLow” pour relâcher le bouton poussoir.

 

Continuer pas à pas l’exécution du programme. Les ports A et B sont à b“00000000” (Le bouton poussoir est relâché, la Led est éteinte).

Retour au début

Retour à microcontrôleur PIC

Sommaire

Accueil