Tải bản đầy đủ (.pdf) (25 trang)

tài liệu hướng dẫn thí nghiệm vi xử lý và vi điều khiển, 2012

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.95 MB, 25 trang )



Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Mục tiêu:
Sau khi đọc xong tài liệu này, sinh viên có thể:
-

Sử dụng KIT MSP-EXP430FG4618 để thực hiện các bài lab cơ bản.

-

Sử dụng bộ Debug MSP-FET430UIF để nạp chương trình cho chip MSP430 trên KIT MSP-

EXP430FG4618 .

1.

-

Sử dụng phần mềm IAR để lập trình một chương trình đơn giản.

-

Thực hiện các bài liên quan đến xuất/nhập, ngắt, timer.

Kit MSP-EXP430FG4618

1.1. Giới thiệu chung:


KIT MSP-EXP430FG4618 của hãng TI là bo mạch tích hợp 2 chip MSP430FG4618 và
MSP430F2013 nên cung cấp các ngoại vi phổ biến trong họ MSP430. Đặc biệt, 2 chip 4618 và 2013
có thể giao tiếp với nhau (xem hình 2) hoặc giao tiếp với các thiết bị bên ngoài.
Có thể sử dụng một trong 2 gói công cụ sau để lập trình và debug: IAR Embeeded Workbench, TI
Code Composer Essential (CCE) và TI code Composer Studio (CCS). Thiết bị để lập trình và debug cho
chip TI là TI USB Flash Emulation Tool (FET)

 

Hình 1. KIT MSP-EXP430FG4618 do TI tài trợ cho bộ môn Kỹ thuật Máy tính 
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

1.2. Sơ đồ khối phân bổ linh kiện trên KIT MSP-EXP430FG4618

Hình 2. Sơ đồ khối phân bổ linh kiện trên KIT MSP-EXP430FG4618 

1.2.1. JTAG
Hai header JTAG1 và JTAG2 để lập trình và debug mỗi MSP430 riêng biệt: JTAG1 cho
MSP430FG4618 và JTAG2 cho MSP430F2013. JTAG1 cho MSP430FG4618 dùng kiểu kết nối JTAG
chuẩn 4 dây, còn JTAG cho MSP430F2013 dùng kiểu giao tiếp JTAG Spy-Bi-Wire (2 dây). Điều này cho
phép các chân ở các port được sử dụng trong quá trình debug.


1.2.2. Microphone:
Microphone (MIC) được kết nối với MSP430FG4618 qua các chân trong hình 3. Microphone được
kích hoạt hay không qua chân của MSP430FG4618.

Hình 3. Sơ đồ nguyên lý Microphone trên KIT MSP430FG4618
 
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

1.2.3. Buzzer
Buzzer được kết nối với port I/O P3.5 của MSP430FG4618. Buzzer có thể hoàn toàn bị cách ly với
jumper JP1.
Lưu ý: trong quá trình thí nghiệm, sau khi thử nghiệm thành công, sinh viên nên tháo JP1 này để
tránh làm ảnh hưởng người xung quanh.

1.2.4. LCD
LCD trong kit này là loại SoftBaugh SBLCDA4, nó có 4 chế độ: tĩnh, 2-mux, 3-mux và 4-mux. LCD
này được hỗ trợ khi giao tiếp với MSP430FG4618 qua LCD driver đã có sẵn.

1.2.5. Nút nhấn S1 và S2:
Hai nút nhấn S1 và S2 được nối với cổng xuất/nhập số P1 có chức năng ngắt của MSP430FG4618.

Hình 4. Sơ đồ nguyên lý kết nối nút nhấn S1 & S2 với MSP430FG4618


1.2.6. Các LED đơn
KIT MSP430FG4618 có 4 LED: LED1, LED2, và LED4 được kết nối với chip MSP430FG4618,
LED3 được kết nối với chip MSP430F2013. LED3 và LED4 có thể được ngắt khỏi kết nối bằng Jumper để
tiết kiệm năng lượng cho kit (LED3 dùng jumper JP2, LED4 dùng JP3).
LED
LED1
LED2
LED3
LED4

Kết nối với chip
MSP430FG4618
MSP430FG4618
MSP430F2013
MSP430FG4618

Port
P2.2
P2.1
P1.0
P5.1

Ghi chú Jumper
JP2
JP3

Bảng 1: Kết nối LED
 
 

                                                              

Hình 5. Sơ đồ nguyên lý kết nối LED1, LED2 & LED4 với MSP430FG4618

Hình 6. Sơ đồ nguyên lý kết nối LED3 với MSP430F2013

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

1.2.7. Giao tiếp RS232
Chip MSP430FG4618 hỗ trợ chuẩn giao tiếp RS-232 9 chân thông qua ngoại vi USC của chip (được
cấu hình trong chế độ UART).

Hình 7. Sơ đồ nguyên lý giao tiếp cổng RS232 với MSP430FG4618

1.2.8. Jumper

Hình 8. Sơ đồ bố trí jumper ở trên KIT MSP430FG4618
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 





Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Header

Chức năng khi dung Jumper kết nối

Khi không dùng jumper kết nối

Yêu cầu

JTAG1

Bộ FET để lập trình-debug FG4618

FG4618 không được sử dụng

X

JTAG2

Bộ FET để lập trình-debug F2013

F2013 không được sử dụng

X

PWR1


Cung cấp nguồn cho FG4618. Ngoài ra, FG4618 không được cung cấp nguồn
dùng để đo dòng
Cung cấp nguồn cho F2013. Ngoài ra,
F2013 không được cung cấp nguồn
dùng để đo dòng

Yêu cầu cần gắn jumper
này để sử dụng FG4618
Yêu cầu cần gắn jumper
này để sử dụng F2013

Cung cấp nguồn cho kit bằng 2 pin
AAA. Ngoài ra, dung để đo dòng tổng
cộng của kit
Để sử dụng buzzer (nối với chân
FG4618-P3.5)

Pin không cung cấp nguồn cho cả 2
chip MSP430

Yêu cầu khi cần dùng
pin

Không dùng buzzer

Tùy chọn

JP2


Cho phép LED3 hoạt động (LED3 nối
với chân F2013-P1.0)

Không dùng LED3

Tùy chọn/ yêu cầu khi
dùng LED3

JP3

Cho phép LED4 hoạt động (LED4 nối
với chân FG4618-P5.1)

Không dùng LED4

Tùy chọn/ yêu cầu khi
dùng LED4

JP4

Suy hao mức điện áp ra của audio (69%) 98% suy hao của ngõ ra audio DAC12 Tùy chọn

H1(1-2,
3-4)

Cấu hình cho I2C
1-2: SDA-UCBOSDA
3-4: SCL-UCBOSCL
Cấu hình cho SPI
1-2: SDI – UCB0SIMO

3-4: SDO – UCB0SOMI
5-6: P1.4 – P3.0 (CS)
7-8: SCLK – UCB0CLK
VCC_1: 3 chân phía dưới. Dùng cho
FG4618/JTAG1.
VCC_2: 3 chân phía trên. Dùng cho
F2013/JTAG2.
LCL: cung cấp Vcc đến FET.
FET: nguồn từ FET
(jumper BATT không được thiết lập)

PWR2
BATT
JP1

H1(1-2,
3-4, 56,7-8)

Vcc

Không giao tiếp qua I2C

Yêu cầu cho giao tiếp
bên trong processor

Không giao tiếp qua SPI

Yêu cầu cho giao tiếp
bên trong processor


Nguồn từ JTAG

Yêu cầu khi sử dụng
không cần pin

Bảng 2. Liệt kê chức năng của jumper trên KIT MSP430FG4618 khi được kết nối

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

1.3. Sơ đồ nguyên lý của KIT MSP-EXP430FG4618

 
 
 
 
 
 
 
 
 

 


 
 
 
 
 
 
 
 
 
 
 
 

Hình 9. Sơ đồ nguyên lý toàn KIT MSP430FG4618
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

2.Đặc tính và cách cài đặt bộ Debug MSP-FET430UIF
2.1. Giới thiệu công cụ FET
FET (Flash Emulation Tool) cho phép lập trình - debug họ vi xử lý MSP430 qua chuẩn kết nối
JTAG đầy đủ(4 dây) và JTAG tiết kiệm chân (2 dây, Spy Bi-Wire). Do đó, FET được dùng để phát triển
các ứng dụng trên họ MCU này qua 2 cơ chế giao tiếp của FET là qua USB cổng song song, tương ứng

với các loại MSP-FET430UIF (Hình 10) và MSP- FET430PIF. Hiện tại, Công ty TI chỉ tài trợ loại
MSP – FET430UIF cho bộ môn Kỹ thuật Máy tính nên tất cả các bài thí nghiệm trên KIT MSP430FG4618
sẽ sử dụng loại này.

Hình 10. Bộ Debug MSP-FET430UIF
Đặc tính
Hỗ trợ tất cả họ MSP430 dựa trên Flash (F1xx, F2xx, F4xx, F5xx)

MSP-FET430UIF
x

MSP-FET430PIF
x

x
x
KHÔNG
x
x
x
x

KHÔNG
KHÔNG
x
x
KHÔNG
x
x


Cho phép cấu hình bảo mật JTAG để bảo vệ code
Cho phép tạo ra nguồn cấp chỉnh được 1.8V-3.6V ở 100mA
Cố định tạo ra nguồn cấp 2.8V
Debug dùng JTAG chuẩn 4 dây
Debug dùng JTAG chuẩn 2 dây (Spy-Bi-Wire)
Hỗ trợ bởi CCE
Hỗ trợ bởi IAR

Bảng 3. So sánh một vài tình năng giữa 2 loại MSP-FET430UIF và MSP- FET430PIF

2.2.Cài đặt driver của bộ Debug MSP-FET430UIF lên PC
Hiện tại, phòng thí nghiệm Mô phỏng và Vi xử lý được trang bị PC cài đặt windows 7 nên việc thiết
lập driver cho bộ Debug MSP-FET430UIF đều tuân theo các bước sau
Bước 1: Download driver cho FET430UIF và lưu vào PC
Đối với Windows 7-64 bit: processors.wiki.ti.com/images/d/dc/TUSBWINVCP_Win7-64.zip
Đối với Windows 7-32 bit: processors.wiki.ti.com/images/6/6a/TUSBWINVCP_Win7-32.zip
Đối với WindowsXP-32 bit: processors.wiki.ti.com/images/7/73/TUSBWINVCP_XP32.zip
Đối với WindowsXP-64 bit: processors.wiki.ti.com/images/3/3b/TUSBWINVCP_XP64.zip
Đối với các hệ điều hành khác, lựa chọn drive phù hợp tại địa chỉ:
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

/>Bước 2: Gắn FET430UIF vào máy vi tính qua cổng USB

Bước 3: Click phải chuột vào Computer/ chọn Properties sẽ cho cửa sổ sau.

Tiếp theo click vào Device Manager.
Bước 4: Click phải trên phần thiết bị mà chưa được cài đặt, rồi chọn Properties. Tiếp đến chọn
tab Driver / Update Driver… và chọn đường dẫn đến file driver đã được download ở bước 1.

3. Công cụ soạn thảo, mô phỏng, biên dịch và nạp chương trình:
Để lập trình và debug, người phát triển ứng dụng có thể sử dụng một trong 3 gói công cụ sau đây:
IAR Embeeded Workbench, TI Code Composer Essential (CCE) và TI Code Composer Studio (CCS). IAR
được chọn sử dụng vì tính đơn giản, gọn nhẹ của nó.
Tham khảo website để biết thêm thông tin về IAR. Download IAR Embedded
Workbench Code size limited Kickstart version tại: />Cơ bản về sử dụng IAR để tạo 1 project và lập trình trên MSP430 đều tuân theo các bước sau đây
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 




Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Bước 1: chạy chương trình IAR Embedded Workbench IDE theo đường dẫn
Start/All Programs/IAR Systems/ IAR Embeeded Workbench Kickstart for MSP430 4.21/ IAR Embeeded
Workbench.

Hoặc click chuột vào Icon trên desktop
như hình dưới đây.

. Sau đó cửa sổ giao diện chương trình sẽ hiển thị


Bước 2: Từ cửa sổ giao diện chính, chọn Project/ Create New Project …

Bước 3: chọn ngôn ngữ sử dụng. Trong thí nghiệm này, chúng ta chọn Empty project hoặc
C/main hoặc Asm/asm và click OK. Ở đây, lựa chọn Empty project được sử dụng, sau đó click vào nút
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


10 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

OK để tiến hành bước tiếp theo.

Bước 4: Chọn đường dẫn muốn lưu project và tên Project. Trong ví dụ này, tên project là lab1 và
được lưu trong thư mục “my lab”.

Nếu ở bước 3 chọn Empty project thì cửa sổ có giao diện như sau:

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


11 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012


 

Nếu ở bước 3 chọn C/main thì cửa sổ có giao diện như sau:

Bước 5: thiết lập các tùy chọn: vi điều khiển, debug, file nạp,….
Chọn Project/Option… (hoặc Alt+F7)

Trong mục General Options -> chọn tab Target -> chọn MSP430FG4618

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


12 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Tiếp tục, chọn các tab khác để thiết lập như sau (các lựa chọn còn lại, xem help để rõ hơn)
Trong tab Output: chọn Output file: Executable
Trong tab Library Configuration: chọn Library: CLIB
Trong mục C/C++ Compiler: (nếu lựa chọn ngôn ngữ lập trình là ngôn ngữ C)

Trong tab Optimizations: chọn level: None (để hỗ trợ tối đa quá trình debug)
Trong tab List: chọn Output list file: Assembler mnemonics
Trong mục Debugger:
Trong tab Setup: chọn Driver: FET Debugger

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 

 


13 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Trong FET Debugger:
Trong tab Setup: chọn Connection: Texas Instrument USB-IF.
Xong các chọn lựa ở trên trong bước 5, click OK để lưu lại tùy chọn để tiếp tục bước 6
Bước 6: Thiết lập file lập trình

(Nếu ở bước 3 đã chọn ngôn ngữ C hoặc Asm thì đã có sẵn một số file mặc định trên cửa sổ
làm việc, ta có thể sử dụng để lập trình, hoặc remove chúng để tạo các file khác, hoặc add thêm file
vào.)
File/ New/File, cửa sổ có giao diện như hình sau:

Với màn hình soạn thảo phía bên phải cửa sổ làm việc, người lập trình có thể biên soạn chương trình.

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


14 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 


Sau đó, file được lưu bằng: File/Save với tên và định dạng: “lab1.c”.

( Hoặc nếu ở bước 3 đã chọn ngôn ngữ C thì cửa sổ soạn thảo sẽ giống như hình dưới đây.

)
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


15 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

File “lab1.c” này chưa được đưa vào project lab1. Để đưa file “lab1.c” vào project để dùng, ta
cần: Project/Add file…, một cửa sổ hiện ra và chọn “lab1.c” như giao diện sau:

Lúc này, trong cửa sổ làm việc project sẽ như sau:

Bước 7: Biên dịch file lập trình
Thực hiện: Project/Compile (hoặc Ctrl + F7), lúc này IAR sẽ yêu cầu lưu lại Workspace làm việc với
giao diện sau. Nhập tên Workspace, trong hướng dẫn này, là lab.eww

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


16 


Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Sau khi lưu Workspace, quá trình biên dịch sẽ được thực hiện. Nếu không có lỗi thì sẽ hiện ra thông
báo như sau (nếu có lỗi, tra cứu từ help)

Bước 8: Lập trình-debug cho chip
Thực hiện Project/Download and Debug (hoặc Ctrl+D).
Để thấy kết quả thực hiện trên kit: Debug/Go (hoặc F5)

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


17 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Khi biên dịch và nạp thành công, ta có thể tiến hành debugger trực tiếp trên mạch bằng các Step

 

4. Thiết lập cơ bản cho thí nghiệm
Sau đây là các bước cơ bản nhất mà người làm thí nghiệm phải nắm kỹ trước khi bắt tay vào sử
dụng mọi công cụ để thực hiện các bài thí nghiệm. Trong từng bài thí nghiệm, sẽ trình bày các bước thiết lập
thêm tùy thuộc từng bài.

Bước 1: Thiết lập MSP-EXP430FG4618
- Kiểm tra/sử dụng jumper PWR1 để cung cấp nguồn cho FG4618. (jumper PWR1 nằm
khoảng giữa kit, phía bên phải chip M430G4618, nếu đặt kit như vị trí hình 1)
- Kiểm tra/ không sử dụng jumper BATT (jumper BATT ở phía dưới, bên phải kit). Khi thí
nghiệm, thiết lập như vậy để không sử dụng pin cung cấp nguồn cho 2 chip với mục đích tiết kiệm
pin.
- Kiểm tra/ sử dụng jumper Vcc (jumper Vcc ở phía dưới, bên phải kit). Để thiết lập sử dụng
nguồn từ FET (khi không dùng pin), thiết lập jumper ở vị trí FET cho cả 2 hàng 1 và 2 (nghĩa là 2
jumper kết nối, mỗi jumper kết nối 2 header tận cùng bên phải: 2 header phía dưới: dùng cho
FG4618/JTAG1, 2 chân phía trên: dùng cho F2013/JTAG2).
Bước 2: Kết nối FET430UIF
- Kết nối dây USB giữa máy tính và FET.
- Kết nối dây 14 pin JTAG giữa FET và kit MSP-EXP430FG4618.

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


18 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Thay đổi các Jump trên mạch:

Trên mạch nạp, led xanh (Power) báo hiệu nguồn, led đỏ (Mode) báo hiệu khi mạch được nạp.
Bước 3: Sử dụng IAR để lập trình-debug
Bước 4: Thực hiện các bài thí nghiệm.


5.Cấu trúc một chương trình C thông thường cho MSP430

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


19 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

 Chú ý:
o Trong hàm main ta thường thấy dòng lệnh:
WDTCTL = WDTPW + WDTHOLD;
Stop watchdog timer để nó khỏi reset chip. Nếu không có lệnh này (và không có tùy chọn khác con
WDTCTL) thì mạch sẽ không hoạt động.
o Trong C cho MSP430, thì có các hằng số được định nghĩa trước (ở file header), ta rất hay dùng
các hằng số này:
BIT0 = 0000 0001
BIT1 = 0000 0010
BIT2 = 0000 0100

BIT7 = 1000 0000
o Một chân của MSP430 thường có nhiều chức năng, ta muốn sử dụng chức năng gì thì định
nghĩa cho nó.
Ví dụ:
P1DIR = 0xFF; // toàn bộ port1 là Output
P1DIR = 0x00; //toàn bộ port1 là Input
Như vậy nếu muốn một số chân của port1 là Output và một số chân của port1 là Input thì làm thế

nào? Không giống một số VĐK khác, MSP430 không cho phép ta tác động trực tiếp đến 1 chân nào riêng lẻ,
chỉ có thể tác động lên port (8 chân). Như vậy muốn tác động lên chân riêng lẻ nào thì ta dùng phép toán OR,
AND và XOR.
Ví dụ:
P1DIR |= BIT1; //chân P1.1 sẽ là chân Output, các chân khác ko bị ảnh hưởng bởi lệnh này
P1DIR &= ~BIT1; // chân P1.1 sẽ là chân Input (nếu ta ko định nghĩa thì nó mặc định là Input)
P2DIR |= BIT0 + BIT1 + BIT3; //chân P2.0, P2.1, P2.3 sẽ là Output
Lệnh trên cũng có thể viết lại: P2DIR |= 0x0B; // BIT0 + BIT1 + BIT3 = 11d=0Bh
P2DIR &= ~(BIT4+BIT5); //P2DIR &=~0x30; //chân P2.4, P2.5 là Input
o Xuất ra port theo từng bit riêng lẻ.
Như việc định nghĩa các chân, MSP430 cũng không cho ta tác động trực tiếp đến từng chân nào,
muốn xuất ra một bit hay nhiều bit bất kỳ ta sử dụng cách như đã dùng với định nghĩa chân.
Ví dụ muốn cho P1.1=1, P1.3=1, P2.1=0
P1OUT |= BIT1+BIT3 ; //P1.1=1, P1.3=1
P2OUT &=~ BIT1 ; //P2.1=0
Hoặc có thể đảo một bit ở chân bất kỳ bằng lện XOR ^
P1OUT ^= BIT4 ; //chân P1.4 đảo trạng thái
o Kiểm tra trạng thái một chân.
Ngoài ngắt ra ta có thể kiểm tra trạng thái một chân nào đó đang ở mức thấp (0V) hay mức cao (1.8V
đến 3.6V).
Ví dụ kiểm tra chân P1.2
if( (P1IN&BIT2)==0 ) //nếu chân P1.2 bằng 0
//do anything
else
//do anything
// nếu viết if( P1IN&BIT2==0 ), thiếu 1 ngoặc là sai

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 



20 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

6. Các bài thí nghiệm
Bài 1: GPIO
1. Các thanh ghi liên quan đến GPIO:
1.1. Direction Register PxDIR (P1DIR, P2DIR):
Đây là các thanh ghi 8 bit điều khiển chiều của 8 chân port. P1DIR điều khiển PORT1, P2DIR
điều khiển PORT2.
 Bit = 1: Chân PORT tương ứng được cấu hình thành output
 Bit = 0: Chân PORT tương ứng được cấu hình thành input

1.2. Input Register (PxIN):

Đây là các thanh ghi 8 bit chứa giá trị đọc được từ các chân PORT.
 Bit = 1: Chân PORT tương ứng ở mức cao
 Bit = 0: Chân PORT tương ứng ở mức thấp.

1.3. Output Register (PxOUT):

Đây là thanh ghi điều khiển ngõ ra của các PORT.
 Bit = 1: Xuất mức cao ra chân PORT tương ứng.
 Bit = 0: Xuất mức thấp ra chân PORT tương ứng.

1.4. Function Select Register:
Đây là thanh ghi chọn chức năng cho chân PORT. Mỗi chân PORT có thể cấu hình chọn chức

năng Input/Output hay là chức năng đặc biệt khác.
 Bit = 1: Chọn chức năng đặc biệt.
 Bit = 0: Chọn chức năng GPIO.

2. Các lưu ý khi viết chương trình cho lab này:
2.1. Watchdog Timer

Trong lab này, chúng ta không cần sử dụng Watchdog timer. Để tắt Watchdog timer, ghi giá trị 5A
vào 8 bit cao của thanh ghi WDTCTL và set thứ 7 của thanh ghi WDTCTL.
WDTCTL = 0x5A00 | 0x0080
Hoặc:
(WDTCTL = WDTPW | WDTHOLD )

2.2. Delay:
Bởi vì trong chương trình chưa định nghĩa clock nên CPU sẽ sử dụng thạch anh 32.768 kHz. Để có
thời gian delay khoảng 1s, vòng delay sẽ đếm xuống từ 30.000SV có thể dùng câu lệnh dưới đây để tạo delay:
for(int i=30000;i>0;i++);

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


21 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Bài 1.1
Yêu cầu: Sinh viên viết chương trình cho LED1 và LED2 sáng tắt luân phiên. Thời gian giữa 2 lần

sáng tắt là khoảng 1s.

Câu hỏi 1: Các LED được kết nối với MCU như hình trên. Điền vào chỗ trống để trả lời các câu hỏi
dưới đây.
+ LED1 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời:……………………………………………
+ LED2 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời:……………………………………………
+ Để điều khiển LED, các chân port phải là input hay output?
Trả lời:……………………………………………
+ Để LED sáng, phải xuất giá trị gì ra chân port?
Trả lời:……………………………………………
Câu hỏi 2: Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:
#include <msp430xG46x.h>
void main (void)
{
volatile unsigned int i;
WDTCTL = ……… | ………;
P2DIR |= …………………….;
P2OUT &= ………………….;
P2OUT |= ……………………;
while(1)
{
i= ………………………….;
do (i--);
while (i !=0);

//Stop Watchdog Timer
//Configure P2.1 and P2.2 as Output
// Turn off LED1, LED2

// Turn on LED 1, turn off LED 2
//Infinite loop
//Delay

//Toggle Port P2.1 and P2.2 using an exclusive-OR
P2OUT ^= ………………………;
}
}

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


22 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Bài 1.2
Yêu cầu: Sinh viên viết chương trình để đảo trạng thái LED1 mỗi khi SW1 được nhấn.

Câu hỏi 1: Các SW(switch) được kết nối với MCU như hình trên. Điền vào chỗ trống để trả lời các
câu hỏi dưới đây.
+ SW1 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời:……………………………………………
+ SW2 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời:……………………………………………
+ Để đọc trạng thái switch, các chân port phải là input hay output?
Trả lời:……………………………………………

Câu hỏi 2: Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:
#include <msp430xG46x.h>
void main (void)
{
volatile unsigned int i;
WDTCTL = ………………………….;
P2DIR |= ……………………………..;
P1DIR &= ………………………........;
while (1)
{
while ((P1IN & 0x01));
P2OUT ^= …………………….;
for(……………………….........);
while (………………………....);
for(……………………….........);
}
}

//Stop Watchdog Timer
//Configure P2.2 as Output (LED1)
//Configure P1.0 as Input (S1)
//Wait for the press of the button
//Toggle Port P2.2
//Delay, button debounce
//Wait for the release of the button
//Delay, button debounce

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 



23 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Bài 2. GPIO & INTERRUPT
MSP430 được thiết kế để làm việc với các ứng dụng công suất thấp. Vì vậy CPU thường ở trạng
thái “off” trong phần lớn thời gian. Để đưa CPU vào trạng thái “off”, các bit SCG1, SCG0 và CPUOFF
trong thanh ghi SR được set.
Một ngắt xảy ra sẽ đánh thức CPU. Khi đó thanh ghi SR được lưu vào stack và CPU thực thi ISR.
Khi thoát khỏi ISR, thanh ghi SR được lấy ra từ stack và làm cho CPU tắt trở lại.
Đưa CPU vào trạng thái công suất thấp và cho phép ngắt:
Bit GIE trong thanh ghi SR khi được set sẽ cho phép ngắt.
Ta đưa CPU vào trạng thái công suất thấp, cho phép ngắt bằng lệnh:
_BIS_SR (LPM3_bits + GIE);
Trong đó:
LPM3_bits = (SCG1+SCG0+CPUOFF)
Định nghĩa chương trình phục vụ ngắt (ISR):
Ta định nghĩa 1 ISR tại vector ngắt ISR_VECTOR bằng cấu trúc sau:
#pragma vector=ISR_VECTOR interrupt void myISR (void)
{
………………………
}

1.5. Các thanh ghi cấu hình ngắt cho các chân PORT:

Mỗi chân PORT của MSP430 đều có thể dùng để tạo ngắt. Các ngắt này được cấu hình thông qua
các

thanh ghi PxIFG, PxIE, PxIES.

1.5.1.

Interrupt enable Register (PxIE) :

Mỗi bit trong thanh ghi này dùng để cho phép/không cho phép ngắt trên chân PORT tương ứng.
 Bit = 1: Cho phép ngắt.
 Bit = 0: Cấm ngắt.

1.5.2.

Interrupt Edge Select Registers (PxIES):

Dùng để chọn cạnh của tín hiệu ngắt
 Bit = 1: Ngắt tại cạnh xuống của tín hiệu.
 Bit = 0: Ngắt tại cạnh lên của tín hiệu.

1.5.3.

Interrupt Flag Registers (PxIFG):

Thanh ghi này chứa các cờ ngắt. Các cờ này được tự đọng bật bởi phần cứng, phải được xóa bằng
phần mềm. Các cờ này có thể được bật bằng phần mềm để cho phép ngắt.
 Bit = 1: Một ngắt đang chờ xử lý.
 Bit = 0: Không có ngắt nào đang chờ.

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 



24 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


25 

Tà iliệ uhướngdanthı́nghiệ mVixửlý và Viđieukhien,2012

 

Bài 2.1
Yêu cầu: Sinh viên viết chương trình đảo trạng thái LED1 khi Switch 1 được nhấn. Trong chương
trình sử dụng ngắt trên chân port giao tiếp Switch.

Câu hỏi 1: Các SW(switch) được kết nối với MCU như hình trên. Điền vào chỗ trống để trả lời các
câu hỏi dưới đây.
+ SW1 nối vào chân Port gì của CPU?
Trả lời:……………………………………………
+ Khi Switch được nhấn, sẽ có chuyển trạng thái như thế nào trên chân PORT?
+ Để cho phép ngắt trên chân P1.0, ta phải ghi …… vào bit…….của thanh ghi …………….?
+ Để chọn cạnh xuống cho ngắt trên chân P1.0, ta phải ghi ……vào bit…….của thanh ghi ………?
Câu hỏi 2: Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:
#include <msp430xG46x.h>

#pragma vector=………………………………………
__interrupt void Port_1 (void)
{
//define an interrupt service routine at 0xFFE8
volatile unsigned int i;
P2OUT ^= ………………………; //Toggle Port P2.2
for(………………………………); //Delay, button debounce
while (…………………………...); //Wait for the release of the button
for(……………………………….); //Delay, button debounce
P1IFG &= ~0x01;
//Clean P1.0 Interrupt Flag (bit 0 of P1IFG register)
}
void main (void)
{
WDTCTL = ………………………; //Stop Watchdog Timer
P2DIR |= …………………………; //Configure P2.2 as Output (LED1)
P1DIR &= ………………………..; //Configure P1.0 as Input (S1)
P1IE |= …………………………...; //Interrupt Enable in P1.0
P1IES |= ………………………….; //P1.0 Interrupt flag high-to-low transition
_BIS_SR (………………………..); //Low Power Mode with interrupts enabled
}
Biên soạn: Phạm Xuân Trung, Bộ môn Kỹ thuật Máy  nh, Khoa Điện tử Viễn thông, Trường ĐH Bách khoa, ĐH Đà Nẵng 
 


×