Vous êtes sur la page 1sur 11

Ecole Nationale d’ingénieurs de Sfax

TP n°3 : Microprocesseur
Manipulation MPLAB & ISIS pour PIC 16F84A

Elaboré par :

Ben Ali Imen

GE2-S3-G1
2020-2021
compte rendu tp n°3 MICROPROCESSEUR

TP N°3 : Manipulation MPLAB & ISIS pour PIC 16F84A

But du Manipulation :
Développer des programmes assembleur sous MPLAB.
Tester les codes HEX générés par MPLAB en utilisant ISIS.
Manipulation :
1/ On développe sous MPLAB un programme ASM qui allume une diode LED
connectée sur RB0 par simple appui sur un bouton poussoir connectée à RA0, la diode
LED restera allumé jusqu’à qu’on appuie sur le 2ième bouton poussoir RA1.
Le programme s’écrit de la manière suivante :

#include <p16F84A.inc> ;

__CONFIG _CP_OFF&_WDT_OFF&_HS_OSC ;

org 0x000 ;

movlw 0x00

bsf STATUS,RP0 ;

movwf TRISB ;

movwf 0x03

movwf TRISA ;

bcf STATUS,RP0 ;

bcf PORTB,0 ;

h1 ;

btfsc PORTA,0 ;

bsf PORTB,0 ;

btfsc PORTA,1 ;

bcf PORTB,0 ;

goto h1 ;

END

2
compte rendu tp n°3 MICROPROCESSEUR

Rôle des instructions utiliser dans le programme :

#include : bibliothèque qui contient des constantes


# CP_OFF : non sécurisé, on peut donc écraser le programme existant et le remplacer
d’un
nouveau programme
(Remarque : si on a # CP_ON on ne peut pas supprimer le programme
existant)

 WDT_OFF : watch dog _ pour contrôle


 HS_OSC : oscillateur ou horloge à grande vitesse
 CBLOCK 0x0C : définit un bloc de variable
 org 0x000 : définit la position dans la zone mémoire
 movlw 0x00 : charger la valeur spécifié 0x00 dans la zone mémoire de travail « w »
 bsf STATUS, RPO : mise à 1 du bank 1
 movwf TRISB : recopier le contenu du registre de travail « w » dans TRISB
 movlw 0x03 : charger la valeur spécifié 0x03 dans la zone mémoire de travail « w »
 movwf TRISA : recopier le contenu du registre de travail « w » dans TRISA
 bcf STATUS, RPO : mise à 0 du bit RBO du registre STATUS
 bcf PORTB,0 : mise à 0 du RB0
 h1 : c’est une étiquette
 btfsc PORTA,0 : contrôler le bit RA0 si ‘RA0=0’ sauter l’instruction qui vient juste
après
l’instruction btfsc si non l’exécute
 bsf PORT,0 : mise à 1 du RB0
 btfsc PORTA,1 : contrôler le bit RA1 si ‘RA1=0’ sauter l’instruction qui vient juste
après
l’instruction btfsc si non l’exécute
 bcf PORT,0 : mise à 0 du RB0
 goto h1 : effectuer un saut inconditionnel

3
compte rendu tp n°3 MICROPROCESSEUR

2/ On réalise le montage suivant sous ISIS et on teste le code HEX :

Taille de programme :
Chaque instruction 14bits
On a 12 instructions
 La taille sera alors 12x14bits = 168bits =21 Octets
On calcule les adresses des instructions :

4
compte rendu tp n°3 MICROPROCESSEUR

Opcode :
Instruction : 11 00xx kkkk kkkk
movlw 3 0000 0000 0000 3000
3 0 0 0 @00h

Instruction : 01 01bb bffff ffff


Bsf 0x3 01 0110 1000 0011 1883
1 6 8 3 @01h

Instruction : 00 0000 1fff ffff


Movwf 00 0000 1000 0110 0086
TRISB
0 0 8 6 @02h

Instruction : 00 0000 1fff ffff


Movwf 0x03 00 0000 1000 0011 0083
0 0 8 3 @03h

Instruction : 00 0000 1fff ffff

5
compte rendu tp n°3 MICROPROCESSEUR

Movwf 00 0000 1000 0101 0085


TRISA
0 0 8 5 @04h

Instruction : 01 00bb bffff ffff


Bcf 01 0010 1000 0011 1283
STATUS,RP0
1 2 8 3 @05h

Instruction : 01 00bb bffff ffff


Bcf 01 0000 0000 0110 1006
PORTB,0
1 0 0 6 @06h

Instruction : 01 10bb bfff ffff


Btfsc 01 1000 0000 0101 1805
PORTA,0
1 8 0 5 @07h

Instruction : 01 01bb bfff ffff


Bsf 01 0100 0000 0110 1406
PORTB,0
1 4 0 6 @08h

Instruction : 01 10bb bfff ffff


Btfsc 01 1000 1000 0101 1885
PORTA,1
1 8 8 5 @09h

Instruction : 01 00bb bffff ffff


Bcf 01 0000 0000 0110 1006
PORTB,0
1 0 0 6 @0Ah

Instruction : 10 1kkk kkkk kkkk


Goto 10 1000 0000 0111 2807

6
compte rendu tp n°3 MICROPROCESSEUR

2 8 0 7 @0Bh

3) On développe un nouveau programme permet d’allumer une LED si et seulement si


RA0=RA1=5V et on teste le code HEX sous ISIS
Le programme s’écrit de la manière suivante :

#include <p16F84A.inc> ;

__CONFIG _CP_OFF&_WDT_OFF&_HS_OSC ;

org 0x000 ;

movlw 0x00

bsf STATUS,RP0 ;

movwf TRISB ;

movwf 0x03

movwf TRISA ;

bcf STATUS,RP0 ;

h1 ;

bcf PORTB,0 ;

h2 ;

btfss PORTA,0 ;

goto h1 ;

btfss PORTA,1 ;

goto h1 ;

7
compte rendu tp n°3 MICROPROCESSEUR

bsf PORTB,0 ;

goto h2 ;

END

Taille du programme :

13 instructions x 14bits = 182 bits = 23 octets

Opcode :

On calcule l’Opcode du programme :


Instruction : 11 00xx kkkk kkkk

8
compte rendu tp n°3 MICROPROCESSEUR

movlw 3 0000 0000 0000 3000


3 0 0 0 @00h

Instruction : 01 00bb bffff ffff


Bsf 01 0110 1000 0011 1683
STATUS,RP0
1 6 8 3 @01h

Instruction : 00 0000 1fff ffff


Movwf 00 0000 1000 0110 0086
TRISB
0 0 8 6 @02h

Instruction : 00 0000 1fff ffff


Movwf 0x03 00 0000 1000 0011 0083
0 0 8 3 @03h

Instruction : 00 0000 1fff ffff


Movwf 00 0000 1000 0101 0085
TRISA
0 0 8 5 @04h

Instruction : 01 00bb bffff ffff


Bcf 01 0010 1000 0011 1283
STATUS,RP0
1 2 8 3 @05h

Instruction : 01 00bb bffff ffff


Bcf 01 0000 0000 0110 1006
PORTB,0
1 0 0 6 @06h

Instruction : 01 11bb bfff ffff


Btfss 01 1100 0000 0101 1C05

9
compte rendu tp n°3 MICROPROCESSEUR

PORTA,0 1 C 0 5 @07h

Instruction : 10 1kkk kkkk kkkk


Goto 10 1000 0000 0110 2806
2 8 0 6 @08h

Instruction : 01 11bb bfff ffff


Btfss 01 1100 1000 0101 1C85
PORTA,1
1 C 8 5 @09h

Instruction : 10 1kkk kkkk kkkk


Goto 10 1000 0000 0110 2806
2 8 0 6 @0Ah

Instruction : 01 01bb bfff ffff


Bsf 01 0100 0000 0110 1406
PORTB,0
1 4 0 6 @0Bh

Instruction : 10 1kkk kkkk kkkk


Goto 10 1000 0000 0111 2807
2 8 0 7 @0Ch

10
compte rendu tp n°3 MICROPROCESSEUR

4)

Rôle de la résistance de rappel :

Une résistance de rappel permet de fixer une entrée numérique à un état HIGH ou LOW stable. Elle
permet aussi de réduire le bruit, d'éliminer les broches flottantes et surtout, d'établir deux états
électriques clairs et distincts

un état haut (HIGH)


un état bas (LOW)

11

Vous aimerez peut-être aussi