hỌc lẬp trÌnh keil c cho 8051

Upload: cuoi-di-em

Post on 13-Jul-2015

283 views

Category:

Documents


5 download

TRANSCRIPT

HC LP TRNH KEIL C CHO 805126-11-2011 | fee_08 | 0 phn hi

Trong lp trnh vi x l ngn ng thng dng l ngn ng lp trnh ASM v ngn ng C . Ngn ng lp trnh ASM hay lp trnh hp ng l ngn ng lp trnh trc tip cho vi iu khin ( lp trnh trc tip ) cn ngn ng C hay cn gi l lp trnh hng i tng n gn vi ngn ng con ngi hn . iu ny c ngha l vi ASM ngi lp trnh ra lnh trc tip thng qua ngn ng cu lnh c tnh rng buc cn ngn ng C s dng cc cu trc iu kin v vng lp theo mun .Ni v ngn ng C th u im ca ngn ng C l n d hiu nhng cu trc li di v phc tp so vi ngn ng ASM . Tm hiu lp trnh C cho 8051. 1. Gii thiu : C l mt ngn ng kh mnh v c rt nhiu ngi dung. Nhng vi vi x l ta ch cn bit mt vi vn c bn sau : + Cc kiu ton t ca C . + Cc kiu d liu (int , float , double , char , unsigned char , ) + Cc hm trong C +Cu trc c bn ca mt chng trnh. + Cu trc iu khin hay cc tp lnh. 2. Kin thc c bn v C :

a. Cc kiu ton t ca C Ton t gn (=) Cc ton t s hc ( + , ,* , / , % ) + cng - tr * nhn / chia % ly phn d (trong php chia) Cc ton t gn phc hp : (+=, -=, *=, /=, %=, >>=, < a -= 5; tng ng vi a = a 5; a /= b; tng ng vi a = a / b; a*=2 ; tng ng vi a = a*2 .. Tng v gim ( ++ , ) a++; a+=1; a=a+1; a; a+=1 a=a-1 Tin t hay hu t ( ++a ; a++ ) B=3; B=3;A=++B; // A l 4, B l 4 Hay :B=3; A=B++; // A l 3, B l 4 Cc ton t quan h ( = = , != ,< , > , = ) = = Bng != Khc > Ln hn < Nh hn > = Ln hn hoc bng < = Nh hn hoc bng Cc ton t logic (!, &&, || ) ! NOT && AND || OR Cc ton t thao tc bit (&, |, ^, ~, ) & AND Logical AND | OR Logical OR ^ XOR Logical exclusive OR ~ NOT o ngc bit > SHR Dch bit sang phi *Th t u tin 1 () [ ] -> . 2 ++ tng/gim ~ o ngc bit ! NOT & * Ton t con tr + Dng hoc m

3 * / % Ton t s hc 4 + Ton t s hc 5 > Dch bit 6 < >= Ton t quan h 7 == != Ton t quan h 8 & ^ | Ton t thao tc bit 9 && || Ton t logic 10 ?: Ton t iu kin 11 = += -= *= /= %= >>= < 12 , Du phy b. Cc kiu bin d liu : Char : 1byte ( -128 ; 127 ) Unsigned char : 1byte ( 0; 255) Enum : 2byte ( -32,768 ; 32,768 ) Short : 2byte ( -32,768 ; 32,768 ) Unsigned short : 2byte ( 0 ; 65,535 ) Int : 2byte ( -32,768 ; +32,767 ) Unsigned int : 2byte (0 ; 65,535 ) Long : 4byte (- 2,147,483,648 ; +2,147,483,647 ) Unsigned long : 4byte (0 ; 4,294,697,295 ) . Khai bo bin: Cu trc : Kiu bin Tn bin VD : unsigned char x; Ta cng c th gn lun gi tr ban u cho bin. Ngha l thay v: unsigned char x; x=0; ta vit l : unsigned char x=0; Hoc ta cng c th khai bo nhiu bin mt lc: unsigned char x,y,z; Ngoi ra dung cho vi iu khin trnh bin dich chuyn dng cn h tr cc bin sau Dng bin S Bit S Byte Min gi tr Bit 1 0 0 ; 1 sbit 1 0 0 ; 1 sfr 8 1 0 n 255 sf16 16 & ; ;nbs p; 2 ; ; ; ;0 n 65,535 Trong bit c th dung nh cc bin trong C nhng cc bin cn li th lin quan n cc thanh ghi hoc a ch cng cua 8051( c ngha l khi khai bao bin kiu bit th khng cn nh a ch trong RAM cc bin khc phi n r a ch trong RAM v n l cc dng bin c bit gi l special function registers (SFR) VD: bit kiemtra; sfr P1_0=090 Cc SFR c khai bo trong th vin at89x51.h v at89x52.h

c. Cc hm trong C C hai loai hm trong C : +Hm tr lai gi tr: Kiu gi tr hm tr li Tn hm(Bin truyn vo hm) { // Cc cu lnh x l } VD; unsigned char cong(unsigned char x, unsigned char y) + Hm khng tr li gi tr void Tn hm( Bin truyn vo hm) { // cc cu lnh x l } VD: void cong(unsigned char x,unsigned char y) { //cc cu lnh } (*) Hm c th c bin truyn vo hoc khng + Hm khng c bin truyn vo unsigned char Tn hm(void) { //cu lnh } + Hm c bin truyn vo void Tn hm(unsigned char x) { //cc cu lnh } (**) S bin truyn vo l ty min sao l b nh , cc bin ngn cch nhau bng du ,. VD: void Tn hm(unsigned char x,unsigned char y,unsigned char z) (***) Ngoi ra trong Keil C cn co 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 tri hay truyn tham bin vo hm Tn hm : ty chn Interrupt : t kha ch hm ngt Ngun ngt : t 0 n 5 theo bng vecter ngt Ngt do C a ch vector Ngun ngt Reset h thng RST 0000H Ngt ngoi 0 IE0 0003H 0 Timer 0 TF0 000BH 1

Ngt ngoi 1 IE1 001 3H 2 Timer 1 TF1 001BH 3 Port ni tip RI hoc TI 0023H 4 Timer 2 TF2 hoc EXF2 002BH 5 Bng thanh ghi trn RAM chon t 0 n 3. d. Cc cu lnh c bn ca C + Cu trc iu kin: if , else Cu trc if : if (iu kin) lnh ( a ra iu kin v tuyn b thc hin) VD : if (x10) tng gi tr ca x cho n khi x > 10 Chc nng ca n l hon ton ging vng lp while ch tr c mt iu l iu kin iu khin vng lp c tnh ton sau khi lnh c thc hin, v vy lnh s c thc hin t nht mt ln ngay c khi iu kin khng bao gi c tho mn .Nh v d trn k c x >10 th n vn tng gi tr 1 ln trc khi thot - Vng lp for: Cu trc : for (khi to;iu kin;tng gi tr) lnh v chc nng chnh ca n l lp li lnh chng no iu kin cn mang gi tr ng, nh trong vng lp while. Nhng thm vo , for cung cp ch dnh cho lnh khi to v lnh tng. V vy vng lp ny c thit k c bit lp li mt hnh ng vi mt s ln xc nh. Cch thc hot ng ca n nh sau: (*) Khi to c thc hin. Ni chung n t mt gi kh ban u cho bin iu khin. Lnh ny c thc hin ch mt ln. (**) iu kin c kim tra, nu n l ng vng lp tip tc cn nu khng vng lp kt thc v lnh c b qua. (***) Lnh c thc hin. N c th l mt lnh n hoc l mt khi lnh c bao trong mt cp ngoc nhn. (****) Cui cng, thc hin tng bin iu khin v vng lp quay tr li bc kim tra iu kin. Phn khi to v lnh tng khng bt buc phi c. Chng c th c b qua nhng vn phi c du chm phy ngn cch gia cc phn. V vy, chng ta c th vit for (;n Bng cch s dng du phy, chng ta c th dng nhiu lnh trong bt k trng no trong vng for, nh l trong phn khi to. V d chng ta c th khi to mt lc nhiu bin trong vng lp: for ( n=0, i=100 ; n!=i ; n++, i ) { // cc cu lnh; } VD: To hm delayms dung vng lp for void delay (unsigned int ms) // ham tao thoi gian tre ms { unsigned int i ; // hoc ta c th khai bo int i j; unsigned char j ; for (i=0;i { for (j=0;j0; n) { cout