PDA

View Full Version : Mới học CCS C nhờ giúp đỡ


dark_electron
09-08-2008, 06:13 PM
Hi các bác,
Em mới chuyển qua C để viết cho nhanh nhưng đọc manual của CCS thấy có vài chỗ thắc mắc như sau: chỗ đặt biến trong CCS, có 2 kiểu đặt là #define và #byte. Vậy cho em hỏi khi nào thì dùng #define và khi nào thì nên dùng #byte? Em thấy đa số trong file .h bản thân CCS nó hay dùng #define còn trong file def_877a.h các bác lại dùng #byte.
Nhờ các bác giải đáp giúp, cám ơn các bác nhiều.

phamminhtuan
10-08-2008, 12:45 AM
Hi các bác,
Em mới chuyển qua C để viết cho nhanh nhưng đọc manual của CCS thấy có vài chỗ thắc mắc như sau: chỗ đặt biến trong CCS, có 2 kiểu đặt là #define và #byte. Vậy cho em hỏi khi nào thì dùng #define và khi nào thì nên dùng #byte? Em thấy đa số trong file .h bản thân CCS nó hay dùng #define còn trong file def_877a.h các bác lại dùng #byte.
Nhờ các bác giải đáp giúp, cám ơn các bác nhiều.

#define là định nghĩa 1 macro, ví dụ:

#define IN_LOW !input(PIN_A0)
//lúc sử dụng nó trong chương trình

if(IN_LOW) output_high(PIN_A1);
//có nghĩa trình dịch sẽ thay thế IN_LOW = !input(PIN_A0) trong quá trình dịhc
còn chỉ thị #byte là đặt địa chỉ, ví dụ PORTB có địa chỉ là 0x06, và TRISB có địa chỉ 0x86 với PIC16 thì thay vì mình viết trong CCS C

ouput_b(0xAA); //có nghĩa là xuất ra PORTB giá trị 0xAA

//tương đương với
#byte CONG_B 0x06
#byte DKXUAT_NHAP_B 0x86

DKXUAT_NHAP_B = 0x00;
CONG_B = 0xAA;

namqn
10-08-2008, 01:11 AM
#define là định nghĩa 1 macro, ví dụ:
...
#define là một directive (chỉ dẫn) dùng để thay thế một nhóm ký tự (bất kể đó là biểu thức hay phát biểu) bằng một tên gọi mang ý nghĩa hơn đối với chương trình. Trước khi biên dịch chương trình, trình biên dịch chỉ thay thế các tên gọi này bằng nhóm ký tự mà nó đại diện, rồi mới phân tích cú pháp trong bước biên dịch.

Thân,

dark_electron
10-08-2008, 11:16 AM
#define là một directive (chỉ dẫn) dùng để thay thế một nhóm ký tự (bất kể đó là biểu thức hay phát biểu) bằng một tên gọi mang ý nghĩa hơn đối với chương trình. Trước khi biên dịch chương trình, trình biên dịch chỉ thay thế các tên gọi này bằng nhóm ký tự mà nó đại diện, rồi mới phân tích cú pháp trong bước biên dịch.

Thân,

Cám ơn các bác, nhân tiện cho em hỏi directive #byte chỉ dùng để đặt địa chỉ thôi hả các bác hay còn làm mục đích gì khác hơn? Có thể dùng directive #define để thay cho directive #byte hay ko vậy? Với lại #byte có thể dùng để đặt biến hay ko? Ví dụ như thế này: #byte LED_DATA0 = 0xxx ? Thanks.

tallht
10-08-2008, 02:15 PM
#BYTE

--------------------------------------------------------------------------------



Syntax:
#byte id = x



Elements:
id is a valid C identifier,

x is a C variable or a constant



Purpose:
If the id is already known as a C variable then this will locate the variable at address x. In this case the variable type does not change from the original definition. If the id is not known a new C variable is created and placed at address x with the type int (8 bit)



Warning: In both cases memory at x is not exclusive to this variable. Other variables may be located at the same location. In fact when x is a variable, then id and x share the same memory location.

đây là phần help của CCS

tallht
10-08-2008, 02:23 PM
#define dùng để đặt tên gợi nhớ cho 1 hàm hay 1 số mà bạn khó nhớ,hay làm cho đoạn code dễ hiểu hơn!
chẳng hạn như bạn muốn xuất led ra port b thì bạn có thể viết như sau: #define led_out portb(trong trường hợp portb đã được định nghĩa trước)
như vậy người đọc code của bạn có thể sẽ dễ hiểu hơn!