Vous êtes sur la page 1sur 8

1

Compte Rendu TP Microproc 2


Kallel Ahmed Yahia

Manipulation de MPLAB

TP n2

GE2S4

PIC 16F84A

Objectif :
On cherche dans ce TP se familiariser avec PIC 16F84 ainsi que se familiariser avec une
plateforme de dveloppement de PIC (MPLAB dans notre cas).

PIC 16F84

Le PIC 16F84 est caractris par son architecture R.I.S.C (35 instructions seulement) bas sur le
modle de Von Neumann (Cest--dire mmoire dinstruction et mmoire de donnes sont
diffrentes).
Le PIC peut arriver fonctionner une frquence de 10 Mhz.
-

Limite de la mmoire dinstructions :

Limite de la mmoire de donnes RAM : 68 octets

Limite de la mmoire ROM :


16
mid-range

F
Flash

1 KB, chaque instruction tant de 14 bits)


64 octets.

84
84 = PIC

(performances) (instructions)

Comme son nom indique, le PIC est programmable (ses instructions le sont) laide dun
programmeur FLASH. Pendant ce TP, on a utilis EasyPIC6 comprenant un programmeur flash
et dautres utilits (cran LCD, boutons, LEDs).
La programmation du PIC se fait travers un programmation (programmateur FLASH, on a
utilis winPIC800) qui prend en entre le fichier compil du MPLAB (hex) et linjecte dans le
PIC16F84 travers une carte dinterfaage (EasyPIC6 dans notre cas).

Compte Rendu TP Microproc 2

Autre signaler sur le PIC quil est possible de faire interfaage avec des priphriques
externes (boutons, LEDs, contacteurs). Le PIC contient des ports (RB0 .. RB7 et RA0 .. RA4) qui
permettent cette fonctionnalit. Reste au programmeur de dfinir les entres et les sorties
puisque ceux-ci sont bidirectionnels.

(*) Image du WIKIPEDIA

MPLAB

Compte Rendu TP Microproc 2


Etapes suivre pour crer son projet :
On dclenche MPLAB puis
Premire utilisation seulement : Configure --> select device --> 16F84

Project --> New : On choisit le dossier et le nom du projet

Project --> select language toolsuite --> Microship MPASM toolsuite

File --> new


On tape quelques mots puis

File --> save , on choisit <nom>.ASM. <nom> tant le


nom dsir et ASM tant lextension du fichier

Maintenant on importe ce fichier dans le projet


(fentre du projet.mcw) on choisit Source Files -->

--> Add Files

Compiler son projet


Pour compiler un projet il suffit juste daller Project --> Make

(F10)

Debug (menu debug)

Pas pas

Debug-->step into

F7

Execution normale

Debug-->Run

F9

Debug-->Reset --> processor reset

F6

Animation:

Activer une fois: Debugger --> Select tool --> MPLAB SIM

. Debugger --> Animate

i++

On crit le code suivant sur MPLAB :


#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC;
CBLOCK 0x0c
var: 1
ENDC
org 0x00
movlw 0x00
bsf STATUS, RP0
movwf TRISB
bcf STATUS, RP0
clrf var

Compte Rendu TP Microproc 2


h1
incf var
movf var,w
movfw PORTB
goto h1
END

Explication du code:
#include <p16F84.inc>

Ajout de diffrentes constantes affiles PIC16F84


__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC;
_CP_OFF: disable code copy (protger son code)
_WDT_OFF: suppression du watchdog timer (WDT : reset auto if fail)
_HS_OSC:

High speed oscillator

CBLOCK 0x0c
var: 1
ENDC

Cration dune variable 1-bit sous lacronyme var, adress partir de 0x0c
org 0x00

lorigine du code sera ladresse 0


movlw 0x00
bsf STATUS, RP0
movwf TRISB
bcf STATUS, RP0
clrf var

;
;
;
;
;

w 0
MEMORY_PAGER 1 , on se retrouve en banc 1
TRISB [w]=0
MEMORY_PAGER 0 , on se retrouve en banc 0
var 0

Tous les RBi seront mis tat sortie


var 0
h1
incf var
movf var,w
movfw PORTB
goto h1

;
;
;
;

var++
w [var]
PORTB [w] = [var]
loop

END

var++ sera execute jusqu linfini


puis cette valeur sera transmis au PORTB (pins RBi)

Compte Rendu TP Microproc 2

Code aprs compilation

0000
0001
0002
0003
0004
0005
0006
0007
0008

movlw 0x00
bsf 0x03, 0x05
movwf 0x06
bcf 0x03, 0x05
clrf 0
incf 0x0c, F
movf 0x0c, W
movwf 0x06
goto 0x05

Code hex,bin

Adresse

Op. mn.

Oprande 1

0000
0001
0002
0003
0004
0005
0006
0007
0008

movlw
bsf
movwf
bcf
clrf
incf
movf
movwf
goto

0x00
0x03
0x06
0x03
0x00
0x0c
0x0c
0x06
0x05

Oprande 2

0x05
0x05
F=1
W=0

Equivalent hex

0x3000
0x1683
0x0086
0x1283
0x0180
0x0A8C
0x080C
0x0086
0x2805

Equivalent bin

11 0000 0000 0000


01 0110 1000 0011
00 0000 1000 0110
01 0010 1000 0011
00 00001 1000 0000
00 1010 1000 1011
00 1000 0000 1011
00 0000 1000 0110
10 1000 0000 0101

Debug
Itration

W = var

PORTB

-1
1
2
3
...

0
1
2
3
...

0
1
2
3

W est observable depuis View --> Special Function Registers (WREG)


var est observable depuis View --> Watch, Symbol: var
PORTB est observable depuis View --> Special Function Registers (PORTB)

En effet, PORTB prendra donc la valeur de la variable dclare.

En pratique, PORTB reprsente les PINS RBi. Ainsi on remarquera quune tension apparait sur les PINs
allums

Compte Rendu TP Microproc 2

Dtection de Carry
Si on change var FF, on fait une
itration de plus, on obtient le rsultat
suivant :
STATUS :

00011111

Ainsi par identification : C=1


Carry : retenu est mis 1 lorsque la dernire quation retourne un retenu

Simulation sur ISIS

Simulation sur ISIS

En ISIS, on ajoute un nouveau device (PIC16F84A), on le place sur la maquette virtuelle.


Aprs double clique sur ce composant, on associe un fichier HEX compil par MPLAB Program
File , on modifie la frquence de lhorloge de ce PIC (Processor Clock Frequency) 100 Hz

On observe qu 51 secondes, toutes les LEDs sallument.

Compte Rendu TP Microproc 2

Recherche de temps de cycle


Tout fait, en revenant vers le programme compil :
0000
0001
0002
0003
0004
0005
0006
0007
0008

movlw 0x00
bsf 0x03, 0x05
movwf 0x06
bcf 0x03, 0x05
clrf 0
incf 0xc, F
movf 0xc, W
movwf 0x06
goto 0x05

Avant loop:

5 cycles

loop:

5 cycles

;1
;1
;1
;1
;1
;1
;1
;1
;2

CYCLE
CYCLE
CYCLE
CYCLE
CYCLE
CYCLE
CYCLE
CYCLE
CYCLES

La frquence de notre microcontrleur est 100hz, T = 1/100 = 10ms.


Il faudrait avoir 4 coups dhorloge pour obtenir un cycle
Temps ncessaire pour allumer les 8 LEDs est : 5* 255 * 4 * 10m = 51000ms (51s)
Plus prcisment cest 51200ms !

Changement de frquence Quartz 4 MHZ


On reprend les calculs :
T = 1 / 4000 = 0.25ms
Temps ncessaire pour allumer les 8 LEDs : 5 * 255 * 4 * 0.25m = 1275ms = 1.275s
V3=V1+V2

#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC;
CBLOCK 0x0c
V1: 1
V2: 1
V3: 1
ENDC
org 0x00
init
movlw 0x05
movwf V1
movlw 0x07
movwf V2
clrf V3
start
movf V1,W
addwf V2,W
movwf V3
END

Taille de ce programme: 8 * 14 = 112 bits

Compte Rendu TP Microproc 2


V3=V1*V2

#include <p16f84.inc>
__CONFIG _CP_OFF
CBLOCK 0x0c
V1: 1
V2: 1
V3: 1
ENDC
org 0x00
;init
movlw 5
movwf V1
movlw 7
movwf V2
clrf V3
loop
movf V3,w
addwf V1,w
movwf V3
decf V2,f
BTFSS STATUS,Z
goto loop
END

Vous aimerez peut-être aussi