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)
-   -   khai báo dữ liệu trong MCC18 (http://www.picvietnam.com/forum/showthread.php?t=2752)

PICC 29-08-2008 11:05 AM

khai báo dữ liệu trong MCC18
 
Xin các bạn cho hỏi tôi đọc 1 đoạn code viết bằng mcc18 nhưng có một đoạn khai báo dữ liệu như sau:

typedef struct
{
unsigned char data : 4; // Bits 0 through 3
unsigned char : 4; // Bits 4 through 7
} LCD_DATA;
#define LCD_DATA_TRIS (((volatile LCD_DATA*)&TRISD)->data)
#define LCD_DATA_IO (((volatile LCD_DATA*)&LATD)->data)
#define LCD_RD_WR_TRIS (TRISEbits.TRISE1)
#define LCD_RD_WR_IO (LATEbits.LATE1)
#define LCD_RS_TRIS (TRISEbits.TRISE2)
#define LCD_RS_IO (LATEbits.LATE2)
#define LCD_E_TRIS (TRISEbits.TRISE0)
#define LCD_E_IO (LATEbits.LATE0)
Xin cho hỏi dòng:
#define LCD_DATA_TRIS (((volatile LCD_DATA*)&TRISD)->data)
có ý nghĩa như thế nào, có ai biết cuốn sách nào giải thích các khai báo trong mcc18 không chỉ cho tôi với, tôi đã xem qua 2 e book của microchip là user guide và starter nhưng vẫn chưa hiểu được cách khai báo như trên. đây là một đoạn code trong chương trình giao tiếp lcd ai biết giải thích giúp tui nha.Thanks

cskiller 29-08-2008 05:28 PM

Trích:

Nguyên văn bởi PICC (Post 18463)
#define LCD_DATA_TRIS (((volatile LCD_DATA*)&TRISD)->data)

Trong C nói chung từ khóa volatile để chỉ những biến mà giá trị có thể bị thay đổi bất cứ lúc nào(không nhất thiết tại thời điểm gán). Cho nên trong các khai báo thanh ghi SFR của vi điều khiển thường sử dụng volatile cho các thanh ghi, đặc biệt là cho IO, vì các giá trị này có thể sẽ bị thay đổi bởi môi trường ngoài hay tương tác hardware trong lúc hoạt động.
Trong định nghĩa trên thanh ghi TRISD sẽ được chuyển kiểu thành con trỏ (volatile LCD_DATA*) đến 4 bit đầu(data) trong struct của LCD_DATA dưới tên truy cập là LCD_DATA_TRIS.
Sau khai báo này lệnh gán LCD_DATA_TRIS=X; sẽ gán 4 bit đầu của TRIS bằng, nhưng lệnh đọc Y=LCD_DATA_TRIS; chưa chắc trả về đúng giá trị mà lần cuối trước đó ta đã gán cho nó(tức Y có thể khác với X).

Thân chào.


Múi giờ GMT. Hiện tại là 12:05 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