You are on page 1of 145

B LAO NG THNG BINH V X HI

TNG CC DY NGH
D n gio dc k thut v dy ngh (VTEP)

GIO TRNH
VI IU KHIN NNG CAO
M s : CIO 02 27 02

NGH : SA CHA IN T CNG NGHIP


Trnh : 3

H NI 2004

Tuyn b bn quyn
Ti liu ny thuc loI sch gio trnh
Cho nn cc ngun thng tin c th c
php dng nguyn bn hoc trch dng
cho cc mc ch v o to v tham kho
MI mc ch khc c lch lc hoc
s dng vI mc ch kinh doanh thiu
lnh mnh s b nghim cm
Tng cc dy ngh s lm mI cch
bo v bn quyn ca mnh

Tng cc dy ngh cm n v hoan


nghnh cc thng tin gip cho vic tu sa
v hon thin tt hn ti liu ny

a ch lin h
D n gio dc k thut v ngh nghip
Tiu ban pht trin chng trnh hc liu

M ti liu :
M quc t ISBN :

LI TA
Ti liu ny l mt trong cc kt qu ca d n GDKT DN c ti tr bi ngn
hng pht trin chu cho cc trng k thut trng im ton quc trc thuc tng cc
dy ngh.
Ti liu c son l mt gio trnh phc v cho i tng cng nhn ngh sa
cha in t cng nghip. Do , trnh t ni dung c sp xp t d n kh nhm
gip ngi hc tip thu mt cch d dng. ng thi i km vi ti liu cn c s tay
hng dn dnh ring cho gio vin trong ngh cc bc thc hin qu trnh ging
dy mt cch nht qun t to iu kin cho gio vin khai thc ni dung gi trnh mt
cch tt nht
i ng bin son l nhm CDC ca trng cng nhn k thut cn th, ni dung
ca ti liu l s kt hp gia yu cu o to vi tnh hnh cng ngh hin ti trong thc
t sn xut v cng c tham kho theo tnh hnh ging dy ti cc trng k thut
cng nh cc c s o to ngh c lin quan.
Ti liu ny c thit k theo tng m un/ mn hc thuc h thng m un/ mn
hc ca mt chng trnh o to hon chnh ngh sa cha thit b in t cng nghip
cp trnh 3 v c dng lm gio trnh cho hc vin trong cc kha o to.
Ngoi ra, ti liu cng c th c s dng cho o to ngn hn hoc cho cc
cng nhn k thut, cc nh qun l v ngi s dng nhn lc tham kho.
y l ti liu th nghim s c hon chnh tr thnh chnh thc trong h
thng dy ngh.

H Ni, ngy
thng
nm 2005
Gim c D n quc gia

MC LC
LI TA.............................................................................................................................. 3
MC LC ............................................................................................................................ 4
GII THIU V M UN ................................................................................................... 8
V tr, ngha, vai tr m un........................................................................................... 8
Mc tiu ca mdun ........................................................................................................ 8
Mc tiu thc hin ca m un ....................................................................................... 8
Ni dung chnh ca m un............................................................................................. 8
S QUAN H THEO TRNH T HC NGH ............................................................. 9
CC HNH THC HC TP CHNH TRONG M UN................................................... 10
BI 1: NGN NG LP TRNH C51 ................................................................................ 11
GII THIU....................................................................................................................... 11
MC TIU THC HIN .................................................................................................... 11
NI DUNG CHNH ............................................................................................................ 11
1. KHI NIM C BN V ANSI-C .................................................................................. 12
1.1 Tp k t dng trong ngn ng C ........................................................................... 12
1.2 T kha ................................................................................................................... 12
1.3 Tn........................................................................................................................... 12
2. KIU D LIU .............................................................................................................. 13
2.1 Kiu char.................................................................................................................. 13
2.2 Kiu nguyn............................................................................................................. 13
2.3 Kiu du phy ng................................................................................................. 13
2.4 Kiu ENUM (lit k) ................................................................................................. 14
3. HNG ............................................................................................................................ 14
3.1 Hng du phy ng ............................................................................................... 14
3.2 Hng s nguyn....................................................................................................... 14
3.3 Hng k t ............................................................................................................... 15
3.4 Hng xu k t ........................................................................................................ 15
3.5 Tn hng.................................................................................................................. 15
4. BIN .............................................................................................................................. 16
5. MNG............................................................................................................................ 16
6. TYPEDEF...................................................................................................................... 18
7. CC LOI BIN ............................................................................................................ 18
7.1 Bin t ng ............................................................................................................ 18
7.2 Bin ngoi................................................................................................................ 19
7.3 Bin tnh................................................................................................................... 20
8.TON T ....................................................................................................................... 20
8.1 Ton t gn ............................................................................................................. 20
8.2 Ton t cng ........................................................................................................... 21
8.3 Ton t tr............................................................................................................... 21
8.4 Ton t nhn ........................................................................................................... 21
8.5 Ton t chia............................................................................................................. 21
8.6 Ton t modulus...................................................................................................... 21
8.7 Ton t tng / gim ................................................................................................. 22
8.8 Ton t gn phc hp............................................................................................. 22
8.9 Ton t sizeof.......................................................................................................... 22
8.10 Ton t p kiu...................................................................................................... 22
9. BIU THC V CU LNH.......................................................................................... 23
9.1 Biu thc ................................................................................................................. 23
9.2 Biu thc hng ........................................................................................................ 23
9.3 Cc cu lnh............................................................................................................ 23
9.4 Cu lnh phc hp (khi lnh) ................................................................................ 24
4

10. HM TRONG C ...........................................................................................................24


10.1 Cu trc ca hm...................................................................................................24
10.2 Chng trnh gm nhiu hm................................................................................26
10.3 Hm c kiu void....................................................................................................26
11. CU TRC IU KHIN CHNG TRNH...............................................................26
11.1 Ton t quan h.....................................................................................................26
11.2 Ton t logic v biu thc .....................................................................................27
11.3 Ton t iu kin ...................................................................................................27
11.4 Cu trc lp............................................................................................................27
11.4.1 Vng lp iu khin bng bin m ................................................................28
11.4.2 Vng lp dng tr canh chng .........................................................................29
11.5 Cu trc chn la...................................................................................................30
11.5.1 Lnh if..............................................................................................................30
11.5.2 Lnh switch......................................................................................................31
11.5.3 Lnh break.......................................................................................................32
12. TRNH DCH C51 ........................................................................................................32
12.1 iu khin bin dch...............................................................................................33
12.1.1 Cc iu khin s cp.....................................................................................33
12.1.2 Cc iu khin th cp....................................................................................37
12.2 Cc kiu d liu c bit trong 8051 .....................................................................40
12.3 Gi hm trong 8051 ...............................................................................................48
12.4 Ti u ha chng trnh ........................................................................................62
13. TRNH LIN KT.........................................................................................................62
13.1 Lnh iu khin qu trnh nh v ...........................................................................63
13.2 K thut chng a ch ca trnh lin kt ................................................................64
14. TRNH QUN L TH VIN.......................................................................................65
BI 2: VI IU KHIN AT90S8535 ...................................................................................67
GII THIU .......................................................................................................................67
MC TIU THC HIN ....................................................................................................67
NI DUNG CHNH ............................................................................................................67
1. M U ........................................................................................................................68
2. S KHI AT90S8535 ............................................................................................69
3. M T CC CHN RA..................................................................................................70
3.1 S chn...............................................................................................................70
3.2 Chc nng cc chn ................................................................................................70
4. CU TRC AT90S8535 ................................................................................................72
4.1 S lc ....................................................................................................................72
4.2 T chc b nh........................................................................................................74
4.3 Hot ng ca Timer/Counter..................................................................................76
4.4 B chuyn i ADC (Analog to Digital Converter) ...................................................78
4.5 B so snh tng t ( analog comparator)..............................................................79
BI 3: VI IU KHIN PIC16F8x ......................................................................................80
GII THIU .......................................................................................................................80
MC TIU THC HIN ....................................................................................................80
NI DUNG CHNH ............................................................................................................80
1. M T CHUNG .............................................................................................................81
1.1 Kh nng tng thch ..............................................................................................81
1.2 Cng c h tr pht trin .........................................................................................82
2. CC LOI 16F8x ...........................................................................................................82
2.1 Cc thit b flash.......................................................................................................82
2.2 Cc thit b QTP......................................................................................................82
2.3 Cc thit b SQTP ....................................................................................................83
2.4 Cc thit b ROM......................................................................................................83
3. S LC V CU TRC ............................................................................................83
4. T CHC B NH ......................................................................................................85
5

4.1 T chc b nh chng trnh ................................................................................. 86


4.2 T chc b nh d liu ........................................................................................... 86
4.2.1 Dy thanh ghi cng dng chung ....................................................................... 87
4.2.2 Cc thanh ghi chc nng c bit .................................................................... 87
4.3 B m chng trnh, PCL v PCLATH.................................................................. 92
4.3.1 Nhy n a ch xc nh ............................................................................ 92
4.3.2 Phn trang b nh chng trnh ...................................................................... 92
4.4 Ngn xp ................................................................................................................. 92
5. CNG GIAO TIP I/O................................................................................................... 94
5.1 Port A v thanh ghi TRISA....................................................................................... 94
5.2 Port B v cc thanh ghi TRISB ................................................................................ 95
5.3 Lp trnh I/O............................................................................................................. 98
5.3.1 Port I/O hai chiu .............................................................................................. 98
5.3.2 Thao tc lin tc trn port I/O............................................................................ 98
6. B NH THI TIMER0 V THANH GHI TMR0 .......................................................... 99
6.1 Ngt TMR0 .............................................................................................................. 99
6.2 Timer0 vi xung ng h bn ngoi ...................................................................... 100
6.2.1 ng b xung ng hof ngoi ......................................................................... 101
6.2.2 Tng tr TMR0 ........................................................................................... 101
6.3 B nh thang chia ................................................................................................. 101
7. B NH D LIU EEPROM...................................................................................... 103
7.1 EEADR .................................................................................................................. 103
7.2 Thanh ghi EECON1 v EECON2 .......................................................................... 104
7.3 c b nh d liu EEPROM ............................................................................... 104
7.4 Ghi vo b nh d liu EEPROM ......................................................................... 105
7.5 Kim tra kt qu ghi............................................................................................... 105
7.6 Bo v chng ghi ................................................................................................... 106
7.7 Hot ng ca EEPROM trong trng hp bo v m lnh................................. 106
8. TNH NNG C BIT CA CPU.............................................................................. 106
8.1 Cc bt cu hnh..................................................................................................... 107
8.2 Cu hnh dao ng ................................................................................................ 107
8.2.1 Cc kiu dao ng .......................................................................................... 107
8.2.2 Dao ng thch anh/Cng hng gm .......................................................... 108
8.2.3 Mch dao ng thch anh ngoi..................................................................... 109
8.2.4 Dao ng RC .................................................................................................. 110
8.3 Reset ..................................................................................................................... 110
8.4 Khi ng khi m my (POR) ............................................................................... 112
8.5 B nh thi tng ngun (PWRT) .......................................................................... 112
8.6 B nh thi khi ng dao ng (OST)................................................................ 112
8.7 Thi gian tr hon v cc bt trng thi h ngun T0 / PD ..................................... 115
8.8 Reset khi st p ngun (Brown-out) ...................................................................... 115
8.9 Tn hiu ngt.......................................................................................................... 116
8.9.1 Ngt INT.......................................................................................................... 117
8.9.2 Ngt TMR0...................................................................................................... 117
8.9.3 Ngt PORT RB................................................................................................ 117
8.10 Lu tr ni dung trong khi ngt ........................................................................... 117
8.11 B nh thi canh chng ..................................................................................... 118
8.11.1 Chu k WDT.................................................................................................. 118
8.11.2 Lp trnh WDT............................................................................................... 118
8.12 Ch h ngun (SLEEP) .................................................................................. 119
8.12.1 Ng (SLEEP)................................................................................................. 119
8.12.2 nh thc t trng thi SLEEP .................................................................... 119
8.12.3 nh thc bng cc ngt.............................................................................. 120
8.13 Kim li chng trnh Bo v m lnh ............................................................. 120

8.14 V tr ID .................................................................................................................120
8.15 Lp trnh ni tip trong h thng ..........................................................................121
9. TP LNH ...................................................................................................................121
TI LIU THAM KHO....................................................................................................145

GII THIU V M UN

V tr, ngha, vai tr m un

y l mt m un chuyn ngnh c hc vo nm th hai ca trnh


3 sau khi hc vin hon tt cc m un h tr trc nh: Linh
kin in t, mch in t, k thut s.
Trong cc dy chuyn sn xut, cng nh cc thit b t ng n l v
cc h nhng hin nay vic ng dng vi iu khin c bit l cc h vi
iu khin tich hp nhiu khi ngoi vi trong cc lnh vc ny l rt ph
bin nhm tng tnh linh hot, chnh xc, gim gi thnh cng nh
n nh ca h thng. Do , kin thc v cu trc cng nh k thut
lp trnh v cc loi vi iu khin ny l rt cn thit cho cng nhn
ngnh sa cha thit b in t cng nghip.

Mc tiu ca mdun
Sau khi hon tt m-un ny, hc vin c nng lc:
Hiu, gii thch c nguyn l lm vic cc h iu khin ng dng vi
iu khin AVR
Ci tin c chc nng ca h iu khin nhng theo yu cu
Pht trin c cc h iu khin trn c s khi trung tm l vi iu
khin

Mc tiu thc hin ca m un

Vn hnh, kim tra c cc h iu khin ng dng AVR


Sa cha c phn mm v thay th c linh kin phn cng
Thi cng, lp rp thit b theo s c sn.

Ni dung chnh ca m un
M un ny bao gm 3 bi hc nh sau :
1. Ngn ng C51
2. Vi iu khin AT90S8535
3. Vi iu khin PIC16F8x

S QUAN H THEO TRNH T HC NGH


Vi mch tng t
. t cng sut

K thut xung
Vi iu khin 1, 2

in K Thut
K thut s
L kin in t

kh l tr plc

U VO

O L

Vi mch PLD

U RA
Thc hnh PLC

MCH IN T

K.T. Cm bin

Cc mn hc chung
Ch to

Trang b in

X l li

Chnh tr
V IN
My in

profibus

PHP LUT
IN C BN
QuC NG

Mch T nng
cao

Tnh ton mch


in t c bn

TH CHT

TIN HC

TKM in-in t

T chc sn
ANH VN
Vi x l
Hai mun b tr

Atl

CC HNH THC HC TP CHNH TRONG M UN


Hnh thc 1: Hc l thuyt trn lp
- Tt c cc bi hc t 1 n 3
- Gii cc cu hi v bi tp phn l thuyt
- Vit chng trinh iu khin
- Phn tch chng trnh c sn
Hnh thc 2: Hc thc hnh trong xng
- Chy th cc chng trnh vit trn lp
- Rp m hnh i tng iu khin
- Rp ton b mch iu khin kt hp m hnh i tng iu khin v kim tra
hot ng
Hnh thc 3: T nghin cu
- T ra yu cu v thc hin
- Tham kho cc vn lin quan trn sch bo, internet...
- Tham quan thc t sn xut
YU CU V NH GI HON THNH M UN
Hiu v thc hin c cc ni dung sau
- Phn tch c chng trnh trn h thng thc.
- Pht trin c phn mm theo yu cu
- Lp rp, vn hnh v sa cha c h iu khin dng vi iu khin
V thi
- Chuyn cn, sng to
- Lun kim tra kt qu bng nhiu phng php khc nhau tng mc tin
cy, chnh xc.
- Cn thn, lu n cc yu cu v an ton

BI 1
Tn bi:

Ngn ng lp trnh C51

M bi:

CIO 02 27 01

GII THIU
Bi ny trnh by v cng c phn mm h tr pht trin cc ng dng trn nn h
8051 l trnh dch C51, trnh lin kt L51 v trnh qun l th vin LIB51. Trnh dch
C51 l trnh dch ngn ng ANSI-C m rng vi h 8051 cng ging cc ngn ng lp
trnh cp cao khc do c tnh gn gi vi ngn ng t nhin nn gip n ha qu trnh
phn mm t to kh nng thc hin c nhng yu cu phc tp nhanh chng hn
so vi hp ng. y l mt kin thc b sung rt cn thit cho nhng ngi tng
quen thuc vi vic lp trnh vi iu khin bng hp ng.
Ni dung bi gm c l thuyt v thc hnh trn b thc tp UNIKIT, bi tp trong
phn ny l cc chng trnh hon chnh c th c np vo EPROM thc hin

MC TIU THC HIN

Hiu c s cn thit v c ch hot ng ca trnh dch C51


Bit c cu trc chung ca chng trnh vit bng C51
X dng thnh tho cc ch dn, cc iu khin v tp lnh ca trnh dch C51
Bit cch t chc mt chng trnh kch thc ln bng cch phn chia thnh
cc m un chng trnh
Hiu c cch s dng trnh lin kt L51 v trnh qun l th vin LIB51
Vit c chng trnh iu khin theo yu cu

NI DUNG CHNH
Ni dung bi hc tp trung v cc ch chnh nh sau:
Gii thiu chung v ngn ng ANSI-C
Khun dng mt chng trnh vit bng C, cu trc dng lnh
Cc ton t s hc, logic v cc ton t c bit khc
Cc ch dn v cc iu khin bin dch ca C51
Cc m rng ph hp vi iu khin 8051
Quy tc gi hm
Giao tip gia C51 vi hp ng
Hot ng lin kt, trnh lin kt L51
Chc nng trnh qun l th vin LIB51
Cc v d lp trnh bng C51 v to chng trnh thc thi bng L51

11

1. KHI NIM C BN V ANSI-C


1.1 Tp k t dng trong ngn ng C
MI ngn ng lp trnh u c xy dng t mt b k t no . Cc k t c
nhm li theo nhiu cch khc nhau to thnh cc t, tip theo cc t li c lin
kt theo mt quy tc no to thnh cc cu lnh. Mt chng trnh bao gm nhiu
cu lnh biu din mt thut ton gii quyt mt bi ton xc nh. Ngn ng C c
xy dng trn b k t sau:
26 ch ci hoa: ABC..Z
26 ch ci thng: abc..z
10 ch s: 0..9
Cc k hiu ton hc: + - * / = ()
K t gch ni di : _
Cc k hiu c bit khc: . , ; : [] {} ? ! \ & | % # $,...
Du cch (space) thc s l mt khong trng dng tch cc t. VD: HA NOI
gm 6 k t trong khi HANOI ch c 5 k t

1.2 T kha
T kha l nhng t c mt ngha hon ton xc nh, thng c dng khai
bo cc kiu d liu, vit cc ton t v cc cu lnh. Sau y l cc t kha ca C:
asm
break
case
cdecl
char
const
continue
default
do
double
else
enum
extern
far
float
for
goto
huge
if
int
interrupt
long
near
pascal
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
ngha v cch x dng chng s c bn n cc phn sau, c hai im cn
lu , l:
Khng c dng t kha t tn cho cc hng, bin v hm
T kha phI c vit bng ch thng

1.3 Tn
Tn l mt khi nim rt quan trng, c dng xc nh cc I lng khc
nhau trong mt chng trnh nh tn hng, tn bin, tn hm..
Tn c t theo cu trc nh sau:
Tn l mt dy k t: Ch, s v du gch ni. K t u ca tn phI l ch hoc
du gch nI, di mc nh ca tn l 32, cc v d ng v tn:
A_1

BETA

x1

delta_7_x1

Cc tn sau l sai
3XYZ_7
(k t u tin l s)
r#3
(x dng k t #)
f(x)
(x dng du ngoc trn)
case
(trng vI t kha)
be ta
(x dng khong trng)
X-1
(x dng du gch ngang)

12

Trong cc tn c phn bit ch hoa v ch thng, do tn AB khc tn ab.


Trong C thng dng ch hoa t tn cho cc hng v ch thng cho hu ht cc
I lng cn li. Tuy nhin, iu ny khng bt buc.

2. KIU D LIU
Trong C x dng cc kiu d liu sau: S nguyn (int), s thc hay s du phy
ng (float), s du phy ng c chnh xc kp (double) v k t (ch). Hng chnh l
mt gi tr thng tin c th, bin v mng l cc I lng mang tin. MI loI bin c th
cha mt dng thng tin no VD bin kiu int cha cc s nguyn, bin kiu float
cha cc s thc. c th lu tr c thng tin bin phI c cp pht b nh, bin
lI c chia thnh bin tnh, bin t ng v bin ngoi.
Bin t ng ch tn tI (c cp pht b nh) khi chng ang c x dng, bin
ngoi v tnh tn tI trong sut thI gian hot ng ca chng trnh. Cch t chc nh
vy va tit kim b nh va cho php x dng cng mt tn cho cc I tng khc
nhau m khng gy ra nhm ln.

2.1 Kiu char


Mt gi tr kiu char chim mt byte b nh v biu din c mt k t thng qua
bng m ASCII. V d:
K t
0
1
2
A
B
a
b

M ASCII
048
049
050
065
066
097
098

C hai kiu char l: Signed char v unsigned char. Kiu th nht biu din mt s
nguyn t -128 n +127, kiu th hai c gi tr t 0 n 255
C th chia 256 k t thnh 3 nhm:
Nhm th nht l cc k t iu khin c m t 0 n 31, cc k t trong nhm
ny khng hin th ra mn hnh.
Nhm th hai l cc kl t vn bn c m t 32 n 126, cc k t ny c th
a ra mn hnh v my in.
Nhm ba l cc k t ha c m t 127 n 255 c th a ra mn hnh.

2.2 Kiu nguyn


Trong C cho php x dng s nguyn (int), s nguyn di (long) v s nguyn
khng du (nigned)
Kiu
Int
Unsigned int
Long
Unsigned long

Phm vi biu din


-32768+32767
0...65535
-21474836482147483647
04294967295

Kch thc
2 byte
2 byte
4 byte
4 byte

Cc kiu k t cng c th xem l mt dng ca kiu nguyn

2.3 Kiu du phy ng


Trong C cho php x dng ba loI gi tr du phy ng l: Float, double v long
double c trnh by nh sau:
Kiu
Float
Double

Phm vi biu din


3.4E-383.4E+38
1.7E-308...1.7E+308

Kch thc
4 byte
8 byte
13

Long double

3.4E-49321.1E+4932

10 byte

2.4 Kiu ENUM (lit k)


C php khai bo kiu enum c 4 dng sau:
Enum type_name
{e1, e2,} var_name1, var_name2,;
Enum type_name
{e1, e2,} ;
Enum
{e1, e2,} var_name1, var_name2,;
Enum
{e1, e2,} ;
Trong :

type_name
E1, e2,
Var_name

l tn kiu d liu enume


l tn cc phn t
l tn cc bin kiu enume

ngha:
Dng th nht c 3 chc nng sau
1. nh ngha cc macro (ging nh #define) e1, e2,vi cc gi tr nguyn lin
tip tnh t 0 (e1 = 0, e2 = 1), chc nng ny tng ng cc cu lnh:
#define e1 0
#define e2 1
2. nh ngha kiu enume c tn l type_name
3. Khai bo cc bin kiu enume c tn l var_name1, var_name2
Dng th hai c chc nng 1 v 2, dng th ba c chc nng 1 v 3 v dng th t
ch c chc nng 1
Bin kiu enum thc cht l bin nguyn, n c cp pht 2 byte b nh v c th
nhn mt gi tr nguyn bt k. Mc ch ca enum l to ra macro, cc kiu v cc bin
gi nh. VD cc ngy trong tun c th nh ngha thng qua kiu week_day v bin day
nh sau:
Enum week_day
Saturday} day;

{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,

3. HNG
Hng l cc I lng m gi tr ca n khng thay I trong qu trnh tnh ton,
cc loI hng x dng trong C gm c:

3.1 Hng du phy ng


c vit theo 2 dng:
Dng thp phn: Gm phn nguyn, du chm thp phn v phn thp phn. VD:
214.35
-4563.48
234.0
Ch : Phn nguyn v phn thp phn c th khng c nhng du chm khng
th thiu. VD:
.34
15.
Dng khoa hc: S c tch thnh hai phn l phn nh tr v phn bc. Phn
nh tr l mt s nguyn hoc mt s thc dng thp phn, phn bc l mt s nguyn.
Hai phn ny cch nhau bI k t e hoc E. VD:
123.456E-4
biu din gi tr 0.0123456
0.12E3
biu din gi tr 120.0
-49.5e-2
biu din gi tr -0.495
1E8
biu din gi tr 100000000.0

3.2 Hng s nguyn


L s nguyn c gi tr trong khong t -32768+32767. VD:
-45

4007

635

Ch phn bit 125 v 125.0. Gi tr 125 l hng s nguyn cn 125.0 l hng s


thc
14

Hng long c vit nh sau:


-4893L

hoc

-4893l

Thm L hoc l vo sau ui. Mt s nguyn vt ra ngoi phm vi ca int cng


c xem l hng long VD:
4563946L
v
4563946
l hai hng long c cng gi tr
Hng nguyn h 16 x dng 16 k t: 0...9 v A...F hoc a...f, cch vit nh sau:
0xc1c2c3 hoc 0Xc1c2c3
Trong ci l mt ch s h 16. VD:
0xa9, 0Xa9, 0xA9, 0XA9 l cc hng nguyn h 16 c cng gi tr thp phn l 169

3.3 Hng k t
L mt k t ring bit c vit trong hai du nhy n. VD: a, gi tr ca a
chnh l m ASCII ca ch a. Nh vy, gi tr ca a l 97. Hng k t c th tham gia
vo cc php ton nh mI s nguyn khc.VD:
9 0 = 57 48 = 9
I vI cc hng k t c bit phI dng cch vit sau:
Cch vit
\
\
\\
\n
\0
\t
\b
\r
\f

K t

\
xung dng
\0 (null)
tab
backspace
CR (v u dng)
LF (sang trang)

Cn phn bit hng 0 v \0, hng th nht l s 0 c m l 48 cn hng th hai


ng vi k t \0 (thng gi l k t null) c m l 0.
Hng k t thc s l mt s nguyn nn c th dng cc s nguyn h 10 biu
din k t

3.4 Hng xu k t
L mt dy k t bt k t trong hai du nhy kp. V d:
H Ni
Hi Phng
(xu rng)
Xu k t c lu tr trong my di dng mt mng c cc phn t l cc k t
ring bit. Trnh bin dch t ng thm k t null vo cui mi xu bo kt thc xu.
Lu a l hng k t c lu tr trong 1 byte cn a l hng xu k t c lu
tr trong 1 mng gm hai phn t: Phn t th nht cha ch a v phn t th hai cha
\0

3.5 Tn hng
Tc dng ca ton t
15

#define MAX 1000


l: tt c cc tn MAX trong chng trnh xut hin sau ton t ny u c thay
bng 1000 v vy MAX thng c gi l tn hng hay macro n biu din s 1000, mt
v d khc
#define PI 3.14
t tn cho hng s l PI
Cc hng kiu int, long, float, double thng dng trong tnh ton, cn cc hng k
t v xu k t thng dng trong in n a ra cc dng thng tin, vn bn, ghi ch

4. BIN
Mi bin cn phi c khai bo trc khi s dng, mu khai bo nh sau
Type

var_name;

V d:
Main ( )
{
int
a, b, c; /* 3 bin kiu integer */
char d, e, f; /* 3 bin kiu char */
float
x, y, z; /* 3 bin kiu float */
.
}
Bin kiu int ch nhn cc gi tr int, cc bin kiu khc cung c c tnh tng t, v
d bin kiu char ch cha mt k t, lu tr mt xu k t cn phi dng mt mng
kiu char
Cc khai bo bin phi t ngay sau du { u tin ca thn hm v phi ng
trc mi cu lnh khc.
Cc bin c th c khi gn ngay khi khai bo bng cch t thm du = km
theo mt gi tr V d:
Int
a, b = 20, c, d = 40;
Kt qu ny cng tng ng bng cc cu lnh gn sau:
Int

a, b, c, d;
b = 20;
d = 40;

Mi bin c cung cp mt vng nh gm nhiu byte lin tip, a ch byte u


tin chnh l a ch ca bin, a ch bin nhn c qua php ton
& var_name

5. MNG
Mi bin ch c th biu din c mt gi tr. biu din mt dy s hoc mt
bng s c th dng nhiu bin nhng cch ny khng thun tin khi s gi tr qu nhiu,
cch tt nht l s dng mng trong nhng trng hp nh th ny.

16

Mng l mt tp hp gm nhiu phn t c cng kiu d liu v c chung mt tn,


mi phn t mng biu din c mt gi tr. C bao nhiu kiu d liu th cng c by
nhiu kiu mng, mng cn c khai bo v:
Kiu mng (int, char,)
Tn mng
S chiu v kch thc mi chiu
Kiu mng v tn mng cng ging nh kiu bin v tn bin. V d cc khai bo
sau y:
Int
Float

a[10], b[4][2];
x[5], y[3][3];

S xc nh 4 mng: a, b, x v y nh sau:
- Mng th nht c kiu l int, tn l a, s chiu l 1, kch thc l 10. Mng
gm 10 phn t c s th t l: a[0], a[1], a[2],,a[9]. Mi mt phn t a[i]
cha mt gi tr int v mng ny biu din mt dy gm 10 s nguyn.
- Mng th hai c kiu l int, tn l b, s chiu l 2, kch thc cc chiu l 4
v 2. Mng gm 8 phn t c nh s v sp xp nh sau:
b[0][0]
b[1][0]
b[2][0]
b[3][0]

b[0][1]
b[1][1]
b[2][1]
b[3][1]

Mi phn t b[i][j] cha c mt gi tr kiu int, v mng ny biu din c mt


bng s nguyn gm 4 hng v 2 ct
- Mng th ba c kiu l float, tn l x, s chiu l 1, kch thc l 5. Mng
gm 5 phn t c nh s nh sau: x[0], x[1], x[2], x[3], x[4]. Mi phn t
x[i] cha c mt gi tr kiu float v mng ny biu din c mt dy
gm 5 s thc
- Mng th t c kiu l float, tn l y, s chiu l 2, kch thc cc chiu l 3,
mng gm 9 phn t c nh s v sp xp nh sau:
y[0][0]
y[1][0]
y[2][0]

y[0][1]
y[1][1]
y[2][1]

y[0][2]
y[1][2]
y[2][2]

Mi phn t y[i][j] cha c mt gi tr kiu float v mng y biu din mt bng s


thc 3 hng 3 ct
Ch :
Cc phn t ca mng c cp pht cc khong nh lin tip nhau c
ngha l a ch ca chng cng lin tip nhau
Trong mng hai chiu cc phn t ca mng c sp xp theo hng.
Mt phn t ca mng c xc inh nh ch s ca n, ch s ca mng phi c
gi tr int v khng vt qu kch thc ca chiu tng ng. S ch s phi bng s
chiu ca mng.
Gi s a, b, x, y c khai bo nh trn v gi s I, j l 2 bin nguyn. Trong
I = 2; j = 1 th
a[j+i-1]
b[j+i][2-i]
x[j/i]
y[i][j]

l a[2]
l b[3][0]
l x[0]
l y[2][1]
17

V cc cch vit sau y l sai


y[j]
v y l mng 2 chiu cn c 2 ch s
b[i][j][1] v b cng l mng 2 chiu ch cn 2 ch s
Tuy nhin, biu thc dng lm ch s c th l s thc, khi phn nguyn s l ch
s mng. VD: a[2.4] l a[2], a[1.9] l a[1]. Khi ch s vt ra ngoi kch thc mng my
vn khng bo li nhng s truy cp n vng nh ngoi mng c d liu khng bit
trc.
C th ly a ch ca phn t mng mt chiu v thng khng ly c a ch
ca phn t mng nhiu chiu, php tnh sau ly a ch phn t mng 1 chiu
& a[i]
nhng my khng chp nhn php tnh
& y[i][j]
Mt lu quan trng l tn mng chnh l a ch u ca mng
a = & a[0]

6. TYPEDEF
T kha typedef c dng t tn cho mt kiu d liu, tn kiu li c dng
khai bo kiu d liu sau ny. Nn chn tn ngn gn v gi nh
t typedef trc mt khai bo thng thng, khi tn d liu s tr thnh tn
kiu. VD:
Typedef int nguyen;
S t tn kiu d liu int l nguyen, t lc ny tr i c th dng int hoc nguyen
khai bo bin nh sau:
Nguyen x, y, a[10], b[20][30];
Cc v d tng t
typedef float mt[50]; // t tn mng thc 1 chiu 50 phn t l m50
typedef int m_20_30[20][30]; // mng nguyn 2 chiu 20 hng 30 ct tn l
m_20_30
typedef enum {T1, T2, T3} T; // kiu enum c 3 phn t {T1, T2, T3} c tn l T
Sau , c th dng cc tn ny khai bo
mt50 x, y; // cc mng thc 1 chiu c 50 phn t
m_20_30 a, b; // cc mng nguyn 2 chiu 20x30
T t; // t l bin enum

7. CC LOI BIN
Bin l mt i lng cha d liu v d liu ny b thay i trong sut thi gian
chy chng trnh, cc bin c nhn dng thng qua tn bin, bin phi c khai
bo trc khi em ra s dng, mi bin phi thuc v mt kiu d liu.

7.1 Bin t ng
Cc bin khai bo bn trong cc hm l cc bin t ng hay bin cc b. i ca
hm cng c xem l bin t ng.

18

Cc bin t ng ch c tc dng bn trong thn ca hm m ti chng


c khai bo.
Cc bin t ng ca hm ch tn ti trong khong thi gian k t khi my
bt u lm vic vi hm cho n khi thot khi hm.
Do chng trnh bt u lm vic t cu lnh u tin ca hm main ( )
v khi ra khi hm main ( ) th chng trnh kt thc nn cc bin khai
bo trong hm main ( ) s tn ti trong sut thi gian lm vic ca chng
trnh.

7.2 Bin ngoi


Bin c khai bo bn ngoi cc hm gi l bin ngoi
Bin ngoi tn ti (c cp pht b nh) trong sut thi gian lm vic
ca chng trnh.
Phm vi hot ng ca bin ngoi l t v tr khai bo n cui file
chng trnh. Nh vy nu mt bin ngoi c khai bo u chng
trnh (trc tt c cc hm) th n c th c s dng trong bt k hm
no min l hm khng c bin cc b no trng tn vi bin ngoi
ny.
Nu chng trnh c vit trn nhiu file v cc file c dch c lp
th phm vi s dng ca bin ngoi c th m rng t file ny sang file
khc bng t kha extern
Cc quy tc khi u bin ngoi:
1.
Cc bin ngoi c th c khi u vo lc dch chng trnh bng cch
dng cc biu thc hng. Nu khng c khi u my s gn cho chng
gi tr l 0.
V d:
char sao = * ;
int a = 6*365 ;
float x =32.5 ;
2.
Khi khi u mng ngoi c th khng cn ch ra kch thc (s phn t)
ca mng. Khi , my s t ng dnh cho mng mt khong nh
cha danh sch gi tr khi u.

3.

float a[ ] = {2.6, 3, 15} ;


int [ ] [ ] = {
{25, 31},
{46, 34},
{93, 81}
};
Khi ch ra kch thc ca mng th kch thc ny khng c nh hn b
gi tr khi u.

V d:
float x[8] = {6.3, 12.5} ;
4.

i vi mng 2 chiu c th khi u theo cc cch sau (s khi u trn


mi hng c th khc nhau)

V d:
float a[ ][3] = {
{0},
{2.5, 3.6, 8},
{-6.3}
};

19

5.
-

B khi u ca 1 mng char c th


Hoc l danh sch cc hng k t
Hoc l mt hng xu k t

V d:
char name[ ] = {h, a, n, g, \0} ;
char name[ ] = hang ;

7.3 Bin tnh


Bin tnh c khai bo bng t kha static t pha trc
static int a, b, c[10] ;
static float x, y[10][6] ;
Cc khai bo trn c th t bn trong hoc bn ngoi cc hm. Nu t bn trong
l bin tnh trong v ngc li l bin tnh ngoi. Cc bin tnh trong v ngoi c im
ging nhau l:
- Chng c cp pht b nh trong sut thi gian hot ng ca chng
trnh. Do gi tr ca chng c lu tr t u n cui chng trnh
- C th c khi u mt ln khi dch chng trnh nh cc biu thc hng
Cc bin tnh trong v ngoi ch khc nhau phm vi hot ng.
- Cc bin tnh trong ch hot ng c bn trong thn ca hm m ti
chng c khai bo.
- Phm vi hot ng ca cc bin tnh ngoi tnh t khi chng c khai bo
cho n cui file chng trnh cha chng

8.TON T
Ton hng (operand) c th xem l mt i lng c mt gi tr no v d: Hng,
bin, mng v hm. Ton l l cc php ton tc ng ln cc ton hng. Trong C ton
hng c chia thnh cc nhm chnh nh sau:
- Ton t s hc (arithmatic operator)
- Ton t quan h (relative operator)
- Ton t logic (logical operator)
- Ton t x l bt (bitwise operator)
Ngoi ra, C cn gii thiu thm 2 ton t mi l:
- Ton t tng (incrementing operator)
- Ton t gim (decrementing operator)

8.1 Ton t gn
Theo C k hiu = khng c ngha l bng, k hiu ny c gi l ton t gn
(assignment operator), ton t gn c gi l gn n (single assignment) phn bit
vi gn phc hp (compound assignment)
lulu = 2002 ;
Gn gi tr nguyn 2002 cho bin tn l lulu, ton t gn cho php gn mt tr mi
cho mt bin. Dng n gin nht l:
bin = biu thc ;
Ngha l biu thc bn phi du = s c nh tr v kt qu nh tr s c
gn cho bin pha tri du =. Ni cch khc bn tri du = phi l bin ch khng
c l hng cn bn phi l tr ca bin, xem cu lnh sau
I=I+1;

20

V mt biu din ton hc th khng ng, nhng i vi my tnh th hon ton


hp l, gi tr ca bin I c cng vi 1 ri em kt qu gn tr li vo I, nhng cu lnh
sau
2002 = lulu ;
Th hon ton sai v 2002 l 1 hng, khng th ly gi tr bin lulu gn ln 1 hng s
V d:
toc_do = khoang_cach / thoi_gian ;
gia_ban = gia_mua + chi_phi + lai ;

8.2 Ton t cng


Ton t cng (+) s cng hai tr hai bn du + li vi nhau
thu_nhap = luong + tien_tham_nhung ;
My s cng gi tr hai bn du + v sau gn vo bin thu_nhap, tn t + l loi
ton t 2 ngi (binary operator) v n cn n 2 ton hng)

8.3 Ton t tr
ton t tr ly gi tr trc du tr i gi tr sau du tr
tien_dem_ve = thu_nhap tien_hoi_lo
Du tr cn c dng thay du i s ca mt gi tr. V d:
toto = -12 ;
lili = - toto ;
Du tr c dng theo cch ny c gi l ton t mt ngi v n ch cn mt
ton hng

8.4 Ton t nhn


Ton t nhn dng du *, v d:
luong_thang = luong_ngay * 30 ;

8.5 Ton t chia


C dng k hiu / lm ton t chia. S b chia l tr bn tri v s chia l tr bn
phi
Ngay_trong_tuan = 30 / 4 ;
Cch chia s nguyn khc vi cch chia s thc, chia theo s thc s cho ra kt
qu l mt s thc. Khi chia hai s nguyn vi nhau kt qu s l phn nguyn cn phn
thp phn s b ct b. Nu trong php chia c s nguyn v s thc ln ln th kt qu
s l s thc v s nguyn s c chuyn thnh s thc trc khi chia.

8.6 Ton t modulus


Ton t modulus k hiu l % s cho ra s d ca php chia, v d:
13 % 5
c l 13 modulus 5 s cho ra kt qu l 3, y chnh l s d ca php chia 13
cho 5. Ton t ny ch lm vic vi s nguyn

21

8.7 Ton t tng / gim


Ton t tng (++) tng gi tr ca ton hng ln 1 cn ton t gim (--) th lm gim
gi tr ca ton hng xung 1
toto++ ;
kiki -- ;
Tng ng vi hai lnh sau
toto = toto + 1 ;
kiki = kiki 1 ;
Cc ton t ny c th vit theo 2 cch prefix mode hoc postfix mode c ngha l
c th vit pha trc hay sau ton hng
++toto
--kiki

hoc
hoc

toto++
kiki

Nu vit ++ trc th gi tr ca ton hng s c tng 1 trc (preincrement) sau


kt qu ny mi c dng cho cc thao tc khc, cn nu vit sau th gi tr ca ton
hng s c dng trc ri mi tng 1 sau (postincrement), tng t i vi ton t
gim

8.8 Ton t gn phc hp


C cn cung cp nhiu php gn phc hp rt ngn cch vit cc biu thc. V
d:
ctr = ctr + 3 ;
ctr = ctr * 3 ;
ctr = ctr 3 ;
ctr = ctr / 3 ;
ctr = ctr % 3 ;
Nhn xt l hai bn du gn u c cng mt tn bin, rt ngn c th vit
nh sau:
ctr += 3 ;
ctr *= 3 ;
ctr -= 3 ;
ctr /= 3 ;
ctr %= 3 ;

8.9 Ton t sizeof


Ton t sizeof cho bit kch thc (tnh theo byte) ca mt kiu d liu cng nh
mt i tng d liu, c php nh sau:
sizeof (kiu d liu)
sizeof i tng d liu
Kiu d liu c th l kiu chun nh: int, float v kiu c inh ngha bng
typedef, enum, struct, union.
i tng d liu bao gm bin, mng, cu trc(tn ca vng nh d liu)
Ton t ny thng dng xc nh s phn t ca mt mng, lu nu l kiu
d liu th phi t trong du ngoc n.

8.10 Ton t p kiu


Trong cc biu thc hn hp c cha nhiu kiu d liu th vic chuyn i c
thc hin mt cch t ng. Tuy nhin, lp trnh vin cung c th quyt nh vic chuyn

22

kiu thng qua ton t p kiu bng cch t trc ton hng cn chuyn kiu d liu
mun chuyn trong ngc n., c php chung nh sau:
(kiu d liu) biu thc
x = (float) I / j ; d liu bin I c chuyn thnh float
a = 1.5 + 1.5
kt qu a l 3.0
a = (int) 1.5 + (int) 1.5 kt qu a l 2

9. BIU THC V CU LNH


Biu thc (expression) l s kt hp gia cc ton t vi cc ton hng v cu
lnh (statement) th li c to nn t cc biu thc

9.1 Biu thc


Mt vi v d v biu thc
4
-6
4 + 21
a* (b + c/d) /20
q = 5*2
x = ++q %3
q>3
6 + (c = 3+8)
x = y/3 + power(i, 2)
T cc v d trn cho thy cc ton hng trong cc biu thc c th l hng, bin
hoc hm (hm power). Ni chung, biu thc l mt s kt hp hp l ca cc php ton
c thc hin trn tr ca cc bin, tr hng hay tr do cc hm tr v. Mt vi biu thc
li l t hp ca nhiu biu thc nh.
c tnh quan trng ca C l mi biu thc u c mt tr, mun xc nh tr ca
biu thc phi da trn th t nu tin ca cc ton t (operator precedence) thc
hin cc php ton.

9.2 Biu thc hng


Mt biu thc ton hc c xem l mt biu thc hng nu trong biu thc cc
ton hng u l cc hng s hoc hng k t ngha l trong biu thc hng khng c
cha bin. Khi , trnh bin dch s nh tr trc biu thc hng v em i lu tr. Biu
thc hng thng c dng nhiu trong cc cu trc vng lp hoc cu trc chn la.
8* 20 -13
kt qu l 147
a A kt qu l 32
y l nhng biu thc hng
Kh nng tnh trc ny lm gim thi gian cn thit chy chng trnh v my
khng cn tnh li nhng biu thc ny na

9.3 Cc cu lnh
Chng trnh l mt tp hp cc cu lnh, mi cu lnh c kt thc bi du
chm phy. i vi my cu lnh l mt ch th y
tay = 2
l mt biu thc hoc c th l thnh phn ca mt biu thc ln hn, nhng
tay =2 ;

23

li l mt cu lnh v c kt thc bng du chm phy. Biu thc sau y:


2+2
Khng phi l mt ch th y v my s khng bit phi lm g na sau khi cng
xong. Tuy nhin, nu ra lnh
toto = 2 + 2 ;
c ngha l sau khi cng xong em kt qu vo trong bin toto v my c th thc
hin thao tc k tip

9.4 Cu lnh phc hp (khi lnh)


Cu lnh phc hp (compound statement) bao gm 2 hoc nhiu cu lnh n gp
chung li t trong mt cp du ngoc nghoo { } v cn c gi l khi lnh. V d:
/* trng hp 1 */
index = 0 ;
while (index++ < 10)
toto = 10* index + 2 ;
printf (toto = %d\n, toto) ;
/* trng hp 2 */
index = 0 ;
while (index++ < 10)
{
toto = 10* index + 2 ;
printf (toto = %d\n, toto) ;
}
Trong trng hp 1 ch c cu lnh gn toto = 10* index + 2 l nm trong vng lp
while. Do , lnh in printf ( ) ch c thc hin mt ln sau khi kt thc vng lp.
Trong trng hp 2 v c cp du ngoc { } nn cu lnh gn v lnh in u nm
trong vng lp v lnh in s c thc hin mi vng lp mt ln, lc ny cu lnh phc
hp c xem nh mt lnh n.

10. HM TRONG C
Mt chng trnh C gm mt hoc nhiu n th chng trnh c gi l hm
(function) ghp li, thng hm tr v cho chng trnh mt tr sau khi c thc hin.
Hm cho php chia mt chng trnh ln thnh nhng chng trnh nh nhm d
qun l v do lm n gin ha cng vic lp trnh. Ngoi ra, mt hm hot ng tt
chng trnh ny c th c ghp vo mt chng trnh khc m khng cn phi vit li
t u nn gip gim thi gian pht trin chng trnh. Hm c chia lm 2 loi:
- Hm do ngi dng vit gi l user defined function (UDF). y l nhng
hm thc hin cc cng vic c th no ti nhiu ni trong chng trnh
- Hm th vin chun ca C nh hm printf ( ). C cung cp mt s hm th
vin chun kh phong ph tnh ton, x l chui, x l bt, xut nhp d
liu

10.1 Cu trc ca hm
c im chung ca hm:
1.
c t chung trong cng mt file chng trnh ngun hoc ghp t mt
file ngun khc nh ch th #include hoc c bin dch ring r sau
lin kt li to thnh file thc thi c.
2.
c gi t chng trnh chnh main ( ) hoc t mt hm khc hoc t
chnh n ( quy)

24

3.
4.
5.
6.

C hoc khng c i muc (argument)


C hoc khng c tr tr v ( return value)
Mi hm ch c mt im nhp chnh l lnh u tin ca hm.
Mt hm c th c nhiu im thot thng qua lnh return hoc khi gp
lnh cui cng ca hm

Mt s lu i vi hm trong C:
1.
Khng cho php cc hm lng nhau c ngha l khng c nh ngha
mt hm trong mt hm khc
2.
Cc i mc thc s ca hm ch c th chuyn bng tr c ngha l tr ca
i mc c sao chp vo mt bin tm c gi l i mc hnh thc v
hm thao tc trn bin tm
Dng tng qut ca mt hm nh sau:
Kiu
{

Tn_hm (cc i mc)


thn hm

Kiu: L kiu ca tr m hm s tr v thng qua lnh return. Tr m hm


tr v phi c cng kiu vi kiu t trc tn hm, nu khng xc nh
trc kiu tr v th my s mc nh l kiu int.
Tn_hm: Do ngi dng t t nhn din, khng c dng cng
mt tn cho 2 hm khc nhau
Cc i mc: L danh sch cc bin c phn cch bi du phy. Nu
hm khng c i mc th danh sch i mc l rng nhng vn phi c
2 du mc n. VD hm main ( )
Thn hm: L phn nm trong cp du ngoc nhn { } gm mt lot cc
khai bo bin v cc cu lnh kt thc bi du chm phy. Phn thn
hm c th rng

V d hm power ( ) c nh ngha nh sau:


Int power (int x, n)
{
int j, p ;
p=1;
for (j = 1; j <= n ; j++)
p = p*x ;
return (p) ;
}
Dng u tin m t tn hm (power) v danh sch cc i mc (x v n). Cc i
mc ny gi l cc i mc hnh thc (formal argument hoc formal parameter). y l
cc bin trung gian tip nhn tr ca cc thng s cung cp t chng trnh triu gi hm.
VD trong main ( )
main ( )
{
power (2, i) ;
}
Khi gi hm power (2, i) tnh 2i th 2 v I gi l cc i mc thc s (actual
argument). Nh vy khi gi hm power ( ) vi cc thng s 2 v I th my tnh s bin x
25

thnh 2 v n thnh i. Qu trnh sao chp cc tr t cc i mc thc s ca chng trnh


triu gi sang cc i mc hnh thc ca hm c gi l truyn i mc (parameter
passing).
V hm c th tr v mt tr cho chng trnh triu gi nh l kt qu thc hin ca
hm. Do kiu ca tr tr v phi c ch r trc tn hm, nu khng ch r th kiu
tr v mc nhin xem nh l int.
Cc i mc hnh thc phi cng kiu vi cc i mc thc s khi gi hm. Cc i
mc hnh thc v cc bin khai bo bn trong hm c xem nh l cc bin cc b
ngha l chng ch tn ti v c ngha bn trong thn hm.
Cu lnh return tr v tr do power ( ) tnh c cho main ( ). Bt c tr no ca mt
bin, hng hay mt biu thc u c th xut hin bn trong du ngoc n ca return
vi iu kin l kiu ca i lng phi thch hp vi kiu ca tr tr v c khai
bo trn dng m t tn hm.
Khng nht thit hm no cng phi tr v mt tr, cu lnh return khng c i mc
trong du ngoc s khng tr v tr no c m ch n thun l tr quyn iu khin v
cho chng trnh triu gi chng trnh ny tip tc thc hin cc cng vic khc.

10.2 Chng trnh gm nhiu hm


Nh ni trn chng trnh C gm mt hoc nhiu hm, v ng nhin mt
trong cc hm phi l hm main ( ). Hm cung cp mt phng tin hu hiu ng
gi mt cng vic c th no . Khi hm c triu gi th cng vic ny s c thi
hnh. Ni chung, c th xem hm nh mt ci hp en mang mt ci tn v c th thc
hin mt cng vic c th no
Trong chng trnh C ch c mt hm duy nht tn l main ( ) v khng c i mc.
Chng trnh c bt u thi hnh t hm main ( ) tr i, hm c th triu gi cc hm
khc to thnh lp hm phn thnh ng cp hm ni kt nhau

10.3 Hm c kiu void


Trong cc phin bn v sau, C c a ra mt loi hm c bit khng c tr tr v
c gi l void, void c ngha l khng c hiu lc. VD:
void tn_hm ( )
{
}
Trong C th t xut hin cc hm l khng quan trng

11. CU TRC IU KHIN CHNG TRNH


Thng thng chng trnh c thi hnh mt cch tun t c ngha l lnh ny
c thi hnh xong th n lnh k tip. Tuy nhin, lung iu khin thi hnh cc lnh
trong chng trnh c th b chuyn hng ty theo tnh hung, vic chuyn hng ny
c thc hin bi cc cu trc iu khin. Ging cc ngn ng khc C cng gm c 3
nhm cy trc iu khin chng trnh:
1. Cu trc tun t
2. Cu trc chn la
3. Cu trc lp
Cu trc chn la v lp c thc hin da trn cc iu kin, mt iu kin s
xc nh mt biu thc l ng (true) hoc sai (false)

11.1 Ton t quan h


Cc php tnh ny s cho kt qu l true hoc false
<
>
<=
>=
==
26

nh hn
ln hn
nh hn hoc bng
ln hn hoc bng
bng

!=
khng bng
Trong C ton t bng dng k hiu == phn bit vi k hiu gn =. Ngoi ra, k
hiu <=, >=, != gm hai k hiu lin tip nhau nn khng c c khong trng gia.
Cc ton t quan h trn l ton t hai ngi ngha l hot ng da trn hai biu
thc hai bn ton t v dn n kt qu logic l true hoc false

11.2 Ton t logic v biu thc


Trong C gm c cc ton t logic nh sau:
&&
||
!

AND
OR
NOT

Gi s mun chng trnh chuyn hng khi tha mn cng lc hai iu kin th
phi dng ton t AND
If (phai == 1 && tuoi >= 65)
Phu_nu_gia++ ;
Lnh if trn c 2 iu kin: iu kin gii tnh phi l n (phai == 1), iu kin th
hai l tui phi ln hn hoc bng 65 (tuoi >= 65). Hai biu thc ny phi c nh tr
trc v ton t == v >= c mc u tin cao hn && v sau mi phi hp vi ton t
&& cho ra tr cui cng nu kt qu l true th tng bin phu_nu_gia ln 1
Ton t && v || thuc loi ton t hai ngi, ngha l hot ng trn hai biu thc
a n mt tr hoc true hoc false. C hai ton t ny xem cc ton hng nh l tr
logic.
Ton t ph nh (!) l ton t mt ngi. Mt s biu thc dng ton t ! nh sau:
!5
!0
!t
3 + !x
!!5
!!0

cho ra tr 0 v 5 xem nh l true


cho ra tr 1
cho ra tr 0 v t coa m ASCII l 16 xem nh l true
cho ra tr l 3 nu x khc 0 hoc l 4 nu x bng 0
cho ra tr 1
cho ra tr 0

11.3 Ton t iu kin


Ton t iu kin gm 3 biu thc, biu thc th nht v th hai hai cch nhau bi
mt du hi v biu thc th hai cch biu thc th ba bi du hai chm. C php nh
sau:
Biu thc 1 ? biu thc 2 : biu thc 3
Biu thc 1 c dng quyt nh xem mt trong hai biu thc no theo sau s
c nh tr. Nu biu thc 1 cho ra tr true th biu thc 2 c nh tr cn ngc li
nu biu thc 1 cho ra tr false th biu thc 3 c nh tr. V d:
X = (y < 0)? y : y ; ngha cu lnh ny nh sau:
If (y < 0)
X = -y ;
else
X=y;

11.4 Cu trc lp
a s chng trnh my tnh u lin quan n vic thi hnh lp i lp li mt nhm
lnh cho n khi mt iu kin chm dt no c tha mn. C hai cch iu
khin vng lp.
27

1.
2.

Bng cch dng mt ci m (counter) gi l counter controlled repetition


ngha l vng lp c iu khin bi mt ci m.
Bng cch s dng mt tr canh chng (sentinel)

Theo cch th nht, s ln thc hin vng lp s c bit trc cn theo cch th
hai th s ln lp s khng bit trc v c th l v hn.
Vi phng php th nht cn phi c mt bin iu khin dng nh mt ci m
m s vng lp thc hin, bin ny thng c tng 1 sau mi vng lp, khi tr
ca bin t tr t trc th vng lp ngng li, quyn iu khin s c trao cho lnh
k tip ngay sau vng lp.
Phng php th hai ch c s dng khi:
- S ln lp khng bit trc.
- Trong thn vng lp c lnh c tr canh chng mi ln vng lp c thi
hnh
11.4.1 Vng lp iu khin bng bin m
Vng lp ny i hi:
1. Tn ca bin iu khin.
2. Mt tr khi u gn cho bin m.
3. Nc tng m bin m s b thay i mi khi vng lp c thi hnh. Nc tng
mc nh l 1.
4. iu kin trc nghim tr cui cng ca bin m quyt nh tip tc hoc
ngng vng lp.
V d:
(1)
(2)
(3)
(4)
(5)
(6)

#include <stdio.h>
main ( )
{
int cai_dem = 1;
while (cai_dem <= 10) {
printf (%d\n, cai_dem) ;
cai_dem++ ;
}
}

Lnh s 3 khai bo cai_dem l s nguyn vi tr ban u l 1, iu kin tip tc


vng lp trong lnh 4 s trc nghim xem tr ca bin m <= 10, vng lp s chm dt
khi cai_dem = 11. Chng trnh trn c th vit ngn gn hn
while (++cai_dem <= 10)
Prinf (%d\n, cai_dem) ;
Cu trc for
Cu trc for s t ng lo mi vic iu khin vng lp da trn phng php bin
m. C php nh sau:
for (biu thc 1; biu thc 2 ; biu thc 3)
<cu lnh> ;
Trong :
for
biu thc 1
biu thc 2
Biu thc 3
<cu lnh>
28

: L t kha
: L biu thc gn tr khi u cho bin m.
: Biu thc iu kin cho ra tr true hoc false.
: L nc tng ca bin i khin.
: Thn vng lp.

Trong thn vng lp c th cha mt cu trc for khc dn n cc vng lp lng


nhau. V d:
for (k = 1 ; k <= 10 ; k++)
printf (binh phuong cua %d la %d\n, k, k*k) ;
Chng trnh s in ra bnh phng ca 10 s nguyn dng u tin
Lu :
- Tr khi u, tr iu kin v tr tng nc c th l nhng biu thc. Gi s
c x = 2 v y = 10 th cu lnh sau s tng ng
for (j = x ; j <= 4*x*y ; j += y/x)
for (j = 2 ; j <= 80 ; j += 5)
-

Tr tng nc c th l m, trong trng hp ny vng lp s m tht li.


Nu bt u biu thc iu kin c gi tr l false th thn vng lp s
khng c thc hin

Vic s dng ton t du phy cng c th p dng cho c 3 biu thc v rt


thng xuyn c p dng cho biu thc 1 v biu thc 3, l do l lp trnh vin c th
dng nhiu lnh khi gn cng nh nhiu lnh tng nc cng lc. V d trong mt cu
trc for c th c hai bin iu khin cn khi gn v tng nc, cc biu thc khi gn v
tng nc c cch nhau bi du phy.
Cc biu thc trong cu trc for c th vng mt nhng du chm phy phn cch
phi c mt. V d:
t_cong = 0 ;
I = 1;
for (; I <= m ; i++) ;
t_cong += I ;
Nu cho biu thc 3 nm ln vo lnh gn th cung khng cn vit ra biu thc ny
t_cong = 0 ;
I = 1;
for (; I <= m ; i++) ;
t_cong += I++ ;
Nu biu thc 2 cung bin lun th iu kin bao gi cung c tr l true v vng lp
tr thnh v tn
for ( ; ; ) {
}
11.4.2 Vng lp dng tr canh chng
Lnh while l lnh c bn to cu trc vng lp, c php nh sau:
while (biu thc iu kin)
<lnh> ;
Lnh while c thi hnh bng cch trc tin nh tr biu thc iu kin nm
trong du ngoc. Nu kt qu khc 0 ngha l iu kin tr thnh true th <lnhj> c thi
hnh, tin trnh ny li lp li ln na bng cch nh tr (biu thc iu kin). Vng lp
tip tc cho n khi (biu thc iu kin) c tr l 0
29

V d: c vo mt lot s thc dng ri cng dn . Chm dt chng trnh khi


gp s m u tin
#include <stdio.h>
#define zero 0.0
main ( )
{
float so, t_cong = zero ;
while (scanf (%f, &so), so >= zero)
t_cong += so ;
printf (Tong cong la %f\n, t_cong) ;

11.5 Cu trc chn la


Cu trc la chn c i din bi lnh if v switch
11.5.1 Lnh if
C php nh sau:
If (biu thc iu kin)
Lnh 1 ;
elsse
Lnh 2 ;
Nu (biu thc iu kin) cho ra mt tr khc khng (true) th lnh 1 s c thc
hin v chng trnh s tip tc vi lnh theo sau lnh if, ngc li nu (biu thc iu
kin) cho ra tr l 0 (false) th lnh 2 c thc hin.
V d: Tro bin
if (a < b)
printf (nguyn thy a nh hn b\n) ;
else {
tam = a ;
a=b;
a = tam ;
printf (tro a v b\n) ;
Cu trc lng nhau ca lnh if. V d: chng trnh phn loi im nh sau
im
80-100
70-79
60-69
50-59
40-49
0-39

Loi
A
B
C
D
E
F

if (im >= 80)


loai = A ;
else if (im >= 70)
loai = B ;
else if (im >= 60)
loai = C ;
else if (im >= 50)
loai = D ;
else if ( im >= 40)
loi = E ;
else
30

loi = F ;
11.5.2 Lnh switch
Nh trong v d trn cho thy vic s snh tr ca mt bin vi cc tr khc nhau
c xy ra nhiu ln, thun tin C a ra mt lnh c bit cho mc ch ny l
lnh switch, switch c ngha l bt chuyn qua li, switch c hnh dung nh l mt
cng tc xoay nhiu v tr. C php nh sau:
switch (biu thc)
{
case biu_thc_hng_1:
lnh 1a ;
lnh 1b ;
case biu_thc_hng_2:
lnh 2a ;
lnh 2b ;

.
case biu_thc_hng_n:
lnh na ;
lnh nb ;
default:
lnh da ;
lnh db ;
}
Biu thc iu kin trong du ngoc s c nh tr, kt qu nh tr phi l kiu
nguyn k c kiu char. Cc biu thc hng tng trng hp sau t kha case
(thng c gi l case labels) cng phi l mt s nguyn v khng th c hai s
nguyn trng nhau.
Khi thc hin lnh switch th trc tin biu thc nm sau t switch c nh tr.
Tr kt qu sau c em so snh vi tng case label, nu bng nhau th quyn iu
khin s c trao cho lnh u tin trong nhm case label ny v tt c cc lnh k t
y cho n cui switch s c thi hnh. V d:
n=2;
switch (n)
{
case 1: printf (mt\n) ;
case 2: printf (hai\n) ;
case 3: printf (ba\n) ;
case 4: printf (bn\n) ;
default: printf (default\n) ;
}
printf (cui switch\n) ;
Biu thc iu kin y l tr ca n = 2. Kt qu chng trnh nh sau:
hai
ba
bn
default
cui switch

31

Lnh trong case label c th l mt lnh rng. Nu khng c biu thc hng ca
case label no bng vi tr ca biu thc iu kin th cc lnh ca default s c thi
hnh. Trong v d trn nu n = 7 th kt qu s nh sau
default
cui switch
T default v cc lnh lin quan l ty chn c ngha l khng c cng c. Nu
tr ca biu thc iu kin khng bng vi bt ca biu thc hng no v trong trng
hp ny cng khng c default th cc lnh trong switch s khng c thi hnh.
11.5.3 Lnh break
Nh trnh by trn khi quyn iu khin trao v cho trng hp case label
bng vi tr ca biu thc iu khin, th vic thi hnh s bt u t cho n cui
switch. Tuy nhin, thng thng lnh switch c s dng nh l mt phng thc la
chn nhiu chiu. Mt khi quyn iu khin c trao cho mt case label th ch nhng
lnh thuc case label ny c thi hnh ri nhy v cui switch b qua nhng lnh ca
cc case label khc. Vic ny c thc hin bng cch t tip theo sau lnh cui trong
case label mt lnh break. V d:
n=3;
switch (n)
{
case 1: printf (mt\n) ; break ;
case 2: ;
case 3: printf (hai hoc ba\n) ; break ;
case 4: printf (bn\n) ; break ;
}
printf (cui switch\n) ;
s cho kt qu nh sau:
hai hoc ba
cui switch
Thc ra trong case 4 khng cn lnh break

12. TRNH DCH C51


Trnh dch C51 c ti u ha lp trnh cho h vi iu khin 8051, chng trnh
lm vic theo chun ngn ng ANSI-C v c m rng thch hp vi cu trc c
bit ca 8051. Trnh dch C51 to ra file i tng, file ny c x l tip bi trnh lin
kt L51. ng thi file lit k cng c to ra sau khi bin dch gm mt bng lit k
c nh dng km vi file ngun l danh sch cc k hiu, cc tham chiu cho v cc
thng bo li, file lit k dng in v nh v li c trong file ngun
C th gi C51 theo dng lnh sau y :
C51 [ng dn] file_name [ddieeuf khin bin dch]
ng dn : C th c dng khi file ngun khng nm trong th mc hin
hnh
File_name : Tn file ngun cn bin dch. Phi c phn m rng VD :
PROG1.C51
iu khin bin dch : Hng dn hot ng ca trnh bin dch. Cc iu khin
bin dch cng c th c t trong file ngun

32

12.1 iu khin bin dch


Cc iu khin ny ch nh hng n cch lm vic ca trnh dch C, chng c th
c gi trc tip t dng lnh hoc c t trong file ngun. Cc iu khin ny c
chia thnh 2 nhm:
iu khin s cp: c gi trc tip t dng lnh hoc trong file ngun
nhng ch cho php t tn mt ln trong mi file ngun v chng s nh
hng n ton b qu trnh dch.
iu khin th cp: Ch c t trong file ngun nhng li cho php p
dng nhiu ln.
C php cc iu khin t trong file ngun c dng nh sau:
#pragma iu_khin
V d:
#pragma large debug code objectextend
#pragma optimize (4, size)
12.1.1 Cc iu khin s cp
LISTINCLUDE
Ghi tn cc file include vo mt danh sch
Mc nh: NO LISTINCLUDE
Vit tt: LC, NOLC
V d:
C51 VIDU.C51 LC
#pragma LISTINCLUDE
BNG 1.1 Cc iu khin bin dch
Tn

Vit tt

Mc nh

[NO]LISTINCLUDE
[NO]SYMBOLS
[NO]PREPRINT
[NO]CODE
[NO]PRINT
[NO]COND
PAGELENGHT
PAGEWIDTH
[NO]DEBUG
SMALL
COMPACT
LARGE
[NO]INTVECTOR
[NO]OBJECT
OBJECTEXTEND
ROM
[NO]EXTEND
SAVE
RESTORE
OPTIMIZE

[NO]LC
[NO]SB
[NO]PP
[NO]CD
[NO]PR
[NO]CO
PL
PW
[NO]DB
SM
CP
LA
[NO]IV
[NO]OJ
OE

OT

NOLC
NOSB
NOPP
NOCD
PR(file name)LST
CO
PL(69)
PW(80)
NODB
SM

IV
OJ(file name.OBJ)

ROM(LARGE)
EXTEND

OT(5,speed)

File
ngun
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES

Dng
lnh
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
NO
YES

Loi
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
S cp
Th cp
Th cp
Th cp
33

EJECT
[NO]REGPARMS
REGISTERBANK
[NO]AREGS
DISABLE
DEFINE

EJ
[NO]RP
RB
[NO]AR

DF

RP
RB(0)
AR

YES
YES
YES
YES
YES
YES

NO
YES
NO
YES
NO
YES

Th cp
Th cp
Th cp
Th cp
Th cp
Th cp

SYMBOLS
Hng dn ny bo cho trnh dch C a vo mt danh sch tt c cc k hiu
x dng.
Mc nh: NOSYMBOLS
Vit tt: SB, NOSB
V d:
C51 VD.C51 SB
#pragma SYMBOLS
PREPRINT
Ra lnh cho C to mt file lit k c tn ging file ngun vi phn m rng l .LI.
Trong khng c phn ghi ch v cc ch th tin x l, c th thay i tn file lit k
bng c php PREPRINT (name). Thng s ny ch c gi trong dng lnh.
Mc nh: NPEPRINT.
Vit tt: PP, NOPP.
V d:
C51.VD.C51 PP (test.LI)
CODE
Dch ra m assemler ca tng lnh C tng ng trong file lit k
Mc nh: NOCODE.
Vit tt: CD, NOCD.
V d:
C51 VD.C51 CD
#pragma CODE
PRINT
Thng thng trnh dch C to ra mt danh sch v t trong file source.LST vi
thng s PRINT (name.ext) c th to danh sch ny trong mt file bt k.
Mc nh: PRINT (source.lst)
Vit tt: PR, NOPR
V d:
C51 VD.C51 NOPR
#pragma PRINT (listing.prn)
COND

34

Thng s ny xc nh on chng trnh dch c c nhp vo file list hay


khng. Vi COND c ngha l on chng trnh khng c ghi vo file list. Nhng
c c s trnh by tng qut tt hn th khng cn nh s dng v mc lng nhau.
Mc nh: COND
Vit tt: CO, NOCO
V d:
C51 VD.C51 CO
#pragma NOCOND
PAGELENGHT
i s ny thit lp s dng trong mt trang bao gm c cc dng trng v dng
tiu trong file list.
Mc nh: PAGELENGHT (69)
Vit tt: PL
V d:
C51 VD.C51 PL (65)
#pragma PL (70)
PAGEWIDTH
Thng s ny xc nh s lng k t trn mt dng. Nu dng qu di th s b
ngt

Mc nh: PAGEWIDTH (132)


Vit tt: PW

V d:
C51 VD.C51 PW (80)
#pragma PW (75)
DEBUG
Trnh dch C s thm cc thng tin g ri vo file i tng nh: S th t dng v
cc k hiu phc v cho qu trnh tm li chng trnh v sau
Mc nh: NODEBUG
Vit tt: DB, NODB
V d:
C51 VD.C51 DB
#pragma DEBUG
SMALL / COMPACT / LARGE
Cc hng dn iu khin ny thit lp kiu b nh cho vng nh d liu
SMALL: t tt c cc bin trong vng nh ni
COMPACT: Tt c cc bin c t trong b nh ngoi v p dng
cch nh a ch ngn truy cp (MOVX @R0 / R1), ln vng d liu
c gii hn trong phm vi 256 byte (1 trang)

35

LARGE: Ton b cc bin c t trong b nh ngoi v p dng cch


nh a ch di (DPTR), vng nh d liu c ln n 64 KB.

Mc nh: SMALL

Vit tt: SM, CA, LA

V d:
C51 VD.C51 LA
#pragma COMPACT
INTVECTOR
Trnh dch C to ra vect ngt cho mi phc v ngt ti v tr tng ng
Mc nh: INTVECTOR
Vit tt: IV, NOIV
V d:
C51 VD.C51 NOIV
#pragma NOINTVECTOR
OBJECT
iu khin OBJECT (file name) bo cho C to ra file i tng c tn mong mun.
Gi tr mc nh l tn v ng dn ca file ngun vi phn m rng l .OBJ
Mc nh: OBJECT (source.obj)
Vit tt: OJ, NOOJ
V d:
C51 VD.C51 OJ (test.obj)
#pragma NOOJ
OBJECTEXTEND
Thm vo thng tin v kiu ca cc k hiu trong file i tng (nh dng INTELOMF), thng tin ny gip cho vic hin th cc bin c r rng hn trong trnh g ri
Mc nh: Khng c thng tin m rng
Vit tt: OE
V d:
C51 VD.C51 OE
#pragma OBJECTEXTEND
EXTEND
Cho php trnh dch C m rng cc lnh c bit C51 trong mi trng ANSI C
Mc nh: EXTEND
Vit tt: Khng c.
V d:

36

C51 VD.C51 EXTEND


#pragma NOEXTEND
12.1.2 Cc iu khin th cp
SAVE v RESTORE
Hng dn SAVE lu tr cc ci t ca cc iu khin OPTIMIZE, AREGS v
REGPARMS, hng dn RESTORE phc hi cc ci t lu tr.
V d: Khi cn thay i cc ci t trong file head
Mc nh: khng c.
Vit tt: Khng c
V d:
/** file: Wait.h **/
#pragma ot (5, speed)
void wait_5ms (void)
{
unsigned int counter;
for (counter = 0; counter < 5000; counter++)
; /** lnh rng **/
}
/** kt thc file wait.h **/
/** VD1.C51 **/
#pragma ot (4, size)
#pragma SAVE
#include <wait.h>
#pragma RESTORE
void main (void)
{
/** chng trnh chnh **/
}
OPTIMIZE
Thit lp mc ti u ha, mc cao lun ti u hn mc thp
Mc nh: OPTIMIZE (5, size)
Vit tt: OT
V d:
C51 VD.C51 OT (4, speed)
#pragma OT (2, size)
EJECT
To mt ngt trang trong file lit k, ch khai bo trong file ngun.
Mc nh: Khng c
Vit tt: EJ
V d:
Void wait_5ms (void)
{
unsigned int counter;
37

for (counter = 0; counter < 5000; counter++)


;
}
#pragma EJ
void main (void)
{
/** chng trnh chnh **/
}
REGPARMS
Vi hng dn ny trnh dch C s chuyn t cc li gi hm n 3 bin trong cc
thanh ghi c th tip tc x dng cc hm trc . C th v hiu ha ty chn ny
bng c php NOREGPARMS
Mc nh: REGPARMS
Vit tt: RP, NORP
V d :
Void funktion1 (int zahl) ;
Int funktion2 (char z, int a) ;
#pragma NORP
char funktion_alt (char a, char b, char c) ;
#pragma RP
REGISTERBANK
Ch dn ny l c s tnh ton a ch tuyt i ca thanh ghi bng cch nh a ch
trc tip, c th c dng nhiu ln trong chng trnh ngun. Tuy nhin, phi t bn
ngoi lnh gi hm. Nn nh rng cc hm c gi t x dng cc dy thanh ghi nu
khng gi tr tr v v gi tr chuyn giao s ghi sai dy thanh ghi. Khc vi USING n,
iu khin REGISTERBANK khng t ng thay i dy thanh ghi
Mc nh : REGISTERBANK(0)
Vit tt : RB
V d :
#pragma RB(1)
void wait_5mS(void)
{
unsigned int zaehler ;
for (zaehler = 0 ; zaehler < 500 ; zaehler++)
; /* trng */
}
void main(void)
{
/* chng trnh chnh */
rb0 = 1 ; /* chuyn sang dy thanh ghi 1 */
rb1 = 0 ;
wait_5mS( ) ;
/*..*/
}
AREGS
iu khin ny yu cu trnh dch ti u ha m lnh to ra khi nh a ch trc tip
cc thanh ghi. VD : PUSH v POP
Mc nh : AREGS
38

Vit tt : AR, NOAR

V d :
#pragma AREGS
; Lnh hp ng
PUSH AR6
PUSH AR7
#pragma NOAREGS
; Lnh hp ng
MOV
PUSH
MOV
PUSH

A, R6
ACC
A, R7
ACC

DISABLE
iu khin DISABLE phi c t trc mt hm cm tt c cc ngt trong
thi gian thc hin hm. Hm c th khng tr v gi tr bt do PSW c ct khi gi hm
Mc nh : Khng c
Vit tt : Khng c
V d :
#pragma DISABLE
/* cm tt c cc ngt */
void wait_5mS(void)
{
/* ct PSW */
unsigned int zaehler ;
for (zaehler = 0 ; zaehler < 5000 ; zaehler++)
; /* trng */
/* phc hi PSW */
}
void main(void)
{
/* chng trnh chnh */
wait_5mS( ) ;
/*..*/
}
DEFINE
Qu trnh tin x l c th c iu khin bi DEFINE. Ch dn ny c thc
hin trc khi bin dch. Qu trnh tin x l c th x l cc lnh tip theo sau
#define NH DANH BIU THC nh ngha mt tn cho biu thc sau tn
ny khi c trong file ngun s c thay bng biu thc ingh ngha
#undef NH DANH xa nh danh
defined (NH DANH) to ra nu #if- hoc #elif- lnh NG hoc khng to ra
nu SAI
#if BIU THC. Nu tha mn iu kin th dch on chng trnh theo sau
#elif BIU THC nu iu kin trc #if-lnh SAI v iu kin ca #elif-lnh
c tha th dch on chng trnh theo sau

39

#else nu iu kin trc #if-lnh hoc #elif-lnh SAI th bin dch on chng
trnh theo sau
#ifdef NH DANH nu nh danh nh ngha th dch on chng trnh theo
sau
#ifndef NH DANH nu nh danh khng c nh ngha th dch on
chng trnh theo sau
#endif phi c t sau mi pht biu #if. Nn lu n k t hoa hoc
thng khi vit INH DANH v BIU THC
Mc inh : Khng c
Vit tt : DF
V d :
#define ENDLOS while(1) ; /* vng lp ENDLOS */
ENDLOS

/* ng dng nh danh */

#define DEMO
#ifdef DEMO
#include <demo.h>
#else
#include <profi.h>
#endif

12.2 Cc kiu d liu c bit trong 8051


Trnh dch C51 nhn bit tt c cc kiu d liu c xc nh thoe chun ANSI-C.
c th chuyn cc php tnh sang cu trc c bit ca 8051 cn phi thm cc m
rng v nh ngha bin
Bng cch nhp kiu b nh, mi bin c th c t vo cc vng a ch
khc nhau ca 8051 khng ph thuc vo cu hnh b nh a chn.
Kiu sfr hoc sfr16 c dng m t thanh ghi c bit ca 8051
Kiu sbit c dng nh ngha cc bt tuyt i trong vng thanh ghi chc
nng c bit.
Dy thanh ghi s dng c cho bit trc i vi mi hm.
Kiu b nh
Nu khng cho bit kiu b nh. Cc bin t ng c t vo vng a ch cho
trc trong cu hnh b nh. Nhm mc ch ti u ha chng trnh, cc bin xc nh
c t trong mt khng gian a ch xc nh. Qua c nhng kh nng nh sau :
M t cp b nh kiu b nh
M t cp b nh
M t kiu b nh
M t
Cc cp b nh cho php
Auto
Static
Register
Extern
V d :
Static char counter ;

40

Extern xdata long ket_qua ;


Register alarm_value ;
Cc kiu b nh cho php
Code
Bit
Data
Bdata
Idata
Pdata
Xdata
Data : 00h 7Fh, b nh trong a ch trc tip
Idata : 00h 7Fh (FFh), b nh trong a ch gin tip
Bt : 00h 7Fh, b nh trong a ch bt
Sbit : 00h FFh, b nh trong a ch bt v vng SFR
Bdata : 20h 2Fh, a ch byte ca b nh trong a ch bt
Sfr : 80h FFh, vng nh sfr a ch trc tip
Sfr16 : 80h FFh, 16 thanh ghi sfr a ch trc tip
Pdata : 00h FFh, b nh ngoi a ch gin tip (trang)
Xdata : 0000h FFFFh, b nh ngoi a ch gin tip
Code : 0000h FFFFh, b nh chng trnh a ch gin tip
B nh hng
FFh

FFFFh
FFFFh

idata

sfr
sfr16
sbit

80h

xdata

80h
7Fh
data
idata
30h
2Fh

code

FFh

bit/sbit/bdata
Data/idata

pdata

20h
1Fh

00h
RB0-3
data/idata

00h

0000h
RAM ni

0000h
RAM ngoi

B nh chng trnh

Hnh 1.1 Kiu b nh v a ch

41

V d :
Static data char counter ;
Extern xdata int loop_count ;
Idata char string1[20] ;
Bit alarm ;
CODE
Cc bin c nh ngha vi kiu b nh CODE ch cho php c, cung x nh
cc hng s, chng c t trong b nh chng trnh ca vi iu khin.
V d :
Static code char error[ ] = { phim khong cho phep } ;
Code int MAX_COUNT = 10 ;
BIT
Cc bin kiu BIT c trnh dch a vo b nh trong t a ch 20h n 2Fh,
chng ch thch hp vi cc kiu b nh DATA, BDATA v IDATA, khng cho php nh
ngha bin bt cho con tr (bit *bit_ptr ;) cng khng c nh ngha mng con tr (bit
bit_array[4] ;)
V d :
Extern bit Y_N ;
Static data bit back_light ;
DATA
Cc bin c kiu b nh DATA c t trong b nh d liu ni t a ch 00h n
7Fh, v vng nh ny rt hp v i vi hu ht cc h vi iu khin 8051 khng tn ti
vng nh bt u t a ch 80h, nn ngn xp cng c t trong vng nh ny nn
y ch thng c dng cho cc bin V d : B m v con tr.
V d :
Data char *string_ptr ;
Data char counter ;
BDATA
Vi cc bin c nh ngha kiu BDATA, chng c trnh dch t vo b nh
ni t a ch 20h n 2Fh, kiu b nh ny khng c dng trong cc cu trc.
V d :
Bdata char bitfield ;
Sbit bit0 = bitfield^0 ;
Sbit bit1 = bitfield^1 ;
Sbit bit2 = bitfield^2 ;
Sbit bit3 = bitfield^3 ;
IDATA
Cc bin kiu IDATA c t b nh d liu trong t a ch t 00h n 7Fh.
Vi cc vi iu khin c b nh d liu trong l 256 byte th vng a ch t 80h n FFh
cng c dng cho IDATA. Cc bin IDATA c truy cp gin tip qua thanh ghi R0
v R1
V d :
Idata char array [5] ;

42

PDATA
Vng nh PDATA nm trong b nh d liu ngoi v c ln 256 byte. Cc bin
kiu ny c nh a ch thng qua thanh ghi R0 v R1. cc trang trong b nh ny
c c nh trong file STARTUP.A51. Trang c th c thay i bi SFR P2. Tuy
nhin, sau n phi c sp xp lun ph hp vi bin t.
V d :
Void test (void)
{
pdata char c ;
P2 =1 ; /* t trang 1*/
c=c+2;
P2 = 0 ; /* t trang 0 */
}
XDATA
Cc bin kiu XDATA c t trong b nh d liu bn ngoi c ln n 64
Kbyte, cc bin ny c truy cp thng qua con tr d liu DPTR nn thi gian x l
chm
V d :
Xdata char buffer [300] ;
Struct TIME
{
unsigned char sec ;
unsigned ch min ;
unsigned char hour ;
unsigned char day ;
}
xdata struct TIME times [100] ;
X l thanh ghi chc nng c bit (SFR)
Cc thanh ghi iu khin khi ngoi vi tch hp ca 8051 nm trong vng thanh ghi
chc nng c bit, truy cp trc tip C51 khng dng cc nh nfgha ca ANSI-C m
thay vo l cc t nh sn sfr v sfr16. Phng php nh sau :
Sfr name = hng s ;
Sfr16 name = hng s ;
Name l tn ty chn. Trong khi hng s l gi tr cho php t 80h n FFh. i vi
cc vi iu khin thng dng nht, cc m t sfr c cha trong cc file h trong mi
trng pht trin ca chng trnh dch.
c bit i vi cc h vi iu khin 8051 mi hn cc thanh ghi chc nng c
bit thng c di 16 bt nn tng hiu qu truy cp thng phi dng cc nh
ngha sfr16. Vic p dng sfr16 cng cho php khi phn cao ca sfr theo sau ngay phn
thp. sau , xc nh phi cho bit a ch phn thp ca bin
V d :
Sfr P0 = 0x80 ; /* nh ngha port 0 */
Sfr16 T2 = 0xCC ; /* thanh ghi Timer2: Phn thp CCh, phn cao CDh */
Mc nhp sau du = khng phi l mt ch dn m l mt m t cho bit a ch
ca cc thanh ghi chc nng c bit.
43

X l cc sfr a ch bt
Mt s thanh ghi chc nng c bit cho php truy cp a ch bt nhm mc ch
n gin vic truy cp ny trnh dch C51 cung cp mt kh nng m t bt c bit.
Sbit sbit_name = sbit_adr ;
Trong , sbit_name l bt k, tn bin ty chn. sbit_adr c nh ngha nh sau
:
Sfr_name^const : Mt bin nh ngha vi sfr.
Const1^const2 : Mt a ch byte.
Const : Mt a ch bt
V d ng dng cch 1 :
Sfr PSW = 0xD0 ;
Sbit OV = PSW^2 ;
Sbit CY = PSW^7 ;
Trong const nhn gi tr t 0 n 7
V d ng dng cch 2 :
Sbit OV = 0xD0^2 ;
Sbit CY = 0xD0^7 ;
Trong const1 l a ch trong vng t 80h n FFh v const2 l t 0 n 7
V d ng dng cch 3 :
Sbit OV = 0xD2 ;
Sbit CY = 0xD7 ;
Trong const l a ch bt ca cc bt c a ch ha. Cc bt ny phi trong
vng t 80h n FFh.
S dng con tr
Ging nh ANSI-C. Trnh dch C51 cng c th dng con tr. tnh ton c cu
trc c bit ca 8051, c hai kiu con tr c cung cp :
Con tr tng qut
Con tr xc nh b nh
Con tr tng qut
Con tr tng qut cho php tt c cc vng b nh ngoi tr BDATA. Ti v kiu b
nh phi c t trong con tr. Mt con tr tng qut c nh ngha nh sau :
SP_TYP_PTR DATYP *VAR_NAME ;
Trong ,
SP_TYP_PTR : Vng b nh ni t bin con tr. C th l cc kiu data, idata,
pdata, xdata.
DATATYP : Kiu d liu ca bin m con tr ch n. Tt c cc kiu c nh
ngha trong ANSI-C
VAR_NAME : Tn bt k theo chun ANSI-C

44

Address+0

Kiu b nh

Address+1

Byte cao con tr

Address+2

Byte thp con tr

Kiu b nh :

01
02
03
04
05

idata
xdata
pdata
data
code

Cc kiu b nh cho php

0x02

V d : Con tr n a ch
1234h trong b nh d
liu ngoi

0x12

0x34

Hnh 1.2 Cu to con tr tng qut

Con tr tng qut lun c di l 3 byte. Cc kiu b nh ch cho php t


gi tr 1 n 5, Cc gi tr khc s dn n mt c tnh ca chng trnh cha nh
ngha.
Con tr hng
c th truy cp mt cch n gin n cc a ch ngoi vi, con tr c th c
nh ngha bng a ch tuyt i
#define VAR_NAME ((DATATYP*)0xABBBBL)
Trong :
DATATYP : Kiu d liu ca bin m con tr ch n. L tt c cc kiu c
nh ngha trong ANSI-C
VAR_NAME : Tn c chn bt k theo chun ANSI C
A : Kiu b nh ging nh vi con tr tng qut (1 = idata, 2 = xdata, 3 = pdata,
4 = data, 5 = code).
BBBB : a ch tuyt i ca khi ngoi vi.
L : K hiu cho bit a ch c cho l loi long
V d :
#include <absacc.h>
#define LCD_DATA_WR ((unsigned char*)0x28001L /* ghi d liu hin th LCD */
#define LCD_CONT_RD XBYTE [0x8000] /* c iu khin hin th LCD */
#define busy 0x01 /* trng thi ca b hin th LCD */
code unsigned char string [ ] = {TEST TEXT\0} ;
void main (void)
{
unsigned char I ;
for (I = 0 ; string [i] ! = 0 ; i++)
{
LCD_DATA_WR [0] = string [i] ; /* ghi chui k hiu vo LCD */
Do {
45

} hile (LCD_CONT_LCD == busy) ; /* ch n k hiu k tip */


}
}

LCd display

WR

RD

D0-7

adrss

P0

Cht

8051

P1

Hnh 1.3 S khi b iu khin hin th LCD

Mt vi macro c nh ngha trong file h ABSACC.H nm trong mi trng pht


trin ca chng trnh dch gip n gin qu trnh truy cp n cc vng nh khc nhau
di dng byte hoc word mt cch n gin, trong v d trn c dng macro XBYTE
c nh ngha nh sau :
#define XBYTE ((unsigned char *)0x20000L)
Sau con tr c th c nh ngha vi mt iu khin bin dch tip theo,
(LCD_CONT_RD) c th c lm vic trc tip.
#define CONST_PTR PTR_MACRO [OFFFSET]
Trong :
CONST_PTR : Tn bt k theo chun ANSI-C
PTR_MACRO : Mt macro con tr c nh ngha trong ABSACC.h (VD :
XBYTE)
OFFSET : a ch con tr ch n trong vng nh tng ng.
V d :
#define LCD_CONT_RD XBYTE [0x8000] /* c d liu hin th LCD ti a ch
8000h */
do {
} while (LCD_CONT_RD == busy) ; /* ch n k hiu k tip */
Ngc li, nu s dng mt con tr tng qut th ch c th nhp vo a ch offset
GEN_PTR [OFFSET] = VALUE
V d :
#define LCD_DATA_WR ((unsigned char *)0x28001L) /* ghi d liu hin th LCD
vo a ch 8001h */
46

LCD_DATA_WR [0] = string [i] ; /* ghi mt k hiu vo LCD */


S dng con tr xc nh b nh
Vi con tr xc nh b nh, vng nh ca bin ni m con tr ch n phi c
nh ngha trc trong file ngun. Qua m lnh hiu dng c th c to ra bi trnh
dch m khng cn gi th vin v m lnh trc tip cho con tr c pht sinh trong
vng nh nh ngha.
Con tr xc nh b nh c nh ngha theo cc cch sau :
SP_TYP_PTR DATATYP SP_TYP *VAR_NAME ;
Trong :
SP_TYP_PTR : Vng nh trong t bin con tr. l data, idata, pdata,
xdata
DATATYP : Kiu d liu ca bin m con tr ch n l tt c cc kiu c nh
ngha trong ANSI-C
SP_TYP : Vng nh con tr nh a ch. Cc kiu c s dng l : data, idata,
pdata, xdata, code.
VAR_NAME : Tn bt k theo chun ANSI-C
V d :
Gen_ptr_test ( )
{
data char data *ms_ptr ;
data char var1, var2 ;
ms_ptr = &var1 ; /* dng 1 */
var2 = *ms_ptr ; /* dng 2 */
}
; m hp ng ca on chng trnh trn
; dng 1
mov R7, #LOW var1
mov ptr, R7
; dng 2
mov R0, ptr
mov var2, @R0
Nu nhp SP_TYP l data, idata, pdata th con tr ch c lu vo mt byte trong
vng nh nh ngha bi SP_TYP_PTRNu SP_TYP l xdata hoc code th bin con tr
c dng 2 byte.
Trong v d trn cho thy con tr xc nh b nh *ms_ptr tr n cc bin trong
vng nh data. Chnh con tr cng nm trong vng nh data. T on m hp ng c
to ra cho thy con tr ch c dng cho cc bin trong vng nh data. Nu th dng
con tr ch n mt bin trong vng nh khc th trnh dch s to ra cnh bo.
Cc bin chng nhau
x dng tt hn b nh d liu hn ch ca 8051. Trnh lin kt s to mt s
chng ln nhau v khng gian nh i vi cc bin byte. Cc bin ny c thi im x
dng khc nhau. Trnh dch C s nh du vng nh xc nh l c th chng ty thuc
vo cu hnh b nh chn. Cc k hiu nhn dng nh sau :
Cu hnh b nh SMALL vng nh data c php chng
Cu hnh b nh COMPACT vng nh pdata c php chng
Cu hnh b nh LARGE vng nh xdata c php chng.
Mi cu hnh b nh cng ch c mt vng nh cho cc bin byte c chng
nhau. Vng nh bt trong mi cu hnh b nh c chng nhau

47

Nu mt hm c ch nh trong mt cu hnh b nh khc, khi c nh ngha


cho n th chng trnh th cc bin trong vng nh c chn cho hm cng s
c dnh du cho php chng. T dn n kh nng c nhiu vng nh trong mt
modul chng nhau hn. Sau trnh lin kt s chng cc vng nh ca cc bin v
thng s ca cc hm khng t gi ln nhau.
Hm chnh

Hm con 2

Hm con 1

Hm con 5
Hm con3
Hm con 4

Vng d liu ca hm con 1 v 3 c th c chng khi gi hm con


2, vng d liu ca hm con 4 v 5 khng c php chng v
chng c gi bi hm con 2. Nu hm con 4 c gi th vng d
liu ca hm con 3 v 5 c th c chng
Hnh 1.4 S chng nhau gia cc bin

Nu cc hm c gi gin tip thng qua con tr th trnh lin kt c th khng


nhn ra v dn n tnh hung chng nhau khng mong mun. Trong trng hp ny
trnh lin kt phi c cung cp thm cc tham kho thng qua thng s iu khin bin
dch OVERLAY

12.3 Gi hm trong 8051


Vic gi hm m rng mt vi nh ngha trong trnh dch C51. Chng mang cu
trc c bit cho vic tnh ton 8051 v to ra mt m lnh hiu qu
[static] [erg_typ] ten_ham ([datatyp] [var_name] [,])
[model] [reentrant] [interrupt n] [using n]
{ }
Cc nh ngha in nghing l cc m rng c bit cho 8051
Model : C th c nhp l small, compact v large nhm gip bin dch cc
hm c cu hnh b nh nh sn khng ng.
Reentrant : Mt hm c nh du nh th c th c gi
Interrupt n : hm ngt, n l s hiu ngt
Using n : Chuyn sang dy thanh ghi n khi gi hm, tr v dy thanh khi c khi
thot ra khi hm
Nu p dng cc nh ngha model v reentrant chng phi c khai bo khng
nhng khi nh ngha m cn trong lc m t hm
48

Khi khai bo model lc nh ngha hm, cc bin c cc khi thng s c nh


du l OVERLAYABLE nh chng c th c chng ln cc vng nh khc nh
trnh lin kt.
Bng cch s dng reentrant mt ngn xp c bit s c t trong hm, ty
theo cu hnh b nh l small, compact hoc large, ngn xp ny s nm trong IDATA,
PDATA hoc XDATA, cc thng s c a vo y mi khi gi hm
V d :
#pragma LARGE /* ch ngn xp trong XDATA */
long fakultaet (int anzahl) reentrant
{
if (anz == 0)
return (1) ;
else
return (anz * fakultaet (anz 1)) ;
}
8051 hot ng vi 4 dy thanh ghi vi mi dy gm c 8 thanh ghi, dy thanh ghi
c chn bng nh ngha using n. nh ngha ny ch c khai bo khi nh ngha
hm. Khi hm tr v mt kt qu cn phi lu nu hm c gi dng chung dy thanh
ghi nu khng th gi tr tr v s ghi vo dy thanh ghi khong ng.
V d :
Extern void funtion2 (void) ;
Void funtion1 (void) using 3
{
function2 ( ) ;
/*.*/
}
Tt c cc hm trong v d c gi bi funtion1 lm vic vi dy thanh ghi 3.
Ngoi ra chng cn cha mt nh ngha using ring
Chuyn tham s cho hm
Trong C c hai cch chuyn giao tham s cho hm nh sau :
Chuyn thng qua khi tham s
Chuyn thng qua thanh ghi
Trnh dch s ti u ha qu trnh chuyn tham s. Trc tin dng cc thanh ghi
v ngay sau l cc khi tham s, nu khng c tham s chuyn giao th c khai bo
l void. Nu hm khng tr v mt gi tr th trong phn kiu d liu ca hm cng c
khai bo l void, nu khng trnh dch s tr v tr mc nh l int.
V d :
Funct1 (int var1) ; /* kiu tr v l int, kiu tham s l int */
Long funct2 (int var1) ; /* kiu tr v long, kiu tham s int */
Void funct3 (char var2) ; /* khng c tr tr v, kiu tham s l char */
Void funct4 (void) ; /* khng c tr tr v, khng c tham s */
Chuyn tham s trong khi tham s
Vi iu khin bin dch #pragma NOREGPARMS s ngn ch chuyn bng
thanh ghi. iu khin ny khng nhng c khai bo khi nh ngha m cn c khai
49

bo khi m t hm. iu khin bin dch ny c li khi dng cc th vin c trc y


khng c kh nng chuyn bng thanh ghi hoc giao tip vi cc hm ca hp ng.
Cu hnh b nh
Small
Compact
Large

Vng nh
Data
bt
Pdata
bt
Xdata
Bt

Vng a ch
00h FFh
00h 7Fh
00h FFh
00h 7Fh
0000h FFFFh
00h 7Fh

Tn k hiu
?DT?FKT_NAME?MOD_NAME
?BI?FKT_NAME?MOD_NAME
?PD?FKT_NAME?MOD_NAME
?BI?FKT_NAME?MOD_NAME
?XD?FKT_NAME?MOD_NAME
?BI?FKT_NAME?MOD_NAME

Hnh 1.5 Khi tham s v cu hnh b nh

Khi tham s c t vo vng nh thch hp ty thuc vo cu hnh model khi


nh ngha hm cng nh iu khin bin dch #pragma MODEL (small, compact, large).
Nhng vng nh ny s c trnh bin dch nh du l cho php chng.
Chuyn tham s trong thanh ghi
chuyn tham s cho hm di dng m v kh nng t chc khng gian b nh
d liu c hiu qu nht. Trc tin, trnh bin dch s th chuyn 3 tham s vo cc
thanh ghi R2-R7, nu cc thanh ghi ny sn sng x dng th cc tham s tng ng s
c chuyn vo khi tham s.
Tham s
Tham s 1
Tham s 2
Tham s 3

Char
R7
R5
R3

Int
R6+R7
R4+R5
R2+R3

Kiu bin
Long
R4+R5+R6+R7
R4+R5+R6+R7
****

Float/double
R4+R5+R6+R7
R4+R5+R6+R7
****

8 bt
R7
R5
R3

Con tr
16 bt
Tng qut
R6+R7
R1+R2+R3
R4+R5
R1+R2+R3
R2+R3
R1+R2+R3

Hnh 1.6 Chuyn tham s trong thanh ghi

vic chuyn giao thanh ghi c ti u, trc tin nn chuyn cc bin nh


(char hoc int) cng nh con tr xc nh b nh.
Cc hm ngt
Nhm khai thc ti a tnh nng ca 8051. Trnh dch C51 cn h tr vic x l cc
ngt. Cc hm ngt khc vi cc hm thng thng nhng im sau y :
Khng c tham s chuyn giao
Khng c kt qu tr v. Cc hm ngt lun c nh ngha l void. Chng
trnh dch cng chp nhn kiu int v n l ti u.
Khng cho php gi trc tip hm ngt
Cch thc nh ngha hm ngt nh sau :
[void] int_name (void) interrupt n [using m]
{ }
nh ngha interupt n ch c php khai bo chung vi nh ngha hm
Trnh dch x l mt hm ngt nh sau :
Ct cc thanh ghi chc nng c bit ACC, B, DPL, DPH v PSW trc khi thc
hin hm
Khng dng thuc tnh using v tt c cc thanh ghi dng trong hm (R0 R7)
u c ct
Trc khi thot khi hm tt c cc thanh ghi ct trong ngn xp c phc
hi tr li.

50

Thot khi hm bng lnh RETI bo m hot ng n nh ca h thng


ngt trong 8051
Trnh dch C51 c th to ra chnh xc cc vc t ngt nu cho bit s hiu ngt n.
Tip theo a ch ca vc t ngt c tnh theo cng thc sau :
8*n+3
Mt lnh LJMP n chng trnh phc v ngt c ghi vo a ch tnh ton
S hiu ngt
0
1
2
3
4
5
8
9
10
11
12
13
16
18
19
20
21

Ngun ngt
Ngt 0 ngoi
Ngt Timer0
Ngt 1 ngoi
Ngt Timer1
Ni tip Port 0
Ngt Timer2
Chuyn A/D
Ngt 2 ngoi
Ngt 3 ngoi
Ngt 4 ngoi
Ngt 5 ngoi
Ngt 6 ngoi
Ni tip Port 1
Compare Match
0-7
So snh Timer
trn
Compare Match
COMSET
Compare Match
COMCLR

a ch ngt
0003h
000Bh
0013h
001Bh
0023h
002Bh
0043h
004Bh
0053h
005Bh
0063h
006Bh
0083h
0093h

C ngt
IE0
TF0
IE1
TF1
RI/TI(RI0/TI0)
TF2/EXF2
IADC
IEX2
IEX3
IEX4
IEX5
IEX6
RI1/TI1
ICMP0-7

Reset
Phn cng
Phn cng
Phn cng
Phn cng
Phn mm
Phn mm
Phn mm
Phn cng
Phn cng
Phn cng
Phn cng
Phn cng
Phn mm
Phn mm

009Bh

CTF

Phn cng

00A3h

ICS

Phn cng

00Abh

ICR

Phn cng

In nghing : Ch c trong 80517


Hnh 1.7 a ch ngt ca 80515/517

V d :
Extern int count ;
Void timer1 (void) interrupt 3
{
TR1 = 0 ; /* ngng Timer1 */
count = TL1 + 256 * TH1 ; /* c b nh thi Timer1 */
TR1 = 1 ; /* khi ng Timer1 */
}
Khi cc php tnh float c thc hin trong mt chng trnh phc v ngt th
trng thi cc trnh phc v du chm di ng phi c lu tr, chng c th mt khi
cc trnh du chm di ng khng x dng cc hm khc. Vi cc hm fpsave ( ) v
fprestore ( ) c m t trong file math.h c th bo m yu cu ny.
V d :
#include<math.h>

51

struct FPBUF save_int ;


void isr_t0 (void) interrupt 1 using 1
{
float a, b ;
fpsave (&save_int) ;/* lu trng thi ca trnh FP */
a=b*b;
fprestore (&save_int) ; /* phc hi tr li */
}
Giao tip gia cc hm hp ng vi cc hm C
Cc hm hp ng c gi theo quy c ging nh cc hm C, qu trnh chuyn
tham s n gin nht qua cc khi tham s. Ty theo cu hnh b nh cc tham s ny
c t vo mt vng nh xc nh. trnh lin kt c th to nn mt tham chiu
chnh xc cc hm hp ng phi c nh ngha ging nh cc hm C.
Trong mt modul hp ng, cc bin ton cc ty theo kiu d liu s c t
trong mt segment ring. Cch nh ngha nh sau :
Hng s :
?CO?MODULNAME
Bin XDATA :
?XD?MODULNAME
Bin PDATA :
?PD?MODULNAME
Bin IDATA :
?ID?MODULNAME
Bin BDATA :
?BA?MODULNAME
Bin DATA
?DT?MODULNAME
Bin BIT :
?BI?MODULNAME
V d :
NAME TEST1 ; tn modul l TEST1
?XD?TEST1 segment XDATA ; segment cho cc bin ton cc trong vng XDATA
;.
Rseg?XD?TEST1
Var1 : ds
2 ; int var1
;..
i vi mi hm c mt segment CODE ring c nh ngha trong gm c tn
hm v tn modul
?PR?FUNCTIONS_NAME?MODULNAME
V d :
NAME TEST1 ; tn modul l TEST1
;********************************
;**function : voi INIT (void) **
;********************************
?PR?INIT?TEST1 segment CODE
rseg?PR?INIT?TEST1
INIT :
;
ret

52

Cc bin cc b ca hm ty theo cu hnh b nh cng c ch nh trong mt


segment ring, mi mt segment c nh ngha cho cc bin byte hoc cc bin bt
Cc nh ngha sau hp l vi b nh SMALL
Bin byte : segmenttyp DATA
?DT?FUNCTIONS_NAME?MODUL_NAME
Bin BIT : segmenttyp BIT
?BI?FUNCTIONS_NAME?MODUL_NAME
Cc nh ngha hp l vi b nh COMPACT
Bin byte : Segmenttyp PDATA
?PD?FUNCTIONS_NAME?MODUL_NAME
Bin bt : Segmenttyp BIT
?BI?FUNCTIONS_NAME?MODUL_NAME
Cc nh ngha hp l vi b nh LARGE
Bin byte : Segmenttyp XDATA
?XD?FUNCTIONS_NAME?MODUL_NAME
Bin bt : Segmenttyp BIT
?BI?FUNCTIONS_NAME?MODUL_NAME
Khi mt hm c gi vi cc tham s th phn bt u ca khi tham s c
nh du bi tn ALIAS. nh ngha sau y c dng cho tham s byte :
?FUNCTIONS_NAME?BYTE :
nh ngha sau y c dng cho tham s bt :
?FUNCTIONS_NAME?BIT :
Nhng nh ngha ny c gn PUBLIC. Cc tham s c lu tr theo th t
ni tip nh ngha ca chng trong li gi hm bt u t a ch ny.
Nu hm c gi tr tr v th chng phi t trong cc thanh ghi c nh.
Kiu d liu
Bit
Char
Int
Long
Float/double

Thanh ghi
C carry
R7
R6+R7
R4+R5+R6+R7
R4+R5+R6+R7

Con tr tng qut

R1+R2+R3

Con tr 8 bt
Con tr 16 bt

R7
R6+R7

Ghi ch
Khong c #pragma DISABLE
MSB trong R6
MSB trong R4
MSB trong R4, du v s m trong
R7
MSB trong R2, kiu b nh trong
R3
MSB trong R6

Hnh 1.8 Sp xp thanh ghi cho tr tr v ca hm

Nu ch n cc quy c ny th vic kt ni hm hp ng trong chng trnh C


c thc hin mt cch d dng v c trnh lin kt cng c th phn tch vic chng
nhau cho cc hm ny
Gi hm hp ng v C trong cu hnh SMALL
Trong cu hnh SMALL, cc thng s chuyn giao v cc bin cc b c t
trong vng nh data. Hm hp ng c gi trong file ngun C nh sau :
#pragma SMALL
#pragma NOREGPARMS /* khng chuyn tham s trong thanh ghi */
int asm_funkt(int var1, char var2, bit bvar1) ;
void main (void)
{
int var1, ret_val ;
char var2 ;

53

bit bvar1 ;
/*.*/
ret_val = asm_funkt (var1, var2, bvar1) ;
}
Cch nh ngha hm ny trong file ngun hp ng
NAME

ASM_MODUL1

; nh ngha tn modul

?PR?asm_funkt?ASM_MODUL1 segment CODE


chng trnh

; nh ngha segment cho m

?DT?asm_funkt?ASM_MODUL1 segment DATA OVERLAYABLE ;


segment cho tham s byte v cc bin byte cc b

nh

ngha

?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE


segment cho tham s bt v cc bin bt cc b

nh

ngha

Public asm_funkt, ?asm_funkt?BYTE, ?asm_funkt?BIT


cng cng cho chng trnh gi C

; Khai bo cc k hiu

;***********************************************************************
;** FUNKTION : int asm_funkt (int var1, char var2, bit bvar1) **
;***********************************************************************
rseg
?DT?asm_funkt?ASM_MODUL1
; Segment cho bin byte cc b
?asm_funkt?BYTE :
var1 : ds
2
; Tham s int var1
var2 : ds
1
; Tham s char var2
lok_var : ds
2
; Bin cc b int lok_var
rseg
?BI?asm_funkt?ASM_MODUL1
; Segment cho cc bin bt
?asm_funkt?BIT :
bvar1 : dbit1
; Tham s bt bvar1
lok_bvar :
dbit1 ; Bin bt cc b bit lok_bvar
rseg
?PR?asm_funkt?ASM_MODUL1
; Bt u phn chng trnh ca
asm_funkt
asm_funkt :
; C th truy cp cc bin v tham s da theo cc tn var1, var2 v lok_var
mov
add
mov
clr
addc
mov

a, var2
a, var1 + 1
; lok_var = var2 + var1
lok_var + 1, a
a
a, var1
lok_var, a

; i vi cc bin v tham s bt c th truy cp theo cc tn bvar1 v lok_bvar


mov
c, bvar1
mov
P1.1, c
; P1.1 = bvar1
; Chuyn gi tr tr v, ni dung ca bin lok_var
mov
R6, lok_var + 1
54

mov
ret

R7, lok_var
; Thot khi hm hp ng

Mt hm C cng c th c gi t mt chng trnh hp ng. Vic gi hm C


phi c nh ngha trong file hp ng
NAME

ASM_MODUL1

; nh ngha tn modul

extrn CODE (c_funkt)


; M t hm C bn ngoi
extrn DATA (?c_funkt?BYTE) ; M t tham s byte bn ngoi
extrn BIT (?c_funkt?BIT)
; M t tham s bt bn ngoi
?PR?asm_funkt?ASM_MODUL1 segment CODE
; nh ngha segment cho m
chng trnh
?DT?asm_funkt?ASM_MODUL1 segment DATA OVERLAYABLE ; nh ngha
segment cho tham s byte v bin cc b byte
?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE
; nh ngha
segment cho tham s bit v bin cc b bit
*********************************************
** FUNKTION : void asm_funkt (void) **
*********************************************
rseg
?DT?asm_funkt?ASM_MODUL1
lok_var1 :
lok_var2 :
lok_var3 :
rseg

2
1
2

; Bin cc b int lok_var1


; Bin cc b char lok_var2
; Bin cc b int lok_var3

?BI?asm_funkt?ASM_MODUL1

lok_bvar :
rseg
asm_funkt

ds
ds
ds

dbit

; on cc bin byte cc b

; on cc bin bit cc b

; Bin bt cc b bit lok_bvar

?PR?asm_funkt?ASM_MODUL1

; Bt u phn chng trnh ca

asm_funkt :
mov
?c_funkt?BYTE+0, lok_var1 ; int var1
mov
?c_funkt?BYTE+1, lok_var1+1
mov

?c_funkt?BYTE+2, lok_var2 ; char var2

mov
mov

c, lok_bvar
?c_funkt?BIT+0, c

; bit var3

lcall

c_funkt

; Gi hm C

mov
lok_var3+0, R6
mov
lok_var3+1, R7
;

; Tr tr v trong lok_var3

Cch nh ngha hm c_funkt trong file ngun C


#pragma SMALL
#pragma NOREGPARMS /* Chuyn tham s tip theo khi hm */

55

/*.*/
/******************************************************************/
/** FUNKTION : int c_funkt (int var1, char var2, bit var3 ) **/
/******************************************************************/
#pragma NOREGPARMS /* iu khin bin dch ny cng phi c khai bo khi
nh ngha */
int c_funkt (int var1, char var2, bit var3)
{
int ret_val ; /* bin cc b */
/* s dng tham s byte */
ret_val = var2 + var1 ;
/* s dng tham s bt */
P1^1 = var3 ;
return (ret_val) ; /* tr tr v */
}
Gi hm hp ng v C trong cu hnh COMPACT
Vi cu hnh b nh kiu COMPACT, cc tham s chuyn giao v cc bin cc b
c t vo vng nh pdata. Hm hp ng c th truy cp cc bin bng lnh MOVX
@Ri. Hm hp ng c gi trong file ngun C nh sau :
#pragma COMPACT
#pragma NOREGPARMS /* khng chuyn tham s trong thanh ghi */
int asm_funkt (int var1, char var2, bit bvar1) ;
void main (void)
{
int var1, ret_val ;
char var2 ;
bit bvar1 ;
/**/
ret_val = asm_funkt (var1, var2, bvar1)
/*.*/
}
Cch nh ngha hm trong file ngun hp ng nh sau :
NAME

ASM_MODUL1

; nh ngha tn modul

?PR?asm_funkt?ASM_MODUL1 segment CODE


chng trnh

; nh ngha segment cho m

?DT?asm_funkt?ASM_MODUL1 segment XDATA OVERLAYABLE ;


segment cho tham s byte v cc bin byte cc b

nh

ngha

?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE


segment cho tham s bit v cc bin bit cc b

nh

ngha

56

Public asm_funkt, ?asm_funkt?BYTE, ?asm_funkt?BIT


cng cho chng trnh gi C

; Khai bo k hiu cng

;**********************************************************************
;** FUNKTION : int asm_funkt (int var1, char var2, bit bvar1) **
;**********************************************************************
rseg
?PD?asm_funkt?ASM_MODUL1
; Segment cc bin byte cc b
?asm_funkt?BYTE :
var1 : ds
2
; Tham s int var1
var2 : ds
1
; Tham s char var2
lok_var : ds
2
; Bin cc b int lok_var
rseg
?BI?asm_funkt?ASM_MODUL1
; Segment cc bin bit cc b
?asm_funkt?BIT :
bvar1 :
dbit
1
; Tham s bit bvar1
lok_bvar :
dbit
1
; Bin bt cc b bit lok_bvar
rseg
?PR?asm_funkt?ASM_MODUL1
asm_funkt
asm_funkt :
; C th
MOVX @Ri
mov
movx
mov
mov
movx
add
mov
movx
dec
dec
movx
addc
movx

; Bt u phn chng trnh ca

truy cp cc bin v tham s theo cc tn var1, var2 v lok_var bng lnh


R0, #LOW var2
A, @R0
; lok_var = var1 + var2
B, A
R0, #LOW var1 + 1
A, @R0
A, B
R1, #LOW lok_var + 1
@R1, A
R0
R1
A, @R0
A, #0
@R1, A

; Truy cp tham s v cc bin bt theo tn bvar1 v lok_bvar


mov
C, bvar1
mov
P1.1, C
; P1.1 = bvar1
; Chuyn tr tr v, ni dung ca bin lok_var
mov
R0, #LOW lok_var
movx
A, @R0
mov
R6, A
inc
R0
movx
A, @R0
mov
R7, A
ret
; Thot khi hm hp ng
Mt hm C cng c th c gi t chng trnh hp ng. Vic gi hm C phi
c nh ngha trong file hp ng
NAME

ASM_MODUL1

; nh ngha tn modul
57

extrn CODE (c_funkt)


; Khai bo hm C bn ngoi
extrn XDATA (?c-funkt?BYTE) ; Khai bo tham s byte bn ngoi
extrn BIT (?c_funkt?BIT)
; Khai bo tham s bt bn ngoi
?PR?asm_funkt?ASM_MODUL1 segment CODE

; nh ngha on m chng

trnh
?PD?asm_funkt?ASM_MODUL1 segment XDATA OVERLAYABLE IPAGE ;
ngha on tham s byte v bin byte cc b
?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE
;
ngha on tham s bit v bin bit cc b
;*********************************************
;** FUNKTION : void asm_funkt (void) **
;*********************************************
rseg
?PD?asm_funkt?ASM_MODUL1
lok_var1 :
lok_var2 :
lok_var3 :
rseg

ds
ds
ds

2
1
2

dbit

c, lok_bvar
?c_funkt?BIT+0, c

lcall
c_funkt
mov
A, R6
mov
R0, #LOW lok_var3
movx
@R0, A
inc
R0
mov
A, R7
movx
@R0, A
;.

; on bin byte cc b

; on bin bit cc b

; Bin bt cc b bit lok_bvar

rseg
?PR?asm_funkt?ASM_MODUL1
asm_funkt
asm_funkt :
mov
R0, #LOW lok_var1
movx
A, @R0
mov
?c_funkt?BYTE+0, A ; int var1
inc
R0
movx
A, @R0
mov
?c_funkt?BYTE+1, A
inc
R0
movx
A, @R0
mov
?c_funkt?BYTE+2, A ; char var2
mov
mov

Bt

; bit var3
; Gi hm c_funkt
; Tr tr v trong lok_var3

Cch nh ngha hm c_funkt trong file ngun C


#pragma COMPACT
#pragma NOREGPARMS /* truyn tham s trong khi hm */
int c_funkt (int var1, char var2, bit var3) /* khai bo hm */
58

nh

; Bin cc b int lok_var1


; Bin cc b char lok_var2
; Bin cc b int lok_var3

?BI?asm_funkt?ASM_MODUL1

lok_bvar :

nh

on

chng

trnh

/*..*/
/*****************************************************************/
/** FUNKTION : int c_funkt (int var1, char var2, bit var3) **/
/******************************************************************/
#pragma NOREGPARMS /* iu khin bin dch ny cng c khai bo khi nh
ngha */
int c_funkt (int var1, char var2, bit var3)
{
int ret_val ;
/* p dng bin byte */
ret_val = var1 + var2 ;
/* p dng bin bt */
P1^1 = var3 ;
return (ret_val) ; /* tr tr v */
}
Gi hm hp ng v C trong cu hnh LARGE
Trong cu hnh b nh kiu LARGE, cc tham s truyn v cc bin cc b c
t vo vng nh XDATA. Hm hp ng c th truy cp cc bin ny bng lnh MOVX
@DPTR. Hm hp ng c gi trong file ngun C nh sau :
#pragma LARGE
#pragma NOREGPARMS /* khng truyn tham s trong thanh ghi */
int asm_funkt (int var1, char var2, bit bvar1) ;
void main (void)
{
int var1, ret_val ;
char var2 ;
bit bvar1 ;
/*..*/
ret_val = asm_funkt (var1, var2, bvar1) ;
/*.*/
}
Cch nh ngha hm trong file ngun hp ng
NAME

ASM_MODUL1

; nh ngha tn modul

?PR?asm_funkt?ASM_MODUL1 segment CODE

; nh ngha on m chng

trnh
?XD?asm_funkt?ASM_MODUL1 segment XDATA OVERLAYABLE ; nh ngha
on tham s byte v cc bin byte cc b
?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE
; nh ngha
on tham s bt v cc bin bt cc b
Public asm_funkt, ?asm_funkt?BYTE, ?asm_funkt?BIT
; Khai bo k hiu cng
cng cho chng trnh gi C
;******************************************************************
59

;** FUNKTION : asm_funkt (int var1, char var2, bit bvar1) **


;*******************************************************************
rseg ?XD?asm_funkt?ASM_MODUL1 ; on bin byte cc b
?asm_funkt?BYTE :
var1 : ds
2
; Tham s int var1
var2 : ds
1
; Tham s ch var2
lok_var : ds

; Bin cc b int lok_var

rseg ?BI?asm_funkt?ASM_MODUL1 ; on bin bt cc b


?asm_funkt?BIT :
bvar1 :
dbit
1
; Tham s bt bvar1
lok_bvar

dbit

; Bin bt cc b bit lok_bvar

rseg ?PR?asm_funkt?ASM_MODUL1 ; Bt u chng trnh asm_funkt


asm_funkt :
; Cc bin v thng s c truy cp theo tn var1, var2 v lok_var bng lnh
MOVX @DPTR
mov
movx
mov
mov
movx
add
mov
movx
mov
movx
addc
mov
movx

DPTR, #var2
A, @DPTR
; lok_var = var1 + var2
B, A
DPTR, #var1+1
A, @DPTR
A, B
DPTR, #lok_var+1
@DPTR, A
DPTR, #var1
A, @DPTR
A, #0
DPTR, #lok_var
@DPTR, A

; Cc bin v tham s bt c truy cp theo cc tn bvar1 v lok_bvar


mov
c, bvar1
mov
P1.1, c
; P1.1 = bvar1
; Tr tr v, ni dung ca bin lok_var
mov
DPTR, #lok_var
movx
A, @R0
mov
R6, A
inc
DPTR
movx
A, @DPTR
mov
R7, A
ret
; Thot khi hm hp ng
Hm C cng c th c gi t chng trnh hp ng. Vic gi hm C phi c
nh ngha trong file hp ng
NAME

ASM_MODUL1

; nh ngha tn modul

extrn CODE (c_funkt)


; Khai bo hm C bn ngoi
extrn XDATA (?c_funkt?BYTE) ; Khai bo tham s byte bn ngoi
extrn BIT (?c_funkt?BIT)
; Khai bo tham s bt bn ngoi
60

?PR?asm_funkt?ASM_MODUL1 segment CODE

; nh ngha on m chng

trnh
?XP?asm_funkt?ASM_MODUL1 segment XDATA OVERLAYABLE
ngha on tham s v cc bin cc b byte
?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE
ngha on tham s v cc bin cc b bt
;*********************************************
;** FUNKTION : void asm_funkt (void) **
;*********************************************
rseg ?XD?asm_funkt?ASM_MODUL1

; on bin byte cc b

lok_var1:
lok_var2:
lok_var3 :

; Bin cc b int lok_var1


; Bin cc b char lok_var2
; Bin cc b int lok_var3

ds
ds
ds

2
1
2

rseg ?BI?asm_funkt ?ASM_MODUL1

; on bin bt cc b

lok_bvar :

; Bin bt cc b bit lok_bvar

dbit

nh

nh

rseg ?PR?asm_funkt?ASM_MODUL1
; Bt u chng rnh asm_funkt
asm_funkt :
mov DPTR, #lok_var1
movx A, @DPTR
mov ?c_funkt?BYTE+0, A ; int var1
inc
DPTR
movx A, @DPTR
mov ?c_funkt?BYTE+1, A
inc
DPTR
movx A, @DPTR
mov ?c_funkt?BYTE+2, A ; char var2
mov
mov

c, lok_bvar
?c_funkt?BIT+0, c

; bit var3

lcall

c_funkt

; Gi hm c_funkt

mov A, R6
mov DPTR, #lok_var3
movx @DPTR, A
inc
DPTR
mov A, R7
movx @DPTR, A
;

; Tr tr v trong lok_var3

Cch nh ngha hm c_funkt trong file ngun C


#pragma LARGE
#pragma NOREGPARMS /* truy tham s trong khi hm */
int c_funkt (int var1, char var2, bit var3)
/**/
/*****************************************************************/
/** FUNKTION : int c_funkt (int var1, char var2, bit var3) **/
61

/*****************************************************************/
#pragma NOREGPARMS /* iu khin bin dch ny cng phi c khai bo khi
nh ngha */
int c_funkt (int var1, char var2, bit var3)
{
int ret_val ; /* bin cc b */
/* p dng cc bin byte */
ret_val = var1 + var2
/* p dng cc bin bt */
P1^1 = var3
return (ret_val) ; /* tr tr v */
}

12.4 Ti u ha chng trnh


ln v tc ca chng trnh C51 ph thuc rt nhiu vo vic p dng mt
cch ti u cc tnh nng ca vi iu khin 8051. Do , lp trnh vin cn phi ch n
cu trc ca vi iu khin :
L CPU 8 bt
D truy cp b nh d liu trong
Thi gian truy cp b nh d liu ngoi chm
C vng nh trong a ch bt
Khi nhn v chia 8 bt . Nn theo cc hng dn sau y tng hiu qu ca
chng trinh :
Cc bin c dng thng xuyn nn a vo vng data
Con tr cng nn c nh ngha l data
Ty theo kh nng nn dng con tr xc nh b nh v n to ra m trc tip.
Con tr tng qut dng cc hm th vin
Nn dng cc kiu d liu ngn. Cc php tnh char c th c thc hin trc
tip, trong khi i vi int, long hoc float phi c a vo cc hm th vin.
Kiu d liu BIT rt ph hp vi cc quyt nh Y/N
Nhng trng hp c th nn dng bin unsigned. V khi x l cc bin signed
chng trnh dch phi to ra mt m lnh ph
Cc bin mng nn t trong vng nh a ch gin tip (idata, pdata hoc xdata)
Cc vng v cc cu trc ln nn t trong vng xdata gim ti cho b nh
d liu ni
Nu c nn chuyn cc bin cc b thnh ton cc c th chng nhau khi
bt u qu trnh lin kt
Nn cu hnh b nh thch hp cho mi hm trnh lin kt c th tn dng ti
a b nh
Nn chn cc chui tham s ni tip khi gi hm sao cho nhiu tham s c th
c truyn bng thanh ghi

13. TRNH LIN KT


Nhim v ca trnh lin kt l to ra mt file i tng a ch tuyt i t nhiu file
i tng cho php ti nh v. Sau file ny s c dng cho chng trnh th hoc
my np chng trnh. Trnh lin kt c th c gi theo hai cch :
L51 input-list [to output-file] [control-list]
Hoc :

62

L51 @command-file
Input-list : L danh sch cc file nhp c phn cch nhau bi du phy. Phn
m rng thng l .OBJ, cc file ny cha cc modul ti nh v cn lin kt li
vi nhau to ra chng trnh a ch tuyt i.
Output-file : L tn ca file chng trnh a ch tuyt i, c th khng cn khai
bo ny khi tn ca file u tin trong input-list s c chn v khng c
phn m rng.
Control-list : Cha cc lnh v thng s ca dng lnh gi chng trnh lin kt
Command-file : L file c c t dng lnh nhp, lnh v thng s trong file
ny tng vi trong dng lnh gi
V d :
L51 PROG1
L51 PROG1, PROG2
L51 PROG1, PROG2 to PROGRAM. ABS
L51 PROG1, PROG2, PROG3 to PROGRAM. ABS RAMSIZE(256) CODE(100h)
L51 @LINK. MAK
LINK. MAK :
PROG1,
PROG2, PROG3
To PROGRAM. ABS
RAMSIZE(256) CODE(100h)

13.1 Lnh iu khin qu trnh nh v


Cc lnh ny to kh nng phn pht cc a ch tuyt i cho cc segment ti nh
v, sp xp cc segment theo th t v kim tra s b tr ca b nh d liu trong
RAMSIZE
Tham s RAMSIZE (gi tr) c nh ln b nh d liu trong tnh theo byte nh
trnh lin kt c th thch ng vi cc loi vi iu khin khc nhau trong h 8051. Gi
tr c th t 128 n 256 byte, mc nh l 128 byte
V d :
L51 TEST. OBJ RAMSIZE(256)
Thng s nh v BIT, DATA, IDATA, XDATA, CODE
Thng s ny cho php phn pht cc a ch b nh cho cc khi a ch ring ca
vi x l. Thng thng trnh lin kt t nh v cc modul. Nhng trong mt s trng hp
cn phi t trc a ch bt u. Dng tng qut ca thng s ny c ngha nh sau :
Thng s (start-address [segmentname (start-address)])
a ch ban u c khai bo c lin quan n tt c cc segment ti nh v c
trong vng nh. Thng s ny lm d dng cho vic khai bo a ch bt u ca mt vi
mch nh bn ngoi
Cc thng s c phm vi a ch nh sau :
BIT
00h 7Fh (a ch bt)
DATA
00h 7Fh
IDATA
00h 0FFh
XDATA
0000h 0FFFFh
CODE
0000h 0FFFFh

63

Vi mt ngoi l cho thng s BIT, tt c cc a ch bt c lin quan n a ch


byte. Cc a ch bt c khai bo vi thng s BIT
V d :
L51 MODUL1 CODE(100h)
M chng trnh c bt u ti a ch 100h
L51 MODUL2 XDATA (2000h INOUT(8000h))
B nh d liu ngoi bt u t a ch 2000h, modul INOUT bt u t a ch
8000h

13.2 K thut chng a ch ca trnh lin kt


Trnh dch C51 t ng nh du cc vng bin cc b l c php chng k c
cc bin trong cc hm hp ng. Do , cc on d liu v cc on chng trnh phi
c nh ngha theo ng quy c ca C51 (xem phn giao tip cc hm hp ng v
C). Trnh lin kt phn tch vic gi gia cc on m chng trnh (chun tham chiu)
c th thc hin vic chng hp l trong trng hp gi trc tip. Nhng nn ch
trong trng hp gi thng qua nhiu on m chng trnh cng nh i vi hm gin
tip c gi qua con tr, chng trnh lin kt khng th to ra chun tham chiu. i
vi nhng trng hp ny cn thit phi to chun tham chiu bng tay.
Vi thng s iu khin NOOVERLAY se gin on hon ton vic chng cc on
b nh
V d :
L51 BEISP1. OBJ, BEISP2. OBJ to BEISP NOOVERLAY
on d liu v on bt c chng nhau khi tt c cc iu kin sau y c
tha mn
Ch c php gi mt on m lnh t mt kiu chng trnh. Cc kiu
chng trnh l chng trnh chnh v chng trnh ngt
nh ngha on phi ph hp vi chun C51
Khng tn ti tham chiu gia cc on m ph thuc
Qu trnh phn tch chng nhau c iu khin bi thng s iu khin
OVERLAY. C nhiu loi khc nhau :
OVERLAY : T ng phn tch OVERLAY. Thng s ny l mc nh
OVERLAY (name ! cname [,]) hoc OVERLAY (name ! (cname1, cname2 [,])
[,]) : Cc chun tham chiu ph c nh ngha, k gi name cname
OVERLAY (name cname [,]) hoc OVERLAY (name (cname1, cname2
[,]) [,]) : G b chun tham chiu, sau phi lu vo ni an ton khng
gi name cname hoc khng c ghi ln cc tham s v cc bin
OVERLAY (*! Name) hoc OVERLAY (name !*) : hm name c ly ra t qu
trnh x l OVERLAY. Khng c lin quan n cc on khc hoc cc hm
khc
V d :
L51 BEISP1. OBJ, BEISP2. OBJ to BEISP OVERLAY (FUNK1 FUNK2)
G b tham chiu t FUNK1 n FUNK2. Chng c th c chng
L51 BEISP1. OBJ, BEISP2. OBJ to BEISP OVERLAY (FUNK1 (FUNK2, FUNK3))
Tham chiu t FUNK1 trn FUNK2 v FUNK3 c g b

64

L51 BEISP1. OBJ, BEISP2. OBJ to BEISP OVERLAY (FUNK1 (FUNK2, FUNK3),
FUNK1 ! (FUNK4, FUNK5))
Tham chiu t FUNK1 trn FUNK2 v FUNK3 c g b v to ra mt tham chiu
t FUNK1 trn FUNK4 v FUNK5
L51 BEISP1. OBJ BEISP2. OBJ to BEISP OVERLAY (FUNK1 !*)
FUNK1 c nhn t qu trnh x l OVERLAY

14. TRNH QUN L TH VIN


Trnh qun l th vin LIB51 c dng tp trung cc hm ring l vo chung
trong mt th vin. Mu ca cc hm c ghi vo cc file tiu (name.h). Khi mt hm
trong th vin c cn dng n th file tiu tng ng phi c gn trong file
ngun. Sau th vin s kt ni vi trnh lin kt ti nhng ni gn ny ca modul.
Trnh lin kt s t tm cc hm c dng c trong th vin
/****DATEI : myprog. C51 ****/
#include mylib.h /* file tiu ca th vin mylib */
void main (void)
{
int x, y, z ;
z = myfunct1 (x, y) ; /* gi mt hm t th vin mylib */
}
Sau trnh lin kt s c gi
L51 myprog. Obj, mylib. Lib
Trnh qun l th vin LIB51 c th c iu khin v tng tc bi lnh iu
khin trn dng lnh gi. Khi gi LIB51 khng c lnh iu khin th n s chuyn sang
ch tng tc v hon th k hiu *. By gi c th nhp vo tt c cc lnh iu
khin. Cc lnh sau y c th c dng :
Create FILENAME to th vin mi
LIB51 c mylib. Lib
Add FILENAME [(MODULNAME,), FILENAME,] to FILENAME : Nhp mt
hoc nhiu modul chng trnh vo th vin. Nu khng khai bo tn modul th
ton b ni dung ca file i tng s c nhp vo th vin
LIB51 a myfunkt1. obj, myfunkt2. obj (funkt1, funkt2) to mylib. Lib
List FILENAME [to listfile] [publics] : Hin th ni dung ca mt th vin. Nu khai
bo listfile th ni dung s c ghi vo file ny. Vi publics cc k hiuh public
s c hin th
REM Xut ra trn mn hnh
LIB51 l mylib.lib
REM xut ra trn my in
LIB51 l mylib.lib to LPT1 :

65

Delete FILENAME (MODULNAME,) : Xa mt hoc nhiu moul chng trnh


(MODULNAME) khi th vin (FILENAME). Tn modul phi c khai bo trong
du ngoc
LIB51 d mylib.lib (myfunkt1)
Nu mt hm c thay i th trc tin phi g b phin bn c ra khi th vin
trc khi nhp phin bn mi vo.
LIB51 d mylib.lib (myfunkt1)
LIB51 a myfunkt1.obj to mylib.lib
Help : Gi tr gip s dng LIB51
Exit : Chm dt tng tc vi LIB51
Tt c cc lnh c th c nhp tt bng k t u tin

66

BI 2
Vi iu khin AT90S8535

Tn bi:

M bi:

CIO 02 27 02

GII THIU
Bi ny trnh by v c tnh v cu trc ca h vi iu khin AVR thng qua vi
mch c th l AT90S8535. Ni dung bi thun ty l thuyt.

MC TIU THC HIN

Bit c cc tnh nng mi ca h AVR so vi h vi iu khin hoc l 8051


Hiu cu to, nguyn l hot ng cc khi chc nng tch hp trong AVR
Bit c s chn v tn hiu cc chn ca AT80S8535

NI DUNG CHNH
Ni dung bi hc tp trung v cc ch chnh nh sau:
Cu trc chung v AVR
c tnh ca AT90S8535
S khi cu to AT90S8535
T chc b nh
Cu to v hot ng ca b timer/counter
Cu to v hot ng ca b ADC
Cu to v hot ng ca b so snh analog

67

1. M U
AT90S8535 l b vi iu khin CMOS 8 bit tiu th t nng lng da trn kin trc
RISC AVR. Bng vic thc hin cc lnh mnh trong mt chu k xung nhp (a single clock
cycle), AT90S8535 t c tc x l d liu ln n 1 triu lnh/ giy tn s 1
MHz. Vi iu khin ny cn cho php ngi thit k h thng ti u ha mc tiu th
nng lng m vn m bo tc x l.
Phn ct li ca AVR (AVR core) kt hp tp lnh phong ph vi 32 thanh ghi lm
vic a nng. Tt c 32 thanh ghi u c ni trc tip vi khi ALU (Arithmetic Logic
Unit), cho php truy cp hai thanh ghi c lp bng mt lnh n l trong mt chu k xung
nhp. Kin trc t c tc x l nhanh gp 10 ln vi iu khin CISC thng thng.
Cc vi iu khin AT90S8535 c h tr bng tt c cc cng c lp trnh pht
trin h thng hin c nh trnh dch C, trnh dch Macro Assembler, trnh g ri/ m
phng v cc bn mch nh gi.
Cc c im ca AT90S8535 c tm tt nh sau:
AVR kin trc RISC c ch tiu cht lng cao v tiu th t nng lng.
118 lnh mnh, hu ht c thc hin trong 1 chu k xung nhp (clock).
32 thanh ghi a nng 8 bit.
Tc x l d liu 8 triu lnh/ giy tn s 8MHz.
B nh d liu v b nh chng trnh khng t mt d liu (nonvolatile).
B nh flash 8k byte lp trnh c ngay trong h thng, c th ghi/xa
c 1000 ln, giao din ni tip SPI lp trnh ngay trong h thng.
512 bytes EEPROM, c th ghi/x c 100.000 ln.
512 bytes SRAM ni (internal SRAM).
Lp trnh kha bo v phn mm.
Cc tnh nng ngoi vi (peripheral features).
B bin i ADC 8 knh, 10 bit.
UART ni tip lp trnh c.
Giao din SPI ch / t ni tip.
2 Timer/Counter 8 bit vi ch chia tn s v ch so snh.
1 Timer/ Counter 16 bit vi b chia tn s ring bit, ch so snh v
bt mu (capture).
B nh thi watchdog lp trnh c vi b dao ng trn chip.
B so snh tng t c sn trn chip.
Cc tnh nng iu khin c bit.
C mch power-on reset.
ng h thi gian thc (Real-time clock) vi b dao ng ring bit v
ch b m (counter mode).
Cc ngun ngt ngoi v trong.
C 3 ch ng: ngh (Idle), tit kim nng lng (Power save), v gim
nng lng (Power-down).
Mc tiu th nng lng 4 MHz, 3V, 20oC.
Hot ng: 6.4 mA.
Ch ngh: 1.9 mA.
Ch tit kim nng lng: < 1 A
Vo/Ra v cc hnh thc ng v
32 ng xut/ nhp c th lp trnh c.
PDIP: 40 chn; PLCC, TQFP, MLF: 44 chn.
in p hot ng.
Vcc: 4.0 V n 6.0 V i vi AT90S8535.
Vcc: 2.7 V n 6.0 V i vi AT90LS8535.
Phn loi tc x l.
0 n 8 MHz i vi AT90S8535.

68

0 n 4 MHz i vi AT90LS8535.

2. S KHI AT90S8535

Hnh 2.1 S khi AT90S8535

Vi iu khin AT90S8535 c nhng tnh nng sau: b nh flash c th lp trnh


c ngay trong h thng vi dung lng 8K byte, b nh EEPROM 512 byte, b nh
SRAM 512 byte, 32 ng vo/ ra a nng, 32 thanh ghi lm vic a nng, ng h thi

69

gian thc (Real-time clock), 3 timer/counter linh hot vi ch so snh, cc ngt bn


trong v ngoi, mt b UART ni tip lp trnh c, b ADC 8 knh 10 bit, b nh thi
watchdog lp trnh c vi b dao ng bn trong mt cng ni tip ISP v ba ch
tit kim nng lng la chn c bng phn mm. Ch Idle lm ngng hot ng
ca CPU trong khi b nh SRAM, cc b nh thi/ b m, cng ISP v h thng ngt
vn tip tc hot ng. Ch Power-down lu tr ni dung thanh ghi nhng gii phng
b dao ng, cm tt c cc chc nng khc trn chip cho n khi xut hin mt ngt k
tip hoc tn hiu reset phn cng. Trong ch power-save, b dao ng nh thi
(timer oscillator) tip tc chy, cho php ngi dng tip tc trong mt khong thi gian
no y (t trc) trong khi nhng phn cn li trong ch ng.
Vi iu khin AVR c cng ty Atmel ch to vi cng ngh b nh khng t mt
d liu( non-volatile), mt cao. B nh flash ISP trn chip cho php b nh chng
trnh c th c lp trnh ngay trn h thng thng qua giao din ni tip SPI hoc mt
b np chng trnh vo b nh khng t mt d liu thng thng ( a conventional
nonvolatile memory programmer). Bng cch kt hp mt CPU 8 bit c kin truc RISC vi
b nh flash lp trnh c trong h thng trn mt chip n l, AT90S8535 l l vi iu
khin mnh vi tnh linh hot cao, gi thnh hp l i vi nhiu ng dng iu khin
nhng (embedded control applications).

3. M T CC CHN RA
3.1 S chn

Hnh 2.1 S chn PDIP-40

3.2 Chc nng cc chn


VCC
GND

70

in p nui s (Digital Supply Voltage).


Masse s

Port A (PA0PA7)
Port A (cng A) l cng vo/ra hai hng 8 bit. Cc chn ca cng c cc in tr
ni ln ngun dng (pull up resistor) ( c chn cho mi bit ). Cc chn ra ca cng
A c th chu c dng in 20 mA i qua v trc tip iu khin Led hin th. Khi cc
chn PA0 n PA7 l cc ng vo v c t xung mc thp t bn ngoi, chng s l
ngun dng nu cc in tr ko ln c kch hot.
Port A cn ng vai tr l ng vo ca b chuyn i A/D (Analog to Digital
Converter).
Cc chn ca port A c t trng thi th 3 (khng cho php xut/ nhp d liu)
khi ang reset, hoc ngay c khi xung nhp khng hot ng.

Port B (PB0PB7)
Port B l cng vo/ra hai hng 8 bit c cc in tr ko ln ngun dng bn
trong. Cc chn ra ca cng B c th chu c dng in 20 mA i qua. Khi cc chn
ca cng B l cc ng vo v c t xung mc thp t bn ngoi, chng s l ngun
dng nu cc in tr ni ln ngun dng c kch hot. Cng B cng cung cp cc
chc nng ng vi cc tnh nng c bit ca AT90S8535 c trnh by bng sau:
BNG 2.1 Chc nng cc chn Port B
Chn
Cc chc nng chuyn i
PB0
T0 (Timer/Counter0 External Counter Input)
PB1
T1 (Timer/Counter1 External Counter input)
PB2
AIN0 (Analog Comparator Positive Input)
PB3
AIN1 (Analog Comparator Negative Input)
PB4
SS ( SPI Slave Select Input)
PB5
PB6
PB7

MOSI ( SPI Bus Master Output/ Slave Input)


MOSI ( SPI Bus Master Output/ Slave Input)
SCK (SPI Bus Serial Clock)

Cc chn ca port B c t trng thi th 3 (khng cho php xut/ nhp d


liu) khi ang reset, hoc ngay c khi xung nhp khng hot ng.
Port C (PC0PC7)
Port C l cng vo/ra hai hng 8 bit c cc in tr ni ln ngun dng bn
trong. Cc chn ra ca cng C c th chu c dng in 20 mA i qua. Khi cc chn
ca cng C l cc ng vo v c t xung mc thp t bn ngoi, chng s l ngun
dng nu cc in tr ko ln ngun dng c kch hot. Hai chn ca port C c th
c s dng nh b dao ng cho timer/counter2.
Cc chn ca port C c t trng thi th 3 (khng cho php xut/ nhp d
liu) khi ang reset, hoc ngay c khi xung nhp khng hot ng.
Port D (PD0PD7)
Cng D l cng vo/ ra hai hng 8 bit c cc in tr ni ln ngun dng bn
trong. Cc chn ra ca cng D c th chu c dng in 20 mA i qua. Khi cc chn
ca cng D l cc ng vo v c t xung mc thp t bn ngoi, chng s l ngun
dng nu cc in tr ni ln ngun dng c kch hot.
Cng D cung cp cc chc nng ng vi cc tnh nng c bit ca AT90S8535
nh trnh by bng sau:

71

BNG 2.2 Chc nng cc chn ca port D


Chn
Cc chc nng chuyn i
PD0
RXD (UART Input line)
PD1
TXD (UART Output line)
PD2
INT0 (External interrupt 0 input)
PD3
INT1 (External interrpupt 1 input)
PD4
OC1B (Timer/counter1 output compareB match output)
PD5
OC1A (Timer/counter1 output compareA match output)
PD6
ICP (Timer/counter1 input capture pin)
PD7
OC2 (Timer/counter2 output compare match output)
Cc chn ca port D c t trng thi th 3 (khng cho php xut/ nhp d
liu) khi ang reset, hoc ngay c khi xung nhp khng hot ng.
RESET : Ng vo t li. B vi iu khin s c t li khi chn ny mc thp
trong thi gian hn 50 ns hoc ngay c khi khng c tn hiu gi nhp. Cc xung ngn
hn khng to ra tn hiu t li.
XTAL 1: Li vo b khuch i o v li vo mch to xung nhp bn trong.
XTAL 2: Li ra b khuch i dao ng o (inverting oscillator amplifier).
AVCC : AVCC l chn cung cp in p cho port A v b ADC. Nu b ADC khng
c s dng th chn ny phi c ni ln VCC. Nu b ADC c s dng th chn
ny phi c ni vi VCC qua mch lc thng thp (low-pass filter).
AREF : AREF l ng vo in p chun dng cho b chuyn i ADC (Analog to
Digital Converter). b ADC hot ng, th chn ny phi c t mc in p
khong t 2V n AVCC .
AGND: AGND l chn ni t cho phn mch tng t (analog ground).

4. CU TRC AT90S8535
4.1 S lc
Khi nim tp thanh ghi (register file) truy nhp nhanh gm 32 thanh ghi lm vic a
nng 8 bit vi thi gian truy nhp trong mt chu k xung nhp (one single clock cycle).
iu ny c ngha l trong mt chu k xung nhp, ALU thc hin c mt php ton. Hai
ton hng c xut t tp thanh ghi, php ton c thc hin vi kt qu c lu tr
li vo tp thanh ghi trong mt chu k xung nhp. 6 trong s 32 thanh ghi ny c th lm 3
con tr a ch gin tip 16 bit nh a ch khng gian d liu (data space addressing)
v cho php tnh a ch hiu dng. Mt trong 3 con tr a ch cn c dng lm con tr
a ch cho chc nng tm kim bng hng s. Cc thanh ghi c cc chc nng b sung
ny l cc thanh ghi 16 bit X,Y v Z.

72

Hnh 2.3 Cu trc AT90S8535

Khi ALU h tr chc nng logic v s hc gia cc thanh ghi hoc gia mt hng
s vi mt thanh ghi. Cc php ton trn thanh ghi n (single register) cng c thc
hin trong khi ALU. Hnh trn th hin kin trc RISC AVR ca vi iu khin AT90S8535.
Thm vo s hot ng ca thanh ghi, nhng ch nh a ch b nh thng
thng c th c s dng trn tp thanh ghi (register file). V tp cc thanh ghi a
nng c t ti 32 a ch thp nht trong khng gian d liu (t $00 n $1F) nn
chng c th truy nhp nh nhng v tr trong b nh thng thng.
Khng gian b nh xut/ nhp cha 64 a ch cho cc chc nng ngoi vi ca CPU
cc thanh ghi iu khin, Timer/counter, b ADC v cc chc nng xut/ nhp khc. B
nh xut/ nhp c th truy nhp trc tip hoc theo v tr trong khng gian d liu ca cc
tp thanh ghi (register file), t a ch $20 n $5F.
AVR s dng kin trc Harvard vi b nh v bus ring bit cho chng trnh v
d liu. B nh chng trnh c hot ng vi mt ng ng 2 tng. Trong khi mt

73

lnh c thc hin th lnh tip theo c gi vo b nh chng trnh. iu ny cho


php cc lnh c thc hin trong mi chu k xung nhp (every clock cycle). B nh
chng trnh l b nh flash c th ti xung ngay trong h thng.
Ton b khng gian 4K a ch c truy nhp trc tip nh cc lnh nhy v lnh
gi. Hu ht cc lnh ca AVR c nh dng t n 16 bit. Mi a ch ca b nh
chng trnh cha mt lnh 16 bit hoc 32 bit.
Trong qu trnh gi ngt v chng trnh con (interrupts and subroutine) a ch tr
v ca b m lnh hay b m chng trnh c lu vo ngn xp. Ngn xp c
cp pht trong b nh d liu SRAM nn kch thc ca ngn xp ch b gii hn bi
dung lng v vi khng gian s dng ca b nh SRAM. Tt c chng trnh ca
ngi dng phi khi to con tr ngn xp SP (Stack Pointer) khi bt u chng trnh (
trc khi cc chng trnh con v cc ngt c thc thi). Con tr ngn xp SP 10 bit
c truy nhp c/vit trong khng gian vo/ra.
B nh d liu SRAM 512 byte c th c truy nhp d dng thng qua 5 ch
nh a ch c cung cp trong kin trc ca AVR.
Cc khng gian nh trong kin trc AVR c nh a ch theo kiu nh x b nh
tuyn tnh u.

4.2 T chc b nh

Hnh 2.4 T chc b nh

Khi ngt linh ng (flexible interrupt module) c cc thanh ghi iu khin trong
khng gian vo/ra v mt bit cho php ngt ton cc trong thanh ghi trng thi. Mi ngt
u c mt vc t ngt ring trong bng vc t ngt u b nh chng trnh. Cc
ngt c th t u tin tng ng vi v tr vc t ngt ca chng. a ch vc t ngt
cng thp th th t u tin cng cao.
B nh chng trnh (Program Memory).
AT90S8535 cha 8 K byte b nh flash lp trnh c ngay trong h thng, dng
lu chng trnh. B nh ny c th chu ng t nht 1000 ln ghi xa
.

74

B nh d liu SRAM (Static RAM Data Memory).


C nm ch nh a ch cho tt c b nh d liu : trc tip, gin tip vi
dch chuyn, gin tip, gin tip vi s gim trc ( cc thanh ghi a ch X,Y hoc Z b
gim), gin tip vi s tng sau (cc thanh ghi a ch X,Y hoc Z tng ln).
32 thanh ghi lm vic a nng, 64 thanh ghi xut/ nhp v 512 byte SRAM d liu
(internal data SRAM) ca AT90S8535 c th truy nhp c t tt c cc ch nh a
ch ny.

Hnh 2.5 Khng gian d liu SRAM

B nh d liu EEPROM (Electrically Erasable Programmable ReadOnly Memory).


AT90S8535 cha 512 byte b nh d liu EEPROM. N c t chc nh mt
khng gian d liu ring bit gm cc byte n (single byte) c th c c v ghi. B
nh EEPROM chu ng t nht 100.000 ln ghi xa.
Thanh ghi lm vic a nng (General Purpose Working Register).
Tt c cc lnh thc hin trn thanh ghi (register operating instructions) u c th
truy nhp trc tip n mi thanh ghi trong mt chu k my. Ngoi tr nm lnh s hc v
logic gia mt hng s vi mt thanh ghi: SBCI, SUBI, CPI, ANDI, ORI v lnh np d
liu hng s tc thi LDI. Cc lnh ny p dng cho cc thanh ghi a nng t R16 n
R31. Cc lnh SBC, SUB, CP, AND, OR v tt c cc lnh khc gia hai thanh ghi hoc
trn mt thanh ghi p dng cho ton b tp thanh ghi.
Trong cc ch nh a ch khc, nhng thanh ghi a ch (address registers) ny
ng vai tr lm dch c nh, tng v gim t ng.

75

Hnh 2.6 Thanh ghi a nng

Mi thanh ghi cn c gn mt a ch b nh d liu (data memory address) nh


x (mapping) trc tip vi 32 v tr u tin ca khng gian d liu dnh cho ngi s
dng. Mc d khng c cc c im vt l nh cc v tr trong b nh ca SRAM nhng
cch t chc b nh ny lm cho vic truy nhp cc thanh ghi rt linh ng khi cc thanh
ghi X, Y, Z c th c dng nh s cc thanh ghi trong tp thanh ghi a nng.
Cc thanh ghi t R26 n R31 c mt s chc nng b sung. Nhng thanh ghi ny
l nhng con tr a ch (address pointer) nh a ch gin tip ca khng gian d liu.
Ba thanh ghi a ch gin tip X, Y v Z c nh ngha nh sau:

Hnh 2.7 Ba thanh ghi X, Y, Z

B nh xut/ nhp ( I/O memory).


Tt c cc a ch xut/ nhp ngoi vi c t trong khng gian xut/ nhp (I/O
space). Cc v tr xut/ nhp c truy nhp bi lnh IN v OUT chuyn i d liu gia
32 thanh ghi a nng v khng gian xut nhp. Bng cch s dng cc lnh SBI v CBI
c th truy cp bit trc tip n cc thanh ghi c a ch t $00 n $1F. Trong nhng
thanh ghi ny, gi tr ca tng bit n c th c kim tra bng cch s dng lnh SIBS
v SBIC. Khi s dng lnh IN, OUT, a ch xut/ nhp $00 n $3F phi c s dng.
Khi nh a ch thanh ghi nh SRAM, $20 phi c thm vo nhng a ch ny.

4.3 Hot ng ca Timer/Counter


AT90S8535 cung cp ba b Timer/ Counter a nng gm hai b Timer/ Counter 8
bit v mt b Timer/ Counter 16 bit. Timer/ Counter2 c th c kch bi b dao ng
ngoi (external oscillator). B dao ng ngoi ny c s dng ti u nht vi thch
anh 32.768 kHz, n cho php Timer/ Counter2 hot ng nh mt ng h thi gian thc
76

( Real-time clock). Timer/ Counter0 v Timer/ Counter1 c phn chia tn s ring t b


chia tn s 10 bit. Timer/ Counter2 c b chia tn s ngay trong n. Nhng Timer/
Counter ny c s dng nh mt b nh thi khi c tn hiu gi nhp bn trong, hoc
c s dng nh mt b m khi c s kt ni vi xung kch ca mch m bn ngoi.
Sau y l cc s khi ca Timer/ Counter0, Timer/ Counter1, Timer/ Counter2:

Hnh 2.8 S khi timer/counter 0

Hnh 2.9 S khi timer/counter 1

77

Hnh 2.10 S khi timer/counter 2

4.4 B chuyn i ADC (Analog to Digital Converter)


c trng ca AT90S8535 l c b ADC. B ADC c ni vi b dn knh Analog
8 knh n cho php mi chn ca port A c s dng nh l ng vo ca b ADC. B
ADC cha mt mch khuch i v ly mu, n bo m in p ng vo ca b ADC
c gi mt hng s trong sut qu trnh chuyn i.

78

Hnh 2.11 S khi b ADC

B ADC c 2 chn cp ngun analog ring bit l AVCC v AGND. AGND phi
c ni n GND v in p AVcc phi khng khc nhiu hn 0.3V so vi Vcc.
in p tham chiu bn ngoi (external reference voltage) phi c t vo chn
AREF. in p ny phi khong t 2V-Avcc.

4.5 B so snh tng t ( analog comparator)


B so snh tng t so snh ga tr in p ng vo dng PB2(AIN0) vi ng
vo m PB3 (AIN1). Khi in p ng vo PB2 cao hn in p t vo chn PB3 th
ng ra ca b so snh tng t c t ln mc 1. Ng ra ny c th c s dng
cho b Timer/Counter1 kch hoc xa ngt b so snh tng t.

Hnh 2.12 B so snh analog

79

BI 3
Tn bi

Vi iu khin PIC16F8x

M bi

CIO 02 27 03

GII THIU
Bi ny trnh by v c tnh v cu trc ca h vi iu khin ca cng tyMicrrochip
thng qua h vi mch thng dng l PIC16F8x. Ni dung bi gm c l thuyt v thc
hnh nh cc phn mm bin dch Assembler (MPASM) v C (MPLAB C17) kt hp vi
cc board m phng phn cng

MC TIU THC HIN

Bit c cc tnh nng ca h PIC dng ROM v flash ROM


Hiu cu to, nguyn l hot ng cc khi chc nng tch hp trong PIC16F8x
Bit c s chn v tn hiu cc chn ca PIC16F8x
Vit c chng trnh ng dng

NI DUNG CHNH
Ni dung bi hc tp trung v cc ch chnh nh sau:
Cu trc chung v h PIC
c tnh chung ca PIC16CRxx v PIC16F8x
S khi cu to h PIC16F8x
T chc b nh
Cu to v hot ng ca b timer/counter
T chc v cch truy cp b nh d liu EEPROM
Cu to v t chc ngt
B nh thi canh chng
Cc phng php reset
Tp lnh h PIC16F8x

80

1. M T CHUNG
PIC16F8x l mt nhm trong ho vi iu khin CMOS 8 bt PIC16Cxx gi r, hiu
nng cao, ch tnh ton phn. Nhm ny bao gm cc thit b sau
PIC16F83
PIC16F84
PIC16CR83
PIC16CR84
Tt c cc vi iu khin h PIC u c cu trc RISC ci tin. cc thit b 16F8x
c tng cng cc c tnh ch yu, ngn xp c lng su 8 cp v nhiu ngun
tn hiu ngt trong cng nh ngoi. Bus m lnh v d liu ring bit theo cu trc
Harvard cho php mt lnh 16 bt tch bit vi bus d liu 8 bt. ng ng lnh hai tng
cho php tt c cc lnh c thc hin ch trong mt chu k ngoi tr cc lbh r nhnh
(cc lnh ny cn n hai chu k) tng cng c 35 lnh kh thi (tp lnh rt gn). Thm
vo l mt tp hp cc thanh ghi c s dng nhm t mc thc thi cao.
Cc vi iu khin PIC16F8x in hnh t mc nn m lnh 2:1 v tc tng 4:1
(ti 20 MHz) so vi cc vi iu khin 8 bt khc cng loi.
PIC16F8x c n 68 byte RAM, 64 byte b nh d liu EEPROM v 13 chn I/O v mt
b timer/counter
H PIC16Cxx c nhng tnh nng c bit gim thit b ngoi, h gi thnh, tng
tin cy ca h thng v gim cng sut tiu th. C bn ty chn dao ng : Dao ng
RC n cc cung cp gii php r tin, dao ng LP ti thiu ha cng sut tiu th, XT
l mt thch anh chun v HS i vi cc thch anh tc cao. Ch ng (h ngun)
cho php tit kim nng lng. Ngi dng c th nh thc thit b t ch ny bng
cc ngt trong v ngoi v reset.
Mt b nh thi watchdog c tin cy cao, b nh thi ny c mch dao ng
RC ring trn chip cung cp kh nng treo my
Cc thit b vi b nh chng trnh flash cho php ng gi thit b ging nhau
cho vic ly mu v sn xut. Vi kh nng lp trnh trong h thng cho php cp nht
chng trnh ngay trong ng dng m khng cn phi tho ri thit b. iu ny rt hu
dng cho vic pht trin nhiu ng dng m vic tip cn thit b khng d dng nhng
li cn thit phi cp nht m lnh v cng rt c li cho cc ng dng t xa cn cp
nht m lnh VD thng tin v tc .
Bng 3.1 lit k cc tnh nng ca h PIC16F8x v mt s khi n gin c
trnh by trong hnh 3.1
PIC16F8x rt thch hp trong cc lnh vc ng dng t ng tc cao, h thng
iu khin ng c cho n cc cm bin t xa cng sut thp, kha in t, thit b bo
mt v card thng minh. Cng ngh Flash/EEPROM cho php kh nng ty bin chng
trnh ng dng theo khch hng (m pht, tc ng c, tn s nhn, m bp mt)
rt nhanh v thun tin
Kch thc ng gi nh gn thch hp vi tt c cc ng dng c khng gian hn
ch. Gi thnh r, cng sut thp, hiu nng cao v kh nng I/O linh ng lm cho
PIC16F8x rt linh hot ngay c nhng ni trc y khng dng vi iu khin nh :
nh thi, so sanh, PWM v cc ng dng ng x l.
c tnh lp trnh trong h thng ni tip (thng qua hai chn) to nn tnh linh hot
ty bin sn phm sau khi lp rp v kim tra hon tt. Tnh nng ny c th c dng
sn xut sn phm, cha d liu nh chun hoc lp trnh thit b vi phn do hin
hnh trc khi phn phi.

1.1 Kh nng tng thch


Vi cc ngi dng quen thuc vi h PIC16C5x s thy rng y l mt phin
bn nng cp cu trc ca h PIC16C5x. M lnh c vit cho PIC16C5x s d dng
c thc hin bi PIC16F8x.

81

1.2 Cng c h tr pht trin


H vi iu khin PIC16Cxx bi mt trnh dch hp ng y tnh nng, mt phn
mm m phng, mt phn cng th nghim trong h thng, mt my np gi r v y
tnh nng. Mt trnh dch C v cng cn nhiu cng c h tr logic m.
ng h
B nh

Ngoi vi
c tnh

Tn s (MHz)
B
nh
chng trnh
flash
B
nh
chng trnh
EEPROM
B
nh
chng trnh
ROM
B nh d
liu (bytes)
B nh d
liu EEPROM
(bytes)
Timer
Ngun ngt
Chn I/O
in p (V)
Dng v

PIC16F83
10
512

PIC16CR83
10
-

PIC16F84
10
1K

PIC16CR84
10
-

512

1K

36

36

68

68

64

64

64

64

TMR0
4
13
2.0 6.0
18
pins
DIP, SOIC

TMR0
4
13
2.0 6.0
18 pins DIP,
SOIC

TMR0
4
13
2.0 6.0
18
pins
DIP, SOIC

TMR0
4
13
2.0 6.0
18 pins DIP,
SOIC

Bng 1.1 H PIC16F8x

2. CC LOI 16F8x
Ty thuc vo ng dng v yu cu sn xut, ty chn thit b tng ng c th c
chn da trn cc thng tin phn ny.
C 4 chng loi thit b c ch ra trong s hiu ca thit b.
1.
F nh PIC16F84, y l cc thit b c b nh chng trnh flash v hot
ng trong di in p chun.
2.
LF nh PIC16LF84, cc thit b ny c b nh chng trnh flash v hot
ng trn di in p m rng
3.
CR nh PIC16CR83, cc thit b ny c b nh chng trnh loi ROM v
hot ng trong di in p chun
4.
LCR nh PIC16LCR83, l cc thit b c b nh chng trnh ROM v
hot ng trn b nh m rng
Khi cp n bn b nh v cc tnh nng cu trc khc, cc k hiu F v CR cng
c dng m ch LF v LCR.

2.1 Cc thit b flash


Cc thit b ny c cung cp di dng v plastic gi r mc d chng c th
xa v lp trnh li. Vic ny cho php dng mt thit b ging nhau pht trin mu v
cng nh sn xut cc chng trnh mu
Mt u im na ca phin bn flash xa bng in l chng c th c xa v np
chng trnh li trong h thng hoc bng my np ri t ngoi

2.2 Cc thit b QTP


Cng ty microchip cung cp mt dch v lp trnh QTP (quic-turnaround-production)
cho cc yu cu t hng sn xut cng nghip. Dch v ny gip ngi dng c th

82

khng chn khng lp trnh mt s lng ln thit b m m lnh trong chng c n


nh. Cc thit b ny c tt c cc v tr l loi flash v cc ty chn cu hnh c lp
trnh bi nh sn xut. Cc th tc kim mu v m lnh c p dng trc khi xut
xng.

2.3 Cc thit b SQTP


Hng microchip cung cp mt dch v lp trnh n l. qua mt vi v tr trong
thit b c xc nh bi ngi dng c lp trnh theo cc s hiu sn xut khc
nhau. Cc s hiu sn xut c th l ngu nhin hoc theo th t.
Kh nng lp trnh ni tip cho php mi thit b c mt s duy nht v c dng lm
m nhp, mt khu hoc s nhn dng

2.4 Cc thit b ROM


Trong s thit b ca microchip c mt thit b tng ng c b nh chng trnh l ROM,
cc thit b ny c gi r hn loi lp trnh theo ngi dng truyn thng (EPROM v
EEPROM)
Cc thit b ROM PIC16CR8x khng cho bit thng tin sn xut trong vng b nh
chng trnh. Ngi dng c th np cc thng tin ny trong vng EEPOM d liu

3. S LC V CU TRC
H PIC16Cxx hiu nng cao c xp vo loi vi x l RISC thng dng, h ny p
dng cu trc Harvard c b nh chng trnh v b nh d liu c truy cp ring, cc
thit b nh th c mt bus b nh chng trnh v mt bus b nh d liu, iu ny lm
ci thin bng thng so vi cu trc Neumann truyn thng chng trnh v d liu
u c ly t cng mt b nh (truy cp trn cng mt bus). Do b nh chng trnh
v d liu ring bit cn cho php di cc lnh khc vi di d liu 8 bt. M lnh
ca PIC16Cxx c di l 14 bt, ton b bus b nh chng trnh 14 bt nhn lnh 14
bt ch trong mt chu k. Mt ng ng hai tng gi chng cc lnh c vo vi cc lnh
ang thc hin (v d 3.1). Do , tt c cc lnh c thc hin trong mt chu k ngoi
tr cc lnh r nhnh chng trnh.
PIC16F83 v PIC16CR83 a ch ha 512 x 14 b nh chng trnh, PIC16F84 v
PIC16CR84 a ch ha 1 K x 14 b nh chng trnh. Tt c c b nh chng trnh l
vng nh bn trong.
H PIC16Cxx c th nh a ch trc tip cc dy thanh ghi v b nh d liu ca
chng. Tt c cc thanh ghi chc nng c bit bao gm c b m chng trnh u
c nh x trong vng nh d liu. Mt tp lnh trc giao (i xng) gip n c kh
nng thc hin mi thao tc trn mi thanh ghi bng cch nh a ch bt k, dn n kt
qu l chng trnh n gin v hiu qu. Thm vo qu trnh hc cng gim mt
cch ng k.
Cc thit b PIC16Cxx gm mt khi ALU 8 bt v cc thanh ghi hot ng. Khi
ALU l mt n v s hc cng dng chung. N thc hin cc php tnh s hc v logic
gia d liu trong thanh ghi ang hot ng vi dy thanh ghi bt k.
ALU c ln 8 bt c kh nng : Cng, tr, dch chuyn v cc php ton logic.
Tr khi c lu , nu khng th cc php tnh s hc u da trn c s s b bc hai.
i vi cc lnh hai ton hng : Mt ton hng l thanh ghi hot ng v ton hng khc
l mt thanh ghi dy hoc mt hng s tc thi. i vi cc lnh mt ton hng, ton
hng l thanh ghi hot ng hoc mt thanh ghi dy.
Thanh ghi hot ng l mt thanh ghi 8 bt c dng cho khi ALU, thanh ghi ny
khng c a ch.
Ty theo lnh c thc hin, ALU c th nh hng n gi tr ca cc bt : Carry
(C), Digit Carry (DC), v Zero (Z) trong thanh ghi trng thi. Cc bt C v DC c chc
nng ln lt nh l bt ra borrow v digit borrow trong php tr
S khi ca PIC16F8x c trnh by trong hnh 3.1 vi cc chn tng ng
c m t trong bng 3.1

83

Hnh 3.1 So khi PIC16F8x


Tn chn

S
DIP
16
15

S
SOIC
16
15

Kiu
I/O/P
I
O

Kiu m

MCLR

I/P

ST

RA0
RA1
RA2
RA3
RA4/T0CK1

17
18
1
2
3

17
18
1
2
3

I/O
I/O
I/O
I/O
I/O

TTL
TTL
TTL
TTL
ST

RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
VSS
VCC

6
7
8
9
10
11
12
13
5
14

6
7
8
9
10
11
12
13
5
14

I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
P
P

TTL/ST
TTL
TTL
TTL
TTL
TTL
TTL/ST 3
TTL/ST 3
-

OSC1/CLKIN
OSC2/CLKOUT

ST/CMOS
-

M t
1

Ng vo thch anh hoc dao ng t bn ngoi


Ng ra thch anh, ni n thch anh hoc mch
cng hng trong ch dao ng thch anh.
Trong ch RC, tn s ti y bng OSC1 v
biu th tc chu k lnh
Ng vo reset tch cc mc thp/ng vo in p
lp trnh
Port A l mt port I/O hai chiu

Ng vo TMR0 ca timer/counter, ng ra l loi


cc thot h
Port B l mt port I/O hai chiu, port B c th
c lp trnh bng phn mm cho tt c cc ng
vo ko ln
C th dc dng lm ng vo ngt ngoi

Thay i vi ngt
Thay i vi ngt
Thay i vi ngt, ng h np ni tip
Thay i vi ngt, d liu np ni tip
GND
Ngun nui

Bng 3.1 M t chc nng cc chn PIC16F8x3.1 th thi gian/Chu k lnh


1

L ng vo Smith trigger khi hot ng vi dao ng RC, cc trng hp khc l ng vo CMOS


L ng vo Smith trigger khi c cu hnh l ngt ngoi
3
L ng vo Smth trigger ch np ni tip
2

84

Ng vo ng h (t OSC1) c chia 4 bn trong to ra bn xung vung lch


nhau Q1, Q2, Q3 v Q4. B m chng trnh (PC) c tng bi xung Q1, lnh cn
thc hin c c t b nh chng trnh v cht vo thanh ghi lnh trong Q4. Lnh
c gii m v thc hin trong khong sau Q1 n Q4. Cc xung ng h v tin trnh
thc hin lnh c ch trong hnh 3.2
Thc hin lnh/ng ng
Mt chu k lnh bao gm bn chu k Q (Q1, Q2, Q3 v Q4), Thao tc nhp v thc
hin lnh theo nguyn tc ng ng. Thao tc c lnh chim mt chu k lnh trong khi
gii m v thc hin lnh chim mt chu k lnh khc. Tuy nhin, do hiu ng ng
ng, mi lnh c thc hin trong mt chu k. Nu mt lnh no lm cho b m
chng trnh thay i VD lnh goto, th phi cn hai chu k hon tt lnh ny (VD 3.1)
Chu k c lnh bt u qua vic tng b m chng trnh trong Q1. Trong chu k
thc hin, ln c c cht vo thanh ghi lnh trong chu k Q1. Lnh ny sau
c gii m v thc hin trong khong thi gian Q2, Q3 v Q4. B nh d liu c
c trong khong thi gian Q2 (c ton hng) v c ghi trong khong thi gian Q4
(ghi vo ch)

Hnh 3.2 Chu k lnh

Tt c cc lnh l lnh 1 chu k tr cc lnh r nhnh v phi ly khi ng ng lnh


c vo trong khi c lnh khc v thc hin n
V d 3.1 Thc hin lnh theo ng ng

4. T CHC B NH
C h+ai khi nh trong PIC16F8x l b nh chng trnh v b nh d liu. Mi
khi c bus ring do vic truy cp n mi khi c th xy ra trong cng chu k dao
ng.
Hn na, b nh d liu c th phn ra thnh vng RAM cng dng chung v cc
thanh ghi chc nng c bit (SFRs). Hot ng ca cc SFR l trng tm m t trong
phn ny. Cc SFR c dng iu khin thit b ngoi vi v c trnh by theo tng
khi ngoi vi tng ng.
Vng nh d liu cng bao gm vng d liu EEPROM, vng nh ny khng c
nh x trc tip trong vng nh d liu m ch c nh x gin tip. C ngha l mt

85

con tr a ch gin tip s xc nh a ch vng nh EEPROM cho cc yu cu c/vit.


64 byte d liu EEPROM c a ch trong khong t 0h 3Fh.

4.1 T chc b nh chng trnh


H PIC16Fxx c mt b m chng trnh 13 bt c kh nng nh a ch khng
gian nh chng trnh 8 K x 14. i vi PIC16F83 v PIC16CR83, khng gian a ch u
tin 512 x 14 (0000h 01FFh) l a ch vt l (hnh 4.1). i vi PIC16F84 v
PIC16CR84, khng gian u tin 1 K x 14 (0000h 03FFh) l a ch vt l (hnh 4.2).
Vic truy cp mt v tr trn vng a ch vt l s gy ra mt s trng lp. V d : i vi
16F84 cc v tr 20h, 420h, 820h, C20h, 1020h, 1420h, 1820h v 1C20h s c cng m
Vect reset ti 0000h v vect ngt ti 0004h

Hnh 4.1 Bn b nh
chng trnh v ngn xp
PIC16F83/CR83

4.2 T chc b nh d liu


B nh d liu c chia thnh hai vng. Th nht l vng cc thanh ghi c bit
v th hai l vng cc thanh ghi cng dng chung GPR (general purpose registers), cc
thanh ghi SFR iu khin hot ng ca thit b.
B nh d liu c chia thnh nhiu dy cho c hai vng SFR v GPR. Cc dy
GPR ln hn 116 byte RAM cng dng chung, dy SFR l cc thanh ghi iu khin ngoi
vi. S chia dy cn cho vic s dng cc bt iu khin cho vic chn dy. Cc bt iu
khin ny nm trong thanh ghi trng thi. Hnh 4.1 v hnh 4.2 trnh by bn t chc
b nh d liu.
Cc lnh MOVWF v MOVF chuyn cc gi tr t thanh ghi hot ng (Working
register) n mt v tr bt k trong dy thanh ghi v ngc li.
Ton b b nh d liu c th c truy cp hoc trc tip bng a ch tuyt i
ca mi dy thnh ghi hoc gin tip thng qua thanh ghi chn dy FSR (file select
register) a ch gin tip s dng gi tr cc bt RP1:RP0 truy cp vo cc vng phn
gii ca b nh d liu.
B nh d liu c phn thnh hai dy trong cha cc thanh ghi cng dng
chung v cc thanh ghi chc nng c bit, dy 0 c chn bng cch xa bt RP0
(STATUS <5>), dy 1 c chn bng cch t 1 cho bt RP0. Mi dy tri di n 7Fh
(128 byte). 12 v tr u tin ca mi dy c dnh cho cc thanh ghi chc nng c bit
phn cn li l cc thanh ghi cng dng chung l phn RAM tnh

86

Hnh 4.2 Bn b nh chng


trnh v ngn xp PIC16F84/CR84

4.2.1 Dy thanh ghi cng dng chung


Tt c cc thit b u c mt s vng cc thanh ghi cng dng chung. Mi thanh
ghi GPR c di 8 bt v c truy cp hoc trc tip hoc gin tip thng qua FSR
(mc 4.5).
Cc a ch GPR trong dy 1 c nh x vo cc a ch trong dy 0 VD: nh a
ch 0Ch hoc 8Ch s truy cp cng mt GPR.
4.2.2 Cc thanh ghi chc nng c bit
Cc thanh ghi chc nng c bit (hnh 4.1, 4.2 v bng 4.1) c dng bi CPU
v cc chc nng ngoi vi iu khin hot ng thit b, cc thanh ghi ny l RAM
tnh.
Cc thanh ghi c bit c th c chia thnh hai nhm : Trung tm v ngoi vi.
Chng thch hp vi cc chc nng trung tm c m r trong phn ny, nhm cn li
lin quan n hot ng ca cc tnh nng ngoi vi

87

Hnh 4.1 Bn dy thanh ghi 16F83/CR83

a
ch

Bt 6

Bt 5

Hnh 4.2 Bn dy thanh ghi 16F84/CR84

Tn

Bt7

Bt 4

Bt 3

Bt 2

00h

INDF

inh a ch b nh bng FSR (khng phi thanh ghi vt l)

01h

TMR0

ng h thi gian thc 8 bt / b m

02h

PCL

8 bt thp ca b m chng trnh (PC)

03h

STATUS

04h

FSR

Con tr 0 nh a ch gin tip b nh d liu

05h

Port A

RA4/T0CK1

06h

Port B

RB7

RB6

RB5

RB4

Bt 1

Bt 0

Gi tr
khi
power
on
rest

Cc
trng
hp
reset
khc
1
( )

Dy 0

07h

IRP

RP1

RP0

T0

Khng dng, c gi tr 0 khi c

08h

EEDATA

Thanh ghi d liu EEPROM

09h

EEADR

Thanh ghi a ch EEPROM

1
2

Reset ngoi bi MCLR v reset do b nh thi watchdog


Cc bt trng thi T0 v PD khng b nh hng bi MCLR

88

DC

RA3

RA2

RA1

RA0

RB3

RB2

RB1

RB0/INT

PD

---- --xxxx
xxxx
0000
0000
0001
1xxx
xxxx
xxxx
---x
xxxx
xxxx
xxxx
---- --xxxx
xxxx
xxxx

---- ---uuuu
uuuu
0000
0000
000q
quuu
uuuu
uuuu
---u
uuuu
uuuu
uuuu
---- ---uuuu
uuuu
uuuu

0Ah

PCLATH

B m 5 bt cao ca PC

0bh

INTCON

GIE

EEIE

T0IE

INTE

80h

INDF

Dng ni dung FSR xc nh b nh d liu (khng phi thg vt l)

81h

OPTIONREG

RBPU

82h

PCL

8 bt thp ca b m chng trinh (PC)

83h

STATUS 2

IRP

84h

FSR

Con tr a ch 0 nh a ch gin tip b nh d liu

85h

TRISA

86h

TRISB

Thanh ghi d liu port B

RBIE

T0IF

INTF

RBIF

xxxx
---0
0000
0000
000x

uuuu
---0
0000
0000
000u

Dy 1

87h

INTEDG

RP1

T0CS

RP0

T0SE

T0

PSA

PS2

PS1

PS0

PD

DC

Thanh ghi d liu port A

Khng dng, khi c c gi tr 0

88h

EECON1

EEIF

WRERR

89h

EECON2

Thanh ghi iu khin 2 EEPROM

0Ah

PCLATH

B m ghi 5 bt cao ca PC

0bh

INTCON

GIE

EEIE

T0IE

INTE

RBIE

WREN

T0IF

WR

RD

INTF

RBIF

---- --1111
1111
0000
0000
0001
1xxx
xxxx
xxxx
---1
1111
1111
1111
---- -----0
x000
---- -----0
0000
0000
000x

Ghi ch: x = Khng xc nh ; u = Khng thay i ; - = khng dng khi c bng 0 ; q =


ph thuc vo iu kin
Bng 4.1 Tm tt cc dy thanh ghi

Thanh ghi trng thi


Thanh ghi trng thi cha trng thi s hc ca khi ALU, trng thi reset v bt
chn dy ca b nh d liu.
Nh mi thanh ghi khc, thanh ghi trng thi c th l ch ca mt lnh bt k. Nu
thanh ghi trng thi l ch ca mt lnh c nh hng n cc bt Z, DC hoc C th vic
ghi vo ba bt ny s khng c hiu lc. Cc bt ny c t hoc xa l ty thuc vo
thit b logic. Hn na, cc bt T0 v PD khng cho php ghi. V vy, kt qu ca mt
lnh ly thanh ghi trng thi lm ch s khc vi d kin. VD : CLRF STATUS s xa 3
bt trn v t 1 cho bt Z, cc bt cn li l 000u u1uu (u = khng thay i).
Ch nn dng cc lnh BCF, BSF, SWAPF v MOVWF thay i thanh ghi trng
thi bi v cc lnh ny khng nh hng n cc bt trng thi
Lu 1:
Cc bt IRP v RP1 (STATUS <7:6>) khng c dng i vi 16F8x m nn lp
trnh nh thng thng. Khng nn dng cc bt ny nh cc bt cng dng chung R/W v
iu ny c th nh hng n kh nng tng thch vi cc sn phm trong tng lai
Lu 2:
Cc bt C v DC hot ng nh cc bt ra s nh v s thiu trong php tr. Xem v
d v cc lnh SUBLW v SUBWF
Lu 3:
Khi thanh ghi trng thi l ch ca mt lnh c nh hng n cc bt Z, DC hoc
C th vic ghi vo ba bt ny khng c cho php, cc bt xc nh s c cp nht ty
thuc vo thit b logic.
1

Byte cao ca PC khng c truy cp trc tip. PCLATH l thanh ghi slave i vi PC<12:8>. Ni dung ca
PCLATH c th chuyn ln byte cao ca PC nhng ni dung ca PC<12:8> khng th chuyn vo PCLATH

89

---- ---1111
1111
0000
0000
000q
quuu
uuuu
uuuu
---1
1111
1111
1111
---- ------0
q000
---- ------0
0000
0000
000u

Hnh 4.1 Thanh ghi trng thi (a ch 03h, 83h)

Thanh ghi ty chn


Thanh ghi ny cho php c v ghi gm cc bt iu khin khc nhau cu hnh
trc thang chia cho TMR0/WDT, ngt ngoi INT, TMR0 v mch ko ln port B
Lu :
Khi ci t WDT (PSA = 1) th TMR0 s c thang chia l 1:1
Thanh ghi iu khin ngt INTCON
Thanh ghi iu khin ngt l thanh ghi c/vit, n bao gm cc bt cho php tt c
cc ngun tn hiu ngt
Lu :
Cc bt c ngt c t khi mt yu cu ngt xy ra bt chp trng thi ca bt
cho php tng ng hoc bt cho php ton cc GIE (INTCON <7>)

90

Hnh 4.1 Thanh ghi ty chn (a ch 81h)

Hnh 4.1 Thanh ghi iu khin ngt (a ch 08h, 88h)

91

4.3 B m chng trnh, PCL v PCLATH


B m chng trnh PC di 13 bt, byte thp l thanh ghi PCL l mt thanh ghi
c/vit. Byte cao ca PC (PC <12:8>) khng th c hoc vit trc tip v thng qua
thanh ghi PCLATH. Thanh ghi PCLATH (PC latch high) l thanh ghi cht cho PC <12:8>.
Ni dung ca PCLATH c chuyn byte cao ca b m chng trnh khi PC c np
gi tr mi. iu ny xy ra trong thi gian lnh CALL, GOTO hoc ghi vo PCL. Cc bt
cao ca PC c np t PCLATH nh trnh by trong hnh 4.1.

Hnh 4.1 Np PC t cc v tr khc


nhau

4.3.1 Nhy n a ch xc nh
Vic nhy n a ch xc nh c hon thnh bng cch cng mt lch
(offset) vo b m chng trnh (ADDWF PCL). Trong khi c mt bng bng phng
php GOTO nn kim tra cn thn s trng lp gia v tr ca bng vi phm vi b nh
PCL (mi khi 256 word).
4.3.2 Phn trang b nh chng trnh
PIC16F83 v PIC16CR83 c 512 t b nh chng trnh. PIC16F84 v
PIC16CR84 c 1 K t nh chng trnh, cc lnh CALL v GOTO c phm vi a ch l
11 bt, di a ch ny cho php mt lnh nhy trong vng mt trang c ln l 2 K.
m rng b nh chng trnh ca h PIC16F8x trong tng lai phi dng hai bt khc
xc nh trang ca b nh chng trnh. Cc bt phn trang ny l cc bt
PCLATH<4:3> (hnh 4.1). Khi thc hin mt lnh CALL hoc lnh GOTO, ngi dng
phi chc chn rng cc bt phn trang c lp trnh ph hp vi trang mong mun.
Nu mt lnh CALL (hoc ngt) c thc hin, ton b 13 bt ca PC s c ct
vo ngn xp. Do , vic x dng PCLATH<4:3> l khng cn thit cho cc lnh tr v.
Lu :
PIC16F8x b qua cc bt PCLATH<4:3>, cc bt ny c dng cho cc trang 1, 2
v 3 ca b m chng trnh (0800h 1FFFh), khng nn dng cc bt phn trang nh
cc bt R/W cng dng chung v iu ny s lm nh hng n s tng thch vi cc
sn phm trong tng lai.

4.4 Ngn xp
H PIC16Fxx c lng su 8 cp x 13 bt. Vng ngn xp khng phi l mt phn ca
b nh chng trnh hoc ca b nh d liu v con tr ngn xp khng cho php c
v ghi.
Ton b 13 bt ca PC c ct vo ngn xp khi mt lnh CALL c thc hin
hoc mt ngt c chp nhn. Ngn xp c ly ra khi thc hin lnh RETURN,
RETLW hoc RETFIE. PCLATH khng b nh hng bi thao tc ct v ly ra t ngn
xp.
Lu :
Khng c lnh no ct hoc ly ra t ngn xp. Cc thao tc ny ch xy ra khi thc
hin cc lnh CALL, RETURN, RETLW v RETFIE hoc vic tr n mt a ch ngt.

92

Ngn xp hot ng nh mt b m quay vng. C ngha l sau tm ln ct vo


ngn xp th gi tr c ct vo ti ln th chn s c ghi ln gi tr c ct
vo u tin, gi tr ct ln th mi s ln gi tr ct vo ln th hai v tip tc
nh th. Nu ngn xp c ly ra chn ln th PC s c gi tr ging nh gi tr ly ra ln
u tin.
Lu :
Khng c bt trng thi no bo cho bit hin tng trn ngn xp
4.1 nh a ch gin tip: Thanh ghi INDFF v FSR
Thanh ghi INDFF khng phi l thanh ghi vt l. Trong thc t vic nh a ch
INDF s xc nh a ch ca thanh ghi c a ch c cha trong thanh ghi FSR (FSR l
mt con tr). y l phng php nh a ch gin tip.
V d 4-1: nh a ch gin tip
Dy thanh ghi 05 cha gi tr 10h
Dy thanh ghi 06 cha gi tr 0Ah
Np gi tr 05 vo FSR
Mt lnh c thanh ghi INDF s tr v gi tr 10h
Tng thanh ghi FSR ln 1 (FSR = 06)
By gi lnh c thanh ghi INDF s tr v gi tr 0Ah
Qu trnh t c gin tip INDF s cho kt qu l 00h. Vic ghi gin tip thanh ghi INDF
s khng cho ra kt qu g c (mc d cc bt trng thi c th b nh hng)

Hnh 4.1 nh a ch trc tip/gin tip

V d 4-2 trnh by mt chng trnh n gin xa vng RAM 20h 2Fh bng cch nh
a ch gin tip
V d 4-2:
NEXT clrf

movlw
movwf
INDF
incf
btfss
goto

0x20 ; khi to con tr


FSR ; ch n RAM
; xa thanh ghi INDF
FSR ; tng con tr
FSR, 4 ; xong ?
NEXT ; cha, xa tip

CONTINUE

93

Mt a ch hiu dng 9 bt nhn c bng cch ghp 8 bt thanh ghi FSR vi bt IRP
(STATUS<7>) nh ch trong hnh 4.1. Tuy nhin, IRP khng c dng trong PIC16F8x

5. CNG GIAO TIP I/O


PIC16F8x c hai cng: Port A v port B, mt s chn ca cng l loi a chc nng
ph hp vi cc chc nng khc ca thit b.

5.1 Port A v thanh ghi TRISA


Port A l mt cht 5 bt, RA4 l mt ng vo schmitt trigger v cng l mt ng ra
cc thot h. Tt c cc chn khc ca port A l ng vo TTL v l ng ra CMOS. Tt
c cc chn c cc bt nh hng d liu tng ng (thanh ghi TRIS) cu hnh vo
hoc ra cho cc chn.
Vic thit lp 1 cho mt bt TRISA s xc nh chn tng ng l vo c ngha l
mch iu khin ra ti chn ny c a ln trng thi Z cao. Xa mt bt TRISA s cu
hnh chn tng ng l ra c ngha l a ni dung ca mch cht ng ra ln chn ny.
Vic c thanh ghi port A s c trng thi ti cc chn. Vic ghi vo chn s ghi vo
mch cht ca port. Tt c cc thao tc ghi port u l loi c sa ghi. Nn vic ghi
vo port c ngha l u tin chn port c c vo sau sa i v cui cng ghi li
vo cht d liu ca port. Chn RA4 l chn a hp vi ng vo ng h TMR0

Hnh 5.1 S khi cc chn RA3:RA0

V d 5-1: Khi to port A


Clrf

; Khi to port A bng cch thit lp cc cht


; d liu ng ra
Bsf
STATUS, RP0 ; Chn dy 1
Movlw 0x0F
; D liu c dng chn hng d liu
Movwf TRISA
; Thit lp RA<3:0> l ng vo
; RA4 l ng ra
; Gi tr c ca TRISA<7:5> lun l 0

94

PORT A

Hnh 5.2 S khi chn RA4

Tn
RA0
RA1
RA2
RA3
RA4/T0CK1

Bt
Bt 0
Bt 1
Bt 2
Bt 3
Bt 4

Kiu m
TTL
TTL
TTL
TTL
ST

Chc nng
Input/output
Input/output
Input/output
Input/output
Input/output hoc ng vo xung ng h ca
TMR0, ng ra cc thot h

Bng 5.1 Chc nng port A

a
ch

Tn

Bt
7

Bt
6

Bt
5

Bt 4

Bt 3

Bt 2

Bt 1

Bt 0

Gi tr
khi m
ngun

05h

PORTA

RA4/T0CK1

RA3

RA2

RA1

RA0

---x xxxx

85h

TRISA

TRISA4

TRISA3

TRISA2

TRISA1

TRISA0

---1 1111

Gi tr
khi reset
---u
uuuu
---1
1111

Bng 5.2 Tm tt cc thanh ghi ca port A

5.2 Port B v cc thanh ghi TRISB


Port B l port hai chiu 8 bt, cc thanh ghi chn hng d liu l TRISB. Bt no
trong thanh ghi TRISB bng 1 th mch li ra tng ng s c trng thi Z cao. Khi mt
bt bt k trong TRISB bng 0, th ni dung ca cht d liu ra s c t vo chn ra
tng ng vi bt .
Mi chn ra ca port B c in tr ko ln bn trong. Mt bt iu khin n c th
kch hot tt c cc in tr ko ln ny, iu ny c thc hin bng cch xa bt

RBPU (OPTION_REG<7>). Mch in tr ko ln t ng ngt khi chn port c cu


hnh l chn ra, mch in tr ko ln cng mt tc dng khi m ngun.
Bn chn RB7:RB4 c tnh nng thay i ngt. Ngt ch c th xy ra khi cc chn
ny c cu hnh l ng vo, c ngha l chn no c cu hnh l ra th ngt b chn).
Gi tr ti chn ch vo c so snh vi gi tr c c cht ti ln c port B
cui cng. Cc ng ra khng ph hp ca cc chn c OR li vi nhau to bin
thin ngt port RB.

95

Hnh 5.3 S khi cc chn RB7:RB4

Ngt c th nh thc thit b khi trng thi SLEEP. Ngi dng c th xa ngt
theo cc cch sau :
a) c hoc ghi port B, iu ny s chm dt gi tr bin thin
b) Xa c ngt RBIF
Mt gi tr bin thin s tip tc t bt RBIF. Vic c port B s kt thc s bin
thin ny v cho php xa bt RBIF
Ngt da trn c tnh bin thin (tc ng cnh) cng vi mch ko ln cu hnh
theo phn mm cho php d dng giao tip vi bn phm thc hin vic nh thc
thit b bng cch n phm.
Lu :
c th nhn ra s thay i chn I/O, b rng xung ti thiu phi bng Tcy
(fOSC/4)
Ngt tc ng cnh nn c dng nh thc thit b bng phm nhn v trong
cc thao tc m port B ch c dng cho ngt tc ng cnh. Khng nn dng
chui vng ca port B cho ngt tc ng cnh.

96

Hnh 5.4 S khi cc chn RB3:RB0

V d 5-1: Khi to port B


clrf
bsf
movlw
movwf
Tn
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PORTB
; Khi to port B bng cch t cc cht d liu ra
STATUS, RP0 ; Chn dy 1
0xCF
; Gi tr chn hng d liu
TRISB
; RB<3:0> l vo
; RB<5:4> l ra
; RB<7:6> l vo
Bt
Kiu m Chc nng
Bits 0
TTL/ST (1) Chn I/O hoc ng vo ngt ngoi, mch ko ln bn trong
lp trnh bng phn mm
Bits 1
TTL
Chn I/O, mch ko ln bn trong lp trnh bng phn mm
Bits 2
TTL
Chn I/O, mch ko ln bn trong lp trnh bng phn mm
Bits 3
TTL
Chn I/O, mch ko ln bn trong lp trnh bng phn mm
Bits 4
TTL
Chn I/O (ngt cnh), mch ko ln bn trong lp trnh
bng phn mm
Bits 5
TTL
Chn I/O (ngt cnh), mch ko ln bn trong lp trnh
bng phn mm
Bits 6
TTL/ST (2) Chn I/O (ngt cnh), mch ko ln bn trong lp trnh
bng phn mm, ng vo ng h np ni tip
(2)
Bits 7
TTL/ST
Chn I/O (ngt cnh), mch ko ln bn trong lp trnh
bng phn mm, d liu np ni tip
Bng 5.3 Chc nng port B

1
2

L ng vo schmitt trigger khi c cu hnh l ng vo ngt


L ng vo schmitt trigger ch np chng trnh ni tip

97

a
ch

Tn

Bt 7

Bt 6

Bt 5

Bt 4

Bt 3

Bt 2

Bt 1

Bt 0

06h

PORTB

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0/INT

86h

TRISB

TRISB7

TRISB6

TRISB5

TRISB4

TRISB3

TRISB2

TRISB
1

TRISB0

81h

OPTION
_REG

RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

Gi tr
khi
m
my
xxxx
xxxx
1111
1111
1111
1111

Gi tr
khi
reset
uuuu
uuuu
1111
1111
1111
1111

Bng 5.4 Tm tt cc thanh ghi port B

5.3 Lp trnh I/O


5.3.1 Port I/O hai chiu
Cc lnh ghi bt k, din tin bn trong nh mt thao tc c c theo sau bi
thao tc ghi. V d cc lnh BCF v BSF s thanh ghi c vo CPU, thc hin php tnh
bt v sau ghi kt qu tr li vo thanh ghi. Cn phi ch khi cc lnh ny c p
dng cho port c nh ngha theo c hai hng vo v ra. V d lnh BSF trn bt 5
ca port B s c 8 bt ca port B vo CPU, sau lnh BSF xy ra trn bt 5 v port B
c ghi vo cht d liu ra. Nu mt bt khc ca port B c dng nh mt chn I/O
hai chiu (VD: Bt 0) v cng lc c nh ngha l ng vo th tn hiu vo ti
chn ny t n c c vo CPU v ghi li vo cht d liu ca chn c bit ny bng
cch ghi ni dung trc . Cho n khi chn ny vn cn ch vo th khng vn
g xy ra. Tuy nhin, nu sau bit0 c chuyn sang ch ra th ni dung ca
cht d liu s khng xc nh
Thao tc c thanh ghi port s c gi tr ti cc chn port. Thao tc ghi vo thanh
ghi port s ghi gi tr vo cht ca port. Khi dng cc lnh c-sa-ghi nh BCF, BSF
th gi tr ti chn port c c, x l gi tr ny v sau ghi tr li vo cht port.
Mt chn ra ang tch cc mc thp hoc cao khng nn c iu khin ng thi
bi thit b ngoi trnh s thay i mc logic ti chn ny (OR ni dy hoc AND ni
dy) dn nn kt qu l dng ra cao c th lm h vi mch
5.3.2 Thao tc lin tc trn port I/O
Trn thc t vic ghi vo mt port I/O xy ti thi im cui ca chu k lnh, c
th d liu phi xc lp ti lc bt u chu k lnh (hnh 5.5). Do , cn phi cn thn khi
mt thao tc c theo sau mt thao tc ghi trn cng mt port. Cc lnh phi tun t sao
cho in p chn n nh (ty theo ti) trc khi thc hin lnh tip theo c d liu vo
CPU. Nu khng trng thi trc ti chn port s c c vo CPU thay v l trng
thi mi. Nu khng chc chn th cch tt nht l nn cch ly cc lnh ny bng mt
lnh NOP hoc mt lnh khc khng truy cp n port I/O ny.
V d 5-1 cho thy nh hng ca hai lnh c-sa-ghi BCF, BSF trn mt port
I/O
V d 5-1: Cc lnh c-sa-ghi trn mt port I/O
; Khi to port PORTB<7:4> vo
;
PORTB<3:0> ra
; PORTB<7:6> c in tr ko ln bn ngoi v khng c ni vi mch khc
;
;
Cht port
Chn port
;
-----------------------bcf
PORTB, 7
; 01pp ppp
11pp ppp
bcf
PORTB, 6
; 10pp ppp
11pp ppp
bsf
STATUS, RP0 ;
bcf
TRISB, 7
; 10pp ppp
11pp ppp
bcf
TRISB, 6
; 10pp ppp
10pp ppp

98

Lu l ngi dng c th ngh rng gi tr cc chn l 00pp ppp. Lnh bcf th nh


lm cho RB7 b cht ti gi tr chn (high)

Hnh 5.5 Thao tc I/O lin tc

6. B NH THI TIMER0 V THANH GHI TMR0


B nh thi timer0 c nhng tnh nng sau :
L timer/counter 8 bt
Cho php c/ghi
Thang chia 8 bt lp trnh bng phn mm
Cho php chn xung ng h trong hoc ngoi
To ngt khi c trn t FFh n 00h
Chn tc ng cnh i vi xung ng h ngoi
Ch timer c chn bng cch xa bt T0CS (OPTION_REG<5>). Trong ch
nh thi, m un timer0 (hnh 6.1) s tng theo mi chuk lnh (khng c nh thang).
Nu thanh ghi TMR0 c ghi, qu trnh tng s b cm sau hai chu k (hnh 6.2 v hnh
6.3). Ngi dng c th thc hin vic ny bng cch ghi gi tr t trc vo thanh
ghi TMR0.
Ch m c chn bng cch t bt T0CS. Trong ch ny TMR0 s tng
theo mi cnh ln hoc mi cnh xung ti chn RA4/T0CK1. Vic tng theo cnh c
xc nh bi bt chn cnh T0SE (OPTION_REG<4>). Xa bt T0SE khi mun chn cnh
ln.
Thang chia c chia x gia b nh thi timer0 vi b nh thi canh chng
(watchdog timer). Vic nh thang chia c iu khin bng phn mm bng cch iu
khin bt PSA (OPTION_REG<3>). Bt PSA b xa s gn thang chia cho timer0. Thang
chia khng cho php c/vit. Khi thanh chia c gn cho timer0, cc t s chia (1:2,
1:4, ,1:256) c th chn c bng phn mm.

6.1 Ngt TMR0


Ngt TMR0 c to ra khi thanh ghi TMR0 trn t FFh n 00h. Hin tng trn
ny s t bt T0IF (INTCON<2>). Ngt c th b ngn bng cch xa bt cho php T0IE
(INTCON<5>). Bt T0IF phi b xa bng phn mm thng qua chng trnh phc v ngt
timer0 trc khi ngt ny c cho php tr li. Ngt TMR0 (hnh 6.4) khng th nh
thc vi x l khi trng thi SLEEP v timer ngn hot ng trong thi gian SLEEP.

99

Hnh 6.1 S khi b nh thi

Hnh 6.2 th thi gian timer0 ng h bn trong/ khng nh thang chia

Hnh 6.3 th thi gian Timer0 ng h trong/thang chia 1:2

Hnh 6.4 th thi gian ngt TMR0

6.2 Timer0 vi xung ng h bn ngoi


Khi mt ng vo ng h bn ngoi c p dng cho Timer0 th phi tha mn
mt s yu cu nht nh. Xung ng h ngoi phi ng pha vi xung ng h bn trong
(TOSC). Cng c mt tr trong lng tng thc t ca TMR0 sau khi ng b.

100

6.2.1 ng b xung ng hof ngoi


Khi khng dng thang chia, ng vo ng h ngoi c cng thang chia nh ng ra.
Vic ng b chn RA4/T0CK1 vi pha ng h bn trong bng cch ly mu thang chia
ng ra theo cc chu k Q2 v Q4 ca pha ng h bn trong (hnh 6.6. Do , T0CK1 cn
thit phi cao hn t nht 2TOSC (cng thm thi gian tr bng mch RC) v thp xung t
nht 2TOSC.
Khi x dng thang chia, xung ng h bn ngoi c chia bi mt b m khng
ng b c h s chia sao cho thang chia ng ra ng b. Xung ng h ngoi cn phi
c ly mu v phi tnh h s chia b m khng ng b. Do , T0CK1 cn thit
phi c chu k t nht 4TOSC (thm mch tr RC) c chia bi gi tr thang chia, yu cu
i vi thi gian cao v thp ca T0CK1 l chng khng c nh hn b rng xung ti
thiu l 10 nS.
6.2.2 Tng tr TMR0
K t khi thang chia ng ra c ng b vi ng h bn trong, c mt tr nh
t thi im xut hin cnh xung ng h bn ngoi n thi im b nh thi Timer0
thc s tng ln. Hnh 6.5 trnh by tr ny

6.3 B nh thang chia


Mt b m 8 bt c th dng nh thang chia cho Timer0 hoc cho b nh thi
canh chng (hnh 6.6) . Lu l ch c mt b nh thang chia duy nht cho c hai b
Timer0 v b nh thi watchdog. V vy nu b nh thang gn cho Timer0 thf s khng
hiu lc vi watchdog v ngc li.
Cc bt PSA v PS2:PS0 (OPTION_REG<3:0>) xc nh nhim v ca b nh
thang v gi tr thang chia.
Khi c gn cho Timer0, tt c cc lnh ghi vo Timer0 nh CLRF 1, MOVWF
1, BSF 1,.s xa b nh thang. Khi c gn cho WDT, lnh CLRWDT s xa b
nh thang cng vi WDT. B nh thang khng cho php c/ghi.

Hnh 6.5 th thi gian Timer0 vi ng h ngoi

101

Hnh 6.6 S khi b nh thang TMR0/WDT

Hon chuyn nhim v b nh thang


Nhim v b nh thang c iu khin hon ton bng phn mm, c ngha l n
c th c thay i trong khi ang thc hin chng trnh.
Lu :
trnh hin tng reset thit b ngoi mun cn phi thc hin on lnh sau
y (v d 6-1) khi chuyn nhim v b nh thang t Timer0 sang WDT ngay c khi WDT
khng c cho php. chuyn b nh thang t WDT sang Timer0 phi dng on m
lnh trnh by v d 6-2
V d 6-1: Chuyn b nh thang (Timer0 WDT)
BCF STATUS, RP0 ; Dy 0
CLRF TMR0
; Xa TMR0 v b nh thang
BSF STATUS, RP0 ; Dy 1
CLRWDT
; Xa WDT
MOVLW
bxxxx1xxx ; Chn gi tr
MOVWF
OPTION_REG
; b nh thang mi
BCF STATUS, RP0 ; Dy 0
V d 6-2: Chuyn b nh thang (WDT Timer0)
CLRWDT
; Xa WDT v b nh thang
BSF STATUS, RP0 ; Dy 1
MOVLW
bxxxx0xxx ; Chn TMR0, gi tr nh thang mi v
; ngun xung ng h
MOVWF
OPTION_REG
;
BCF STATUS, RP0 ; Dy 0

102

a
ch

Tn

Bt 7

01h

TMR0

Thanh ghi Timer0

0B
h

INTCON

GIE

EEIE

T0IE

INTE

RBIE

T0IF

NT

RBIF

81h

OPTION_RE
G

RBPU

INTED
G

T0C
S

T0SE

PSA

PS2

PS1

PS0

85h

TRISA

TRISA
4

TRISA
3

TRISA
2

TRISA
1

TRISA
0

Bt 6

Bt 5

Bt 4

Bt 3

Bt 2

Bt 1

Bt 0

Gi
tr
m
my
xxx
x
xxx
x
000
0
000
x
111
1
111
1
---1
111
1

Gi
tr
reset
uuu
u
uuu
u
0000
0000
1111
1111
---1
1111

Bng 6.1 Cc thanh ghi ca Timer0

7. B NH D LIU EEPROM
B nh d liu EEPROM cho php c/ghi trong khi hot ng bnh thng (ton
b di in p VDD). B nh ny khng c nh x trc tip ln vng khng gian thanh
ghi. Thay vo n c nh a ch gin tip thng qua cc thanh ghi chc nng c
bit. C bn thanh ghi chc nng c bit c dng c/ghi b nh ny, l :
EECON1
EECON2
EEDATA
EEADR
EEDATA lu gi 8 bt d liu c/ghi v EEADR lu gi a ch ca v tr EEPROM
ang c truy cp. Cc thit b PIC16F8x c 64 byte d liu EEPROM chim a ch t
0h n 3Fh.
B nh d liu EEPROM cho php ghi/c theo byte. Khi ghi v tr cn ghi s b xa
trc khi ghi byte mi. B nh d liu EEPROM c xem nh c chu k c/ghi cao,
thi gian ghi c iu khin bi mt b nh thi tch hp trn chip, thi gian ghi thay
i theo in p v nhit cng nh theo chip. Tham kho phn c tnh AC bit
chnh xc hn.
Khi mt thit b c m ha bo v, CPU c th tip tc c v ghi b nh
EEPROM. My np chng chng trnh c th khng cn truy cp c b nh ny.

7.1 EEADR
Thanh ghi EEADR c th nh a ch ti a n 256 byte b nh EEPROM. Ch c
64 byte u tin ca b nh c cung cp.
Hai bt phn trn c gii m a ch. C ngha l hai bt ny phi lun bng 0 chc
chn rng a ch nm trong vng 64 byte

103

Hnh 7.1 Thanh ghi EECON1 (a ch 88h)

7.2 Thanh ghi EECON1 v EECON2


EECON1 l thanh ghi iu khin c nm bt vt l c cung cp phn thp, ba
bt cao khng tn ti v c gi tr 0 khi c.
Cc bt iu khin RD v WR khi to qu trnh c v ghi. Nhng bt ny khng cho
php xa, ch c t bng phn mm. Chng b xa bng phn cng sau khi hon tt
thao tc c hoc ghi. Vic khng cho php xa bt WR bng phn mm nhm trnh hin
tng kt thc ngu nhin qu trnh ghi.
Bt WREN khi c t s cho php thao tc ghi. Bt ny b xa khi m my. Bt
WRERR c t khi qu trnh ghi b dng bi MCLR hoc do b nh thi WDT trong
hot ng bnh thng. Trong nhng trng hp ny, sau khi reset, ngi dng c th
kim tra bt WRERR v thc hin vic ghi li. D liu v a ch s khng b thay i trong
cc thanh ghi EEDATA v EEADR.
Bt c ngt EEIF c t khi hon tt thao tc ghi. N phi c xa bng phn
mm.
EECON2 khng phi l mt thanh ghi vt l, khi c EECON2 s cho kt qu la 0.
Thanh ghi EECON2 c dng ghi tun t vo b nh d liu EEPROM

7.3 c b nh d liu EEPROM


c mt nh d liu, ngi dng phi ghi a ch vo thanh ghi EEADR v sau
t bt iu khin RD (EECON1<0>), d liu trong thanh ghi EEDATA c th dng
trong nhiu chu k k tip. Do , n c th c c bi lnh tip theo. EEDATA s duy
tr gi tr cho n lnh c khc hoc cho n khi c ghi vo bi ngi dng.
V d 7-1: c d liu EEPROM
BCF STATUS, RP0 ; Dy 0
MOVLW
CONFIG_ADDR
;
MOVWF
EEADR
; a ch cn c
BSF STATUS, RP0 ; Dy 1
BSF EECON1, RD ; c EE
BCF STATUS, RP0 ; Dy 0
MOVF EEDATA, W ; W = EDATA
104

7.4 Ghi vo b nh d liu EEPROM


ghi mt v tr d liu trong EEPROM. Trc tin ngi dng phi a a ch
vo thanh ghi EEADR v d liu vo thanh ghi EEDATA sau phi p dng on m
lnh sau y khi ng ghi cho mi byte.
V d 7-1: Ghi b nh d liu EEPROM

on m lnh
cn thit

BSF STATUS, RP0 ; Dy 1


BCF INTCON, GIE ; Cm cc ngt
BSF EECON1, WREN
; Cho php ghi
MOVLW
55h
;
MOVWF EECON2
; Ghi 55h
MOVLW AAh
;
MOVWF EECON2
; Ghi AAh
BSFEECON1, WR ; t bt WR, bt u ghi
BSFINTCON, GIE ; Cho php cc ngt

Qu trnh ghi s khng khi ng nu on m lnh trn khng c vit tip theo
sau mt cch chnh xc (ghi 55h vo EECON2, ghi AAh vo EECON2 sau t bt WR)
cho mi byte. Nn cm cc ngt trong on m lnh ny.
Thm vo , bt WREN trong EECON1 phi c t cho php ghi. K thut
ny ngn hin tng ghi ngu nhin vo EEPROM (khng mong mun) do vic thc hin
sai m lnh (mt chng trnh) nn duy tr trng thi xa cho bt WREN mi thi im
tr khi cn cp nht EEPROM. Bt WREN khng b xa bng phn cng.
Sau khi mt chui ghi tun t c khi ng vic xa bt WREN khng nh hng n
chu k ghi. Bt WR b cm khi ang t tr phi bt WREN c t.
Khi hon tt chu k ghi, bt WR b xa bi phn cng v bt c ngt hon tt ghi
(EEIF) c t, ngi dng c th hoc cho php hoc thm d bt ny. EEIF phi
c xa bng phn mm.

7.5 Kim tra kt qu ghi


Ty theo ng dng, trong thc t mt chng trnh gi l tt th phi c kh nng
kim tra li kt qu ghi so vi d liu cn ghi vo EEPROM. iu ny nn p dng
cho nhng ng dng c bt EEPROM gn mi mc gii hn cho php.
Ni chung mt bt khi vo EEPROM b sai c ngha l khi ghi gi tr l 1 nhng c
li gi tr l 0 (do mt bt).
V d 7-1: Kim tra ghi
BCF STAT, RP0 ; Dy 0
;
;
MOVF
EEDATA, w ; Phi nm trong dy 0
BSF STATUS, RP0 ; Dy 1
Read
EECON1, RD ; c gi tr ghi
STATUS, RP0 ; Dy 0
;
SUBWF
EEDATA, w ; C phi gi tr ghi trong thanh ghi w v gi tr

BSF
BCF
c

BTFSS, z

; trong EEDATA bng nhau ?


; Hiu s bng 0 ?

105

GOTO WRITE_ERR ; Khng, ghi sai


; ng, ghi ng
;
; Tip tc chng trnh

7.6 Bo v chng ghi


C nhiu trng hp khng mun ghi vo EEPROM chng gi mo. C nhiu k
thut khc nhau c ci t sn trong thit b. Khi m my WREN b xa. B nh thi
m my (trong khong 72 mS) cng ngn vic ghi vo EEPROM.
Chui khi ng ghi v bt WREN kt hp ln nhau ngn vic ghi ngu nhin do nhiu
ngun hoc phn mm hot ng sai

7.7 Hot ng ca EEPROM trong trng hp bo v m lnh


Khi thit b c bo v m lnh. CPU c th c v ghi d liu phc hi vo
EEPROM.
i vi cc thit b ROM c hai bt bo v m lnh. Mt cho b nh chng trnh
ROM v mt cho b nh d liu EEPROM
a ch

Tn

Bt 7

Bt 6

08h

EEDATA

Thanh ghi d liu EEPROM

09h

EEADR

Thanh ghi a ch EEPROM

88h

EECON1

89h

EECON2

Thanh ghi iu khin EEPROM

Bt 5

Bt 4

Bt 3

Bt 2

Bt 1

Bt 0

EEIF

WRERR

WREN

WR

RD

Gi tr
khi m
my
xxxx
xxxx
xxxx
xxxx
---0
x000
---- ----

Gi tr
khi
reset
uuuu
uuuu
uuuu
uuuu
---0
q000
---- ----

Bng 7.1 Cc thanh ghi EEPROM

8. TNH NNG C BIT CA CPU


Nhng im khc nhau gia mt vi iu khin vi cc vi x l khc l cc mch c
bit cho cc ng dng theo thi gian thc. PIC16F8x c mt lot cc tnh nng nh th
nhm tng ti a tin cy ca h thng, ti thiu ha gi thnh thng qua vic gim cc
linh kin ph bn ngoi, cung cp cc ch hot ng tit kim nng lng v tnh
nng bo v m lnh. C th k ra nh sau :
Kh nng chn OSC
Reset
- Khi m my (POR)
- B nh thi tng ngun (PWRT)
- B nh thi khi ng dao ng (OST)
Cc ngt
B nh thi canh chng (WDT)
Ch ng
Bo v m lnh
Vng ID
Lp trnh trong h thng
PIC16F8x c mt b nh thi canh chng n ch c th tt bi cc bt cu hnh. B
nh thi ny hot ng vi mch dao ng RC rin nhm tng tin cy. C hai b nh
thi to ra cc thi gian tr cn thit khi tng ngun. Mt l b nh thi khi ng dao
ng (Oscilator Start-up Timer) nhm duy tr chip vn trong trng thi reset cho n khi
dao ng thch anh n nh. Th hai l b nh thi tng ngun (Power-up Timer). B
nh thi ny c thi gian tr c nh l 72 mS (danh nh) khi tng ngun gi chip
trng thi reset cho n khi ngun nui n nh. Vi hai timer oc th hp ny hu nh
tt c cc ng dng u khng cn n mch reset bn ngoi
Ch ng cung cp mt trng thi h ngun vi dng in nui rt thp. Ngi
dng c th nh thc khi ch ny bng reset bn ngoi, WDT hoc mt tn hiu
106

ngt. Mt vi ty chn dao ng c cung cp cho php thch ng vi ng dng.


Dao ng RC gim gi thnh h thng trong khi dao ng LP li gim cng sut. Cc ty
chon c chn bi mt tp hp cc bt cu hnh.

8.1 Cc bt cu hnh
Cc bt cu hnh c th c lp trnh (c bng 0) hoc khng lp trinh (c bng
1) chn cu hnh cho thit b, cc bt ny c nh x ti v tr 2007h trong b nh
chng trnh
a ch 2007h nm ngoi khng gian b nh chng trnh ca ngi dng v
trong vng kim tra/cu hnh c bit (2000h 3FFFh). Vng ny ch c th c truy
cp trong khi np chng trnh.

Hnh 8.1 T cu hnh PIC16CR83 v PIC16CR84

Hnh 8.2 T cu hnh PIC16F83 v PIC16F84

8.2 Cu hnh dao ng


8.2.1 Cc kiu dao ng
PIC16F8x c th hot ng bn ch dao ng :

107

LP Low power crystal


XT Crystal/Resonator
HS High speed Crystal/Resonator
RC Resistor/Capacitor
8.2.2 Dao ng thch anh/Cng hng gm
Cc ch XT, LP v HS cn dng mt thch anh hoc mt mch cng hng
gm ni vo cc chn OSC1/CLKIN v OSC2/CLKOUT n nh dao ng (hnh 8.3)

Hnh 8.3 Cu hnh dao ng XT,


LP v HS

PIC16F8x c thit k dao ng vi mt thch anh song song, nu dng thch


anh ni tip th tn s s vt khi phm vi cho php ca nh sn xut. ch XT. LP
hoc HS, thit b c th nhn mt ngun dao ng ngoi t ng vo OSC1/CLKIN (hnh
8.4)
Hnh 8.4 Dao ng ngoi cho
cu hnh XT, LP hoc HS

Phm vi th nghim
Ch
Tn s
OSC1/C1
OSC2/C2
XT
455 KHz
47 100 pF
47 100 pF
2 MHz
15 33 pF
15 33 pF
4 MHz
15 33 pF
15 33 pF
HS
8 MHz
15 33 pF
15 33 pF
10 MHz
15 33 pF
15 33 pF
Lu :
Nn chn C1 v C2 bng nhau trong bng phm vi th nghim
T gi tr cao lm tng n nh nhng cng lm tng thi gian khi ng
Cc gi tr ny ch l gi . Do mi mch cng hng c c tnh ring. Nn tham kho
ti liu nh sn xut chn cho ph hp
Mch cng hng th nghim
455 KHz
Panasonic EFO-A455K04B
0.3%
2 MHz
Murata Erie CSA2.00MG
0.5%
4 MHz
Murata Erie CSA4.00MG
0.5%
8 MHz
Murata Erie CSA8.00MT
0.5%
10 MHz
Murata Erie CSA10.00MTZ
0.5%
Khng c t trong cc mch cng hng
Bng 8.1 Chn t cho mch cng hng gm

108

Ch
LP
XT
HS

Tn s
32 KHz
200 KHz
100 KHz
2 MHz
4 MHz
4 MHz
10 MHz

OSC1/C1
68 100 pF
15 33 pF
100 150 pF
15 33 pF
15 33 pF
15 33 pF
15 33 pF

OSC2/C2
68 100 pF
15 33 pF
100 150 pF
15 33 pF
15 33 pF
15 33 pF
15 33 pF

Lu :
Nn chn C1 v C2 bng nhau trong bng phm vi th nghim
T gi tr cao lm tng n nh nhng cng lm tng thi gian khi ng
Cc gi tr ny ch l gi . Rs c th cn thit trong ch HS v XT trnh iu khin
qu mc so vi mc iu khin thp ca thch anh theo s tay. Do cc thch anh c c
tnh khng ging nhau. Nn tham kho ti liu nh sn xut chn cho ph hp
Vi VDD > 4,5 V nn chn C1 = C2 = 30 pF
Thch anh th nghim
32,768 KHz
Epson C-001R32.768K-A
20 PPM
100 KHz
Epson C-2 100.00 KC-P
20 PPM
200 KHz
STD XTL 200.000 KHz
20 PPM
1 MHz
ECS ECS-10-13-2
50 PPM
2 MHz
ECS ECS-20-S-2
50 PPM
4 MHz
ECS ECS-40-S-4
50 PPM
10 MHz
ECS ECS-100-S-4
50 PPM
Hnh 8.2 Gi tr t trong ch dao ng thch anh

8.2.3 Mch dao ng thch anh ngoi


C th dng cc mch dao ng ng gi sn hoc ghp li t cc cng TTL. Cc
mch dao ng ch to sn c di lm vic v n nh cao hn. Mt mch dao ng
thch anh c thit k tt s cung cp hiu qu tt vi cc cng TTL. Sau y l hai s
in hnh : Mt l cng hng ni tip v mt l cng hng song song.
Hnh 8.5 trnh by mch dao ng cng hng song song, mch c thit k vi
tn s c bn ca thch anh. Cng o 74AS04 lm nhim v o pha y l yu cu
ca mch dao ng song song. in tr hi tip 4,7 K lm nhim v n nh. Bin tr
phn cc 10 K chn im lm vic cho 74AS04 nm trong vng tuyn tnh

Hnh 8.5 Mch dao ng thch anh ngoi


cng hng song song

Hnh 8.6 Mch dao ng thch anh


ngoi cng hng ni tip

109

8.2.4 Dao ng RC
Vi nhng ng dng khng cn thi gian chnh xc th ty chn dao ng RC s
gip gim gi thnh. Tn s dao ng RC thay i theo in p ngun, Rext v Cext v c
nhit lm vic. Hn na tn s dao ng cn thay i theo thit b do s thay i
thng s x l. V in dung lin cc gia cc dng v khc nhau ca chip cng nh
hng c bit i vi gi tr Cext thp. Ngi dng cn lu n dung sai ca R v C.
Hnh 8.7 trnh by mt mch RC kt hp vi PIC16F8x. Vi nhng Rext thp hn 4 K
hot ng ca mch c th khng n nh hoc khng dao ng. Nu Rext qu ln VD. 1
M dao ng d b nh hng bi nhiu, m v r in. Do nn chn Rext trong
khong t 5 K n 100 K.
Mc d mch dao ng khng cn t ngoi nhng (Cext = 0 pF) nhng cng nn
thm t khong 20 pF chong nhiu v n nh hn. Nu khng c Cext tn s dao ng
c th thay i bt thng do in dung bn ngoi bin thin nh in dung lp rp, in
dung lin cc.
Tn s c chia 4 xut hin chn OSC2/CLKOUT c th c dng kim tra
hoc ng b cc linh kin khc.

Hnh 8.7 Ch dao ng RC

Lu :
Khi ang dao ng bng RC khng nn iu khin chn OSC1 bng mt ngun dao
ng khc c th lm h thit b

8.3 Reset
C nhiu cch reset PIC16F8x :
Reset khi m my (POR)
MCLR rest trong khi SLEEP
WDT reset khi hot ng bnh thng
WDT nh thc trong khi SLEEP
Hnh 8.8 trnh by s khi ca mch reset tch hp trn chip. Trn ng reset

MCLR c mt b lc nhiu. B rng cn thit ca xung MCLR c cho trong s tay.


Mt s thanh ghi khng b nh hng vi mi ch reset. Trng thi ca chng khng
xc nh khi m my v khng thay i cc phng php reset khc. Hu ht cc
thanh ghi khc c a v trng thi ban u khi m my, reset MCLR khi hot ng
bnh thng, reset WDT v reset MCLR khi SLEEP. Do cc thao tc reset ny c
xem nh l s bt u li khi hot ng bnh thng.
Bng 8.3 cho thy cc iu kin reset ca b m chng trnh PC v thanh ghi
trng thi. Bng 8.4 trnh by y cc trng thi reset ca tt c cc thanh ghi.
Cc bt T0 v PD c t v xa mt cch khc nhau trong cc trng hp reset
khc nhau. Hai bt ny c dng trong phn mm xc nh bn cht ca reset.

110

Hnh 8.8 S khi mch reset trn chip

iu kin
Reset m my
Reset MCLR khi hot ng bnh thng
Reset MCLR trong khi SLEEP
Reset WDT trong khi hot ng bnh thng
nh thc bng WDT
nh thc SLEEP bng ngt

B
m
chng trnh
000h
000h

Thanh
ghi
trng thi
0001 1xxx
000u uuuu

000h

0001 0uuu

000h
PC + 1
PC + 1 (1)

0000 1uuu
uuu0 0uuu
uuu1 0uuu

Bng 8.3 iu kin ngt ca PC v thanh ghi STATUS

Thanh ghi

a
ch

Reset m Reset MCLR khi :


nh thc SLEEP
my
Bng ngt
Hot ng bnh thng
Bng
WDT
SLEEP
Reset WDT khi hot ng
bnh thng

Xxxx xxxx

Uuuu uuuu

Uuuu uuuu

Khi nh thc bng ngt v bt GIE c t, PC c np vc t ngt 0004h

111

INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
EEDATA
EEADR
PCLATH
INTCON
INDF
OPTION_REG
PCL
STATUS
FSR
TRISA
TRISB
EECON1
EECON2
PCLATH
INTCON

00h
01h
02h
03h
04h
05h
06h
08h
09h
0Ah
0Bh
80h
81h
82h
83h
84h
85h
86h
88h
89h
8Ah
8Bh

---- ---xxxx xxxx


0000h
0001 1xxx
xxxx xxxx
---x xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
---0 0000
0000 000x
---- ---1111 1111
0000h
0001 1xxx
xxxx xxxx
---1 1111
1111 1111
---0 x000
---- ------0 0000
0000 000x

---- ---uuu uuuu


0000h
000q quuu
uuuu uuuu
---u uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
---0 0000
0000 000u
---- ---1111 1111
0000h
000q quuu
uuuu uuuu
---1 1111
1111 1111
---0 q000
---- ------0 0000
0000 000u

---- ---uuuu uuuu


PC + 1 (1)
uuuq quuu (2)
uuuu uuuu
---u uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
---u uuuu
uuuu uuuu (3)
---- ---uuuu uuuu
PC + 1
uuuq quuu
uuuu uuuu
---u uuuu
uuuu uuuu
---0 uuuu
---- ------u uuuu
uuuu uuuu (3)

Bng 8.4 Cc iu kin reset i vi tt c cc thanh ghi

8.4 Khi ng khi m my (POR)


Mt xung POR c to ra trong chip khi tng ca VDD c nhn dng (trong
khong 1,2 V 1,7 V). t c u im ca POR, chn MCLR phi ni trc tip
(hoc ngang qua in tr) n VDD, vic ny s loi b cc linh kin RC ghp thm bn
ngoi vn thng c dng to reset khi m my. VDD phi t thi gian tng ti
thiu bo m hot ng ph hp.
Khi thit b bt u hot ng bnh thng (tn ti iu kin reset) th cc thng s
in p, nhit , tn s phi c gi tr thch hp bo m hot ng. Nu cc
thng s ny khng t yu cu th thit b phi c duy tr trng thi reset. Mch
POR khng to ra reset bn trong khi in p ngun nui VDD gim xung.

8.5 B nh thi tng ngun (PWRT)


B nh thi tng ngun (Powerup Timer) to ra mt thi gian tr c nh TPWRT l
75 mS t POR. B nh thi ny hot ng vi mch dao ng RC bn trong. Chip c
duy tr trng thi reset cho n khi PWRT tc ng, thi gian PWRT cho php VDD
tng n mt mc chp nhn c (hnh 8.13).
Bt cu hnh PWRTE cho php hoc khng cho php PWRT, Xem hnh 8.1 hoc
hnh 8.2 v chc nng ca bt PWRTE i vi mt thit b c bit.
Thi gian tr hon tng nghun TPWRT thay i ty theo thit b do VDD, nhit v
nhng thay i x l.

8.6 B nh thi khi ng dao ng (OST)


B nh thi khi ng dao ng (Oscilator Start-up Timer) to ra mt thi gian tr
bng 1024 chu k dao ng (t ng vo OSC1) sau khi kt thc tr hon PWRT bo
m dao ng thch anh hoc dao ng gm c khi ng v n nh.
Thi gian OST (TOST) ch c yu cu trong cc ch XT, LP v HS v khi m my
hoc nh thc t trng thi SLEEP.
Khi VDD tng ln qu chm c th dn n thi gian TPWRT v TOST kt thc trc khi
VDD t gi tr cui cng. Trong trng hp ny (hnh 8.13) c th phi cn thm mt
mch reset m my bn ngoi (hnh 8.9).
1
2
3

Khi nh thc do ngt ngoi v bt GIE c t th PC c np vc t ngt l 0004h

Bng 8.3 lit k gi tr reset cho mi iu kin xc nh


Mt hoc nhiu bt ca INTCON b nh hng ( nh thc)

112

Hnh 8.9 Mch reset m my


bn ngoi (khi VDD tng chm)

Hnh 8.10 th thi gian tng ngun ( MCLR khng ni ln VDD) : Trng hp 1

113

Hnh 8.11 th thi gian tng ngun ( MCLR khng ni ln VDD) : Trng hp 2

Hnh 8.12 Thi gian tng ngun ( MCLR ni ln VDD) : VDD tng nhanh

Hnh 8.13 Thi gian tng ngun ( MCLR ni ln VDD) : VDD tng chm

114

8.7 Thi gian tr hon v cc bt trng thi h ngun T0 / PD


Thi gian tr khi tng ngun (hnh 8.10 8.13) din tin nh sau : Trc tin, bt
u thi gian tr PWRT sau khi POR kt thc. Sau OST tc ng. Tng thi gian tr
hon thay i theo cu hnh dao ng v trng thi bt cu hnh PWRTE. V d trong ch
dao ng RC v bt PWRTE khng cho php th khng c thi gian tr hon.

Bng 8.5 Thi gian tr hon ti cc


trng thi khc nhau

K t khi thi gian tr bt u sau xung POR. Nu thi gian duy tr mc thp ca

MCLR lu th thi gian tr s kt thc. Sau khi MCLR ln mc cao. Mch lp tc hot
ng (hnh 8.10). iu ny rt hu dng cho yu cu kim tra hoc ng b nhiu thit b
PIC16F8x khi lm vic song song vi nhau.
Bng 8.6 cho thy ngha ca cc bt T0 v PD . Bng 8.3 lit k cc iu kin
reset i vi mt s cc thanh ghi c bit trong khi bng 8.4 th lit k i vi tt c cc
thanh ghi

8.8 Reset khi st p ngun (Brown-out)


y l hin tng in p ngun st thp hn gi tr ti thiu nhng sau phc
hi tr li, trong trng hp ny nn duy tr thit b trng thi reset.
reset PIC16F8x khi xy ra st p cn phi thm mt mch bo v bn ngoi nh trnh
by trong hnh 8.14 v 8.15

Hnh 8.14 S bo v st p 1

115

Hnh 8.15 S bo v st p 2

8.9 Tn hiu ngt


PIC16F8x c bn ngun tn hiu ngt :
Chn ngt ngoi RB0/INT
Ngt timer TMR0
Cc ngt thay i PORTB (chn RB7:RB4)
Ngt hon tt qu trnh ghi vo b nh d liu EEPROM
Thanh ghi iu khin ngt INTCON ghi nh cc yu cu ngt ring bit vo cc bt
c. Thanh ghi ny cn cha bt cho php ngt ton cc v cho php tng ngt.
Bt cho php ngt ton cc GIE (INTCON<7>) khi c t s cho php tt c cc ngt
v s cm tt c cc ngt khi b xa. Cc ngt ring c th b cm bi bt cho php ngt
tng ng trong thanh ghi INTCON. Bt GIE b xa khi reset.
Lnh tr v t chng trnh phc v ngt RETPIE s t bt GIE cho php tr li
cc ngt.

Hnh 8.16 S logic ngt

116

Hnh 8.17 th thi gian chn INT

8.9.1 Ngt INT


Ngt ngoi ti chn RB0/INT tc ng bng cnh : Cnh ln nu bt INTEDG
(OPTION_REG<6>) c t hoc ti cnh xung nu bt ny b xa. Khi mt cnh hp
l xy ra trn chn INT th bt INTF s c t (INTCON<1>). Ngt ny c th b cm
bng cch xa bt iu khin INTE (INTCON<4>). C ngt INTF phi c xa bng
phn mm trong chng trnh phc v ngt trc khi ngt ny c cho php tr li.
Ngt INT c th nh thc vi iu khin khi trng thi SLEEP ch khi no bt INTE
c t trc i vo trng thi SLEEP. Trng thi ca bt GIE quyt nh s r
nhnh ca vi iu khin n vc t ngt sau khi thc dy.
8.9.2 Ngt TMR0
Khi xy ra trn t FFh 00h trong TMR0 s t bt c T0IF (INTCON<2>) ngt c
th c cho php hoc cm bng cch t hoc xa bt T0IF (INTCON<5>)
8.9.3 Ngt PORT RB
Mt s thay i trn PORT<7:4> s t c bt RBIF (INTCON<0>). Ngt c th
c cho php hoc cm bng cch t hoc xa bt RBIE (INTCON<3>)
Lu :
S thay i trn chn I/O port ch c nhn ra khi b rng xung nh nht phi
bng TCY

8.10 Lu tr ni dung trong khi ngt


Trong khi ngt, ch c gi tr tr v ca PC ck lu tr trong ngn xp. Trong
trng hp ngi dng mun lu ni dung thanh ghi kha trong thi gian mt ngt v d :
Thanh ghi W v thanh ghi STTUS th c th thc hin yu cu ny bng phn mm.
V d 8-1 lu tr v phc hi ni dung ca thanh ghi trng thi v thanh ghi W. Ngi
dng nh ngha cc thanh ghi W_TEMP v STATUS_TEMP l cc v tr lu tr tm
ca thanh ghi W v thanh ghi STATUS.
V d 8-1 : Lu tr thanh ghi W v STATUS trong RAM
PUSH MOVWF
W_TEMP
; Copy W vo thanh ghi tm

117

SWAPF

STATUS, W ; Hon chuyn trng thi c lu


; vo W
STATUS_TEMP
; Lu trng thi vo
; thanh ghi STATUS_TEMP
;
;
;
STATUS_TEMP, W ; Hon chuyn bn bt
; trong thanh ghi STATUS_TEMP
; v t kt qu vo W
STATUS
; Chuyn W vo thanh ghi STATUS
W_TEMP, F ; Hon chuyn 4 bt trong W_TEMP
; v t kt qu vo W_TEMP
W_TEMP, W ; Hon chuyn 4 bt trong W_TEMP
; v t kt qu vo W

MOVWF
ISR

POP

:
:
SWAPF
MOVWF
SWAPF
SWAPF

Kt qu ca v d 8-1 :
a) Ct thanh ghi W
b) Ct thanh ghi STTUS vo STATUS_TEMP
c) Thc hin chng trnh phc v ngt
d) Phc hi thanh ghi STATUS
e) Phc hi thanh ghi W

8.11 B nh thi canh chng


B nh thi canh chng WDT l mt mch dao ng a hi t kch RC tch hp
trn chip v khng cn thm linh kin bn ngoi. Mch dao ng ny c lp vi mch
dao ng RC ti chn OSC1/CLKIN, iu ny c ngha l WDT vn chy trong khi khng
c xung ng h cc chn OSC1 v OSC2. V d khi thc hin lnh SLEEP. Trong ch
lm vic bnh thng thi gian tr WDT s to ra tn hiu reset thit b. Nu thit b
ang trong trng thi SLEEP tn hiu WDT s nh thc thit b tr v trng thi hot
ng bnh thng. WDT c th b cm bng cch lp trnh bt cu hnh WDTE l 0.
8.11.1 Chu k WDT
WDT c thi gian tr danh nh l 18 mS (khng c nh thang), thi gian ny thay
i theo nhit , VDD v phng php x l tng thit b (xem c tnh DC). Nu cn
thi gian tr di hn, mt b nh thang vi t s chia ln n 1:128 c th c gn cho
WDT thng qua phn mm bng cch ghi vo thanh ghi OPTION_REG v thi gian tr c
th ln n 2, 3 giy.
Cc lnh CLRWDT v SLEEP s xa WDT v b nh thang (nu c gn cho
WDT) ngn thi gian tr v to ra tn hiu reset.
Bt T0 trong thanh ghi trng thi s b xa trong thi gian tr WDT
8.11.2 Lp trnh WDT
Khi lp trnh nn quan tm n cc iu kin xu nht (VDD = min; nhit max, b
nh thang max) cn vi giy trc khi xy ra WDT
a
ch
2007
h
81h

Tn
Bt cu
hnh
OPTIO
N_RE
G

Bt 7

Bt 6

Bt 5

Bt 4

Bt 3

Bt 2

Bt 1

Bt 0

Gi tr khi
m my

(2)

(2)

(2)

(2)

PWRTE
1
( )

WDTE

FOSC1

FOSC0

( )

REP0

INT
EDG

T0CS

T0SE

PSA

PS2

PS1

PS0

1111 1111

Bng 8.7 Cc thanh ghi tng ng vi WDT

1
2

Xem chc nng ca bt PWRTE hnh 8.1 v 8.2


Xem chc nng cc bt bo v m lnh v d liu hnh 8.1; 8.2 v mc 8.13

118

Gi tr khi
reset

1111
1111

Hnh 8.18 S khi WDT

8.12 Ch h ngun (SLEEP)


Mt thit b c th c h ngun (SLEEP) v sau tng ngun tr li (thc dy)
tip tc hot ng bnh thng.
8.12.1 Ng (SLEEP)
vo ch h ngun phi thc hin lnh SLEEP, WDT s b xa (nhng vn
ang chy), bt PD (STATUS<3>) b xa, bt T0 (STATUS<4>) c t v tt mch
iu khin dao ng. Cc cng I/O duy tr trng thi c trc khi lnh SLEEP c
thc hin (high, low hoc high Z).
Dng tiu th gim xung n mc nh nht trong trng thi SLEEP, cc chn I/O
c t ln VDD hoc VSS v khng cp dng ra mch ngoi, xung ng h ngoi b
cm, cc chn I/O vo c trng thi Z cao nn c ni ln mc cao hoc xung mc
thp t bn ngoi trnh dng in chuyn mch to ra bi cc ng vo trng. Ng
vo T0CK1 cng nn ni n VDD hoc VSS. Cng nn lu n cc mch ko ln ti port
B bn trong chip.
Chn MCLR phi mc cao (VIHMC). Nn lu rng mt tn hiu reset to ra t
thi gian tr WDT s khng a MCLR xung mc thp.
8.12.2 nh thc t trng thi SLEEP
Thit b c th c nh thc t trng thi SLEEP bi cc s kin sau y :
1. Reset bn ngoi ti chn MCLR
2. WDT (nu WDT c cho php)
3. Ngt t chn RB0/INT, s thay i port RB hoc khi hon tt qu trnh ghi d
liu EEPROM.
Cc thit b ngoi vi khng th to ra ngt trong khi SLEEP v khng c xung ng
h trong chip.
S kin u tin (reset MCLR ) s gy nn mt reset cho thit b. Hai s kin sau
c xem nh l mt phn m rng ca vic thc thi chng trnh. Cc bt T0 v PD c
th c dng xc nh nguyn nhn reset thit b. Bt PD c t khi tng ngun v
119

b xa khi cn SLEEP. Bt T0 b xa nu xut hin thi gian tr WDT (v gy ra tn hiu


nh thc).
Trong khi lnh SLEEP ang c thc hin, lnh k tip (PC + 1) c c vo.
Mun nh thc thit b bng ngt th bt cho php ca ngt tng ng phi c t.
Vic nh thc xy ra bt chp trng thi bt cho php ton cc GIE. Nu bt GIE b xa,
thit b s tip tc thc hin lnh theo sau lnh SLEEP. Nu bt GIE c t, thit b s
thc hin lnh sau lnh SLEEP v sau nhy n a ch ngt 0004h. Trong trng hp
khng mun thc hin lnh sau lnh SLEEP th nn t mt lnh NOP sau lnh SLEEP.

Hnh 8.19 nh thc bng ngt

8.12.3 nh thc bng cc ngt


Khi cc ngt ton cc b cm (GIE b xa) v mt ngun ngt no c c hai bt
cho php v c ngt c t th mt trong nhng iu sau y s xy ra :
Nu ngt xy ra trc khi thc hin lnh SLEEP, lnh SLEEP s ging nh lnh
NOP. Do , WDT v b nh thang WDT s khng b xa, bt T0 khng c

t v bt PD khng b xa
Nu ngt xy trong hoc sau khi thc hin lnh SLEEP, thit b s c nh
thc ngay lp tc khi trng thi SLEEP. Lnh SLEEP s c hon tt trc
khi thc dy. Do , WDT v b nh thang WDT s b xa, bt T0 c t v

bt PD b xa.
Mc d cc c c kim tra trc khi thc hin lnh SLEEP nhng chng c th
c t trc khi lnh SLEEP hon tt . xc nh lnh SLEEP c thc hin
hay cha th phi kim tra bt PD . Nu PD c t th lnh SLEEP c thc hin
nh mt lnh NOP.
chc chn WDT b xa, nn thc hin lnh CLRWDT trc lnh SLEEP.

8.13 Kim li chng trnh Bo v m lnh


Nu cc bt bo v m lnh khng c lp trnh th b nh chng trnh c th
c c ra phc v yu cu kim tra li.
Lu : Microchip khng khuyn khch bo v m lnh cc thit b n l.

8.14 V tr ID
C 4 nh c thit k lu tr cc s kim tra hoc cc m nhn dng khc.
Nhng v tr ny khng th truy cp khi ang hot ng bnh thng m ch c th c
hoc ghi trong khi ang lp trnh. Ch c 4 bt bt thp trong cc v tr ny s dng.

120

i vi cc thit b loi ROM, cc gi tr ny l m ca ROM

8.15 Lp trnh ni tip trong h thng


H vi iu khin PIC16F8x c th lp trnh ni tip ngay trn mch ng dng cui.
Vic ny c thc hin mt cch n gin bng hai ng truyn xung ng h v d
liu v 3 ng khc l ngun, GND v in p lp trnh. Ngi dng c th sn xut cc
board mch vi cc thit b cha c lp trnh v sau np chng trnh vo vi iu
khin trc khi phn phi sn phm. Kh nng ny cho php np hu ht cc chng
trnh to sn c to sn trc hoc cc chng trnh theo ngi dng.
Thit b c chuyn vo ch np/kim tra. B m chng trnh PC tr n v
tr 00h, sau mt lnh 6 bt c gi n thit b v sau d l d liu 14 bt gi n
hoc c ra t thit b bng cc lnh np hoc c

Hnh 8.20 S kt ni lp trnh ni tip


trong h thng

i vi cc thit b ROM, c 2 b
nh chng trnh v b nh d liu
EEPROM u cho php c nhng
ch c b nh EEPROM cho php
np

9. TP LNH
Mi lnh ca PIC16Cxx l mt t di 14 bt gm c phn m cng tc xc nh thao
tc cn thc hin v mt hoc nhiu ton hng cn thit cho thao tc d. Tm tt tp lnh
ca PIC16Cxx trong bng 9.2 lit k cc lnh byte, lnh bt, k t v cc lnh iu khin.
Bng 9.1 trnh by cc m t vng m lnh.
i vi cc lnh byte. f biu din mt thanh ghi c ch nh v d l ch, thanh
ghi c ch nh l thanh ghi c lnh s dng.
ch l ni t kt qu ca php tnh. Nu d bng 0 th kt qu c t vo thanh
ghi W, nu d bng 1 th kt qu c t vo thanh xc nh trong lnh
i vi cc lnh bt, b biu din mt vng bt c ch nh, vng bt ny chn s
bt b nh hng bi thao tc. Trong khi f biu din s file trong cha cc bt.
i vi cc thao tc hng s v iu khin, k biu din mt hng 8 bt hoc 11 bt
hoc gi tr k t.
Vng
f
w
b
k
x
d
label
TOS

M t
a ch tp thanh ghi 0x00 n 0x7f
Thanh ghi lm vic (b tch ly
a ch bt trong mt thanh ghi 8 bt
Vng hng s, hng d liu hoc nhn
Vng khng xc inh (= 0 hoc 1)
ch chn, d = 0 : kt qu lu vo W
D = 1 : kt qu lu vo thanh ghi f. Mc nh d = 1
Tn nhn
nh ngn xp

121

PC
PCLATH
GIE
WDT

T0

B m chng trnh
Cht phn cao b m chng trnh
Bt cho php ngt ton cc
Watchdog Timer/Counter
Bt thi gian tr

PD
dest
[]
()

<>

nghing

Bt h ngun
ch hoc thanh ghi w hoc v tr tp thanh ghi xc nh
Ty chn
Ni dung
Gn n
Vng bt
Trong tp hp ca
K hiu c nh ngha bi ngi dng
Bng 9.1 M t vng m lnh

Tp lnh c tnh trc giao cao v c chia thnh 3 nhm :


Nhm lnh byte
Nhm lnh bt
Nhm lnh hng s v iu khin
Tt c cc lnh c thc hin trong vng mt chu k lnh tr phi mt php th
iu kin l ng hoc b m chng trnh b thay i do mt lnh. Trong trng hp
ny thi gian thc hin l hai chu k lnh vi chu k th hai ging nh mt lnh NOP.
Mt chu k lnh bao gm 4 chu k ng h. V vy vi tn s ng h l 4 MHz th thi
gian thc hin mt lnh l 1 S.
Bng 9.2 lit k cc lnh c nhn ra bi trnh dch hp ng MPASM. Bng 9.1
cho thy cc dng tng qut ca cc lnh.
Lu :
duy tr kh nng tng thch vi cc sn phm PIC16Cxx trong tng lai, khng
nn dng cc lnh OPTION v TRIS
Tt c cc v d dng dng thc sau y biu din s thp lc phn
0xhh
Trong h l mt k s hexa

122

Hnh 9.1 Dng tng qut cc lnh

123

Lnh gi nh

M t

Nhm lnh byte v tp thanh ghi


ADDWF f, d
Cng w vi f
ANDWF f, d
AND w vi f
CLRF f
Xa f
CLRW
Xa w
COMF f, d
B f
DECF f, d
Gim f
DECFSZ f, d
Gim f, b qua nu bng 0
INCF f, d
Tng f
INCFSZ f, d
Tng f, b qua nu bng 0
IORWF f, d
OR w vi f
MOVF f, d
Chuyn f
MOVWF f
Chuyn w vo f
NOP
Khng lm g c
RLF f, d
Dch tri f ngang qua Cy
RRF f, d
Dch phi f ngang qua Cy
SUBWF f, d
Tr w cho f
SWAPF f, d
Hon chuyn 4 bt trong f
XORWF f, d
XOR w vi f
Nhm lnh bit v tp thanh ghi
BCF f, b
Xa bt f
BSF f, b
Set bt f
BTFSC f, b
Kim tra bt f, b qua nu xa
BTFSS f, b
Kim tra bt f, b qua nu set
Nhm lnh hng s v iu khin
ADDLW k
Cng hng s vi w
ANDLW k
AND hng s vi w
CALL k
Gi chng trnh con
CLRWDT
Xa WDT

Chu
k

M 14 bt
MSB

1
1
1
1
1
1
1(2)
1
1(2)
1
1
1
1
1
1
1
1
1

00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0111
0101
0001
0001
1001
0011
1011
1010
1111
0100
1000
0000
0xx0
1101
1100
0010
1110
0110

dfff ffff
dfff ffff
1fff ffff
0xxx xxxx
dfff ffff
dfff ffff
dfff ffff
dfff ffff
dfff ffff
dfff ffff
dfff ffff
1fff ffff
0000
dfff ffff
dfff ffff
dfff ffff
dfff ffff
dfff ffff

1
1
1(2)
1(2)

01
01
01
01

00bb
01bb
10bb
11bb

bfff
bfff
bfff
bfff

1
1
2

11
11
10
00

111x
1001
0kkk
0000

kkkk
kkkk
kkkk
0110

kkkk
kkkk
kkkk
0100

1kkk
1000
00xx
0000
01xx
0000
0000

kkkk
kkkk
kkkk
0000
kkkk
0000
0110

kkkk
kkkk
kkkk
1001
kkkk
1000
0011

LSB

Bt nh
hng

Ghi
ch

C,DC,Z
Z
Z
Z
Z
Z

1, 2
1, 2
2

Z
Z
Z

C
C
C,DC,Z
Z

ffff
ffff
ffff
ffff

GOTO k
IORLW k
MOVLW k
RETFIE
RETLW k
RETURN
SLEEP

Nhy n a ch
OR hng s vi w
Chuyn hng s vo w
Tr v t chng trnh ngt
Tr v vi hng s trong w
Tr v t chng trnh con
Vo ch ng

2
1
1
2
2
2
1

10
11
11
00
11
00
00

SUBLW k
XORLW k

Tr w cho hng s
XOR w vi hng s

1
1

11 110x kkkk kkkk


11 1010 kkkk kkkk

1, 2
1, 2
1,2,3
1, 2
1,2,3
1, 2
1, 2

1, 2
1, 2
1, 2
1, 2
1, 2
1, 2
1, 2
3
3

C,DC,Z
Z
T0 , PD

T0 , PD
C.DC.Z
Z

Ghi ch 1 : Khi mt thanh ghi I/O c thay i nh hm ca chnh n VD: MOVF PORT,
1 th gi tr c s dng chnh l gi tr ti chn ca n. VD: Nu cht a ch
l 1 i vi 1 chn c cu hnh l ng vo v c ko xung thp bi
thit b ngoi th d liu s c ghi vo tr li l 0
Ghi ch 2 : Nu lnh ny c thc hin trn thanh ghi TMR0 v d =1 th b nh thang
s b xa nu ang c gn cho Timer0
Ghi ch 3 : Nu PC b thay i hoc mt kim tra iu kin l ng th lnh cn n 2 chu
k my, chu k th hai c thc hin nh 1 lnh NOP
Bng 9.2 Tp lnh PIC16Fxx

ADDLW
C php :
Ton hng :
Thao tc :
Bt nh hng :

124

Cng hng s vi W
[label] ADDLW k
0 k 255
(W) + k (W)
C, DC, Z

M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

V d :

ADDWF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :

11

111x

Q1
Gii m

Q2
c hng k

00

0111

dfff

ffff

Cng ni dung ca thanh ghi W vi thanh ghi f . Nu d l 0 th


kt qu c cha trong thanh ghi W. Nu d l 1 th kt qu
c cha tr li trong thanh ghi f
1
1
Q2
Q3
c thanh ghi
X l d liu
f

Gii m

ANDLW
C php :
Ton hng :
Thao tc :
Bt nh hng :

AND hng s vi W
[label] ANDLW k
0 k 255
(W) AND (k) (W)
Z

Words :

Q4
Ghi vo W

Cng W vi f
[label] ADDWF f, d
0 f 127
d [0,1]
(W) + (f) (ch)
C, DC, Z

V d :

M t :

Q3
X l d liu

ADDLW 0x15
Trc khi thc hin lnh :
W = 0x10
Sau khi thc hin lnh :
W = 0x25

ADDWF FSR, 0
Trc khi thc hin lnh :
W = 0x17
FSR = 0xC2
Sau khi thc hin lnh :
W = 0xD9
FSR = 0xC2

M lnh :

kkkk

Ni dung ca thanh ghi W c cng vi hng s k 8 bt v kt


qu c t vo thanh ghi W
1
1

Q1
Chu k hot ng Q :

kkkk

11

1001

kkkk

Q4
Ghi vo ch

kkkk

Ni dung ca thanh ghi W c AND vi hng s k 8 bt v kt


qu c t vo thanh ghi W
1
125

Cycles :
Chu k hot ng Q :

V d :

ANDWF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :

1
Q1
Gii m

Q2
c hng k

V d :

BCF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :

126

Q4
Ghi vo W

ANDLW 0x5F
Trc khi thc hin lnh :
W = 0xA3
Sau khi thc hin lnh :
W = 0x03
AND W vi f
[label] ANDWF f, d
0 f 127
d [0,1]
(W) AND (f) (ch)
Z
00

0101

dfff

ffff

AND ni dung ca thanh ghi W vi thanh ghi f . Nu d l 0 th


kt qu c cha trong thanh ghi W. Nu d l 1 th kt qu
c cha tr li trong thanh ghi f
1
1
Q1

Chu k hot ng Q :

Q3
X l d liu

Q2
Q3
c thanh ghi
X l d liu
f

Gii m

ANDWF FSR, 1
Trc khi thc hin lnh :
W = 0x17
FSR = 0xC2
Sau khi thc hin lnh :
W = 0x17
FSR = 0x02
Xa bt f
[label] BCF f, b
0 f 127
0b7
0 (f<b>)
khng
01

00bb

bfff

Xa bt b trong thanh ghi f


1
1

ffff

Q4
Ghi vo ch

Q1
Chu k hot ng Q :

V d :

BSF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :

Q2
Q3
c thanh ghi
X l d liu
f

Gii m

BCF FLAG_REG, 7
Trc khi thc hin lnh :
FLAG_REG = 0xC7
Sau khi thc hin lnh :
FLAG_REG = 0x47
t bt f
[label] BSF f, b
0 f 127
0b7
1 (f<b>)
khng
01

01bb

V d :

BTFSC
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :

Words :
Cycles :

bfff

ffff

t bt b trong thanh ghi f


1
1
Q1

Chu k hot ng Q :

Q4
Ghi
vo
thanh ghi f

Q2
Q3
c thanh ghi
X l d liu
f

Gii m

Q4
Ghi
vo
thanh ghi f

BSF FLAG_REG, 7
Trc khi thc hin lnh :
FLAG_REG = 0x0A
Sau khi thc hin lnh :
FLAG_REG = 0x8A
Kim tra bt, b qua nu xa
[label] BTFSC f, b
0 f 127
0b7
B qua nu (f<b>) = 0
khng
01

10bb

bfff

ffff

Nu bt b trong thanh ghi f l 1 th thc hin lnh k tip


Nu bt b trong thanh ghi f l 0 th b qua lnh k tip v thay
vo l thc hin lnh NOP. Lc ny thi gian thc hin cn 2
TCY
1
1 (2)

127

Q1

Chu k hot ng Q :

Q2
c thanh ghi
Gii m
f
Nu b qua (chu k th 2)
Q1
Q2
NOP
NOP

Q3

Q4

X l d liu

NOP

Q3
NOP

Q4
NOP

HERE
FALSSE
TRUE

V d :

BTFSS
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :

Words :
Cycles :
Chu k hot ng Q :

BTFSC FLAG, 1
GOTO PROCESS_CODE
*
*
*
Trc khi thc hin lnh
PC = a ch ca HERE
Sau khi thc hin lnh
Nu FLAG<1> = 0
PC = a ch ca TRUE
Nu FLAG<1> = 1
PC = a ch ca FALSSE
Kim tra bt, b qua nu t
[label] BTFSS f, b
0 f 127
0b7
B qua nu (f<b>) = 1
khng
01

11bb

bfff

ffff

Nu bt b trong thanh ghi f l 0 th thc hin lnh k tip


Nu bt b trong thanh ghi f l 1 th b qua lnh k tip v thay
vo l thc hin lnh NOP. Lc ny thi gian thc hin cn 2
TCY
1
1 (2)
Q1

Q2
c thanh ghi
Gii m
f
Nu b qua (chu k th 2)
Q1
Q2
NOP
NOP
V d :

128

HERE
FALSSE
TRUE

Q3

Q4

X l d liu

NOP

Q3
NOP

Q4
NOP

BTFSS FLAG, 1
GOTO PROCESS_CODE
*
*
*
Trc khi thc hin lnh
PC = a ch ca HERE
Sau khi thc hin lnh

Nu FLAG<1> = 0
PC = a ch ca FALSSE
Nu FLAG<1> = 1
PC = a ch ca TRUE
CALL
C php :
Ton hng :
Thao tc :

Bt nh hng :
M lnh :
M t :

Words :
Cycles :
Chu k hot ng Q :

Gi chng trnh con


[label] CALL k
0 k 2047
(PC) + 1 TOS
k PC<10:0>
(PCLATH<4:3>) PC<12:11>
khng
10

0kkk

Kkkk

Gi chng trnh con : Trc tin, a ch tr v (PC + 1) c


ct vo ngn xp. a ch tc thi 11 bt c np vo cc bt
PC<10:0>, cc bt cao ca pC c np t PCLATH. Lnh
CALL cn hai chu k lnh
1
2
Q1
Gii m
NOP

Q2
Q3
c k, ct
PC vo ngn X l d liu
xp

Q4

NOP

NOP

V d :

HERE
CALL THERE
Trc khi thc hin lnh
PC = a ch ca HERE
Sau khi thc hin lnh
PC = a ch ca THERE
TOS = a ch HERE +1

CLRF
C php :
Ton hng :
Thao tc :

Xa f
[label] CLRF f
0 f 127
00h (f)
1Z
Z

Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

kkkk

00

0001

1fff

NOP

Ghi vo PC

ffff

Xa ni dung thanh ghi f v t bt Z


1
1
Q1
Gii m

Q2
Q3
c thanh ghi
X l d liu
f

Q4
Ghi
vo
thanh ghi f

129

V d :

CLRF FLAG_REG
Trc khi thc hin lnh
FLAG_REG = 0x5A
Sau khi thc hin lnh
FLAG_REG = 0x00
Z=1

CLRW
C php :
Ton hng :
Thao tc :

Xa w
[label] CLRW
khng
00h (W)
1Z
Z

Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

00

0001

0xxx

xxxx

Xa ni dung thanh ghi w v t bt Z


1
1
Q1

Q2

Q3

Gii m

NOP

X l d liu

V d :

CLRW
Trc khi thc hin lnh
w = 0x5A
Sau khi thc hin lnh
w = 0x00
Z=1

CLRWDT
C php :
Ton hng :
Thao tc :

Xa Watchdog Timer
[label] CLRWDT
khng
00h WDT
0 b nh thang WDT

Q4
Ghi
vo
thanh ghi w

1 T0
1 PD
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

T0 , PD
00

130

0110

0100

Reset WDT v b nh thang ca WDT, t bt T0 v PD


1
1
Q1
Gii m

V d :

0000

Q2
NOP

CLRWDT
Trc khi thc hin lnh
WDT counter = ?
Sau khi thc hin lnh

Q3
X l d liu

Q4
Xa WDT

WDT counter = 0x00


B nh thang WDT = 0

T0 = 1
PD = 1
COMF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

o f
[label] COMF f, d
0 f 127
d [0,1]
( f ) (ch)
Z
00

1001

dfff

o ni dung ca thanh ghi f. Nu d l 0 th kt qu c


cha trong W, nu d l 1 th kt qu c a tr li vo thanh
ghi f
1
1
Q1

Q2
c thanh ghi
f

Gii m
V d :

COMF REG1, 0
Trc khi thc hin lnh
REG1 = 0x13
Sau khi thc hin lnh
REG1 = 0x13
W = 0xEC

DECF
C php :
Ton hng :

Gim f
[label] DECF f, d
0 f 127
d [0,1]
(f) -1 (ch)
Z

Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

00

0011

dfff

Q3

Q4

X l d liu

Ghi vo ch

ffff

Gim ni dung ca thanh ghi f. Nu d l 0 th kt qu c


cha trong W, nu d l 1 th kt qu c a tr li vo thanh
ghi f
1
1
Q1
Gii m

V d :

ffff

Q2
Q3
c thanh ghi
X l d liu
f

Q4
Ghi vo ch

DECF CNT, 1
Trc khi thc hin lnh
CNT = 0x01
Sau khi thc hin lnh

131

CNT = 0x00
Z=1
DECFSZ
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :

Words :
Cycles :
Chu k hot ng Q :

Gim f, b qua nu bng 0


[label] DECFSZ f, d
0 f 127
d [0,1]
(f) -1 (ch)
b qua nu kt qu bng 0
khng
00

1011

dfff

ffff

Gim ni dung ca thanh ghi f. Nu d l 0 th kt qu c


cha trong W, nu d l 1 th kt qu c a tr li vo thanh
ghi f
Nu kt qu bng khc 0 th thc hin lnh k tip, nu kt qu
bng 0 th thc hin lnh NOP, lc ny cn 2TCY
1
1 (2)
Q1

Q2
c thanh ghi
Gii m
f
Nu b qua (chu k th 2
Q1
Q2
NOP
NOP
V d :

DECFSZ CNT, 1
GOTO
LOOP
CONTINUE *
*
*
Trc khi thc hin lnh
PC = a ch HERE
Sau khi thc hin lnh
CNT = CNT - 1
Nu CNT = 0
PC = a ch CONTINUE
Nu CNT 0
PC = a ch HERE + 1

GOTO
C php :
Ton hng :
Thao tc :

Nhy khng iu kin


[label] GOTO k
0 k 2047
K PC<10:0>
PCLATH<4:3> PC<12:11>
khng

Bt nh hng :
M lnh :
M t :

132

Q3

Q4

X l d liu

Ghi vo ch

Q3
NOP

Q4
NOP

HERE

10

1kkk

kkkk

kkkk

Gi tr tc thi 11 bt c np vo cc bt PC<10:0>, cc bt
trn ca PC c np t PCLATH<4:3>, lnh ny cn 2 chu k

Words :
Cycles :
Chu k hot ng Q :

1
2

V d :

GOTO THERE
Sau khi thc hin lnh
PC = a ch ca THERE

INCF
C php :
Ton hng :

Tng f
[label] INCF f, d
0 f 127
d [0,1]
(f) + 1 (ch)
Z

Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

Q1
Gii m
NOP

00

Q2
c k
NOP

1010

dfff

Q1

INCF CNT, 1
Trc khi thc hin lnh
CNT = 0xFF
Z=0
Sau khi thc hin lnh
CNT = 0x00
Z=1

INCFSZ
C php :
Ton hng :

Tng f, b qua nu bng 0


[label] INCFSZ f, d
0 f 127
d [0,1]
(f) + 1 (ch)
b qua nu kt qu bng 0
khng

M lnh :
M t :

Words :
Cycles :

ffff

Q2
Q3
c thanh ghi
X l d liu
f

V d :

Bt nh hng :

Q4
Ghi vo PC
NOP

Tng ni dung ca thanh ghi f. Nu d l 0 th kt qu c


cha trong W, nu d l 1 th kt qu c a tr li vo thanh
ghi f
1
1

Gii m

Thao tc :

Q3
X l d liu
NOP

00

1111

dfff

Q4
Ghi vo ch

ffff

Tng ni dung ca thanh ghi f. Nu d l 0 th kt qu c


cha trong W, nu d l 1 th kt qu c a tr li vo thanh
ghi f
Nu kt qu khc 0 th thc hin lnh k tip, nu kt qu bng
0 th thc hin lnh NOP, lc ny cn 2TCY
1
1 (2)
133

Chu k hot ng Q :
Q1

Q2
c thanh ghi
Gii m
f
Nu b qua (chu k th 2)
Q1
Q2
NOP
NOP
V d :

INCFSZ CNT, 1
GOTO
LOOP
CONTINUE *
*
*
Trc khi thc hin lnh
PC = a ch HERE
Sau khi thc hin lnh
CNT = CNT + 1
Nu CNT = 0
PC = a ch CONTINUE
Nu CNT 0
PC = a ch HERE + 1

IORLW
C php :
Ton hng :
Thao tc :
Bt nh hng :

OR hng s vi W
[label] IORLW k
0 k 255
(W) OR (k) (W)
Z

M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

V d :

IORWF
C php :
Ton hng :
Thao tc :
Bt nh hng :

134

Q3

Q4

X l d liu

Ghi vo ch

Q3
NOP

Q4
NOP

HERE

11

1000

kkkk

kkkk

Ni dung ca thanh ghi W c OR vi hng s k 8 bt v kt


qu c t vo thanh ghi W
1
1
Q1
Gii m

Q2
c hng k

IORLW 0x35
Trc khi thc hin lnh :
W = 0x9A
Sau khi thc hin lnh :
W = 0xBF
Z=1
OR W vi f
[label] IORWF f, d
0 f 127
d [0,1]
(W) OR (f) (ch)
Z

Q3
X l d liu

Q4
Ghi vo W

M lnh :
M t :
Words :
Cycles :

00

0100

V d :

MOVF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :

Words :
Cycles :

Q2
Q3
c thanh ghi
X l d liu
f

Gii m

00

1000

dfff

ffff

Chuyn ni dung thanh ghi f vo ch. Nu d l 0 th kt qu


c cha trong thanh ghi W. Nu d l 1 th kt qu c
cha tr li trong thanh ghi f. d =1 thng c dng th
mt thanh ghi do bt Z b nh hng
1
1
Q2
Q3
c thanh ghi
X l d liu
f

Gii m

MOVF FSR, 0
Sau khi thc hin lnh :
W = gi tr ca thanh ghi FSR
Z=1

MOVLW
C php :
Ton hng :
Thao tc :
Bt nh hng :

Chuyn hng s vo W
[label] MOVLW k
0 k 255
k (W)
khng

M t :

Ghi vo ch

Chuyn f
[label] MOVF f, d
0 f 127
d [0,1]
(f) (ch)
Z

V d :

M lnh :

Q4

IORWF RESULT, 0
Trc khi thc hin lnh :
W = 0x91
RESULT = 0x13
Sau khi thc hin lnh :
W = 0x93
RESULT = 0x13
Z=1

Q1
Chu k hot ng Q :

ffff

OR ni dung ca thanh ghi W vi thanh ghi f . Nu d l 0 th


kt qu c cha trong thanh ghi W. Nu d l 1 th kt qu
c cha tr li trong thanh ghi f
1
1
Q1

Chu k hot ng Q :

dfff

11

00xx

kkkk

Q4
Ghi vo ch

kkkk

Np hng s 8 bt vo W, nhng gi tr khng xc nh c


135

Words :
Cycles :
Chu k hot ng Q :

hp dch l 0
1
1
Q1
Gii m

Q2
c hng k

V d :

MOVLW 0x5A
Sau khi thc hin lnh :
W = 0x5A

MOVWF
C php :
Ton hng :
Thao tc :
Bt nh hng :

Chuyn W vo f
[label] MOVWF f
0 f 127
(W) (f)
khng

M lnh :
M t :
Words :
Cycles :

00

0000

Gii m

MOVWF OPTION_REG
Trc khi thc hin lnh :
W = 0x4F
OPTION = 0xFF
Sau khi thc hin lnh :
W = 0x4F
OPTION = 0x4F

NOP
C php :
Ton hng :
Thao tc :
Bt nh hng :

Khng lm g c
[label] NOP
khng
Khng lm g c
khng

M t :
Words :
Cycles :
Chu k hot ng Q :
V d :
136

ffff

Q2
Q3
c thanh ghi
X l d liu
W

V d :

M lnh :

Q4
Ghi vo W

Chuyn ni dung thanh ghi W vo thanh ghi f


1
1
Q1

Chu k hot ng Q :

dfff

Q3
X l d liu

00

0000

0xx0

Q4
Ghi
vo
thanh ghi f

0000

Khng lm g c
1
1
Q1
Gii m
NOP

Q2
NOP

Q3
NOP

Q4
NOP

RETFIE
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

Tr v t ngt
[label] RETFIE
khng
TOS PC
1 GIE
khng
00

0000

0000

nh ngn xp c np vo PC, t bt cho php ngt ton cc


GIE (INTCON<7>), lnh ny 2 chu k
1
2
Q1

Q2

Q3

Gii m

NOP

t bt GIE

NOP

NOP

NOP

V d :

RETFIE
Sau ngt
PC = TOS
GIE = 1

OPTION
C php :
Ton hng :
Thao tc :
Bt nh hng :

Np thanh ghi OPTION


[label] OPTION
khng
(W) OPTION
khng

M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

1001

00

0000

0110

Q4
Ly ra
ngn xp

NOP

0010

Np ni dung thanh ghi W vo thanh ghi OPTION. Lnh ny


c h tr tng thch vi PIC16C5x do OPTION cho php
c/vit nn ngi dng c th nh a ch trc tip
1
1
Q1
Gii m

Q2
NOP

Q3
NOP

Q4
NOP

V d :

Mc ch nhm tng thch vi cc sn phm PIC16Cxx trong


tng lai

RETLW
C php :
Ton hng :
Thao tc :

Tr v vi hng s trong W
[label] RETLW k
0 k 255
K (W)

137

Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

V d :

TOS PC
khng
11

01xx

kkkk

kkkk

Np hng s k 8 bt vo W. np nh ngn xp vo PC (a ch
tr v), lnh ny 2 chu k
1
2
Q1

Q2

Q3

Gii m

c k

NOP

NOP

NOP

NOP

Q4
Ghi vo W,
ly ra t ngn
xp
NOP

CALL TABLE ; W cha gi tr offset ca bng


:
; By gi W l gi tr bng
:
:
TABLE ADDWF PC ; W = offset
RETLW K1 ; Bt u bng
RETLW K2 ;
:
:
RETLW Kn ; Cui bng
Trc khi thc hin lnh
W = 0x07
Sau khi thc hin lnh
W = gi tr ca K8

RETURN
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

V d :

138

Tr v t chng trnh con


[label] RETURN
khng
TOS PC
khng
00

0000

0000

1000

nh ngn xp c np vo PC, lnh ny 2 chu k


1
2
Q1

Q2

Q3

Gii m

NOP

NOP

NOP

NOP

NOP

RETURN

Q4
Ly ra
ngn xp
NOP

Sau khi thc hin lnh


PC = TOS
RLF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :

Quay tri f ngang qua carry


[label] RLF f, d
0 f 127
d [0,1]
Xem m t bn di
C
00

1101

dfff

ffff

M t :

Words :
Cycles :
Chu k hot ng Q :

Ni dung ca thanh ghi f b quay tri 1 bt ngang qua c carry.


Nu d = 0, kt qu c t vo W, nu d =1, kt qu c
t tr li vo thanh ghi f
1
1
Q1
Gii m

Q2
c f

V d :

RLF REG1, 0
Trc khi thc hin lnh
REG1 = 1110 0110
C=0
Sau khi thc hin lnh
REG1 = 1110 0110
W = 1100 1100
C=1

RRF
C php :
Ton hng :

Quay phi f ngang qua carry


[label] RRF f, d
0 f 127
d [0,1]
Xem m t bn di
C

Thao tc :
Bt nh hng :
M lnh :

00

1100

dfff

Q3
X l d liu

Q4
Ghi vo ch

ffff

M t :

Words :
Cycles :
Chu k hot ng Q :
V d :

Ni dung ca thanh ghi f b quay phi 1 bt ngang qua c carry.


Nu d = 0, kt qu c t vo W, nu d =1, kt qu c
t tr li vo thanh ghi f
1
1
Q1
Gii m

Q2
c f

Q3
X l d liu

Q4
Ghi vo ch

RRF REG1, 0

139

Trc khi thc hin lnh


REG1 = 1110 0110
C=0
Sau khi thc hin lnh
REG1 = 1110 0110
W = 0111 0011
C=0
SLEEP
C php :
Ton hng :
Thao tc :

Quay phi f ngang qua carry


[label] SLEEP
khng
00h WDT
0 b nh thang WDT
1 T0
0 PD

Bt nh hng :
M lnh :
M t :

Words :
Cycles :
Chu k hot ng Q :

T0 , PD
00

0000

0110

Bt trng thi h ngun PD b xa, bt trng thi nh thi T0


c t, b nh thi canh chng v b nh thang ca n b
xa
Dao ng ng h ngng hot ng, vi x l i vo ch
SLEEP
1
1
Q1

Q2

Q3

Gii m

NOP

NOP

V d :

SLEEP

SUBLW
C php :
Ton hng :
Thao tc :
Bt nh hng :

Tr W vi hng s
[label] SUBLW k
0 k 255
K (W) (W)
C, DC, Z

M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :
V d 1 :

140

0011

11

110x

kkkk

Q4
i
SLEEP

vo

kkkk

Ni dung ca thanh ghi W b tr (phng php s b 2) t hng


s k 8 bt v kt qu c t vo thanh ghi W
1
1
Q1
Gii m

Q2
c hng k

SUBLW 0x02
Trc khi thc hin lnh :
W=1
C=?

Q3
X l d liu

Q4
Ghi vo W

V d 2 :

V d 3 :

SUBWF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :

Z=?
Sau khi thc hin lnh :
W=1
C = 1 ; kt qu dng
Z=0
Trc khi thc hin lnh
W=2
C=?
Z=?
Sau khi thc hin lnh
W=0
C = 1 ; kt qu l 0
Z=1
Trc khi tr
W=3
C=?
Z=?
Sau khi tr
W = 0xFF
C = 0 ; Kt qu m
Z=0

Tr W t f
[label] SUBWF f, d
0 f 127
d [0,1]
(f) (W) (ch)
C, DC, Z
00

V d 1 :

V d 2 :

dfff

ffff

Tr thanh ghi W t thanh ghi f . Nu d l 0 th kt qu c


cha trong thanh ghi W. Nu d l 1 th kt qu c cha tr
li trong thanh ghi f
1
1
Q1

Chu k hot ng Q :

0010

Gii m

Q2
Q3
c thanh ghi
X l d liu
f

Q4
Ghi vo ch

SUBWF REG1, 1
Trc khi tr
REG1 = 3
W=2
C=?
Z=?
Sau khi tr
REG1 = 1
W=2
C = 1 ; Kt qu dng
Z=0
Trc khi tr
141

V d 3 :

SWAP
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

REG1 = 2
W=2
C=?
Z=?
Sau khi tr
REG1 = 0
W=2
C =1 ; Kt qu l 0
Z=1
Trc khi tr
REG1 = 1
W=2
C=?
Z=?
Sau khi tr
REG1 = 0xFF
W=2
C = 0 ; Kt qu m
Z=0
Hon chuyn 4 bt trong f
[label] SWAP f, d
0 f 127
d [0,1]
(f<3:0>) (ch<7:4>)
(f<7:4>) (ch<3:0>)
khng
00

1100

dfff

4 bt cao v 4 bt thp ca thanh ghi f s hon chuyn cho


nhau. Nu d = 0 th kt qu c cha vo W, nu d =1 th kt
qu c a tr li vo f
1
1
Q1
Gii m

Q2
c f

V d :

SWAP REG, 0
Trc khi thc hin
REG1 = 0xA5
Sau khi thc hin
REG1 = 0xA5
W = 0x5A

TRIS
C php :
Ton hng :
Thao tc :
Bt nh hng :

Np thanh ghi TRIS


[label] TRIS f
0 f 127
(W) TRIS register f
khng

142

ffff

Q3
X l d liu

Q4
Ghi vo ch

M lnh :
M t :
Words :
Cycles :

00

0000

0110

0fff

Lnh c h tr cho yu cu tng thch vi h PIC16C5x


trong tng lai, v cc thanh ghi TRIS cho php c/vit nn c
th nh a ch trc tip
1
1

Chu k hot ng Q :
V d :

Mc ch tng thch trong tng lai

XORLW
C php :
Ton hng :
Thao tc :
Bt nh hng :

XOR hng s vi W
[label] XORLW k
0 k 255
(W) XOR (k) (W)
Z

M lnh :
M t :
Words :
Cycles :
Chu k hot ng Q :

V d :

XORWF
C php :
Ton hng :
Thao tc :
Bt nh hng :
M lnh :
M t :
Words :
Cycles :

11

1010

kkkk

kkkk

Ni dung ca thanh ghi W c XOR vi hng s k 8 bt v kt


qu c t vo thanh ghi W
1
1
Q1
Gii m

Q2
c hng k

Q3
X l d liu

Q4
Ghi vo W

XORLW 0x
Trc khi thc hin lnh :
W = 0x85
Sau khi thc hin lnh :
W = 0x1A
XOR W vi f
[label] XORWF f, d
0 f 127
d [0,1]
(W) XOR (f) (ch)
Z
00

0110

dfff

ffff

XOR ni dung ca thanh ghi W vi thanh ghi f . Nu d l 0 th


kt qu c cha trong thanh ghi W. Nu d l 1 th kt qu
c cha tr li trong thanh ghi f
1
1

143

Q1
Chu k hot ng Q :

V d :

144

Gii m

Q2
Q3
c thanh ghi
X l d liu
f

XORWF REG, 1
Trc khi thc hin lnh :
W = 0x85
REG = 0xAF
Sau khi thc hin lnh :
W = 0x85
REG = 0x1A

Q4
Ghi vo ch

TI LIU THAM KHO


1.

PIC16F8x Data Sheet

MICROCHIP Technology Inc

2.

Gio trnh vi iu khin h PIC

Trn vn Trng

3.

8051 Mikrocontroller erfolgreich anwenden

Jurgen Maier-Wolf

4.

K thut lp trnh C

Phm vn t

5.

AT90S8535 Data Sheet

ATMEL

6.

K thut vi iu khin AVR

Ng din Tp

145

You might also like