Phần 1: Chương trình biên dịch CCS cho vi điều khiển PIC

0
1425

1. # include

Chỉ thị include được sử dụng để chèn một file vào chương trình nguồn của bạn

Cú pháp của lệnh:

#include <Tên_file>

hoặc

#include “Tên_file”

 Nếu tên file đặt trong cặp dấu lớn hơn (<) và nhỏ hơn (>) chỉ rằng file chèn là một phần của thư viện tiêu chuẩn. Chương trình biên dịch đầu tiên sẽ tìm file trong thư viện ở thư mục cài đặt. Nếu tên file được đặt trong cặp dấu nháy kép(” “), khi đó đầu tiên chương trình biên dịch sẽ tìm trong thư mục chứa file C đang được biên dịch, nếu không có sẽ tìm trong thư viện ở thư mục cài đặt.

Ví dụ:


#include <16F877.H>    // chương trình sử dụng cho VĐK 16F877

#include “usb_desc_hid_user.h”

#include < C:INCLUDESCOMLIBMYRS232.C > // chỉ đường dẫn đến file cần chèn vào

Bạn có thể nhận thấy rằng các chỉ thị #include không có dấu chấm phẩy ở cuối câu. Lý do là các chỉ thị #include không phải là một câu lệnh trong C, nhưng thay vào đó là một chỉ thị tiền xử lý cho trình biên dịch. Toàn bộ các tập tin include được chèn vào file nguồn tại giai đoạn biên dịch

2. #Define

Sử dụng để định nghĩa hằng, tên kiểu dữ liệu hoặc macro

Cú pháp

#define          Tên_định_danh                 Thay_Thế

Khi các tiền xữ lý gặp chỉ thị này, nó sẽ thay thế tất cả các “Tên_định_danh” trong đoạn code của chương trình bằng “Thay_thế” , Thay_thế này có thể là biểu thức, lệnh,hoặc bất cứ gì, bộ tiền xữ lý chỉ đơn giản là thay thế tất cả “Tên_định_danh”  bằng “Thay_thế”  tại những vị trí “Tên_định_danh”  xuất hiện

Ví dụ:

#define TABLE_SIZE 100
int table1[TABLE_SIZE];
int table2[TABLE_SIZE]; 

Sau đó tiền xữ lý sẽ thay thế hết TABLE_SIZE bằng 100. Đoạn mã ở dưới tương đương:

 

int table1[100];
int table2[100];


#define cũng có thể có tham số để định nghĩa một macro hàm.

#define min(X, Y)  ((X) < (Y) ? (X) : (Y))
 x = min(a, b);
 y = min(1, 2); 
 z = min(a + 28, *p);

Tương đương với

x = ((a) < (b) ? (a) : (b)) ;
y = ((1) < (2) ? (1) : (2)) ;
z = ((a + 28) < (*p) ? (a + 28) : (*p)) ;

 Macro được định nghĩa có giá trị đến khi gặp #undef , #undef được sử dụng để giới hạn khối định nghĩa macro.

#define TABLE_SIZE 100
int table1[TABLE_SIZE];
#undef TABLE_SIZE
#define TABLE_SIZE 200
int table2[TABLE_SIZE];

Tương đương với

int table1[100];
int table2[200];

Chức năng định nghĩa macro chấp nhận hai toán tử đặc biệt (# và ##) trong chuỗi thay thế:

Nếu toán tử # được sử dụng trước khi một tham số được sử dụng trong chuỗi thay thế, thông số đó được thay thế bằng một chuỗi ký tự (được đặt trong cặp ngoặc kép)

#define str(x) #x
cout << str(test);

Tương đương với

cout << "test";

Các ví dụ thường dùng:

#define RA0 PIN_A0
output_high(RA0);

Hoặc:

#define output_high(x) {x=1;}

 

3. #ifdef, #ifndef, #if, #endif, #else và #elif

Những chỉ thị này cho phép chèn hoặc loại bỏ một phần đoạn code chương trình nếu thỏa mãn điều kiện

#ifdef cho phép một đoạn của chương trình được biên dịch chỉ khi nếu macro được chỉ định như là một tham số được xác định.

Ví dụ:

#ifdef TABLE_SIZE

int table[TABLE_SIZE];

#endif

Trong trường hợp này đoạn code:int table[TABLE_SIZE]; chỉ biên dịch nếu TABLE_SIZE đã được định nghĩa trước với #define. Nếu nó không được định nghĩa, đoạn code sẽ không chèn trong khi chương trình biên dịch

#indef thì ngược lại: đoạn code giữa #ifndef và #endif chỉ được biên dịch nếu tên định danh chỉ định không được định nghĩa trước . Ví dụ

#ifndef TABLE_SIZE

#define TABLE_SIZE 100

#endif

int table[TABLE_SIZE];

Nếu TABLE_SIZE chưa được định nghĩa trước với #define , thì nó được chỉ định với giá trị 100, còn nếu đã định nghĩa thì đoạn code trên được bỏ qua

Các chỉ thị #if, #else #elif (tức là, “else if“) được dùng để chỉ định một số điều kiện để được đáp ứng để cho các phần của đoạn code xung quanh được biên soạn. Các điều kiện sau #if hoặc #elif chỉ có thể làbiểu thức hằng số, bao gồm cả biểu thức macro. Ví dụ:

#if TABLE_SIZE>200

#undef TABLE_SIZE

#define TABLE_SIZE 200

#elif TABLE_SIZE<50

#undef TABLE_SIZE

#define TABLE_SIZE 50

#else

#undef TABLE_SIZE

#define TABLE_SIZE 100

#endif

int table[TABLE_SIZE];

Chú ý toàn bộ cấu trúc chỉ thị của #if, #elif #else kết thúc với #endif.

Các chỉ thị #ifdef #ifndef cũng có thể viết gọn bằng cách sử dụng các toán tử đặc biệt define và !definetương ứng trong bất kỳ chỉ thị #if hoặc #elif

#if defined ARRAY_SIZE

#define TABLE_SIZE ARRAY_SIZE

#elif !defined BUFFER_SIZE

#define TABLE_SIZE 128

#else

#define TABLE_SIZE BUFFER_SIZE

#endif

 

Leave a Reply