26
Created by Doan Phuong Binh 1 LP TRÌNH CHO MSP430 BNG IAR 1. To Project Mchương trình IAR, sau đó chn Project>Creat New project. Sau đó chn ngôn ngviết chương trình, đây tôi chn ngôn ngC

LT IAR 02.pdf

Embed Size (px)

Citation preview

Page 1: LT IAR 02.pdf

Created by Doan Phuong Binh 1

LẬP TRÌNH CHO MSP430 BẰNG IAR

1. Tạo Project Mở chương trình IAR, sau đó chọn Project>Creat New project.

Sau đó chọn ngôn ngữ viết chương trình, ở đây tôi chọn ngôn ngữ C

Page 2: LT IAR 02.pdf

Created by Doan Phuong Binh 2

Sau đó đặt tên và save lại, các bạn nên tạo một thư mục riêng để save lại để cho dễ kiểm soát. Ở đây tôi đặt thư mục là test, và tên project cũng là test luôn. Sau đó bấm OK thì được hình:

Page 3: LT IAR 02.pdf

Created by Doan Phuong Binh 3

Tiếp theo các bạn làm như hình dưới:

Page 4: LT IAR 02.pdf

Created by Doan Phuong Binh 4

Click chuột phải vào khung Workspace chọn Options:

Page 5: LT IAR 02.pdf

Created by Doan Phuong Binh 5

Tại mục Device các bạn chọn chíp mà chúng ta muốn thực hiện, ở đây tôi chọn chíp msp430f2131. Sau đó bấm OK.

Page 6: LT IAR 02.pdf

Created by Doan Phuong Binh 6

Page 7: LT IAR 02.pdf

Created by Doan Phuong Binh 7

Tại header #include "io430.h" chúng ta xóa nó đi và thay bằng #include "msp430f2131"( với các ứng dụng nhỏ thì thư viện msp430f2131.h là đủ dùng, không cần phải thêm thư viện io430.h)

Page 8: LT IAR 02.pdf

Created by Doan Phuong Binh 8

Và bây giờ chúng ta có thể viết code trong hàm main.

Page 9: LT IAR 02.pdf

Created by Doan Phuong Binh 9

Trên đây là một chương trình đơn giản xuất các chân của P1 ra mức cao(mức 1).

Dòng lệnh P1DIR=0xFF dùng để chỉ định P1 là ngõ ra( output), muốn cho P1 là ngõ vào thì chúng ta viết P1DIR=0x00.

Sau khi viết xong chúng ta bấm Ctrl+F7 để Complie (hoặc vào Project>Complie), nếu không báo lỗi thì chương trình của chúng ta đã viết là đúng. Nhưng lệnh Complie chưa tạo ra được file hex. Để tạo được file hex chúng ta tiếp tục làm như sau:

Page 10: LT IAR 02.pdf

Created by Doan Phuong Binh 10

Click chuột phải vào khung Workspace>Options.

Page 11: LT IAR 02.pdf

Created by Doan Phuong Binh 11

Sau đó chọn mục Linker.

Page 12: LT IAR 02.pdf

Created by Doan Phuong Binh 12

Chọn thẻ Output và tùy chỉnh như hình bên dưới:

Page 13: LT IAR 02.pdf

Created by Doan Phuong Binh 13

Nhấp chọn mục Override Defaut, sau đó sửa đuôi file ***.d43 thành ***.hex, sau đó chọn mục Other và chỉnh lại thành intel-extended tại Output format, sau đó bấm OK.

Page 14: LT IAR 02.pdf

Created by Doan Phuong Binh 14

Page 15: LT IAR 02.pdf

Created by Doan Phuong Binh 15

Sau đó bấm Ok và tiến hành biên dịch lại để tạo file hex bằng tổ hợp phím Ctrl+D(hoặc bấm Project>Download and Debug). Nếu chương trình viết đúng thì biên dịch sẽ thành công và sẽ tạo được file hex.

Page 16: LT IAR 02.pdf

Created by Doan Phuong Binh 16

File hex sẽ nằm trong đường dẫn: thư mục project của bạn\Debug\Exe.

Sau đó các bạn có thể tiến hành mô phỏng bằng Proteus.

Page 17: LT IAR 02.pdf

Created by Doan Phuong Binh 17

2.Mô phỏng trong Proteus: Các bạn vẽ sơ đồ nguyên lý trong Proteus cho hoàn chỉnh

là có thể tiến hành mô phỏng, ở đây tôi vẽ một mạch đơn giản để mô phỏng chương trình vừa viết ở trên.

Để mô phỏng được ta phải chọn đường dẫn đến file hex

bằng cách double click vào VĐK msp430f2131, tại mục Program file click vào biểu tượng thư mục để duyệt tìm đến file hex.

Page 18: LT IAR 02.pdf

Created by Doan Phuong Binh 18

Sau khi chọn được file hex rồi thì bấm OK, sau đó tiến hành mô phỏng bằng cách click vào biểu tượng Play trên Proteus.

Page 19: LT IAR 02.pdf

Created by Doan Phuong Binh 19

Chương trình đã mô phỏng thành công, các led ở P1 đã sáng!

Page 20: LT IAR 02.pdf

Created by Doan Phuong Binh 20

3. Các ứng dụng nh ỏ và chú ý khi l ạp trình cho msp430 trên IAR

3.1 Điều khi ển 8 led đơn chớp tắt Dưới đây là chương trình chớp tắt của led đơn dùng

msp430f2131.

Và đây là code chương trình: #include "msp430f2131.h" void delay(int ms)//Ham delay { int i; for(i=0;i<ms;i++); } void main( void ) {// Dung watdog WDTCTL = WDTPW + WDTHOLD;

Page 21: LT IAR 02.pdf

Created by Doan Phuong Binh 21

P1DIR=0xFF;// Dinh nghia P1 la output while(1)//Lap mai mai { P1OUT=0xFF;//Xuat muc 1(led sang) delay(5000); P1OUT=0x00;//Xuat muc 0(led tat) delay(5000); } } 3.2 Chú ý khi điều khi ển từng bit trong m ột Port 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.

Page 22: LT IAR 02.pdf

Created by Doan Phuong Binh 22

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

Page 23: LT IAR 02.pdf

Created by Doan Phuong Binh 23

3.3 Điều khi ển led ch ớp tắt bằng một nút nh ấn, nếu nhấn led tắt, không nh ấn led sáng

Sơ đồ mạch Code chương trình: #include "msp430f2131.h" union reg { struct bit {

Page 24: LT IAR 02.pdf

Created by Doan Phuong Binh 24

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* _P1_DIRECT = (union reg*)0x22 ; union reg* _P1_OUT = (union reg*)0x21 ; union reg* _P2_DIRECT = (union reg*)0x2A ; union reg* _P2_IN = (union reg*)0x28 ; void main( void ) { // Dung watdog WDTCTL = WDTPW + WDTHOLD; _P1_DIRECT->_BIT.b0 = 1; _P2_DIRECT->_BIT.b0 = 0; _P2_IN->_BIT.b0=1; while(1) { if(_P2_IN->_BIT.b0==1) { _P1_OUT->_BIT.b0=1; } else { _P1_OUT->_BIT.b0=0; } } }

Page 25: LT IAR 02.pdf

Created by Doan Phuong Binh 25

Để cho chương trình được gọn và dễ đọc hơn ta có thể dùng #define để định nghĩa các chân vào ra. Dưới đây là chương trình được viết lại từ chương trình trên có dùng #define: #include "msp430f2131.h" #define Led (_P1_OUT->_BIT.b0)//Dinh nghia Led la bit0 cua P1 #define Button (_P2_IN->_BIT.b0)//Dinh nghia Button la bit0 cua P2 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* _P1_DIRECT = (union reg*)0x22 ; union reg* _P1_OUT = (union reg*)0x21 ; union reg* _P2_DIRECT = (union reg*)0x2A ; union reg* _P2_IN = (union reg*)0x28 ; void main( void ) { // Dung watdog WDTCTL = WDTPW + WDTHOLD; _P1_DIRECT->_BIT.b0 = 1; _P2_DIRECT->_BIT.b0 = 0; _P2_IN->_BIT.b0=1;

Page 26: LT IAR 02.pdf

Created by Doan Phuong Binh 26

while(1) { if(Button==1) { Led=1; } else { Led=0; } } } ------------------------------------------------------------------------------- Theo yêu cầu của bạn Đặng Vũ Minh Dũng nên tôi đã viết bài này nhằm giúp chúng ta học tập về vi điều khiển msp430 còn mới lạ này, trên là những kinh nghiệm của tôi qua một thời gian làm việc với msp430, toàn bộ nội dung trên chỉ xoay quanh những tính năng I/O cơ bản nhất của msp430 hy vọng nó sẽ giúp ích được cho các bạn, trong quá trình viết bài này chắc chắc còn có sai sót, hy vọng các bạn đóng góp thêm ý kiến để khắc phục được những sai sót đó. Chân thành cảm ơn!