PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Mới học CCS C nhờ giúp đỡ (http://www.picvietnam.com/forum/showthread.php?t=2690)

dark_electron 09-08-2008 06:13 PM

Mới học CCS C nhờ giúp đỡ
 
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

Trích:

Nguyên văn bởi dark_electron (Post 18056)
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ụ:
PHP Code:

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

if(IN_LOWoutput_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
PHP Code:

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

Trích:

Nguyên văn bởi phamminhtuan (Post 18063)
#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

Trích:

Nguyên văn bởi namqn (Post 18065)
#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!


Múi giờ GMT. Hiện tại là 10:52 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam