Professional Documents
Culture Documents
*/
#pragma code
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
17
4. #Pragma interruptlow v #Pragma interrupt
Ngt l 1 phn quan trng trong vi i u khin (VK) gip cho
chng trnh ca chng ta r nhnh v thc hin cc cng vic khc
nhau, khi xy ra ngt VK con tr chng trnh s tr ti a ch ca
chng trnh ngt tng ng ( a ch ca chng trnh ngt ty thuc
vo loi ngt v loi VK, khi thc hin lp trnh vi VK no th ta
xem datasheet ca n l bit) v thc hin chng trnh ngt c lu
, khi thc hin chng trnh ngt xong n s tr li thc hin
chng trnh main() ti a ch lc n dng li ( a ch ny c lu
trong stack). Vy ta s xem xt cch khai bo, khai bo mc u v
thc hin chng trnh ngt trong C18 nh th no, go on.
#Pragma interrupt fname: khai bo hm phc v ngt mc u tin
cao (high-priority ISR)
a ch xy
ra ngt
start
a ch
vector ngt
kt thc ngt
end
Lu thc hin ngt
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
18
#Pragma interruptlow fname: khai bo chng trnh phc v ngt
mc u tin thp(low-priority ISR)
C php khai bo:
# pragma interrupt function-name [tmp-section-name][save=save-
list][nosave=nosave-list]
| # pragma interruptlow function-name [tmp-section-
name][save=savelist][nosave=nosave-list]
Trong :
function-name : l tn hm phc v ngt
[tmp-section-name]: tn section trong cha cc bin kiu
temporary ca ISR
[save=save-list] : S dng lu cc bi n, cc section. Trong
save-list l danh sch cc bi n, cc section c lu.
[nosave=nosave-list] : s dng ch rng compiler ko cn lu cc
bin, cc section. nosave-list l danh sch cc bi n, cc section ko cn
lu
Ta s tm hiu dn dn chi tit tng i tng pha di.
Vi khai bo ny trnh dch s to ra bin kiu temporary (th no
l bin, section kiu temporaty ti s ch r pha di ) trong udata
section c tn l fname_tmp. V d:
void foo(void);
...
#pragma interrupt foo
void foo(void)
{
/* perform interrupt function here */
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
19
}
Vi chng trnh ny cc bin ginh cho chng trnh ngt s c
t trong udata section c tn l foo_tmp.
Vector ngt
MPLAB C18 ko t ng t ISR ti vector ngt. Thng thng l dng
lnh Goto t ti vector ngt gi ISR. V d:
#include <p18cxxx.h>
void low_isr(void); // khai bo chng trnh phc v ngt
void high_isr(void); // nh chng trnh bnh thng
/*
Gi s ta lm vic vi loai Pic18 m loi ngt c a ch vector
ngt l 0x18. Nh ti ni phn trn, vector ngt ny ty vo
loi ngt v loi VK, v th khi lm vic vi VK no bn tra
trong datasheet
*/
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
_asm GOTO low_isr _endasm
}
#pragma code /* tr li code section mc nh */
#pragma interruptlow low_isr
void low_isr (void)
{
/* ... */
}
/*
Gi s ta lm vic vi loai Pic18 m loi ngt c a ch vector
ngt l 0x08 */
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
#pragma code /* tr li code section mc nh */
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
20
#pragma interrupt high_isr
void high_isr (void)
{
/* ... */
}
Nh ti ni trn bin, section kiu temporary (nht thi) tc l
n ch xut hin nht thi trong qu trnh thc hin chng trnh. V
d vi chng trnh sau:
Section kiu temporary l dng lu li cc bin trung gian trong
qu trnh tnh ton, thc hin chng trnh v cc bin tmp_1, tmp_2
trong chng trnh l bin kiu temporary. V section ki u temporary
l section c th dng chung gi a cc hm vi nhau ( theo thut ng
ca C18 chnh l section ki u overlay m ti trnh by trn).
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
21
ISR Context Saving (lu trng thi chng trnh ngt) s dng
[save=save-list]
C php:
#pragma interrupt isr save=myint, section("mydata") // lnh ny s lu
bin myint v section c tn l mydata.
Ok, cu hi t ra cho chng ta l t i sao li phi lu trng thi
chng trnh ngt? V cu hi u tin s l trng thi chng trnh
ngt l g?
Trong khoa hc my tnh, context ng ngha vi trng thi (state) ca
chng trnh. Nhiu ngi cn cho rng n l ti nguyn ca CPU m
chng trnh ang s dng ti 1 thi im. Ti nguyn ny c th l
cc thanh ghi, b nh v ngoi vi.
Ti sao phi lu trng thi chng trnh ngt???
Trong thc hin chng trnh c cc ti nguyn c c tnh
vulnerable (tnh d b tn thng, hay ni cch khc l n d b thay
i gi tr. y ti xin c gi nguyn thut ng vulnerable m ko
dch ra ting vit). Ti nguyn ny l loi ti nguyn m thng dng
chung gia ISR v code chng trnh chnh. Bi vy nu ta ko tin
hnh lu li cc ti nguyn ny trc khi thc hin code ca ISR th
sau khi thc hin chng trnh n s thay i v nhng d liu b thay
i ny li c code ca chng trnh chnh thc hin v nh vy
chng trnh chng ta sau khi thc hin ngt s chy sai.
V d: ti nguyn c tn l WREG c chc nng lu nhng tnh ton
trung gian. Gi s khi ang thc hin chng trnh chnh m xy ra
ngt m ta ko tin hnh lu l i WREG th chng trnh ngt s thay i
gi tr trong ti nguyn ny. Vy khi thc hin xong chng trnh ngt
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
22
m tr li thc hin chng trnh main th khi chng trnh main c
cc d liu trong ny ra thc hin tnh ton ti p s l nhng d liu
sai. Do vy kt qu cui cng l chng trnh ca chng ta thc hin
sai.
Vy cch gii quyt cho vn ny l nh th no?
Ta c th ngay rng mun chng trnh ngt ISR khng lm thay
i gi tr cc section .tmpdata gc ca chng trnh chnh th ta phi
c section .tmpdata ring cho n. M nh ti trnh by trn khai
bo #pragma interrupt s t ng to ra section .tmpdata cho ring
n.
Bi vy nn ta phi tin hnh lu trng thi chng trnh ngt
Ti nguyn c tnh vulnerability trong thut ng ca C18 chnh l
ti nguyn qun l bi trnh dch (compiler managed resource). C
ngha rng l cc ti nguyn ny d b thay i trong khi thc hin
chng trnh ngt lm sai chng trnh chnh v th cn phi qun l
(vi ngha nh vy theo ti cc loi ti nguyn ny c th gi l ti
nguyn c che bi trnh dch compiler masked sources). Bng
di l danh sch cc ti nguyn qun l bi trnh dch:
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
23
7 thanh ghi u tin c gi l vital c ngha rng n mc nh
c lu li trc khi thc hin ngt, nay ni cch khc chng tr nh
thc hin ngt chc chn s thay i gi tr 7 thanh ghi ny.
Tip theo l cc thanh ghi TBLPTR v TABLAT ( cc thanh ghi
c s dng truy cp b nh chng trnh). Nu bn bit rng ISR
ko truy cp d li u rom th bn c th bo v trnh dch ko lu cc
thanh ghi ny (pha di ti s trnh by cch lm th no ko lu
cc d liu nu ko cn thit phi lu).
Ging nh vy, nu bn bit ISR ko s dng con tr hm, bn c
th ko lu cc thanh ghi PCLATH v PCLATU
MATHDATA l 1 section c bit c s dng bi th vic math,
ngoi ra n c s dng trong ch truyn thng thc thi nhng
giao din hm. Section ny nh v thng bn ko cn lo lng v n.
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
24
Cui cng l section .tmpdata cha nhng gi tr trung gian cho
nhng tnh ton phc tp m ti trnh by nh th no l section
temporary (.tmpdata) phn trn. Section loi ny ln ln trong qu
trnh thc hin chng trnh m chng ta khng kim sot c s ln
ln ca n trong tng thi im.
Ta thy rng ti sao phi lu trng thi chng trnh ngt.
Nhng vn i km vi lu trng thi ngt s l thi gian phc v
ngt b tng ln. Bi v trc khi thc hin code ngt th phi lu li
trng thi v sau khi thc hin ngt li phi tin hnh khi phc trng
thi lu li . Cng vi c ny tn kh nhiu thi gian nu d liu
cn lu ln. c bit l trnh dch v3.0 v phin bn cao hn, trnh
dch nhn dng ti nguyn vulnerable 1 cch d dt(conservative), c
ngha l nu n ko chng mnh c ti nguyn l ti nguyn
vulnerable hay ko th n s lu ti nguyn . Ta xem v d sau:
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
25
ISR u tin ko gi hm khc. Bi vy trnh dch c th phn tch
hm isr v nhn ra cc ti nguyn c sa l cc thanh ghi WREG,
BSR, STATUS, TBLPTR v TABLAT. V th trnh dch s t ng lu
cc thanh ghi ny v cng ch lu cc thanh ghi ny.
Trong chng trnh th 2, c gi hm khc v th trnh dch khng
bit rng n ang v s sa ci g trong hm foo. Trong thc t hm
foo c th l module ring r. Bi vy trnh dch lu tt c ti nguyn
qun l bi trnh dch (compiler managed resources). Vi c ch hot
ng ny th nu section kiu .tmpdata c d liu ln th s tn nhiu
thi gian lu v khi phc v nh ti ch ra trn rng section kiu
ny tng ln trong qu trnh thc hin chng trnh v ta ko ki m sot
c iu ny.
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
26
Vy nhim v tip theo ca ta chnh l phi ti u qu trnh lu d
liu, tc l lu nhng d liu cn thit cn nhng d liu ko cn thit
th ko lu. N c thc hin bng [nosave=nosave-list]
Ch r bin v d liu ko cn lu trong trng thi ngt bng
[nosave=nosave-list]
Nh ti trnh by trn khai bo ny s ch ra rng cc bin v
section trong nosave-list s ko c lu.
#pragma interrupt foo nosave=TBLPTR, TABLAT // khai bo ny s ko lu
2 thanh ghi TBLPTR, TABLAT, bi v 2 thanh ghi ny ko c s dng trong chng
trnh main() v n ch s dng trong chng trnh ngt v th ko cn lu li (ko
cn bo v)
Vi ngt mc u tin cao (khai bo bng #pragma interrupt) cc v tr
ti nguyn c th khng cn lu bo v l: FSR0, TBLPTR, TBLPTRU, TABLAT,
PCLATH, PCLATU, PROD, section(".tmpdata"), or section("MATH_DATA").
Vi ngt mc u tin thp (khai bo bng #pragma interruptlow) cc
v tr ti nguyn c th l khng cn lu bo v l nhng ti nguyn
va k trn v thm WREG, BSR, or STATUS.
Vn tip theo l ta xc nh section hoc thanh ghi no b thay
i, hoc ko b thay i c th save hoc nosave. Chng nh ta li
phi c m my m trnh dch to ra xc nh xem section no b
thay i. Nu bt buc phi lm cng vic th chc chn rng ta
mun ti u ti nguyn th phi mt nhiu thi gian, cng sc, v nh
vy c l chng ai s dng C18 lp trnh. Vy cch gii quyt s l
nh th no. Ta tm hiu vn ny tip sau:
5. #Pragma tmpdata [section-name]
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
27
Cu lnh ny s thay i section thnh section loi d liu .tmpdata
C php:
#pragma tmpdata [section-name]
[section-name] tn ca section d liu m trnh dch to cc bin
temporary
V d:
#pragma tmpdata user_tmp
// cu lnh bn trong s to ra cc bin dng .tmpdata lu trong section c tn l
user_tmp
#pragma tmpdata
Ta xem xt xem vn ti va gi l lm th no xc nh
section no ko thay i khng cn phi lu. Ta xt v d sau:
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
28
Lnh #pragma tmpdata setporttmp.#pragma tmpdata : s to
thm 1 section kiu .tmpdata lu tr d liu trung gian khi thc
hin hm SetPort().
lnh tip theo #pragma interruptlow low_isr nonsave(.tmpdata)
to ra section .tmpdata cho chng tr nh ngt v bo v section c tn
l setPorttmp bi chnh v th m hm setPort() c th c dng
cho c chng trnh chnh m ko b li khi thc hin. Hay ni cch
khc section setPorttmp c dng chung cho c chng trnh ngt
v chng trnh chnh
Vic tn dng ti nguyn mi ni trong chng trnh l vn
kh quan trng gip chng thc hin c cc Project ln m khng
tn nhiu tin chi cho ti nguyn ( Ti nguyn ti mun ni ti chnh
l b nh v tc x l). Di y ta xem xt cch t i u s dng ti
nguyn nh th no..
Tit kim ti nguyn khi x l nhiu ngt mc u tin cao
Trong chng trnh c nhiu ngt u tin cao (
#pragma interrupt
), v cc
chng trnh ngt mc u tin cao th ch c th kch hot 1 thi
im nn c th dng chung cc section ki u .tmpdata
V d:
void increment (int counter);
void isr1 (void);
void isr2 (void);
#pragma interrupt isr1 isr_tmp nosave=section(".tmpdata")
void isr1 (void)
{
static int foo = 0;
...
increment (foo);
...
}
#pragma interrupt isr2 isr_tmp nosave=section(".tmpdata")
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
29
void isr2 (void)
{
static int foo = 0;
...
increment (foo);
...
}
#pragma tmpdata isr_tmp
void increment (int counter)
{
...
}
#pragma tmpdata
Trong chng trnh v d trn ta thy 2 chng trnh ngt mc u
tin cao dng chung section .tpmdata tn l isr_tmp. Bi v cc
chng trnh ngt mc u tin cao 1 thi im ch c th kch hot 1
chng trnh. Ta tng tng rng nu ko c c tnh ny khi ngt
isr1 xy ra v chng trnh phc v ngt ca n ang thc hin,
chng trnh isr1() chy vn cha xong th ngt 2 s c kch hot
th section isr_tmp b thay i. Nh th sau khi thc hin xong isr2()
chng trnh quay li thc hin isr1() v s dng cc gi tr trong
section isr_tmp b thay i chng trnh isr1() thc hin khng
chnh xc.
Vy vi ngt c mc u tin khc nhau trong cng 1 chng trnh
m chng trnh ngt mc u tin thp hn th chng ta phi x l
nh th no m bo chng trnh vn tn dng c ti nguyn v
chc nng chng trnh vn c m bo chnh xc.
Ngt lng nhau (Nested Interrupts)
Ta xt v phn tch v d sau:
void increment (int counter);
void isr1 (void);
void isr2 (void);
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
30
#pragma interrupt isr1 isr_tmp save=section("isr_tmp")
nosave=section(".tmpdata")
void isr1 (void)
{
static int foo = 0;
...
increment (foo);
...
}
#pragma interruptlow isr2 isr_tmp save=section("isr_tmp")
nosave=section(".tmpdata")
void isr2 (void)
{
static int foo = 0;
INTCONbits.GIE = 1;
...
increment (foo);
...
}
#pragma tmpdata isr_tmp
void increment (int counter)
{
...
}
#pragma tmpdata
Ta thy rng section isr_tmp phi c lu li trc khi thc hin
chng trnh ngt v ngt isr2 l loi ngt c mc u tin thp nn
trong khi thc hin chng trnh ngt isr2() n c th b ngt on.
n y chc cc bn c th t phn tch c ti sao li phi khai
bo chng trnh nh th, ti ko phn tch r chng trnh ny, cc
bn t phn tch nh v d trn ti va phn tch s thy v hiu r.
Tip: ti y bn t t cu hi ti sao li phi lng nhng nh
vy. Vic qun l ti nguyn sao ko trnh dch t lm. Nh ti
phn tch trn rng hiu r c nhng iu ti va trnh
by s tn dng c ti a ti nguyn. Gi s ta thc hin 1
Project th phi lm sao tn dng ti a ti nguyn ta c, t c l
lm sao m ti nguyn nh nht ta dng gii quyt c bi
ton . Nh ti ni trn ti nguyn y l dung lng b
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
31
nh v tc x l chng trnh. Nu ta ko hiu r v ko thc
hin c nhng khai bo tn dng ti a th c th ta s phi
dng VK c ti nguyn l n hn, v nh th tn tin, v i khi
thm ch l nhiu khi c tin cng ko mua c.
6. #pragma config
Khai bo ny ci t cu hnh s dng trong cc ng dng khc
nhau. V c th s dng nhiu khai bo cu hnh cho thi t b
C php:
# pragma config set t i ng-l i st
set t i ng-l i st :
set t i ng
| set t i ng-l i st , set t i ng
set t i ng:
set t i ng-name = val ue-name
set t i ng-name = val ue-name: ng vi tng thit b, tra chng ta s
dng ti liu PIC18 Configuration Settings online help. Bn c th
dowload ti li u ti y.
V d vi PIC18F2220 tra trong ti li u ta c:
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
32
Da vo ta cu hnh cho PIC18F2220 nh sau:
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
33
#pragma config WDT = ON, WDTPS = 128
#pragma config OSC = HS
/* cu hnh ny enable Watchdog Timer, thit lp postcaler
Watchdog l 1:128 v oscillator HS*/
void main (void)
{
...
}
7. Processor-Specific Header Files
L loi file cha nhng khai bo cho nhng thanh ghi chc nng
c bit.
V d, trong file header ca PIC18C452, PORTA c khai bo:
extern volatile near unsigned char PORTA;
extern volatile near union {
struct {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
unsigned RA6:1;
} ;
struct {
unsigned AN0:1;
unsigned AN1:1;
unsigned AN2:1;
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
34
unsigned AN3:1;
unsigned T0CKI:1;
unsigned SS:1;
unsigned OSC2:1;
} ;
struct {
unsigned :2;
unsigned VREFM:1;
unsigned VREFP:1;
unsigned :1;
unsigned AN4:1;
unsigned CLKOUT:1;
} ;
struct {
unsigned :5;
unsigned LVDIN:1;
} ;
} PORTAbits ;
Khai bo u tin ngha rng PORTA l 1 byte ( ki u unsigned
char). Modiffer extern cn thit khi gi file header trong file khc
th bin mi c hiu lc, near c ngha l bin PORTA c t trong
b nh RAM c th truy cp. Dng khai bo ny thit lp gi tr
PortA.
V d:
PORTA = 0x34; /* gn gi tr 0x34 ti cng A */
Tip theo l khai bo th 2 l cu trc nc danh m ti trnh by
trn, vy ta hiu khai bo ny nh th no. Bn c th thy cc nhn
RA0, RA1.; AN0, AN1ging vi nhn m trong datasheet ghi. Tc
l dng khai bo ny chng ta c th truy cp tng bit trong portA.
V d:
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
35
PORTAbits.AN0 = 1; /* Sets chn c k hiu AN0 pin */
PORTAbits.RA0 = 1; /* Sets chn c k hiu RA0 pin, c tc
dng ging vi lnh trn v AN0 v RA0 cng l k hiu ca
1 chn*/
Cc file header ny Microchip cung cp cho chng ta hu nh
y cc dng Pic18 sau khi ta ci t C18 trn my. xem cc
file header ny ta c th vo th mc C:\Program
Files\Microchip\mplabc18\v3.38\h. Cng vic ca ta ch l dng n,
dng n trong chng trnh ta dng lnh:
#include<p18xxxx.h> // trong xxxx l ch s VK tng ng
ta dng
V d khi lp trnh cho pic18f4550 ta khai bo:
#include<p18f4550.h>
Ngoi vic s dng tn trc tip khai bo ta c th s dng lnh
#include <p18cxxx.h> kt hp vi lnh p option s dng file
header ca VK tng ng
Trong cc file header cn nh ngha sn cho chng ta cc Macro
assembly v ta sn s dng chng trong l p trnh. Danh sch cc
Macro v chc nng ca chng ti lit k di bng sau:
Macro Chc nng
Nop()
Khng thc hin g, ch l delay 1 chu k dao
ng thch anh, thng s dng trong vit hm
delay
ClrWdt() Clear watchdog timer
Sleep() Thc thi lnh SLEEP
Reset() RESET thit b
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
36
Rlcf(var, dest , acces) Quay tri gi tr var qua bit mang
Rlncf(var, dest , acces) Quay tri gi tr var ko qua bit mang
Rrcf(var, dest , acces) Quay phi gi tr var qua bit mang
Rrncf(var, dest , acces) Quay phi gi tr var ko qua bit mang
swapf(var, dest , acces) i v tr nibble ca gi tr var
- Nu s dng Macro qu nhi u s nh hng ti qu trnh ti u
cc chc nng m Macro m nhim
- Var : phi l 8 bit v ko c t trong stack
- Nu dest =0, kt qu c t trong WREG, nu dest=1 kt qu
c t trong var. Nu access =0 th bank c th truy cp c
chn, ghi gi tr BSR, nu access=1 th bank s c chn
da trn gi tr ca BSR
V d:
var=0b11110000; / / gi t r 8bi t
Rlcf(var, 1, 0) / / gi t r var=11100001 c l u t rong bank c t h
t ruy cp, bi t mang=1
Hnh biu th thc hin lnh Rlcf()
1 1 1 1 0 0 0 0
Cc lnh khc qu trnh thc hin tng t nh vy.
1
1 1 1 0 0 0 0 1
Gi tr gc
Bit mang
Gi tr ch
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
37
8. Processor-Specific Register Definitions Files
Cc file nh ngha thanh ghi ca VK l file assembly cha cc
nh ngha v cc thanh ghi. Cc khai bo ny chnh l vi c dn nhn
cho cc thanh ghi ta sn s dng m ko cn khai bo.
V d: PortA ca VK Pic18C452 c nh ngha trong file l :
SFR_UNBANKED0 UDATA_ACS H'f80'
PORTA
PORTAbits RES 1 ; 0xf80
nh ngha ny c ngha l PortA c 1 nhn l PORTA v PORTAbits
v c 2 u c tham chiu ti v tr c a ch 0xf80 (y chnh l
a ch ca thanh ghi PortA trong VK Pic18c452)
Ta c th xem cc nh ngha ny trong th mc: C:\Program
Files\Microchip\mplabc18\v3.38\src\extended\proc
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
38
Phn II: Lp trnh PIC18 bng MPLAB C18
Dowload phn mm MPLAB v C18 trn internet ri tin hnh ci
t chng trn my tnh ca bn. C 1 lu cc loi phn mm u c
phin bn ca n v tng ng vi loi phin bn ca MPLAB bn
phi xem n h tr C18 ti phin bn no. V nu khng tng thch
gia 2 ci ny khi thc hin dch chng trnh s bo li v bn chng
bit li ch no.
Download MPLAB:
http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_7
6.zip
Download C18:
http://ww1.microchip.com/downloads/en/DeviceDoc/mplabc18_v3.40_
windows_lite.exe
Bn download chng v my ri tin hnh ci t nh chng trnh
bnh thng. Ti khng i su v vn ny.
1. S dng MPLAB
1.1. Qun l Project
Cng nh bt k trnh dch no khc MPLAB cng c assembler,
compiler, linkerVy ta xem MPLAB dng chng nh th no to
ra file chy. Tin trnh to file chy c th hin hnh 2.1 (hnh
di):
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
39
T file ngun (source file) c vit theo c php assembly hoc c
php compile (trong ti li u ny ta nghin cu C18 m ti trnh by
phn 1), kt hp vi cc option build, cc assembler v compiler s
dch ra m my (hnh 2.2). Ti p theo l ti cng vic ca Linker s
lin kt file do cc trnh dch to ra + th vi n file object + linker
script (tp link, l tp ch r b tr b nh vi tng VK khc nhau)
to ra file c th thc thi (file.hex) v file ginh cho debug.
Hnh 2.1
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
40
1.2. Cc bc to ra file.hex
Di y ta i t ng bc cch t u ti cui cch to file.hex ( l
file np vo VK chy)
B1: chn thit b
y l bc chn thit b m ta tin hnh lp trnh cho n. Chon
thit b c th tin hnh sau v trc khi dch chng trnh. Nhng
theo khuyn co th nn thc hin bc ny trc khi bt u 1
project. ta c th tin hnh la chn li thit b nh sau: Configure/
select Device.
Hnh 2.2
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
41
B2: To project:
B2.1: M mi trng pht trin tch hp MPLAB: st art / al l
program/ Mi crochi p/ MPLAB IDE v8. 70/ MPLAB IDE
Hnh 2.3
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
42
B2.2: to 1 file: file/New hoc n ctrl+N
Hnh 2.4
Hnh 2.5
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
43
y l ca s ta vit code lp trnh. File s c dng add vo
project khi bn tin hnh lm 1project (bc 3)
Sau khi vit xong code ti n hnh lu l i file/save as hoc n ctrl+s.
Chn th mc bn mun lu file. Lu tn file bn phi c phn m
rng .* sau tn. V d: file ca bn tn l sample th khi l u bn phi
ch r l .c, .h hoc .asm
B2.3: to project: project/project wizard
n next ti ca s la chn thit b. y ta cn phi la chn thit
b m mnh mun pht trin. Nh hnh di:
Hnh 2.6
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
44
Ti y, cu hi t ra l, nu ti mun thay i thit b pht trin
trong project th phi lm project li t u. Cng vic tht mt
cng v thiu tnh chuyn nghi p, ta c th tin hnh la chn li
thit b nh sau: Configure/ select Device. Ta c:
Hnh 2.7
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
45
Sau tin hnh la chn thit b trong phn Device m ti khoanh
trn.
phn ny ta cng c th thy rng MPLAB s bo cho ta bit rng
thit b m ta chn c h tr ti u. Biu tng mu xanh tc l c
h tr v ngc li mu l khng h tr. V d vi pic18f4550 h
tr hu ht cc chng trnh np ch c PICkit1 l khng
Tip theo bn n next. Ta c ca s la chn ngn ng lp trnh:
Hnh 2.8
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
46
La chn ngn ng lp trnh trong phn Active Toolsuite. Nu ta s
dng C18 th la chn nh trn, hoc ta c th la chn loi ngn ng
khc. Trong phn Toolsuite Contents ta c th kch chut vo tng
phn v xem v tr ci t cc phn di Location xem c ging
th mc ta ci khng. Nu khng ging ta c th chn li bng n
Browse. Nhng theo ti i u ny l khng cn thit cho lm. v
thng l phn mm s t cp nht th mc ci t chng trnh
Sau ny, sau khi to xong project ta cng c th kim tra v sa li
ng dn ca chng bng cch: project/set language Tool locations
Hnh 2.9
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
47
Tip theo n next ta s c ca s chn th mc lu project v
nhp tn project ca ta vo:
Hnh 2.10
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
48
Chn th mc lu project bng Browse > nhp tn file, n Save.
sau n next:
Hnh 2.10
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
49
y ta c th Add file to ra bc 1 hoc ta cng c th Add
sau khi to xong project. Nu Add file y, ta ti n hnh chn file
phn tree_box bn tri, chn vo file cn add sau n Add, hoc ta
cng c th xa b file add xong bng cch chn vo file bn phi
ri n Remove.
1file ta ch cn phi add l file .lkr. file ny c tc dng bo
cho trnh dch bit t chc b nh ca loi vi iu khin ta s dng.
Vi mi thit b c 1 file .lkr tng ng. Ta chn file trong phn th
mc: C:\ProgramFiles\Microchip\mplabc18\v3.38\bin\LKR
Sau n next ta c ca s hon thnh to project:
Hnh 2.11
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
50
n finish hon thnh to project.
Chng ta va hon thnh xong cch t o 1 project. Ok, t gi c th
thoi mi lm cc i u m mnh mun. Thoi mi th hin kh nng
lp trnh ca mnh nh!!!
Test code bng simulator
Chng trnh ca chng ta b li, hoc ta mun kim sot tng phn
chng trnh Ta c th s dng cng c debug gii quyt vn
ny.
MPLAB c th tch hp c Debugger trong n. Ti n hnh debugger
c th thc hin trn phn cng hoc phn mm. Mnh thng s dng
debug bng phn mm v l do ti ti n..hjhj
Hnh 2.11
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
51
tin hnh chn cng c debugger: debugger/select Tool . Ta s
c 1 lot cc cng c la chn cho debugger tng ng vi loi m ta
c. V d ta c mch debugger pickit3 th sau khi cm mch picket3
vo my tnh ta chn cng c debug l pickit3(debugger/select Tool/
picket3), MPLAB s t kt ni vi phn cng v ta c th thc hin
debugNu ta khng c mch phn cng s dng cho debugger th ta
chn debug bng phn mm bng cch chn debugger/select Tool
/MPLAB SIM.
Tin hnh debug bng phn mm tng t nh vi debug cc trnh
dch khc vi cc thao tc nh l set breakpoint, step over, step in,
step out. Sau khi chn debugger/select Tool /MPLAB SIM ta c
ca s (hnh 2.12):
Ta c thanh cng c ginh cho debug vi cc chc nng sau (hnh
2.13):
Hnh 2.12
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
52
chy t ng dng lnh ta n step into (F7)
quan st c cc gi tr thanh ghi v cc bi n c trong chng
trnh ra dng ca s watch: View/Watch (hnh 2.14). Cch s dng ca
s ny ti trnh by trong phn cc ca s m rng bn di.
Mong mun ca ta trong khi debug chng tr nh l kim tra tng
on chng trnh. thc hin iu ny ta dng cc Breakpoint. Khi
ta n Run th chng trnh chy t i dng c breakpoint s dng li.
set cc Breakpoint ta click chut phi vo dng lnh ri chn
set breakpoint (hnh 2.15) hoc double-click vo dng
Hnh 2.13
Hnh 2.14
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
53
Vn gp phi tip theo l khi ta chy tng dng lnh bng step
into m trong chng trnh c vng lp delay ( thc hin chc nng
delay) th ta s phi n rt nhiu ln cho ti khi kt thc vng lp .
iu thc s l bt tin v th cng. Vy ta thy c cng c
step out s gii quyt vn ny. Khi ta trong vng lp delay th
ta n step out s thot khi vng lp ny.
M rng:
Hnh 2.15
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
54
MPLAB l mi trng pht trin tch hp. Chnh v th ta cng c
th pht trin cc ng dng bng cc trnh dch khc trn nn ca
mi trng ny. Cng vic pht trin bng ngn ng khc ch khc
so vi phn to project trn trong phn la chn ngn ng lp
trnh trnh by.
Ta c th la chn ngn ng lp trnh khc. Nh v d trn ti pht
trin bng CCS. Bn cng c th tin hnh bng trnh dch khc m
bn quen thuc.
Lu : Tt nhin rng trnh dch m bn mun pht trin trong
mi trng MPLAB phi c ci t trn my ca bn ri
1.3. Ca s tin ch s dng trong MPLAB
Mi trng lp trnh tch hp MPLAB cung cp cho chng ta nhi u
window kim sot vic thc hin chng trnh, quan st qu trnh
Nguyn Vn Hng Hung.rocket42@gmail.com Hc vin k thut qun s
55
thc hin chng trnh v nht l khi thc hin debug ta c th dng
cc window ny quan st gi tr cc bin, cc thanh ghi.
Ca s disassembly listing
Ca s hardware stack