ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051
Biên soạn: Nguyễn Bá Thuận Page 1 of 6
CHƯƠNG 1: NGÔN NGỮ C CHO HỌ VI ĐIỀU KHIỂN 8051
1.1.C
ấ
u
trúc m
ộ
t ch
ư
ơ
ng trình:
//Đính
kèm
các
file
#include
<file.h>
#include
<file.c>
//Khai
báo
bi
ế
n
toàn
c
ụ
c
unsigned
char
x,y;
int
z;
long
n=0;
//Khai
báo
và
đ
ị
nh
ngh
ĩ
a
các
hàm
void
Hàm1(void)
{
…//Các
câu
l
ệ
nh
}
void
Hàm2(unsigned
char
x)
{
…//Các
câu
l
ệ
nh
}
//Hàm
chính
b
ắ
t
bu
ộ
c
ch
ươ
ng
trình
nào
c
ũ
ng
ph
ả
i
có
void
main(void)
{
…//Các
câu
l
ệ
nh
}
Các
câu
l
ệ
nh
trong
hàm
chính
có
th
ể
có
l
ờ
i
g
ọ
i
các
hàm
đ
ã
khai
báo
ở
trên
ho
ặ
c
không
Khi
có
l
ờ
i
g
ọ
i
hàm
nào
thì
ch
ươ
ng
trình
nh
ả
y
đ
ế
n
hàm
đ
ó
th
ự
c
hi
ệ
n
hàm
đ
ó
xong
con
tr
ỏ
l
ạ
i
quay
v
ề
ch
ươ
ng
trình
chính(hàm
main)
th
ự
c
hi
ệ
n
ti
ế
p
các
hàm
ho
ặ
c
câu
l
ệ
nh.
Cá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
dòng
thì
có
th
ể
dùng
d
ấ
u:
“//”
Khi
l
ậ
p
trình
nên
gi
ả
i
thích
các
câu
l
ệ
nh
kh
ố
i
l
ệ
nh
làm
gì
đ
ể
v
ề
sau
khi
ch
ươ
ng
trình
l
ớ
n
d
ễ
s
ử
a
l
ỗ
i.
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051
Biên soạn: Nguyễn Bá Thuận Page 2 of 6
2.2.Các lo
ạ
i bi
ế
n trong C:
D
ạ
n
g
b
i
ế
n
S
ố
B
it
S
ố
B
y
t
e
M
i
ề
n
g
i
á
t
r
ị
c
h
a
r
8
1
-
128
đ
ế
n
+
127
un
s
i
g
n
e
d
c
h
ar
8
1
0
đ
ế
n 255
s
h
o
r
t
16
2
-
32
,
768
đ
ế
n
+
3
2
,
767
un
s
i
g
n
e
d
s
h
o
r
t
16
2
0
đ
ế
n
65
,
535
i
n
t
16
2
-32,768
đ
ế
n +32,767
un
s
i
g
n
e
d
i
n
t
16
2
0
đ
ế
n
65
,
535
long 32 4
-2,147,483,648
đ
ế
n+2,147,483,647
un
s
i
g
n
e
d
l
o
n
g
32
4
0
đ
ế
n
4
,
2
94
,
69
7
,
295
Khai báo bi
ế
n
C
ấ
u
trúc
:
Ki
ể
u
bi
ế
n
Tên
bi
ế
n
VD:
unsigned
char
x;
Khi
khai
bá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;
Có
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
đ
ể
dùng
cho
vi
đ
i
ề
u
khi
ể
n
trình
d
ị
ch
chuyên
d
ụ
ng
còn
h
ỗ
tr
ợ
các
lo
ạ
i
bi
ế
n
sau:
D
ạ
n
g
b
i
ế
n
S
ố
B
i
t
S
ố
B
y
t
e
M
i
ề
n
g
i
á
t
r
ị
b
it
1
0
0
;
1
s
b
it
1
0
0
;
1
sfr
8
1
0
đ
ế
n
255
sf16
16
2
0
đ
ế
n
65,535
Ngoài
ra
,chúng
ta
có
th
ể
đ
ị
nh
nghĩa
bi
ế
n
ki
ể
u
bít
hay
ki
ể
u
SFR
(special
function register)
Bit
Kiemtra; Sfr
P10=0x90; VD:
Bit
Kiemtra; Sfr
P10=0x90;
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051
Biên soạn: Nguyễn Bá Thuận Page 3 of 6
Các
SFR
không
c
ầ
n
ph
ả
i
h
ọ
c
thu
ộ
c
ch
ỉ
c
ầ
n
bi
ế
t,
và
chúng
đ
ượ
c
khai
báo
trong
th
ư
vi
ệ
n
AT89X51.H
và
AT89X52.H
2.3.Hàm trong C:
Hàm
trong
C
có
c
ấ
u
trúc
nh
ư
sau
Có
2
lo
ạ
i
hàm
Hàm
tr
ả
l
ạ
i
giá
tr
ị
:
C
ấ
u
trúc:
Ki
ể
u
giá
tr
ị
hàm
tr
ả
l
ạ
ii
Tên
hàm
(Bi
ế
n
truy
ề
n
vào
hàm)
{
//
Các
l
ệ
nh
x
ử
lý
ở
đ
ây
}
VD
:
unsigned
char
Cong(unsigned
char
x,
unsigned
char
y)
{
//
Các
l
ệ
nh
x
ử
lý
ở
đ
ây
}
Hàm
không
tr
ả
l
ạ
i
giá
tr
ị
C
ấ
u
trúc:
void
Tên
hàm
(Bi
ế
n
truy
ề
n
vào
hàm)
{
//
Các
câu
l
ệ
nh
x
ử
lý
ở
đ
ây
}
VD:
void
Cong(unsigned
char
x,
unsigned
char
y)
{
//
Các
câu
l
ệ
nh
x
ử
lý
ở
đ
â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
Tênhàm(void)
{
//
Các
câu
l
ệ
nh
x
ử
lí
ở
đ
ây
}
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051
Biên soạn: Nguyễn Bá Thuận Page 4 of 6
Hàm
có
bi
ế
n
truy
ề
n
vào:
void
Tênhàm(unsigned
char
x)
{
//
Các
câu
l
ệ
nh
x
ử
lí
ở
đ
ây
}
S
ố
bi
ế
n
truy
ề
n
vào
tùy
ý(mi
ễ
n
đủ
b
ộ
nh
ớ
),
ng
ă
n
cách
b
ở
i
d
ấ
u
“,”
Ví
d
ụ
:
Void
TênHàm(unsigned
char
x,
unsigned
char
y,
unsigned
char
z)
{
//
Các
câu
l
ệ
nh
x
ử
lí
ở
đ
â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
hàm
đ
ó
là
hàm ng
ắ
t:
C
ấ
u
trúc:
Void
Tê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
hàm.
Tên
hàm
b
ấ
t
kì
Interrupt
là
t
ừ
khóa
ch
ỉ
hà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
tí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 HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051
Biên soạn: Nguyễn Bá Thuận Page 5 of 6
2.4.Các toán t
ử
c
ơ
b
ả
n:
Phép gán
:
=
V
D
:
x
=
y;
//
x
p
h
ả
i
l
à
bi
ế
n
y
có
th
ể
là
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:
Câu
l
ệ
nh
r
ẽ
nhánh
if:
C
ấ
u
trúc:
if
(Đi
ề
uki
ệ
n)
{
//
Các
câu
l
ệ
nh
x
ử
lí
}
Gi
ả
i
thích:
N
ế
u
Đi
ề
uki
ệ
n
đ
úng
thì
x
ử
lí
các
câu
l
ệ
nh
bên
trong
còn
sai
thì
nh
ả
y qua
Câu
l
ệ
nh
l
ự
a
ch
ọ
n
switch:
C
ấ
u
trúc:
switch(Bi
ế
n)
{
case
giatr
ị
1:
{
//
Các
câu
l
ệ
nh
break;
}
case
giatr
ị
2:
{
//
Các
câu
l
ệ
nh
break;
}
case
giatr
ị
3:
{
//
Các
câu
l
ệ
nh
break;
}
…
case
giatr
ị
n:
{
//
Các
câu
l
ệ
nh
break;
}
}
Giải thích: tùy vào biến có giatri1 thì thực hiện các câu lệnh sau đó tương ứng rồi thoát
khỏi cấu trúc nhờ lệnh break.
Câu
l
ệ
nh
vòng
l
ặ
p
xác
đ
ị
nh
for:
C
ấ
u
trúc:
for(
n=m;
n<l;
n++)
{//
Các
câu
l
ệ
nh
x
ử
lí
}
Gi
ả
i
thích:
Trong
đ
ó
m,l
là
giá
tr
ị
(m>l),
còn
n
là
bi
ế
n
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051
Biên soạn: Nguyễn Bá Thuận Page 6 of 6
Th
ự
c
hi
ệ
n
l
ặ
p
các
câu
l
ệ
nh
(l-m)
l
ầ
n
Câu
l
ệ
nh
vòng
l
ặ
p
không
xác
đ
ị
nh
while:
C
ấ
u
trúc:
While(
Đi
ề
u
ki
ệ
n)
{
//Các
câu
l
ệ
nh
}
Gi
ả
i
thích:
Th
ự
c
hi
ệ
n
l
ặ
p
các
câu
l
ệ
nh
khi
đ
i
ề
u
ki
ệ
n
đ
úng,
n
ế
u
câu
l
ệ
nh
sai
thi
thoát
kh
ỏ
i vòng
l
ặ
p
2.6. B
ộ
ti
ề
n x
ử
lý:
#define
:
Dùng
đ
ể
đ
ị
nh
nghĩa.
Ví
d
ụ
:
#define
dung
1
#define
sai
0
có
nghĩa
là
dung
có
giá
tr
ị
b
ằ
ng
1.
Trong
ch
ươ
ng
trình
có
th
ể
có
đ
o
ạ
n
code
nh
ư
sau:
bit
kiemtra
if
(bit==dung)
{
//
Các
câu
l
ệ
nh}
if
(bit==sai)
{
//
Các
câu
l
ệ
nh}
Vi
ệ
c
này
giúp
l
ậ
p
trình
d
ễ
s
ử
a
l
ỗ
i
h
ơ
n