You are on page 1of 23

BI 1: NGN NG C CHO VI IU KHIN

I.

NGN NG C CHO VI IU KHIN

1.1. Gii thiu ngn ng C Trong k thut lp trnh vi iu khin ni chung, ngn ng lp trnh c s dng thng chia lm 2 loi: ngn ng bc thp v ngn ng bc cao. Ngn ng bc cao l cc ngn ng gn vi ngn ng con ngi hn, do vic lp trnh bng cc ngn ng ny tr nn d dng v n gin hn. C th k n mt s ngn ng lp trnh bc cao nh C, Basic, Pascal trong d C l ngn ng thng dng hn c trong k thut lp trnh cho vi iu khin. V bn cht, s dng cc ngn ng ny thay cho ngn ng bc thp l gim ti cho lp trnh vin trong vic nghin cu cc tp lnh v xy dng cc cu trc gii thut. Chng trnh vit bng ngn ng bc cao cng s c mt phn mm trn my tnh gi l trnh bin dch (Compiler) chuyn sang dng hp ng trc khi chuyn sang m my. Khi s dng ngn ng C ngi lp trnh khng cn hiu su sc v cu trc ca b vi iu khin. C ngha l vi mt ngi cha quen vi mt vi iu khin cho trc s xy dng c chng trnh mt cch nhanh chng hn, do khng phi mt thi gian tm hiu kin trc ca vi iu khin . V vic s dng li cc chng trnh xy dng trc cng d dng hn, c th s dng ton b hoc sa cha mt phn.

1.2. 1.2.1. 1.2.1.1.

Ngn ng C Kiu d liu Kiu d liu trong C

Kiu Char Unsigned char Int Unsigned int Long Unsigned long Float

S Byte 1 1 (8 bit) 2 2 (16 bit) 4 4 (32 bit) 4 -128 +127 0 255

Khong gi tr

-32768 - +32767 0 - 65535 -2147483648 - +2147483647 0 4294697295

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 1

* Khai bo bin: C php: Kiu_d_liu V d: Unsigned char data x; Vng_nh Tn_bin _at_ ia_ch;

Khi khai bo bin c th gn lun cho bin gi tr ban u. V d: Thay v: unsigned char x; x = 0; Ta ch cn: unsigned char x = 0;

C th khai bo nhiu bin cng mt kiu mt lc. V d: unsigned int x,y,z,t;

Ch nh vng nh: t kho Vng_nh cho php ngi dng c th ch ra vng nh s dng lu tr cc bin s dng trong chng trnh. Cc vng nh c th s dng l: CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi khng khai bo vng nh trnh dch Keil C s mc nh l vng nh DATA. Vng nh CODE DATA BDATA IDATA PDATA XDATA ngha B nh ROM (m ngun chng trnh) MOVC B nh d liu gm 128 Byte thp ca RAM trong vi iu khin - Direct B nh d liu c th nh a ch bit, nm trong vng nh DATA B nh d liu gm 128 Byte cao ca RAM trong vi iu khin ch c mt s dng vi iu khin sau ny (VD: 8052, 89C52) - Indirect B nh d liu ngoi gm 256 Byte, c truy xut bi a ch t trn P0 (8 bit : A0-A7) B nh d liu ngoi c dung lng c th ln n 64 KB, c truy xut bi a ch t trn P0 v P2 (16 bit : A0-A15) - MOVX

* nh ngha li kiu: C php: typedef Kiu_d_liu Tn_bin;

Tn_bin sau ny s c s dng nh mt kiu d liu mi v c th dng khai bo cc bin khc V d: typedef int m5[5]; Dng tn m5 khai bo hai bin tn a v b c kiu d liu l mng 1 chiu 5 phn t: m5 a,b;
GV: Trng Ngc Anh H SPKT Tp. HCM . Trang 2

1.2.1.2.

Kiu d liu trong Keil C Kiu Bit Sbit Sfr Sfr16 S bit 1 1 8 16

bit : dng khai bo cc bin c gi tr 0 hoc mt hay cc bin logic trn vng RAM ca vi iu khin. Khi khai bo bin kiu bit trnh dc Keil C s mc nh vng nh s dng l BDATA. sbit, sfr, sfr16: dng nh ngha cc cho cc thanh ghi chc nng hoc cc cng trn vi iu khin dng truy nhp cc on d liu 1 bit, 8 bit, 16 bit. 1.2.1.3. Mng

Mng l mt tp hp nhiu phn t cng mt kiu gi tr v chung mt tn. Cc phn t ca mng phn bit vi nhau bi ch s hay s th t ca phn t trong dy phn t. Mi phn t c vai tr nh mt bin v lu tr c mt gi tr c lp vi cc phn t khc ca mng. Mng c th l mng mt chiu hoc mng nhiu chiu * Khai bo: C php: Tn_kiu Vng_nh Tn_mng [s_phn_t_mng];

Khi b trng s phn t mng ta s c mng c s phn t bt k. V d: Unsigned int data a[5], b[2] [3];

o Vi khai bo trn ta s c: mng a l mng mt chiu 5 phn t. Mng b l mng hai chiu, tng s phn t l 6. Ch s ca mng bt u t s 0. Mng c bao nhiu chiu phi cung cp y by nhiu ch s. V d: Phn t mng b[0] [1] l ng. Khi vit b[0] l sai. 1.2.1.4. Con tr

Khi ta khai bo mt bin, bin s c cp pht mt khong nh bao gm mt s byte nht nh dng lu tr gi tr. a ch u tin ca khong nh chnh l a ch ca bin c khai bo. Con tr l mt bin dng cha a ch m khng cha gi tr, hay gi tr ca con tr chnh l a ch vng nh m n tr ti.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 3

Vi cc vng nh c th, con tr ti vng nh chim dung lng ph thuc vo ln ca vng nh . Con tr tng qut khi khng xc nh trc vng nh s c dung lng ln nht v vy tt nht nn s dng con tr c th. Loi con tr Con tr tng qut Con tr XDATA Con tr CODE Con tr DATA Con tr IDATA Con tr PDATA * Khai bo bin con tr: C php: Kiu_D_Liu V d: int *int_ptr; Vng_nh *Tn_bin; Kch thc 3 byte 2 byte 2 byte 1 byte 1 byte 1 byte

long data *long_ptr; Khi khng ch r vng nh con tr s c coi l con tr tng qut. 1.2.1.5. Kiu d liu cu trc

Kiu d liu cu trc l mt tp hp cc bin, cc mng v c cc kiu cu trc khc c biu th bi mt tn duy nht. kiu d liu cu trc dng lu tr cc gi tr, thng tin c lin quan n nhau. * nh ngha v khai bo bin cu trc: nh ngha: typedef struct { Khai bo cc bin thnh phn; } Tn_kiu_cu_trc; Khai bo: Tn_kiu_cu_trc V d: typedef struct { char day; char month; int year; } Date_type; date,date_arr[5];
Trang 4

Vng_nh Tn_bin;

Date_type

GV: Trng Ngc Anh H SPKT Tp. HCM .

1.2.2. 1.2.2.1.

Php ton Php gn k hiu: =.

C php: Bin_1 = Bin_2; Trong Bin_2 c th l gi tr xc nh cng c th l bin. 1.2.2.2. Php ton s hc Php ton + * / % 1.2.2.3. Php ton Logic && || ! ngha So snh ln hn So snh ln hn hoc bng So snh nh hn So snh nh hn hoc bng V d a >b VD: 4>5 cc gi tr 0 a>=b VD: 6>=2 cc gi tr 1 a<b VD: 6<7 cc gi tr 1 a<=b VD: 8<=5 cc gi tr 0 V d Bit_1 & Bit_2 Bit_1 | Bit_2 !Bit_1 Bit_1 ^ Bit_2 a<<3 a>>4 ~a ngha Php cng Php tr Php nhn Php chia ly phn nguyn Php chia ly phn d V d X=a+b X=a-b X=a*b X=a/b (a=9, b=2 X=4) a%b (a=9, b=2 X=1)

AND: OR: NOT: 1.2.2.4.

Cc php ton so snh:

Php ton > >= < <= 1.2.2.5.

Php ton thao tc Bit Php ton & | ! ^ << s bit cn dch >> s bit cn dch ~ ngha Php v (AND) Php hoc (OR) Php o (NOT) Php hoc loi tr (XOR) Dch tri mt hoc nhiu bit Dch phi mt hoc nhiu bit Ly b theo bit V d a+=5 <=> a=a+5 a-=5 <=> a=a-5 a*=5 <=> a=a*5 a/=5 <=> a=a/5 a%=5 <=> a=a%5

1.2.2.6.

Php ton kt hp Php ton += -= *= /= %=

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 5

1.2.3. 1.2.3.1.

Cu trc chng trnh C Cu trc chng trnh * Cu trc: 1. Khai bo ch th tin x l. 2. Khai bo cc bin ton cc. 3. Khai bo nguyn mu cc hm. 4. Xy dng cc hm v chng trnh chnh.

- V d: #include<regx51.h> #include<string.h> #sbit NUT_ON P1^0 Unsigned char code Led [3]; Unsigned char data DEM; Unsigned int xdata X; Void delay(unsigned int x); bit kiemtra(unsigned int y); Khai bo ch th tin x l

Khai bo bin ton cc

Khai bo nguyn mu hm

void delay(unsigned int x) { Khai bo bin cc b; M chng trnh delay; } void main() { Khai bo bin cc b; M chng trnh chnh; } bit kiemtra(unsigned int y) { Khai bo bin cc b; M chng trnh kim tra bin y; }

Xy dng cc hm v chng trnh chnh

Ch : Hm khng khai bo nguyn mu phi c xy dng trc hm c li gi hm . v d trn do hm bit kiemtra(unsigned int y) c khai bo nguyn mu hm trn nn c th xy dng hm bt k v tr no trong chng trnh trnh s thiu xt ny, ta nn lun khai bo nguyn hm.
GV: Trng Ngc Anh H SPKT Tp. HCM . Trang 6

1.2.3.2.

Ch th tin x l

Cc ch th tin x l khng phi l cc lnh ca ngn ng C m l cc lnh gip cho vic son tho chng trnh ngun ca C trc khi bin dch. Khi dch mt chng trnh C th khng phi ch c chng trnh ngun m ta son tho c dch m trc khi dch, cc lnh tin x l s hiu chnh chng trnh, sau bn hiu chnh ny s c dch. C ba cch hiu chnh c dng l: + Php thay th #define + Php chn tp #include + Php la chn bin dch #ifdef Cc ch th tin x l gip ta vit chng trnh ngn gn hn v t chc bin dch, g ri chng trnh linh hot, hiu qu hn. * Ch th #define: Ch th #define cho php to cc macro thay th n gin C php: #define Tn_thay_th dy_k_t

V d: #define LED P0 o Mt Tn_thay_th c th c nh ngha li nhiu ln, nhng trc khi nh ngha li phi gii phng nh ngha bng ch th: #undef * Ch th #include: Ch th #include bo cho trnh bin dch nhn ni dung ca tp khc v chn vo tp chng trnh ngun m ta son tho. C php: Cch 1: #include<tn_tp> Cch 2: #includetn_tp V d: - Cch 1: #include<regx51.h> o cch ny tp regx51.h s c tm trong th mc INC chn vo chng trnh ngun. - Cch 2: #includeregx51.h o cch ny tp regx51.h s c tm trong th mc cha chng trnh ngun nu khng c mi tm trong th mc INC Khi mun chn tp ngoi th vin hoc ngoi th mc cha chng trnh ngun th tn_tp s bao gm c ng dn th mc cha tp. Tn_thay_th

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 7

* Ch th #ifdef Ch th #ifdef ny thng dng bin dch cc tp th vin. C php: Cch 1: #ifdef ten_macro on chng trnh #endif #ifdef ten_macro on chng trnh 1 #else on chng trnh 2 #endif

Cch 2:

cch 1 nu tn_macro c nh ngha on chng trnh s c dch ngc li on chng trnh s b b qua. * Ch th #ifndef Ch th #ifndef ny thng dng bin dch cc tp th vin. C php: Cch 1: #ifndef ten_macro on chng trnh #endif #ifndef ten_macro on chng trnh 1 #else on chng trnh 2 #endif

Cch 2:

cch 1 nu tn_macro cha c nh ngha on chng trnh s c dch ngc li on chng trnh s b b qua. 1.2.3.3. Ch thch trong chng trnh Vic vit ch thch trong trnh nhm mc ch gii thch ngha ca cu lnh, on chng trnh hoc hm hot ng nh th no v lm g. Vit ch thch s gip cho ngi c c th hiu c chng trnh d dng v nhanh chng hn, sa li n gin hn hoc gip cho ta xem li chng trnh c m ta lm tr nn nhanh hn. Ch thch trong chng trnh s khng nh hng n chng trnh m ta son tho v trnh dch s b qua tt c li ch thch khi bin dch chng trnh sang m my. Li gii thch c t sau du // nu ch thch ch vit trn mt dng hoc trong cp du /* v */ nu ch thch vit thnh 1 on.
GV: Trng Ngc Anh H SPKT Tp. HCM . Trang 8

1.3. 1.3.1.

Cc lnh c bn trong C Cu lnh r nhnh if:

Cu trc: if (dieu_kien) { // on chng trnh } Gii thch: nu dieu_kien ng th x l cc cu lnh bn trong cn sai th b qua. Cu trc: if (dieu_kien) { // on chng trnh 1 } else { // on chng trnh 2 } Gii thch: nu dieu_kien ng th x l on chng trnh 1 bn trong cn sai th x l on chng trnh 2.

1.3.2.

Cu lnh la chn:

Cu trc: switch (bien) { case gia_tri_1: {//cc cu lnh break;} case gia_tri_2: {//cc cu lnh break;} case gia_tri_3: {//cc cu lnh break;} ... case gia_tri_n: {//cc cu lnh break;} }

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 9

Gii thch: tu vo bien c gia_tri 1 th thc hin cc cu lnh tng ng ri sau thot khi cu trc nh cu lnh break. bien c gia_tri_2 th thc hin cu lnh tng ng ri thot. . bien c gia_tri_n th thc hin cc cu lnh tng ng ri thot. 1.3.3. Vng lp xc nh:

Cu trc: for (n = m ; n < p ; n++) { // cc cu lnh x l } Gii thch: 1.3.4. m, p l gi tr (m < p), cn n l bin. thc hin lp cc cu lnh (p - m) ln.

Vng lp khng xc nh while:

Cu trc: while (dieu_kien) { // cc cu lnh } Gii thch: kim tra iu kin ng th thc hin cc cu lnh, nu iu kin sai th thot khi vng lp. 1.3.5. Vng lp khng xc nh do while:

Cu trc: do { // cc cu lnh } while (dieu_kien); Gii thch: thc hin cc cu lnh sau kim tra iu kin nu ng th lp li thc hin tip, nu sai th thot khi vng lp.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 10

1.4. Cc hm trong C: C 2 loi hm: * Hm tr li gi tr: - Cu trc: Kiu_gi_tr_hm_tr_li { // Cc lnh x l y } VD : unsigned char Cong (unsigned char x, unsigned char y) { // Cc lnh x l y } * Hm khng tr li gi tr - Cu trc: void Tn_hm (Bin_truyn_vo_hm) { // Cc cu lnh x l y } Tn_hm (Bin_truyn_vo_hm)

VD: void Cong(unsigned char x, unsigned char y) { // Cc cu lnh x l y } * Hm c th truyn vo bin hoc khng. - Hm khng c bin truyn vo: unsigned char Tn_hm (void) { // Cc cu lnh x l y } - Hm c bin truyn vo: void Tn_hm (unsigned char x) {
GV: Trng Ngc Anh H SPKT Tp. HCM . Trang 11

// Cc cu lnh x l y } - S bin truyn vo ty (min b nh), ngn cch bi du ,. V d: Void Tn_hm(unsigned char x, unsigned char y, unsigned char z) { // Cc cu lnh x l y } * Ngoi ra ring cho vi iu khin phn phm Keil C cn c mt loi hm l hm ngt: - Cu trc: Void Tn_hm(void) interrupt ngun_ngt using bng_thanh_ghi { } - Hm ngt khng c php tr li gi tr hay truyn tham bin vo hm. - Tn hm bt k. - Interrupt l t kha ch hm ngt. - Ngun ngt t 0 ti 5 theo bng vector ngt. STT 0 1 2 3 4 5 Interrupt System Reset External 0 Timer 0 External 1 Timer 1 Serial Port Timer 2 Flag RST IE0 TF0 IE1 TF1 RI or TI TF2 or EXF2 Vector Address 0000H 0003H 000BH 0013H 001BH 0023H 002BH

- Khng tnh ngt reset h thng, bt u tnh t ngt ngoi 0. - Bng thanh ghi trn RAM, chn t 0 n 3.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 12

II.

TRNH BIN DCH - KEIL C (COMPILER)

2.1. Khi to cho mt project: - Giao din ban u ca phn mm Keil C.

- To 1 project mi, vo menu Project chn New uVision Project :

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 13

- Nhp tn Project v chn th mc lu project chn Save. Ta c th to mi mt th mc cho 1 project d qun l.

- Chn vi iu khin ATMEL AT89S52 OK chn cu tr li NO khi c hi Copy standard 8051 startup code to project and add file to project v ta khng cn copy on m khi to 8051 ca chng trnh Keil C.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 14

- To 1 file chng trnh trc khi gn cho project mi to. Vo menu File New Save File Lu file c phn m rng .C hoc .ASM nu dng ngn ng assembly.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 15

- To file chng trnh cho Project, trong ca s qun l Project Chn + Target nhn phm phi chut vo Source Group 1 chn Add Files to Group Source Group 1

- Chn file chng trnh v c phn m rng .C to bc trn Add Close.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 16

- Thm file th vin ca vi iu khin ta chn (h tr cc khai bo thanh ghi c bit, port xut nhp, ): Nhp chut phi vo vng son tho file Vi du 1.C chn Insert #include<REGX51.H>.

- Thay i kch thc font ch trong ca s son tho: Chn menu Edit Configuration Chn Colors & Fonts 8051: Editor C Files Text Font Size:15.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 17

- Ngoi ra, ta c th thm phn ch thch cho chng trnh mnh vit, phn ny rt cn thit v n tm tt phn cng v thng tin v tc gi, ngy gi, s ln hiu chnh,. nhng ngi khc c th tip tc ci tin chng trnh ca mnh khi cn hoc cho ch thch cho chnh bn thn mnh khi vit qu nhiu chng trnh hoc thi gian vit cch qu lu.

- Trong trng hp cn tm hiu cc nh ngha sn c ca phn mm ta bm phm phi chut trn dng ch <REGX51.H> Open document <REGX51.H>.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 18

2.2. Son tho chng trnh. Khi vit xong mi dng lnh, ta nn gii thch dng lnh hoc on lnh thc hin vic g. V d:

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 19

2.3. 2.3.1

Bin dch, sa li v m phng. Bin dch:

Trc khi bin dch, c th bin dch chng trnh thnh file HEX ta chn menu Project Option for Target Target 1 hoc nhn phm tt Alt + F7.

- Chn mc Output chn Create HEX File nh hnh. - Chn mc Target nhp li tn s thch anh l 12Mhz.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 20

Bin dch chng trnh bng phm tt F7 hoc chn menu Project Build Target hoc dng shortcut .

2.3.2

Sa li: - Xc nh v tr v sa li nu c.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 21

2.3.3

M phng m phng cc bn chn Debug Start/Stop Debug Session hoc n

Ctrl+F5, hoc chn shortcut

hin th cc ng vo ra, cc thanh ghi ta chn menu Peripherals I/O Ports Port 0 .

Ta c kt qua l 1 ca s nh Parallel Port xut hin, l ng vo ra gip ta m phng port 0 ca vi iu khin. Du tick tng ng ng vo/ra mc cao (5V), ngc li mc thp 0V. Trong menu Peripherals cn c cc thnh phn ngoi vi khc nh timer, interrupt, serial.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 22

m phng chng trnh, ta c mt s trng hp nh sau:

- F5 - F11 - F10 - Ctrl + F11 - Ctrl + F10 - F9

: Chy chng trnh lin tc. : Chy chng trnh tng dng lnh. : Kt thc lnh hin ti. : Kt thc hm ang thc hin. : Thc hin chng trnh ti con tr. : Thit lp im dng ca chng trnh trong trng hp ta cn kim tra tng on lnh.

* Lu : cho php hin th hay khng phn lnh ASM khi bin dch ta cho menu View Disassembly Windows.

GV: Trng Ngc Anh H SPKT Tp. HCM .

Trang 23

You might also like