You are on page 1of 37

Kinh nghiệm sử dụng Keil

C để lập trình cho x51.

1
Introduction
• MCU 51 là loại vi điều khiển 8 bit, giá thành
thường rẻ hơn các loại vdk khác, dể sử dụng, tài
liệu về nó rất nhiều cho nên hiện nay nó vẫn còn
được sử dụng.
• Có rất nhiều công cụ để lập trình cho x51. Trong
đó Keil C là công cụ mạnh, hổ trợ nhiều dẫn
xuất của x51, công cụ debug rất mạnh, sinh mã
có hiệu suất cao.

2
Topics of Discussion
• Ôn lại về ngôn ngữ lập trình C và x51
• Giới thiệu sơ lược về Keil C
• Tạo 1 project để lập trình bằng ASM trên
Keil C
• Tạo 1 project để lập trình bằng C trên Keil
C

3
Ôn lại về ngôn ngữ lập trình C và x51

• Hai tài liệu ngắn gọn về ngôn ngữ C bằng tiếng


Anh các bạn có thể download tại đây. Mong các
bạn đọc hết 2 tài liệu này, nó giúp bạn hiểu rõ
vài vấn đề hóc búa trong C như con trỏ và bộ
nhớ v.v…
• Các bạn nên ôn lại những vấn đề cơ bản về x51
như tập lệnh, timer, serial port, ngắt.
• Nếu bạn rất tự tin về trình độ lập trình C và
những hiểu biết về x51 thì có thể bỏ qua phần
này
4
Ôn lại về ngôn ngữ lập trình C và
x51
• Ôn lại một chút về C :
– Header:
• Tệp header trong C là tệp tin chứa các hằng số, các
prototype của hàm, các typedef v.v…
• #include <tên file header>
• #include “tên file header”
• Cách đầu tiên trình biên dịch sẽ tìm trong thư viện của
nó, cách thứ 2 compiler sẽ tìm trong thư mục hiện tại
chứa project hoặc trong đường dẫn bạn cung cấp. Vd:
#include “C:\vd.h” trình biên dịch sẽ tìm file vd.h ở ổ C

5
6
Ôn lại về ngôn ngữ lập trình
C và x51
• Ôn lại một chút về C :
– Define
• Định nghĩa hằng số hoặc các macro
• #define MAX 100
• #define MIN(a,b) a<b?a:b
– Prototype của hàm
• Không bắt buộc nhưng nếu có thì trình liên kết sẽ
làm việc hiệu quả hơn đó bạn
• int max(int a, int b);

7
Ôn lại về ngôn ngữ lập trình
C và x51
• Ôn lại một chút về C :
– Typedef:
• Đặt tên lại kiểu dữ liệu
• typedef unsigned char BYTE;
– Struct:
• Khai báo kiểu cấu trúc
• struct time{int hour, min, sec};
• struct time{int hour, min, sec}STime;

8
Ôn lại về ngôn ngữ lập trình
C và x51
• Ôn lại một chút về C :
– Enum:
• Kiểu liệt kê
• enum day{Sun, Mon, Tue, Wed, Thu, Fri, Sat};
– Array:
• Kiểu mảng
• unsigned char Buffer[100];

9
Ôn lại về ngôn ngữ lập trình
C và x51
• Ôn lại một chút về C:
– String:
• Kiểu string ko có trong C, C dùng mảng để chứa
string.
• char szMyString[20]=“www.dtvt.org”;
– Pointer:
• Khai báo kiểu con trỏ
• unsigned char *Buffer;

10
Giới thiệu sơ lược về Keil C

• Ôn lại một chút về C


– Từ khóa volatile: nói nôm na 1 biến volatile là biến mà
nội dung nó bị thay đổi bởi phần cứng chứ không
phải do bản thân chương trình. Cái này cũng không
quan trọng lắm bạn có thể đọc user guilde của keil C
để tìm hiểu thêm.
• volatile unsigned char reg1;
– Từ khóa static: khai báo biến tĩnh, biến tĩnh khỏi tạo 1
lần và giữ nguyên giá trị của nó sau mỗi lần gọi hàm
nếu nó được khai báo trong hàm.
• static data-type name « = value »;

11
Giới thiệu sơ lược về Keil C

• Ôn lại một chút về C


– Từ khóa extern: Khai báo 1 biến toàn cục mà
biến này đã được định nghĩa trong một
modun khác.
• extern unsigned char my;
– Từ khóa register: khai báo biến mà biến đó
được lưu trong thanh ghi.
• register data-type name « = value »;
• register unsigned char fastVar = 10;

12
Giới thiệu sơ lược về Keil C

• Để có bản Evaluation của Keil C bạn vào


trang web điền thông tin rồi download về.
• Nếu bạn có license code của keil C bạn
hãy nhập vào như 2 hình sau đây

13
14
6/16/2009 e13k@e13k.eu.org 15
Giới thiệu sơ lược về Keil C

• Điểm khác biệt của Keil C với C chuẩn


– Kiểu dữ liệu mới:
• bit : khai báo 1 biến kiểu bit, các biến kiểu bit được lưu
trữ ở vùng nhớ định địa chỉ bit
– bit name « = value »;
– Vd: bit myFlag = 1;
– Chú ý không thể khai báo con trỏ và mảng kiểu bit

• sbit: Khai báo bit trong các thanh ghi SFR


– sbit name = sfr-name ^ bit-position;
– sbit name = sfr-address ^ bit-position;
– sbit name = sbit-address;
– Vd: sbit output0 = P1^0;sbit output1 = 0x90^1; sbit output2 =
0x92;

16
Giới thiệu sơ lược về Keil C

• Điểm khác biệt của Keil C với C chuẩn


– Kiểu dữ liệu mới:
• sfr : định nghĩa 1 thanh ghi sfr
– sfr name = address;
– sfr P0 = 0x80;
– Chú ý sfr không thể khai báo bên trong hàm nhé bạn
• sfr16: định nghĩa 1 thanh ghi sfr 16 bit
– sfr16 name = address;
– sfr16 T2 = 0xCC; /* Timer 2: T2L 0CCh, T2H 0CDh */
– Chú ý sfr16 không thể khai báo bên trong hàm

17
Giới thiệu sơ lược về Keil C

• Điểm khác biệt của Keil C với C chuẩn


– Khai báo vùng nhớ của biến:
• code: vùng nhớ chương trình (thường là ROM). Dùng
để lưu trữ các hằng số hay bảng số liệu.
– unsigned char code code_constant;
• data: vùng nhớ dữ liệu (RAM) trong chip truy cập trực
tiếp (128 byte đầu). Có thời gian truy cập nhanh nhất
nên thường được sử dụng để khai báo biến.
– unsigned char data fast_variable;
– Chú ý ko thể khai báo hàm kiểu data

18
Giới thiệu sơ lược về Keil C

• Điểm khác biệt của Keil C với C chuẩn


– Khai báo vùng nhớ của biến:
• bdata: Khai báo 1 biến 8-bit (hoặc cao hơn) ở vùng
nhớ định địa chỉ bit (0x20->0x2F)
– unsigned char bdata bdata_var;
– Chú ý ko thể khai báo hàm kiểu data
• idata: vùng nhớ dữ liệu (RAM) trong chip truy cập gián
tiếp. Vùng nhớ idata bao gồm vùng nhớ data và 128
byte cao truy cập gián tiếp trong 8052 (cái này đọc
trong user guilde của c51). Tốc độ truy cập chậm hơn
data
– unsigned char idata variable;

19
Giới thiệu sơ lược về Keil C

• Điểm khác biệt của Keil C với C chuẩn


– Khai báo vùng nhớ của biến:
• Từ khóa _at_: chỉ định địa chỉ mà biến được lưu
trong bộ nhớ
– « memory_type » type variable_name _at_ constant;
– data char tmp _at_ 0x30;// Khai báo biến tmp kiểu char
trong vùng nhớ data tại địa chỉ 0x30.
– Chú ý không thể dùng _at_ với hàm, biến kiểu bit, biến
khai báo với _at_ không thể khởi tạo trước . Vd câu lệnh
sau không hợp lệ
» data char tmp=24 _at_ 0x30;// ko hợp lệ

20
Tạo 1 project để lập trình bằng
ASM trên Keil C
• Bạn xem các bước ở các slide sau đây

21
22
23
24
25
26
27
28
29
30
31
32
33
Tạo 1 project để lập trình bằng C
trên Keil C
• Các bước hoàn toàn tương tự chỉ khác ở
các slide sau đây:

34
35
36
Vài lời cuối hướng dẫn
• Hướng dẫn đầu tiên có vẻ buồn chán nhưng nó
sẽ giúp bạn ôn lại 1 chút về C, giúp bạn biết tạo
project để lập trình bằng ASM / C cho x51.
Chuẩn bị cho mấy cái hướng dẫn tiếp theo.
• Lần sau chúng ta sẽ làm 1 project thực thụ. Đó
là làm 1 cái đồng hồ (dùng timer nên nó ko
chính xác) hiển thị ra LCD, điều khiển bằng máy
tính. Mục tiêu là giúp bạn làm 1 project thực thụ,
viết code,debug, mô phỏng,tối ưu v.v… (Rất thú
vị đó và tất nhiên ko chán như bài này rồi)

37

You might also like