Đ c ng ng d ng l p trình C cho vi đi u khi n 8051 ươ
i 1: Nn 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 Ngôn ng b c cao.
Ngôn ng b c cao 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 y tr nên 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 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 ơ
y thay cho ngôn ng b c th p gi m t i cho l p trình viên trong vi c nghiên c u các
t p l nh xây d ng 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 y nh g i 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.nghĩa 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 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 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 uS ByteKho 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 n_bi n _at_ Đia_ch ; ế
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. ế
d : unsigned int x,y,z,t;
- Ch đ nh ng nh : t khoá “Vùng_nh ” cho phép ng i dùng có th ch ra ng nh s ư
d ng đ l u tr c bi n s d ng trong ch ng trình. Các ng nh th s d ng là: ư ế ươ
CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi kng khai báong nh trình d ch
Keil C s m c đ nh đó là vùng nh DATA.
Vùng nhÝ nghĩa
CODE B nh 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
m t s dòng vi đi u khi n sauy
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 ng đ khaiế ượ ư
o các bi n khácế
Ví d : typedef int m5[5];
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 uS bit
Bit 1
Sbit 1
Sfr 8
Sfr16 16
- bit : dùng đ khai o các bi n giá tr 0 ho c m t hay c bi n logic trên ng ế ế
RAM c a vi đi u khi n. Khi khai 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: ng đ đ nh nghĩa các cho 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 m t t p h p nhi u ph n t cùng m t ki u giá tr chung m t tên. 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
Khaio:
- Cú pháp: Tên_ki u ng_nh n_m ng[s _ph n_t _m ng];
Khi b tr ng s ph n t m ng ta s m ng s ph n t b t kì.
Ví d :
Unsigned int data a[5],b[2] [3];
V i khai o trên ta s : m ng a là m ng m t chi u 5 ph n t . M ng b 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
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 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 ch th cướ
Con tr t ng quát 3 byte
Con tr XDATA2 byte
Con tr CODE2 byte
Con tr DATA1 byte
Con tr IDATA1 byte
Con tr PDATA1 byte
Khaio 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 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 m t t p h p c bi n, các m ng c c ki u c u trúc ế
khác đ c bi u th b i m 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 {
Khaio các bi n thành ph n;ế
} Tên_ki u_c u_trúc;
- Khai 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 giá tr xác đ nh cũng có th bi n.ế ế
2.2.1 Phép toán s h c
Phép toán ý nghĩa d
+ Phép c ngX=a+b
- Phép trX=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 nh l n h n ơ a>b
4>5 các giá tr
0
>= So nh l n h n ho c b ng ơ a>=b