16
Lp trình C cho VXL - Cơ bn Vagam giotdang 2007 ntuan BIA 8/15/2007

Lap Trinh Keil-c

Embed Size (px)

Citation preview

  • Lp trnh C cho VXL - C bn

    Vagamgiotdang

    2007

    ntuanBIA

    8/15/2007

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    Lp trnh C cho VXL - C bn

    I.Gii thiu

    C l mt ngn ng kh mnh v rt nhiu ngi dng .Nu ni s lnh c bn ca C th khng nhiu . Nhng i vi lp trnh cho vxl , chng ta chi cn bit s lng lnh khng nhiu . u tin bn phi lm quen vi

    Cc kiu ton t C Cc kiu d liu Cu trc c bn ca mt chng trnh Cc cu trc iu khin (chnh cc tp lnh ) Cu trc iu kin : if v else Cc cu trc lp Vng lp while Vng lp do while Vng lp for Lnh break. Cu trc la chn: switch. case Bit s dng cc hm v chng trnh con .

    II.C bn C

    1. Cc ch th trc x l ca Keil C

    // chu thich

    /********** chu thich******************

    ****************************************

    *************************************** */

    y l dng ch thch. Tt c cc dng bt u bng hai du s (//) c coi l cht thch m chng khng c bt k mt nh hng no n hot ng ca chng trnh. Chng c th c cc lp trnh vin dng gii thch hay bnh phm bn trong m ngun ca chng trnh. Trong trng hp ny, dng ch thch l mt gii thch ngn gn nhng g m chng trnh chng ta lm. Cn trong du (/* */) bn c th ch thch bao nhiu dng tu thch ,

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    #include hoc #include "AT89X52.H" trnh bin dch s gi file th vin ca 89 ra (c bn l 51 cng nh 52) #define bien_thay_the bien Vd #define Congtac P0_6 port0.6 c t tn l congtac , khi ta gi tn ny trnh bin dch Keil s t chuyn ti bit qun l P0_6 Note :cch vit P0_6 ph thuc vo tng trnh bin dch , c chng trnh th li vit l P0.6 , cn keil C vit nh cch u #define m_left_tien P1_5 #define m_left_lui P1_4 #define m_left_forward m_left_tien=0;m_left_lui=1; cc bn ch y l mt cch s dng marco trong C khi mnh gi m_left_forward th chn P1_5 = 0 v P1_4=1 Cc vit ny gn nh cho chng ta mt chng trnh con , tuy nhin khng nn qu lm dng n Mt u im ni bt ca C l cc bn c th to ra cc b th vin . V d sau l to th vin thuvien.h (ui .h bn c th to bng cch save as .. *.h Keil C ). #ifndef _thuvien_H #define _thuvien_H ....//m chng trnh #endif

    2. Cc ton t : ->Ton t gn (=). Ex:

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    b = 5; a = 2 + b; a = 2 + (b = 5); a = b = c = 5; ->Cc ton t s hc ( +, -, *, /, % ) + cng - tr * nhn / chia % ly phn d (trong php chia) ->Cc ton t gn phc hp (+=, -=, *=, /=, %=, >>=, , =, Ln hn < Nh hn > = Ln hn hoc bng < = Nh hn hoc bng EX

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    (7 == 5) s tr gi tr false (6 >= 6) s tr gi tr true tt nhin thay v s dng cc s, chng ta c th s dng bt c biu thc no. Cho a=2, b=3 v c=6 (a*b >= c) s tr gi tr true. (b+4 < a*c) s tr gi tr false Ch rng = (mt du bng) lf hon ton khc vi == (hai du bng). (==) nhm so snh cn (=)gn gi tr ca biu thc bn phi cho bin bn tri . -> Cc ton t logic ( !, &&, || ). ! NOT && AND || OR EX: !(5 == 5) tr v false v biu thc bn phi (5 == 5) c gi tr true. !(6 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 ca cc ton t

    Tht

    Tont Mt Associativity

    1 :: scope Tri

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    2 () [ ] -> . sizeof Tri

    3

    ++ -- tng/gim

    Phi

    ~ ongcbit! NOT& * Tontcontr(type) Chuynikiu+ - Dnghocm

    4 * / % Tontshc Tri5 + - Tontshc Tri6 > Dchbit Tri7 < >= Tontquanh Tri8 == != Tontquanh Tri9 & ^ | Tontthaotcbit Tri10 && || Tontlogic Tri11 ?: Tontiukin Phi

    12= += -= *= /= %=>>=

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    int 16 2 32,768to+32,767

    unsignedint 16 2 0to65,535

    long 32 4 2,147,483,648to+2,147,483,647

    unsignedlong 32 4 0to4,294,697,295 Kiu d liutrongKeilC Type Bits Bytes Range bit 1 0 0to1

    sbit 1 0 0to1

    sfr 8 1 0to255

    sf16 16 2 0to65,535 4. Cu trc c bn ca 1 chng trnh C //Cc ch th tin nh #include //Gi th vin c sn cch vit khc "*.h" #define led1 PORTA.0 //dng nh ngha cc bin char bien1,bien2; //cac bien can dung int a,b; void chuongtrinhcon(unsigned int b) // chuong trinh con { } int ham(void) // chuong trinh con dang ham { . Return(a); }

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    void main(void) //chng trnh chnh { int a; // khai bao bien dang so nguyen chuongtrinhcon(); a = ham(); } Chng trnh con l ni cc bn vit cc chng trnh nh , rt tin cho cc on lnh gp li nhiu ln . Chng trnh con c th c th gi trong chng trnh chnh bt k u . Hm l chng trnh con tr v cho mnh mt gi tr. Cch s dng hm v chng trnh con cc bn nn tham kho thm quyn k thut lp trnh C hiu r hn . 5. Cc lnh c bn ca C Cu trc iu kin: if v else ->if (condition) statement if (x == 100) x++; nu x=100 th tng x thm 1 ->if (condition) statement1 else statement2 if (x == 100) x++; else x- -;

    Cc cu trc lp Vng lp while . Dng ca n nh sau: while (expression) statement while(1) {}; To vng lp mi mi , rt hay ng trong lp trnh VXL .Chng trnh chnh s c vit trong du ngoc. Vng lp do-while Dng thc: do statement while (condition); do {

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    x++; // cho nay cac ban co the viet nhieu cau lenh , } while(x>10) 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 statement c thc hin, v vy statement s c thc hin t nht mt ln ngay c khi condition khng bao gi c tho mn .Nh vd trn k c x >10 th n vn tng gi tr 1 ln trc khi thot nu x=100 th tng x thm 1 cn khng th gim x. Vng lp for . Dng thc: for (initialization; condition; increase) statement; v chc nng chnh ca n l lp li statement chng no condition 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: 1, initialization c thc hin. Ni chung n t mt gi kh ban u cho bin iu khin. Lnh ny c thc hin ch mt ln. 2, condition c kim tra, nu n l ng vng lp tip tc cn nu khng vng lp kt thc v statement c b qua. 3, statement c thc hin. N c th l mt lnh n hoc l mt khi lnh c bao trong mt cp ngoc nhn. 4, Cui cng, increase c thc hin tng bin iu khin v vng lp quay tr li bc 2. 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

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    //ban thay doi cho phu hop } Cc lnh r nhnh v lnh nhy Lnh break. S dng break chng ta c th thot khi vng lp ngay c khi iu kin n kt thc cha c tho mn. Lnh ny c th c dng kt thc mt vng lp khng xc nh hay buc n phi kt thc gia chng thay v kt thc mt cch bnh thng. V d, chng ta s dng vic m ngc trc khi n kt thc: Lnh continue. Lnh continue lm cho chng trnh b qua phn cn li ca vng lp v nhy sang ln lp tip theo. V d chng ta s b qua s 5 trong phn m ngc: Lnh goto. Lnh ny cho php nhy v iu kin ti bt k im no trong chng trnh. Ni chung bn nn trnh dng n trong chng trnh C++. Tuy nhin chng ta vn c mt v d dng lnh goto m ngc: Hm exit. Mc ch ca exit l kt thc chng trnh v tr v mt m xc nh. Dng thc ca n nh sau void exit (int exit code); exit code c dng bi mt s h iu hnh hoc c th c dng bi cc chng trnh gi. Theo quy c, m tr v 0 c ngha l chng trnh kt thc bnh thng cn cc gi tr khc 0 c ngha l c li. cc lnh trn mnh ch yu ch dng lnh break thot khi vng lp . Cc lnh khc thng rt t dc s dng y l 1 on code nh mnh trch ra t chng trnh ca mnh while(1) { lcd_gotoxy(5,0);lcd_putsf(" Run Thuan "); thuan(); if(!enter) { lcd_clear(); lcd_putsf("DA DUNG "); stop();break;} } Cu trc la chn: switch. C php ca lnh switch hi c bit mt cht. Mc ch ca n l kim tra mt vi gi tr hng cho mt biu thc, tng t vi nhng g chng ta lm u bi ny khi lin kt mt vi lnh if v else if vi nhau. Dng thc ca n nh sau: Code:

    switch (expression) {

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    case constant1: block of instructions 1 break; case constant2: block of instructions 2 break; . . . default: default block of instructions }

    N hot ng theo cch sau: switch tnh biu thc v kim tra xem n c bng constant1 hay khng, nu ng th n thc hin block of instructions 1 cho n khi tm thy t kho break, sau nhy n phn cui ca cu trc la chn switch. Cn nu khng, switch s kim tra xem biu thc c bng constant2 hay khng. Nu ng n s thc hin block of instructions 2 cho n khi tm thy t kho break. Cui cng, nu gi tr biu thc khng bng bt k hng no c ch nh trn (bn c th ch nh bao nhiu cu lnh case tu thch), chng trnh s thc hin cc lnh trong phn default: nu n tn ti v phn ny khng bt buc phi c. nu nt enter c bm th chng trnh s thot ra khi vng lp while . III. C cho 8051 1.KeilVariableExtensions data a ch trc tip MOV A, 07Fh idata a ch gin tip MOV R0, #080h MOV A, R0 xdata b nh ngoi MOVX @DPTR code b nh chng trnh MOVC @A+DPTR

    VD unsigned int data bien = 0; // them data vao khai bao kieu bien Ch rng , bn c th khng cn khai bo c th , ch cn unsigned int checksum = 0; 2. a ch ngt

    Interrupt Vectoraddress

    Interruptnumber

    External0 0003h 0

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    Timer0 000Bh 1

    External1 0013h 2

    Timer1 001Bh 3

    Serial 0023h 4 org 00h ljmp main org 0003h ljmp ngat0 org 30h main: // chuong trinh chinh ... Here: sjmp Here // vong lap vo tan ngat0: ... reti code C Code: void main // chuong trinh chinh { ... while(1) //vong lap vo tan sau khi thuc hien xong cong viec } void ngat0(void) interrupt 0 // chuong trinh ngat { ... } 3. Mt v d hon thin v lp trnh C cho 8051 #include #include #define strai3 P0_7 #define strai2 P0_6 #define strai1 P0_5 #define strai0 P0_4 #define sphai0 P0_3 #define sphai1 P0_2 #define sphai2 P0_1 #define sphai3 P0_0 ////////////////////////// #define mtraif P1_0 #define mtraib P1_1 #define mphaif P1_2 #define mphaib P1_3 #define dc1f P1_6 #define dc1b P1_7

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    #define dc2f P1_4 #define dc2b P1_5 ////////////////////////// #define f_an0 P2_0 #define f_an1 P2_1 #define f_an2 P2_2 #define f_an3 P2_3 ////////////////////////// #define dc3f P2_4 #define dc3b P2_5 ////////////////////////// #define start P3_6 #define ctht1_batdau P3_1 #define ctht2_ketthuc P3_2 #define ctht3 P3_3 #define ctht4 P3_4 #define ctht5 P3_5 #define ctht6 P3_6 ////////////////////////// #define tien 1 #define lui 0 ////////////////////////// #define v_cham_trai 50 #define v_cham_phai 50 #define delta_v_cham_trai 20 #define delta_v_cham_phai 20 #define v_nhanh_trai 100 #define v_nhanh_phai 100 #define v_quay_trai 40 #define v_quay_phai 60 //////////////////////// //vach trang sensor=1 vach xanh sensor=0 int t=0,i=0,j=0,k=0; int vtrai=100,vphai=100; int PWMC=0; int dem=0; int dirtrai=tien,dirphai=tien; int phuongan=0; /////////////////////////// void dithang(int v_left,int v_right); void dithangcham(int v_left,int v_right); void stop(void); void quayphai(void); void quaytrai(void); void ragach(void); void pwm(void) interrupt 1 ; void khoitao(void); void hanhtrinh(void); void ham(int time,int trai,int phai); void ham2(void); //======================================== void main(void) { khoitao(); khoidongthang(); hanhtrinh(); ragach(); stop(); } //========================================== void khoitao(void) { TMOD=0x02; TH0=0xE1; TR0=1; IE=0x82; P1=0x00;P2=0x00;P3=0x00; while(!start) stop(); } //========================================== void khoidongthang(void)

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    { for(i=0;i

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    } //======================================================================================= void dithang(int v_left,int v_right) { if(!(strai0||strai1||strai2||strai3||sphai0||sphai1||sphai2||sphai3)) // di thang { dirphai=tien;dirtrai=tien; vtrai=v_left;vphai=v_right; } else if((strai0&&strai1&&sphai0&&sphai1)) { j=0; for(i=1;i=10) { dem=dem+1;t=1 ;} else t=0; while(t)//cho qua vach trang { { //di thang dirphai=tien;dirtrai=tien; vtrai=40;vphai=40; } k=0; for(i=1;i15) t=0; } } else if ((sphai2||sphai3)) //re phai lon { dirtrai=tien;dirphai=tien; vtrai=60;vphai=0;} else if ((strai0||strai1)) //retrainho { dirtrai=lui;dirphai=tien; vtrai=1;vphai=60; } else if ((sphai0||sphai1)) //rephainho { dirtrai=tien;dirphai=lui; vtrai=60;vphai=1; } else if ((strai2||strai3)) //re trai lon { dirtrai=tien;dirphai=tien; vtrai=0;vphai=60;} } //////////////////////////// void ragach(void) { while(!ctht2_ketthuc) { dirtrai=tien;dirphai=tien; vtrai=25;vphai=25; dc1f=1;dc1b=0; } dc1f=0;dc1b=0; //--------------------------------------- for(t=1;t

  • Lp trnh C cho VXL - C bn VAGAM - giotdang

    for(i=1;i