[C9] Define khi viết code C

Trong Phuong

Trứng gà
e đọc 1 số tài liệu thì thấy họ có dùng
P1DIR_bit.P1DIR_3 = 1 để set P1.3 là output,nhưng khi e thử với file header <msp430.h> thì lại bị báo lỗi, huynh đệ cho ý kiến giúp e với!:D
e dùng PxOUT_bit.PxOUT_n;PxIN_bit.PxIN_n cũng bị báo lỗi chưa define:D
 

lee_trieu

Gà con
e đọc 1 số tài liệu thì thấy họ có dùng
P1DIR_bit.P1DIR_3 = 1 để set P1.3 là output,nhưng khi e thử với file header <msp430.h> thì lại bị báo lỗi, huynh đệ cho ý kiến giúp e với!:D
e dùng PxOUT_bit.PxOUT_n;PxIN_bit.PxIN_n cũng bị báo lỗi chưa define:D
Cái đó người ta đã khai báo thiêu một cách khác.
bạn đọc cái này nha:
PHP:
Msp430 là vi điều khiển cho phép điều khiển từng bit, tuy nhiên
trong vài bài tập vừa qua ta chỉ điều khiển out cảPort chứ
chưa thực sự điều khiển từng bit trong Port.
Để điều khiển cảPort ta cần phải khai báo một cấu trúc để điều
khiển từng bit một.
union reg {
struct bit {
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
}_BIT;
unsigned char _BYTE;
};
union reg* _Port_DIRECT = (union reg*)Add1 ;
union reg* _Port_OUT = (union reg*)Add2 ;
union reg* _Port_IN = (union reg*)Add3 ;
Với Port là: P1, P2, P3, P4, ...
Add1 là vùng nhớ để điều khiển các bit xuất nhập của
Port.
Add2 là vùng nhớ để điều khiển các bit xuất của Port.
Add3 là vùng nhớ để điều khiển các bit nhập của Port.
PHP:
Ví dụ:
union reg* _P2_DIRECT = (union reg*)0x2A ;
union reg* _P2_OUT = (union reg*)0x29 ;
union reg* _P2_IN = (union reg*)0x28 ;
union reg* _P1_DIRECT = (union reg*)0x22 ;
union reg* _P1_OUT = (union reg*)0x21 ;
union reg* _P1_IN = (union reg*)0x20 ;
Trên là khai báo một kiểu cấu trúc để điều khiển từng bit, ta
cần đặt đoạn khai báo này trước hàm main, sau khi khai báo
nhưtrên ta có thểkhai báo hướng của các Port(input hay
output) bằng lệnh:
Ví dụ: Ta định nghĩa P1 là ngõ ra(output) nhưsau:
_P1_DIRECT->_BYTE = 0xFF;
Nếu muốn định nghĩa P1 là ngõ vào(input) thì viết lệnh:
_P1_DIRECT->_BYTE = 0x00;
Ta có thể điều khiển từng bit trong port là in hay out một cách
độc lập.
Ví dụ: Ta cần bit0 trong port1 là in và bit1 là out khi đó ta viết:
_P1_DIRECT->_BIT.b0 = 0;//Bit0 la in
_P1_DIRECT->_BIT.b1 = 1;//Bit1 la out
các bit khác ta chỉcần thay b0, b1 bằng bit tương ứng.
Ta có thểxuất giá trịra từng bit trong Port một cách độc lập.
Ví dụ: Ta muốn xuất giá trị1 ra bit1 của P1 thì ta viết:
_P1_OUT->_BIT.b1 = 1;//cho bit1 len muc 1
Chúc bạn thành công !!!:)
 

Trong Phuong

Trứng gà
cám ơn các huynh nha!:D
à mấy huynh cho e hỏi,muốn lập trình cho VDK tốt thì cần chú trọng đào sâu vào phần nào của ngôn ngữ C?!:1cool_byebye:
 

nguyenquoctrung-hhk

Thành Viên PIF
cám ơn các huynh nha!:D
à mấy huynh cho e hỏi,muốn lập trình cho VDK tốt thì cần chú trọng đào sâu vào phần nào của ngôn ngữ C?!:1cool_byebye:
cái đó còn tùy thuộc ứng dụng nữa em, nếu em muốn viết code để cho người khác dùng và mở rộng, thì sẽ có cách viết C sẽ khác, còn nếu em viết riêng cho " mình ênh " =)) xài, thì muốn viết kiểu nào cũng được, nhưng với lượng kiến thức trong trường, cũng đã đủ để em viết được rồi. Còn muốn chuyên nghiệp hơn nữa, thì tìm hiểu thêm bằng cách coi cách viết của mấy đoạn code mẫu người ta viết từ đó mình tự nghĩ cách viết riêng cho mình

thân
 

disbinh

Trứng gà
lâu quá quên mất, cho e hỏi cái dấu -> mà a sử dụng là để làm j thế :(
 

nguyenquoctrung-hhk

Thành Viên PIF
lâu quá quên mất, cho e hỏi cái dấu -> mà a sử dụng là để làm j thế :(
anh thì dùng trình biên dịch khác. Nhưng nhìn vào cái câu lệnh là anh biết cái dấu " -> " dùng để gán thui em. thí dụ : P1_DIRECT->_BIT.b1 = 1;cái này là mình chỉ định chân B1 của vi điều khiển có tên là P1_DIRECT. :), chân này có hướng nhận bit vì khai báo là bằng 1
Hình như cái cách ghi gán giá trị này giống ngôn ngữ HDL
 

zealotnt

Cố Vấn CLB
lâu quá quên mất, cho e hỏi cái dấu -> mà a sử dụng là để làm j thế :(
anh thì dùng trình biên dịch khác. Nhưng nhìn vào cái câu lệnh là anh biết cái dấu " -> " dùng để gán thui em. thí dụ : P1_DIRECT->_BIT.b1 = 1;cái này là mình chỉ định chân B1 của vi điều khiển có tên là P1_DIRECT. :), chân này có hướng nhận bit vì khai báo là bằng 1
Hình như cái cách ghi gán giá trị này giống ngôn ngữ HDL
mình lại nghĩ khác, -> là 1 phép toán của C. Nó dùng để trỏ 1 pointer tới 1 phần tử trong struct.
Như ở đây P1_DIRECT là 1 pointer trỏ đến kiểu reg (1 biến kiểu union), và _BIT.b1 là 1 phần tử nằm trong struct bit (struct này nằm trong union). Vài ý kiến cá nhân. Mong mọi người chỉ giáo :)
 
Top