Lap Trinh C Cho VDK 2658

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

LP TRNH C CHO VI IU KHIN

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 ,

#include <AT89X52.H>

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:



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 (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)

value += increase; tng ng vi value = value + increase;

a -= 5; tng ng vi a = a - 5;

a /= b; tng ng vi a = a / b;

price *= units + 1; tng ng vi price = price * (units + 1);

Tng v gim ++ - -

a++; <=> a+=1; <=> a=a+1;

tnh cht tin t hoc hu t (++a) # (a++) Ex

B=3;

B=3;A=++B;

// A is 4, B is 4

B=3;

A=B++;

// A is 3, B is 4

-> Cc ton t quan h ( ==, !=, >, <, >=, <= )

== Bng

!= Khc

> 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 <= 4) tr v true v (6 <= 4)c gi tr false.

!true tr v false.

!false tr v true.

( (5 == 5) && (3 > 6) ) tr v false ( true && false ).

( (5 == 5)

-> Cc ton t thao tc bit ( &, |, ^, ~, <<, >> ).

& AND Logical AND

| OR Logical OR

^ XOR Logical exclusive OR

~ NOT o ngc bit

<< SHL Dch bit sang tri

>> SHR Dch bit sang phi

->Th t u tin ca cc ton t

Th

t

Ton t M t Associativity

1 :: scope Tri

2 () [ ] -> . sizeof Tri

3

++ -- tng/gim

Phi

~ o ngc bit

! NOT

& * Ton t con tr

(type) Chuyn i kiu

+ - Dng hoc m

4 * / % Ton t s hc Tri

5 + - Ton t s hc Tri

6 << >> Dch bit Tri

7 < <= > >= Ton t quan h Tri

8 == != Ton t quan h Tri

9 & ^ | Ton t thao tc bit Tri

10 && || Ton t logic Tri

11 ?: Ton t iu kin Phi

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

>>= <<= &= ^= |= Ton t gn Phi

13 , Du phy Tri

3. Cc kiu d liu

Cc kiu bin.chun

Type Bits Bytes Range

char 8 1 128 to +127

unsigned char 8 1 0 to 255

enum 16 2 32,768 to +32,767

short 16 2 32,768 to +32,767

unsigned short 16 2 0 to 65,535

Lp trnh C cho VXL - C bn VAGAM - giotdang

int 16 2 32,768 to +32,767

unsigned int 16 2 0 to 65,535

long 32 4

2,147,483,648 to

+2,147,483,647

unsigned long 32 4 0 to 4,294,697,295

Kiu d liu trong Keil C

Type Bits Bytes Range

bit 1 0 0 to 1

sbit 1 0 0 to 1

sfr 8 1 0 to 255

sf16 16 2 0 to 65,535

4. Cu trc c bn ca 1 chng trnh C

//Cc ch th tin nh

#include <lcd.h> //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);

}

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<10 hoc for

(;n<10;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-- )

{

// ci g y cng c...

}

Vi d in hnh nht trong lp trnh VXL

void delayms(int n)

{

int i,j; // khai bao bien chi trong chuong trinh con

for (i=0;i<n;i++)

for (j=0;j<1500;j++) { } // tham so j tuy thach anh toc do vxl ma cac

//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. Keil Variable Extensions

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

Vector

address

Interrupt

number

External 0 0003h 0

Lp trnh C cho VXL - C bn VAGAM - giotdang

Timer 0 000Bh 1

External 1 0013h 2

Timer 1 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

{

...

}

You might also like