ĐẠI HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI ĐIU KHIN 8051
Biên son: Nguyn Bá Thun Page 1 of 6
CHƯƠNG 1: NGÔN NG C CHO H VI ĐIU KHIN 8051
1.1.C
u
trúc m
t ch
ư
ơ
ng trình:
//Đính
m
các
file
#include
<file.h>
#include
<file.c>
//Khai
o
bi
ế
n
toàn
c
c
unsigned
char
x,y;
int
z;
long
n=0;
//Khai
o
đ
nh
ngh
ĩ
a
các
m
void
Hàm1(void)
{
//Các
u
l
nh
}
void
Hàm2(unsigned
char
x)
{
//Các
u
l
nh
}
//Hàm
chính
b
t
bu
c
ch
ươ
ng
trình
o
c
ũ
ng
ph
i
có
void
main(void)
{
//Các
u
l
nh
}
Các
câu
l
nh
trong
m
chính
có
th
l
i
g
i
các
m
đ
ã
khai
o
trên
ho
c
không
Khi
có
l
i
g
i
m
o
thì
ch
ươ
ng
trình
nh
y
đ
ế
n
m
đ
ó
th
c
hi
n
m
đ
ó
xong
con
tr
l
i
quay
v
ch
ươ
ng
trình
chính(m
main)
th
c
hi
n
ti
ế
p
các
hàm
ho
c
câu
l
nh.
Các
u
l
nh
trong
C
k
ế
t
thúc
b
ng
d
u
“;
Các
l
i
gi
i
thích
đ
ượ
c
đ
t
trong
d
u:
M
đ
u
b
ng
/*
k
ế
t
thúc
b
ng
“*/
N
ế
u
l
i
gi
i
thích
trên
1
ng
thì
th
dùng
d
u:
“//”
Khi
l
p
trình
n
gi
i
thích
c
u
l
nh
kh
i
l
nh
m
đ
v
sau
khi
ch
ươ
ng
trình
l
n
d
s
a
l
i.
ĐẠI HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI ĐIU KHIN 8051
Biên son: Nguyn Bá Thun Page 2 of 6
2.2.Các lo
i bi
ế
n trong C:
D
n
g
b
i
ế
B
it
S
B
y
t
e
M
i
g
i
á
t
r
c
a
r
8
1
-
128
đ
ế
+
127
un
s
i
g
n
e
c
h
ar
8
1
0
đ
ế
n 255
s
h
o
r
t
16
2
-
32
,
768
đ
ế
+
3
2
,
767
un
s
i
g
n
e
s
h
o
r
t
16
2
0
đ
ế
65
,
535
i
n
t
16
2
-32,768
đ
ế
n +32,767
un
s
i
g
n
e
i
t
16
2
0
đ
ế
65
,
535
long 32 4 -2,147,483,648
đ
ế
n+2,147,483,647
un
s
i
g
n
e
l
o
n
g
32
4
0
đ
ế
4
,
2
94
,
69
7
,
295
Khai báo bi
ế
n
C
u
trúc
:
Ki
u
bi
ế
n
n
bi
ế
n
VD:
unsigned
char
x;
Khi
khai
o
bi
ế
n
có
th
gán
luôn
cho
bi
ế
n
giá
tr
ban
đ
u.
VD
:
Thay
vì:
unsigned
char
x;
x=0;
Ta
ch
c
n
:
unsigned
char
x=0;
th
khai
báo
nhi
u
bi
ế
n
cùng
m
t
ki
u
m
t
lúc
VD:
unsigned
int
x,y,z;
Ngoài
ra
đ
ng
cho
vi
đ
i
u
khi
n
trình
d
ch
chun
d
ng
còn
h
tr
c
lo
i
bi
ế
n
sau:
D
n
g
b
i
ế
B
i
t
B
y
t
e
M
i
g
i
á
t
r
it
1
0
0
;
1
s
it
1
0
0
;
1
sfr
8
1
0
đ
ế
n
255
sf16
16
2
0
đ
ế
n
65,535
Ngoài
ra
,cng
ta
có
th
đ
nh
nghĩa
bi
ế
n
ki
u
t
hay
ki
u
SFR
(special
function register)
Bit
Kiemtra; Sfr
P10=0x90; VD:
Bit
Kiemtra; Sfr
P10=0x90;
ĐẠI HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI ĐIU KHIN 8051
Biên son: Nguyn Bá Thun Page 3 of 6
Các
SFR
không
c
n
ph
i
h
c
thu
c
ch
c
n
bi
ế
t,
chúng
đ
ượ
c
khai
o
trong
th
ư
vi
n
AT89X51.H
AT89X52.H
2.3.m trong C:
Hàm
trong
C
c
u
trúc
nh
ư
sau
2
lo
i
m
Hàm
tr
l
i
giá
tr
:
C
u
trúc:
Ki
u
giá
tr
m
tr
l
ii
n
m
(Bi
ế
n
truy
n
vào
m)
{
//
Các
l
nh
x
đ
ây
}
VD
:
unsigned
char
Cong(unsigned
char
x,
unsigned
char
y)
{
//
c
l
nh
x
đ
ây
}
Hàm
kng
tr
l
i
giá
tr
C
u
trúc:
void
n
m
(Bi
ế
n
truy
n
vào
m)
{
//
c
u
l
nh
x
đ
ây
}
VD:
void
Cong(unsigned
char
x,
unsigned
char
y)
{
//
c
u
l
nh
x
đ
ây
}
Hàm
có
th
truy
n
vào
bi
ế
n
ho
c
không
VD
Hàm
không
có
bi
ế
n
truy
n
vào:
unsigned
char
nhàm(void)
{
//
c
u
l
nh
x
đ
ây
}
ĐẠI HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI ĐIU KHIN 8051
Biên son: Nguyn Bá Thun Page 4 of 6
Hàm
có
bi
ế
n
truy
n
o:
void
nm(unsigned
char
x)
{
//
c
u
l
nh
x
đ
ây
}
S
bi
ế
n
truy
n
vào
y
ý(mi
n
đủ
b
nh
),
ng
ă
n
cách
b
i
d
u
“,”
Ví
d
:
Void
nHàm(unsigned
char
x,
unsigned
char
y,
unsigned
char
z)
{
//
c
u
l
nh
x
đ
ây
}
Ngoài
ra
riêng
cho
vi
đ
i
u
khi
n
ph
n
ph
m
Keil
C
còn
có
m
t
lo
i
m
đ
ó
m ng
t:
C
u
trúc:
Void
nhàm(void)
interrupt
ngu
nng
t
using
b
ă
ngthanhghi
{
}
Hàm
ng
t
không
đ
ượ
c
phép
tr
l
i
giá
tr
hay
truy
n
tham
bi
ế
n
vào
m.
n
m
b
t
Interrupt
t
khóa
ch
m
ng
t
Ngu
n
ng
t
t
0
t
i
5
theo
b
ng
vector
ng
t
Interrupt Flag Vector Address
System Reset RST 0000H
External 0 IE 0 0003H
Timer 0 TF 0 000BH
External 1 IE 1 0013H
Timer 1 TF 1 001BH
Serial Port R1 or T1 0023H
Timer 2 TF2 or EXF2 002BH
Không
nh
ng
t
reset
h
th
ng
b
t
đ
u
đ
ế
m
t
ng
t
ngoài
0
B
ă
ng
thanh
ghi
trên
ram
ch
n
t
0
đ
ế
n
3
ĐẠI HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI ĐIU KHIN 8051
Biên son: Nguyn Bá Thun Page 5 of 6
2.4.Các toán t
c
ơ
b
n:
Phép n
:
=
V
D
:
x
=
y;
//
x
p
h
i
l
à
bi
ế
n
y
có
th
bi
ế
n
ho
c
giá
tr
nh
ư
ng
ph
i
phù
h
p
ki
u
Phép
c
ng:
+
Phép
tr
:
-
Phép
nhân:
*
Phép
chia:
/
Các
toán
t
logic:
B
ng
:
== And:
&& Or:
||
Not:
!
D
ch
trái:
<< D
ch
Ph
i:
>>
2.5.Các c
u trúc l
nh r
nhánh, ki
m tra th
ư
ng dùng:
u
l
nh
r
nhánh
if:
C
u
trúc:
if
(Đi
uki
n)
{
//
Các
câu
l
nh
x
}
Gi
i
thích:
N
ế
u
Đi
uki
n
đ
úng
thì
x
c
câu
l
nh
n
trong
n
sai
thì
nh
y qua
u
l
nh
l
a
ch
n
switch:
C
u
trúc:
switch(Bi
ế
n)
{
case
giatr
1:
{
//
c
u
l
nh
break;
}
case
giatr
2:
{
//
c
u
l
nh
break;
}
case
giatr
3:
{
//
c
u
l
nh
break;
}
case
giatr
n:
{
//
c
u
l
nh
break;
}
}
Gii thích: tùy vào biến có giatri1 thì thc hin các câu lnh sau đó tương ng ri thoát
khi cu trúc nh lnh break.
u
l
nh
vòng
l
p
c
đ
nh
for:
C
u
trúc:
for(
n=m;
n<l;
n++)
{//
c
u
l
nh
x
}
Gi
i
thích:
Trong
đ
ó
m,l
giá
tr
(m>l),
còn
n
bi
ế
n