Đánh giá chủ đề:
  • 63 Vote(s) - Trung bình 2.84
  • 1
  • 2
  • 3
  • 4
  • 5
code struct bit cho MSP430
Bài viết: #1
Chào các anh, em mới bắt đầu nghiên cứu MSP430, hiện có một chỗ em chưa hiểu, mong các anh có thể giải đáp giúp em
Trong đoạn code sau:

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* _P4_DIRECT = (union reg*)0x1E ;//không hiểu thay đổi như thế nào trong các bài
union reg* _P4_OUT = (union reg*)0x1D ;//không hiểu thay đổi như thế nào trong các bài
union reg* _P3_DIRECT = (union reg*)0x1A ;//không hiểu thay đổi như thế nào trong các bài
union reg* _P3_OUT = (union reg*)0x19 ;//không hiểu thay đổi như thế nào trong các bài
union reg* _P2_DIRECT = (union reg*)0x2A ;//không hiểu thay đổi như thế nào trong các bài
union reg* _P2_OUT = (union reg*)0x29 ;//không hiểu thay đổi như thế nào trong các bài

Các anh có thể giải thích cho em là tại sao lại phải viết dòng code này, và trong đoạn sau em không hiểu phần đó để làm gì, và trong các bài thì cần thay đổi như thế nào?
Trả lời
Bài viết: #2
Cái này là khai báo struct bit để chúng ta sử dụng từng chân của của MSP430 thay gì điều khiển nguyên port. Đặc điểm của msp430 là muốn điều khiển từng chân riêng biệt thì phải khai báo đoạn code:

union reg {

struct bit {

unsigned char b0:1; //bit 0 của port

unsigned char b1:1; //bit 1 của port

unsigned char b2:1; //bit 2 của port

unsigned char b3:1; //bit 3 của port

unsigned char b4:1; //bit 4 của port

unsigned char b5:1; //bit 5 của port

unsigned char b6:1; //bit 6 của port

unsigned char b7:1; //bit 7 của port

}_BIT;

unsigned char _BYTE;

};


Còn đoạn code:
union reg* _P4_DIRECT = (union reg*)0x1E ;// thanh ghi khai báo hướng xuất cho port 4 trong vi điều khiển msp430

union reg* _P4_OUT = (union reg*)0x1D ;// thanh ghi khai báo hướng out cho port 4

union reg* _P3_DIRECT = (union reg*)0x1A ;//tương tự trên

union reg* _P3_OUT = (union reg*)0x19 ;//tương tự trên

union reg* _P2_DIRECT = (union reg*)0x2A ;//tương tự trên

union reg* _P2_OUT = (union reg*)0x29 ;//tương tự trên

Các thanh ghi này được mặc định trong datasheet của msp430 bạn xem lại nhé, đặc điểm của msp430 nếu muốn điều khiển từng bit thì phải khai báo các thanh ghi này.
Trả lời
Bài viết: #3
Oh, thế ak? Cám ơn bạn
You are not allowed to view links. Register or Login to view. nhiều nhé. Mình tìm thấy trên datasheet rồi, hi




Trả lời
Bài viết: #4
"Người cùng cảnh ngộ" lun bạn ơi, tôi cũng đang thắc mắc về đoạn code này !!
Helppp !! TT
Trả lời
Bài viết: #5
Chào các bạn, vấn đề khi chúng ta khai báo như thế sẽ rất thuận lợi cho việc điều khiển từng PIN(chân) một và gán biến cho các PIN của vi điều khiển. Nếu theo cách thông thường nếu chúng ta cho P1.0 = 1, thì chúng ta phải viết P1OUT |= BIT0 hoặc P1OUT = 0x01 mà không thể điều khiển độc lập từng PIN được(chúng ta đang điều khiển từng PIN thông qua PORT). Tôi lấy một ví dụ như thế này:
- Chúng ta có một biến chỉ có hai giá trị 0 và 1, chúng ta muốn gán biến đó cho chân P1.0 thì sẽ làm thế nào?
Đến lúc này ta có thể dùng kiểu cấu trúc ở trên sẽ rất thuận lợi, _P1_OUT->_BIT.b0 = bien; lúc này biến thay đổi thế nào thì P1.0 thay đổi thế đó.
Chúc các bạn thành công!
Trả lời


Đi tới chuyên mục:


Thành viên đang xem chủ đề: 1 Khách