
Đ c ng ng d ng l p trình C cho vi đi u khi n 8051ề ươ ứ ụ ậ ề ể
Bài 1: Ngôn ng C – Trình d ch Keil Cữ ị
I. Ngôn ng C cho vi đi u khi nữ ề ể
1, Gi i thi u ngôn ng Cớ ệ ữ
Trong k thu t l p trình vi đi u khi n nói chung, ngôn ng l p trình đ c s d ngỹ ậ ậ ề ể ữ ậ ượ ử ụ
th ng chia làm 2 lo i: ườ ạ Ngôn ngữ b c th p ậ ấ và Ngôn ngữ b c caoậ.
Ngôn ngữ b c cao ậlà các ngôn ng g n v i ngôn ng con ng i h n, do đó vi cữ ầ ơ ữ ườ ơ ệ
l p trình b ng các ngôn ng này tr nên d dàng và đ n gi n h n. Có th k đ n m t sậ ằ ữ ở ễ ơ ả ơ ể ể ế ộ ố
ngôn ng l p trình b c cao nh C, Basic, Pascal… trong dó C là ngônữ ậ ậ ư
ng thông d ng h n c trong k thu t vi đi u khi n. V b n ch t, s d ng các ngôn ngữ ụ ơ ả ỹ ậ ề ể ề ả ấ ử ụ ữ
này thay cho ngôn ng b c th p là gi m t i cho l p trình viên trong vi c nghiên c u cácữ ậ ấ ả ả ậ ệ ứ
t p l nh và xây d ng các c u trúc gi i thu t. Ch ng trình vi t b ng ngôn ng b c caoậ ệ ự ấ ả ậ ươ ế ằ ữ ậ
cũng s đ c m t ph n m m trên máy tính g i là trình biên d ch (Compiler) chuy n sangẽ ượ ộ ầ ề ọ ị ể
d ng h p ng tr c khi chuy n sang mã máy.ạ ợ ữ ướ ể
Khi s d ng ngôn ng C ng i l p trình không c n hi u sâu s c v c u trúc c aử ụ ữ ườ ậ ầ ể ắ ề ấ ủ
b vi đi u khi n. Có nghĩa là v i m t ng i ch a quen v i m t vi đi u khi n cho tr cộ ề ể ớ ộ ườ ư ớ ộ ể ể ướ
s xây d ng đ c ch ng trình m t cách nhanh chóng h n, do không ph i m t th i gianẽ ự ượ ươ ộ ơ ả ấ ờ
tìm hi u ki n trúc c a vi đi u khi n đó. Và vi c s d ng l i các ch ng trình đã xâyể ế ủ ề ể ệ ử ụ ạ ươ
d ng tr c đó cũng d dàng h n, có th s d ng toàn b ho c s a ch a m t ph n.ự ướ ễ ơ ể ử ụ ộ ặ ử ữ ộ ầ
2. Ngôn ng Cữ
2.1 Ki u d li uể ữ ệ
2.1.1 Ki u d li u trong Cể ữ ệ
Ki uểS ByteốKho ng giá trả ị
Char 1 -128 – +127
Unsigned char 1 0 – 255
Int 2 -32768 - +32767
Unsigned int 2 0 - 65535
Long 4 -2147483648 - +2147483647
Unsigned long 4 0 – 4294697295
Float 4

* Khai báo bi n:ế
- Cú pháp: Ki u_d _li u Vùng_nh Tên_bi n _at_ Đia_ch ;ể ữ ệ ớ ế ỉ
Ví d :ụ
Unsigned char data x;
- Khi khai báo bi n có th gán luôn cho bi n giá tr ban đ u.ế ể ế ị ầ
Ví d :ụ
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.ể ề ế ộ ể ộ
Ví d : unsigned int x,y,z,t;ụ
- Ch đ nh vùng nh : t khoá “Vùng_nh ” cho phép ng i dùng có th ch ra vùng nh sỉ ị ớ ừ ớ ườ ể ỉ ớ ử
d ng đ l u tr các bi n s d ng trong ch ng trình. Các vùng nh có th s d ng là:ụ ể ư ữ ế ử ụ ươ ớ ể ử ụ
CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi không khai báo vùng nh trình d chớ ị
Keil C s m c đ nh đó là vùng nh DATA.ẽ ặ ị ớ
Vùng nhớÝ nghĩa
CODE B nh mã ngu n ch ng trìnhộ ớ ồ ươ
DATA B nh d li u g m 128 Byte th p c a RAM trong vi đi u khi nộ ớ ữ ệ ồ ấ ủ ề ể
BDATA B nh d li u có thê đ nh đ a ch bit, n m trong vùng nh DATAộ ớ ữ ệ ị ị ỉ ằ ớ
IDATA B nh d li u g m 128 Byte cao c a RAM trong vi đi u khi n ch có ộ ớ ữ ệ ồ ủ ề ể ỉ ở
m t s dòng vi đi u khi n sau nàyộ ố ề ể
PDATA B nh d li u ngoài g m 256 Byte, đ c truy c p b i đ a ch đ t trên P0ố ớ ữ ệ ồ ượ ậ ở ị ỉ ặ
XDATA B nh d li u ngoài có dung l ng có th lên đ n 64 KB, đ c truy c pộ ớ ữ ệ ượ ể ế ượ ậ
b i đ a ch đ t trên P0 và P2ở ị ỉ ặ
* Đ nh nghĩa l i ki uị ạ ể
- Cú pháp: typedef Ki u_d _li u Tên_bi n;ễ ữ ệ ế
- Ten_bi n sau này s đ c s d ng nh m t ki u d li u m i và có th dùng đ khaiế ẽ ượ ử ụ ư ộ ể ữ ệ ớ ể ể
báo các bi n khácế
Ví d : typedef int m5[5];ụ
Dùng tên m5 khai báo hai bi n tên a và b có ki u d li u là m ng 1 chi u 5 ph nế ể ữ ệ ả ể ầ
t :ử
m5 a,b;

2.1.2 Ki u d li u trong Keil Cể ữ ệ
Ki uểS bitố
Bit 1
Sbit 1
Sfr 8
Sfr16 16
- bit : dùng đ khai báo các bi n có giá tr 0 ho c m t hay các bi n logic trên vùngể ế ị ặ ộ ế
RAM c a vi đi u khi n. Khi khai báo bi n ki u bit trình d c Keil C s m c đ nh vùng nhủ ề ể ế ể ị ẽ ặ ị ớ
s d ng là BDATA.ử ụ
` - sbit, sfr, sfr16: dùng đ đ nh nghĩa các cho các thanh ghi ch c năng ho c các c ngể ị ứ ặ ổ
trên vi đi u khi n dùng đ truy nh p các đo n d li u 1 bit, 8 bit, 16 bitề ể ể ậ ạ ữ ệ
2.1.3 M ngả
M ng là m t t p h p nhi u ph n t cùng m t ki u giá tr và chung m t tên. Cácả ộ ậ ợ ề ầ ử ộ ể ị ộ
ph n t c a m ng phân bi t v i nhau b i ch s hay s th t c a ph n t trong dãyầ ử ủ ả ệ ớ ở ỉ ố ố ứ ự ủ ầ ử
ph n t . M i ph n t có vai trò nh m t bi n và l u tr đ c m t giá tr đ c l p v i cácẩ ử ỗ ầ ử ư ộ ế ư ữ ượ ộ ị ộ ậ ớ
ph n t khác c a m ng.ầ ử ủ ả
M ng có th là m ng m t chi u ho c m ng nhi u chi uả ể ả ộ ề ặ ả ề ề
Khai báo:
- Cú pháp: Tên_ki u Vùng_nh Tên_m ng[s _ph n_t _m ng];ể ớ ả ố ầ ử ả
Khi b tr ng s ph n t m ng ta s có m ng có s ph n t b t kì.ỏ ố ố ầ ử ả ẽ ả ố ầ ử ấ
Ví d :ụ
Unsigned int data a[5],b[2] [3];
V i khai báo trên ta s có: m ng a là m ng m t chi u 5 ph n t . M ng b là m ngớ ẽ ả ả ộ ề ầ ử ả ả
hai chi u, t ng s ph n t là 6.ề ổ ố ầ ử
Ch s c a m ng b t đ u t s 0. M ng có bao nhiêu chi u ph i cung c p đ y đỉ ố ủ ả ắ ầ ừ ố ả ề ả ấ ầ ủ
b y nhiêu ch sôấ ỉ
Ví du: ph n t m ng b[0] [1] là đúngầ ử ả
Khi vi t b[0] là saiế
2.1.4. Con trỏ
Khi ta khai báo m t bi n, bi n đó s đ c c p phát m t kho ng nh bao g m m tộ ế ế ẽ ượ ấ ộ ả ớ ồ ộ
s byte nh t đ nh dùng đ l u tr giá tr . Đ a ch đ u tiên c a kho ng nh đó chính là đ aố ấ ị ể ư ữ ị ị ỉ ầ ủ ả ớ ị
ch c a bi n đ c khai báo.ỉ ủ ế ượ

Con tr là m t bi n dùng đ ch a đ a ch mà không ch a giá tr , hay giá tr c a conỏ ộ ế ể ứ ị ỉ ứ ị ị ủ
tr chính là đ a ch kho ng nh mà nó tr t i.ỏ ị ỉ ả ớ ỏ ớ
V i các vùng nh c th con tr t i vùng nh đó chi m dung l ng ph thu c vàoớ ớ ụ ể ỏ ớ ớ ế ượ ụ ộ
đ l n c a vùng nh đó. Con tr t ng quát khi không xác đ nh tr c vùng nh s có dungộ ớ ủ ớ ỏ ổ ị ướ ớ ẽ
l ng l n nh t vì v y t t nh t nên s d ng con tr c th .ượ ớ ấ ậ ố ấ ử ụ ỏ ụ ể
Lo i con trạ ỏ Kích th cướ
Con tr t ng quátỏ ổ 3 byte
Con tr XDATAỏ2 byte
Con tr CODEỏ2 byte
Con tr DATAỏ1 byte
Con tr IDATAỏ1 byte
Con tr PDATAỏ1 byte
Khai báo bi n con tr :ế ỏ
- Cú pháp: Ki u_D _li u Vùng_nh *Tên_bi n;ể ữ ệ ớ ế
- Ví d :ụ
int *int_ptr;
long data *long_ptr;
- khi không ch rõ vùng nh con tr s đ c coi là con tr t ng quát.ỉ ớ ỏ ẽ ượ ỏ ổ
2.1.5 Ki u d li u c u trúcể ữ ệ ấ
Ki u d li u c u trúc là m t t p h p các bi n, các m ng và c các ki u c u trúcể ữ ệ ấ ộ ậ ợ ế ả ả ể ấ
khác đ c bi u th b i m t tên duy nh t. ki u d li u c u trúc dùng đ l u tr các giá tr ,ượ ể ị ở ộ ấ ể ữ ệ ấ ể ư ữ ị
thông tin có liên quan đ n nhau.ế
Đ nh nghĩa và khai báo bi n c u trúc:ị ế ấ
- Đ nh nghĩa: typedef struct {ị
Khai báo các bi n thành ph n;ế ầ
} Tên_ki u_c u_trúc;ể ấ
- Khai báo: Tên_ki u_c u_trúc Vùng_nh Tên_bi n;ể ấ ớ ế
Ví d : typedef struct {ụ
char day;
char month;
int year;
} Date_type;
Date_type date,date_arr[5];
2.2 Phép toán

Phép gán kí hi u: “=”.ệ
- Cú pháp: Bi n_1 = Bi n_2;ế ế
Trong đó Bi n_2 có th là giá tr xác đ nh cũng có th là bi n.ế ể ị ị ể ế
2.2.1 Phép toán s h cố ọ
Phép toán ý nghĩa Ví dụ
+ Phép c ngộX=a+b
- Phép trừX=a-b
* Phép nhân X=a*b
/ Phép chia l y ph nấ ầ
nguyên
X=a/b
(a=9, b=2 → X=4)
% Phép chia l y ph n dấ ầ ư a%b
(a=9, b=2 → X=1)
2.2.2 Phép toán Logic
AND: &&
OR: ||
NOT: !
2.2.3 Các phép toán so sánh:
Phép
toán
ý nghĩa Ví dụ
> So sánh l n h nớ ơ a>b
4>5 các giá trị
0
>= So sánh l n h n ho c b ngớ ơ ặ ằ a>=b

