Professional Documents
Culture Documents
Vagam - C PDF
Vagam - C PDF
Vagamgiotdang
ntuan
BIA
8/15/2007
VAGAM - giotdang
II.C bn C
1. Cc ch th trc x l ca Keil C
// chu thich
VAGAM - giotdang
#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
a
a
a
=
=
=
=
5;
2 + b;
2 + (b = 5);
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 ++
--
== Bng
!= Khc
> Ln hn
< Nh hn
> = Ln hn hoc bng
< = Nh hn hoc bng
EX
VAGAM - giotdang
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
Th
t
Tont
Mt
Associativity
::
scope
Tri
VAGAM - giotdang
() [ ] -> . sizeof
Tri
++ --
tng/gim
ongcbit
NOT
& *
Tontcontr
(type)
Chuynikiu
+ -
Dnghocm
* / %
Tontshc
Tri
+ -
Tontshc
Tri
<< >>
Dchbit
Tri
Tontquanh
Tri
== !=
Tontquanh
Tri
& ^ |
Tontthaotcbit Tri
10
&& ||
Tontlogic
Tri
11
?:
Tontiukin
Phi
12
= += -= *= /= %=
>>= <<= &= ^= |=
Tontgn
Phi
13
Duphy
Tri
3. Cc kiu d liu
Cc kiu bin.chun
Type
Bits
char
128to+127
unsignedchar
0to255
enum
16
32,768to+32,767
short
16
32,768to+32,767
unsignedshort
16
0to65,535
Bytes Range
Phi
VAGAM - giotdang
int
16
32,768to+32,767
unsignedint
16
0to65,535
long
32
2,147,483,648to
+2,147,483,647
unsignedlong
32
0to4,294,697,295
Kiu d liutrongKeilC
Type
Bits
Bytes Range
bit
0to1
sbit
0to1
sfr
0to255
sf16
16
0to65,535
}
int ham(void)
{
.
Return(a);
}
VAGAM - giotdang
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)
else x- -;
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
{
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
VAGAM - giotdang
");
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 .
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
External0
Vector
address
0003h
Interrupt
number
0
VAGAM - giotdang
Timer0
000Bh
External1
0013h
Timer1
001Bh
Serial
0023h
org
ljmp main
org 0003h
ljmp ngat0
org 30h
00h
main:
...
Here: sjmp Here
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
{
...
}
P1_6
P1_7
VAGAM - giotdang
#define dc2f
#define dc2b
//////////////////////////
#define f_an0
#define f_an1
#define f_an2
#define f_an3
P2_3
//////////////////////////
#define dc3f
#define dc3b
//////////////////////////
#define start
#define ctht1_batdau
#define ctht2_ketthuc
#define ctht3
#define ctht4
#define ctht5
#define ctht6
//////////////////////////
#define tien
#define lui
//////////////////////////
#define v_cham_trai
#define v_cham_phai
#define delta_v_cham_trai
#define delta_v_cham_phai
#define v_nhanh_trai
#define v_nhanh_phai
#define
#define
v_quay_trai
v_quay_phai
P1_4
P1_5
P2_0
P2_1
P2_2
P2_4
P2_5
P3_6
P3_1
P3_2
P3_3
P3_4
P3_5
P3_6
1
0
50
50
20
20
100
100
40
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)
VAGAM - giotdang
{
for(i=0;i<300;i++)
{
dirtrai=tien;dirphai=tien;
vtrai=40; vphai=40;
}
}
//==========================================
void khoidongquay(void)
{
dirtrai=tien;dirphai=tien;
vtrai=90; vphai=80;
for(i=1;i<=50;i++);
vtrai=52; vphai=40;
for(i=1;i<=580;i++);
ham(90,20,20);
do
{
dirtrai=tien;dirphai=lui;
vtrai=33;vphai=10;
}
while(!strai3);
for(i=1;i<=40;i++)
{
dirtrai=tien;dirphai=lui;
vtrai=33; vphai=9;
}
do
{
dirtrai=lui;dirphai=tien;
vtrai=15;vphai=32;
}
while(!strai0);
ham(100,20,20);
dirtrai=tien;dirphai=tien;
}
//==========================================
void quayphai(void)
{
int ktra=0;
dirtrai=tien;dirphai=lui;
do
{
vtrai=
v_quay_trai;vphai= v_quay_phai;
if (sphai3) ktra++;
}
while(ktra<20);
stop();
for(i=1;i<1000;i++){};
dirtrai=tien; dirphai=tien;
}
////////////////////////////////////
void quaytrai(void)
{
int ktra=0;
dirtrai=lui;dirphai=tien;
do
{
vtrai=
60; vphai=
if (strai3)ktra++;
}
while(ktra<20);
stop();
for(i=1;i<1000;i++){};
dirtrai=tien; dirphai=tien;
}
//+++++++++++++++++++++++++++++++++++++
//vach trang sensor=1 vach xanh sensor=0
void stop(void)
{
vtrai=0; vphai=0;
40;
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<=15;i++)
if((strai0&&strai1&&sphai0&&sphai1)) j++;
if(j>=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;i<=20;i++)
if(!(strai3||strai2||sphai3||sphai2)) k++;
if(k>15) 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<=5;t++)
{
for(i=1;i<=10000;i++){
dirtrai=tien;dirphai=tien;
vtrai=25;vphai=25;}
VAGAM - giotdang
for(i=1;i<=10000;i++){
dirtrai=lui;dirphai=lui;
vtrai=0;vphai=0;}
}
//------------------------dirtrai=lui;dirphai=lui;
vtrai=25;vphai=25;
for(i=1;i<=2000;i++);
}
//////////////////////////
void pwm(void) interrupt 1
{
PWMC++;
if(PWMC==100) PWMC=0;
if(PWMC<vtrai)
{
mtraif=dirtrai;
mtraib=!dirtrai;
}
else
{
mtraif=0;
mtraib=0;
}
if(PWMC<vphai)
{
mphaif=dirphai;
mphaib=!dirphai;
}
else
{
mphaif=0;
mphaib=0;
}
}
void ham(int time,int trai,int phai)
{
int g;
for(g=0;g<=time;g++)
{
vphai=phai;vtrai=trai;
dirtrai=tien;dirphai=tien;
dirtrai=lui;dirphai=lui;
}
dirtrai=tien;dirphai=tien;
vphai=0;vtrai=0;
}