Академический Документы
Профессиональный Документы
Культура Документы
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.
-
F
Flash
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).
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.
MPLAB
(F10)
Pas pas
Debug-->step into
F7
Execution normale
Debug-->Run
F9
F6
Animation:
Activer une fois: Debugger --> Select tool --> MPLAB SIM
i++
Explication du code:
#include <p16F84.inc>
CBLOCK 0x0c
var: 1
ENDC
Cration dune variable 1-bit sous lacronyme var, adress partir de 0x0c
org 0x00
;
;
;
;
;
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
;
;
;
;
var++
w [var]
PORTB [w] = [var]
loop
END
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
Debug
Itration
W = var
PORTB
-1
1
2
3
...
0
1
2
3
...
0
1
2
3
En pratique, PORTB reprsente les PINS RBi. Ainsi on remarquera quune tension apparait sur les PINs
allums
Dtection de Carry
Si on change var FF, on fait une
itration de plus, on obtient le rsultat
suivant :
STATUS :
00011111
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
#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
#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