Ô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 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ộ... Ôn l
Trang 1Kinh nghiệm sử dụng Keil
C để lập trình cho x51.
Trang 2• 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àiliệ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
Trang 3Topics 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
Trang 4Ô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
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ộ
Trang 5Ôn lại về ngôn ngữ lập trình C 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
Trang 7Ôn lại về ngôn ngữ lập trình
Trang 8Ô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;
Trang 9Ô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];
Trang 10Ôn lại về ngôn ngữ lập trình
• Khai báo kiểu con trỏ
• unsigned char *Buffer;
Trang 11Giới thiệu sơ lược về Keil C
• 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 »;
Trang 12Giớ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;
Trang 13Giớ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
Trang 16Giớ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;
Trang 17Giớ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
Trang 18Giớ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
Trang 19Giớ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;
Trang 20Giớ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ệ
Trang 21Tạ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
Trang 34Tạ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:
Trang 37Và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ạoproject để 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áytí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)