Giao Trinh Vi Điều Khiển

Embed Size (px)

DESCRIPTION

Giáo trình Vi điều khiển nâng cao được biên soạn phục vụ cho giảng dạy cao đẳng nghề

Citation preview

  • 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

  • 2

    M ti liu : M quc t ISBN :

    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 khoMI 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

  • 3

    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

  • 4

    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

  • 5

    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

  • 6

    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

  • 7

    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

  • 8

    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

  • 9

    S QUAN H THEO TRNH T HC NGH

    Chnh tr

    PHP LUT

    QuC NG

    TH CHT

    TIN HC

    ANH VN

    Atl

    T chc sn

    Ch to

    MCH IN T

    O L

    L kin in t

    in K Thut

    . t cng sut

    Vi iu khin 1, 2

    kh l tr plc

    Thc hnh PLC

    X l li

    profibus

    U VO U RA

    Cc mn hc chung

    Hai mun b tr

    V IN

    IN C BN

    Mch T nng cao

    My in

    Trang b in

    K.T. Cm bin

    Vi mch PLD

    K thut s

    K thut xung

    Vi mch tng t

    TKM in-in t

    Vi x l

    Tnh ton mch in t c bn

  • 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

  • 11

    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

  • 12

    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)

  • 13

    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 M ASCII 0 048 1 049 2 050 A 065 B 066 a 097 b 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 Phm vi biu din Kch thc Int -32768+32767 2 byte Unsigned int 0...65535 2 byte Long -21474836482147483647 4 byte Unsigned long 04294967295 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 Phm vi biu din Kch thc Float 3.4E-383.4E+38 4 byte Double 1.7E-308...1.7E+308 8 byte

  • 14

    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 l tn kiu d liu enume E1, e2, l tn cc phn t Var_name 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 {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,

    Saturday} day;

    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

  • 15

    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 K t \ \ \\ \ \n xung dng \0 \0 (null) \t tab \b backspace \r CR (v u dng) \f 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

  • 16

    #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.

  • 17

    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 a[10], b[4][2]; Float 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[0][1] b[1][0] b[1][1] b[2][0] b[2][1] b[3][0] 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[0][1] y[0][2] y[1][0] y[1][1] y[1][2] y[2][0] y[2][1] 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] l a[2] b[j+i][2-i] l b[3][0] x[j/i] l x[0] y[i][j] l y[2][1]

  • 18

    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.

  • 19

    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.

    float a[ ] = {2.6, 3, 15} ; int [ ] [ ] = { {25, 31}, {46, 34}, {93, 81} } ;

    3. 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} } ;

  • 20

    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 ;

  • 21

    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

  • 22

    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 hoc toto++ --kiki hoc 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

  • 23

    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 ;

  • 24

    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)

  • 25

    3. C hoc khng c i muc (argument) 4. C hoc khng c tr tr v ( return value) 5. Mi hm ch c mt im nhp chnh l lnh u tin ca hm. 6. 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

  • 26

    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 < nh hn > ln hn = ln hn hoc bng == bng

  • 27

    != 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 cho ra tr 0 v 5 xem nh l true !0 cho ra tr 1 !t cho ra tr 0 v t coa m ASCII l 16 xem nh l true 3 + !x cho ra tr l 3 nu x khc 0 hoc l 4 nu x bng 0 !!5 cho ra tr 1 !!0 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.

  • 28

    1. Bng cch dng mt ci m (counter) gi l counter controlled repetition ngha l vng lp c iu khin bi mt ci m.

    2. 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) #include (2) main ( )

    { (3) int cai_dem = 1; (4) while (cai_dem

  • 29

    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

  • 30

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

    #include #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 Loi 80-100 A 70-79 B 60-69 C 50-59 D 40-49 E 0-39 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

  • 31

    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

  • 32

    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

  • 33

    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 File ngun Dng lnh Loi

    [NO]LISTINCLUDE [NO]LC NOLC YES YES S cp [NO]SYMBOLS [NO]SB NOSB YES YES S cp [NO]PREPRINT [NO]PP NOPP NO YES S cp [NO]CODE [NO]CD NOCD YES YES S cp [NO]PRINT [NO]PR PR(file name)LST YES YES S cp [NO]COND [NO]CO CO YES YES S cp PAGELENGHT PL PL(69) YES YES S cp PAGEWIDTH PW PW(80) YES YES S cp [NO]DEBUG [NO]DB NODB YES YES S cp SMALL SM SM YES YES S cp COMPACT CP YES YES S cp LARGE LA YES YES S cp [NO]INTVECTOR [NO]IV IV YES YES S cp [NO]OBJECT [NO]OJ OJ(file name.OBJ) YES YES S cp OBJECTEXTEND OE YES YES S cp ROM ROM(LARGE) YES YES S cp [NO]EXTEND EXTEND YES YES S cp SAVE YES NO Th cp RESTORE YES NO Th cp OPTIMIZE OT OT(5,speed) YES YES Th cp

  • 34

    EJECT EJ YES NO Th cp [NO]REGPARMS [NO]RP RP YES YES Th cp REGISTERBANK RB RB(0) YES NO Th cp [NO]AREGS [NO]AR AR YES YES Th cp DISABLE YES NO Th cp DEFINE DF YES YES 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

  • 35

    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)

  • 36

    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 INTEL-

    OMF), 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:

  • 37

    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 #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;

  • 38

    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

  • 39

    Vit tt : AR, NOAR V d : #pragma AREGS ; Lnh hp ng PUSH AR6 PUSH AR7 #pragma NOAREGS ; Lnh hp ng MOV A, R6 PUSH ACC MOV A, R7 PUSH 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

  • 40

    #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 #else #include #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 ;

  • 41

    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

    Hnh 1.1 Kiu b nh v a ch

    80h 7Fh

    30h2Fh

    20h 1Fh

    00h

    RB0-3 data/idata

    bit/sbit/bdata Data/idata

    data idata

    idata

    FFh

    80h

    sfr sfr16 sbit

    B nh hng

    RAM ni

    FFFFh

    0000h

    xdata

    pdata

    FFh

    00h

    RAM ngoi

    FFFFh

    0000h

    B nh chng trnh

    code

  • 42

    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] ;

  • 43

    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.

  • 44

    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

  • 45

    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 #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 {

    Address+1

    Kiu b nh

    Byte cao con tr

    Byte thp con tr

    Address+0

    Address+2

    Kiu b nh : 01 idata 02 xdata 03 pdata 04 data 05 code

    0x02

    0x12

    0x34

    Cc kiu b nh cho php

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

  • 46

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

    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 */

    8051 P0 P1

    Ch

    t

    D0-7 adrss WR RD

    LCd display

  • 47

    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

  • 48

    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.

    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

    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

  • 49

    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

  • 50

    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 Vng nh Vng a ch Tn k hiu Small Data

    bt 00h FFh 00h 7Fh

    ?DT?FKT_NAME?MOD_NAME?BI?FKT_NAME?MOD_NAME

    Compact Pdata bt

    00h FFh 00h 7Fh

    ?PD?FKT_NAME?MOD_NAME?BI?FKT_NAME?MOD_NAME

    Large Xdata Bt

    0000h FFFFh 00h 7Fh

    ?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 Kiu bin Con tr Char Int Long Float/double 8 bt 16 bt Tng qut Tham s 1 R7 R6+R7 R4+R5+R6+R7 R4+R5+R6+R7 R7 R6+R7 R1+R2+R3 Tham s 2 R5 R4+R5 R4+R5+R6+R7 R4+R5+R6+R7 R5 R4+R5 R1+R2+R3 Tham s 3 R3 R2+R3 **** **** 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.

  • 51

    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 Ngun ngt a ch ngt C ngt Reset 0 Ngt 0 ngoi 0003h IE0 Phn cng 1 Ngt Timer0 000Bh TF0 Phn cng 2 Ngt 1 ngoi 0013h IE1 Phn cng 3 Ngt Timer1 001Bh TF1 Phn cng 4 Ni tip Port 0 0023h RI/TI(RI0/TI0) Phn mm 5 Ngt Timer2 002Bh TF2/EXF2 Phn mm 8 Chuyn A/D 0043h IADC Phn mm 9 Ngt 2 ngoi 004Bh IEX2 Phn cng

    10 Ngt 3 ngoi 0053h IEX3 Phn cng 11 Ngt 4 ngoi 005Bh IEX4 Phn cng 12 Ngt 5 ngoi 0063h IEX5 Phn cng 13 Ngt 6 ngoi 006Bh IEX6 Phn cng 16 Ni tip Port 1 0083h RI1/TI1 Phn mm 18 Compare Match

    0-7 0093h ICMP0-7 Phn mm

    19 So snh Timer trn

    009Bh CTF Phn cng

    20 Compare Match COMSET

    00A3h ICS Phn cng

    21 Compare Match COMCLR

    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

  • 52

    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

  • 53

    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 Thanh ghi Ghi ch Bit C carry Khong c #pragma DISABLE Char R7 Int R6+R7 MSB trong R6 Long R4+R5+R6+R7 MSB trong R4 Float/double R4+R5+R6+R7 MSB trong R4, du v s m trong

    R7 Con tr tng qut R1+R2+R3 MSB trong R2, kiu b nh trong

    R3 Con tr 8 bt R7 Con tr 16 bt R6+R7 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 ;

  • 54

    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 ; nh ngha segment cho m

    chng trnh ?DT?asm_funkt?ASM_MODUL1 segment DATA OVERLAYABLE ; nh ngha

    segment cho tham s byte v cc bin byte cc b ?BI?asm_funkt?ASM_MODUL1 segment BIT OVERLAYABLE ; nh ngha

    segment cho tham s bt v cc bin bt cc b Public asm_funkt, ?asm_funkt?BYTE, ?asm_funkt?BIT ; Khai bo cc k hiu

    cng cng cho chng trnh gi C ;*********************************************************************** ;** 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 a, var2 add a, var1 + 1 ; lok_var = var2 + var1 mov lok_var + 1, a clr a addc a, var1 mov 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

  • 55

    mov R7, lok_var ret ; 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 segme