160
I. Tổng quan về MSP430: MSP 430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởi công ty Texas Instruments. MSP là chữ viết tắt của “MIXED SIGNAL MICROCONTROLLER”. Là dòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng điện áp nguồn cấp từ 1.8V – 3.6V. MSP 430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các module ngoại vi. Đặc biệt Chíp MSP 430 là giải pháp thích hợp cho những ứng dụng yêu cầu trộn tín hiệu. Những đặc tính của dòng MSP 430 bao gồm: Điện áp nguồn: 1.8V – 3.6 V. Mức tiêu thụ năng lượng cực thấp: - Chế độ hoạt động: 270 μA tại 1MHz, 2,2 V. - Chế độ chờ: 0.7 μA. - Chế độ tắt (RAM vẫn được duy trì): 0.1 μA. Thời gian đánh thức từ chế độ Standby nhỏ hơn 1μs. Cấu trúc RISC-16 bit, Thời gian một chu kỳ lệnh là 62.5 ns Cấu hình các module Clock cơ bản: - Tần số nội lên tới 16 MHz với 4 hiệu chỉnh tần số +- 1%. - Thạch anh 32 KHz. - Tần số làm việc lên tới 16 MHz. - Bộ cộng hưởng. - Nguồn tạo xung nhịp bên ngoài. - Điện trở bên ngoài. Timer_A 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit Timer_B 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit Giao diện truyền thông nối tiếp: - Hỗ trợ truyền thông nối tiếp nâng cao UART, tự động dò tìm tốc độ Baud. - Bộ mã hóa và giải mã IrDA (Infrared Data Associatio). - Chuẩn giao tiếp động bộ SPI. - Chuẩn giao tiếp I2C. Bộ chuyển đổi ADC 10 bit, 200 ksps với điện áp tham chiếu nội, Lấy mẫu và chốt. Tự động quét kênh, điều khiển chuyển đổi dữ liệu. Hai bộ khuếch đại thuật toán (hoạt động) có thể định cấu hình (Đối với MSP 430x22x4). Bảo vệ sụt áp. Bộ nạp chương trình. Module mô phỏng trên chip. Các thành viên của dòng MSP 430 bao gồm: - MSP430F2232: 8KB + 256B Flash Memory 512B RAM. - MSP430F2252: 16KB + 256B Flash Memory 512B RAM.

Co ban ve msp430

Embed Size (px)

Citation preview

Page 1: Co ban ve msp430

I. Tổng quan về MSP430:

MSP 430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởi công ty Texas Instruments.

MSP là chữ viết tắt của “MIXED SIGNAL MICROCONTROLLER”. Là dòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng điện áp nguồn cấp từ 1.8V – 3.6V.

MSP 430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các module ngoại vi. Đặc biệt Chíp MSP 430 là giải pháp thích hợp cho những ứng dụng yêu cầu trộn tín hiệu.

Những đặc tính của dòng MSP 430 bao gồm:• Điện áp nguồn: 1.8V – 3.6 V.• Mức tiêu thụ năng lượng cực thấp:

- Chế độ hoạt động: 270 μA tại 1MHz, 2,2 V.- Chế độ chờ: 0.7 μA.- Chế độ tắt (RAM vẫn được duy trì): 0.1 μA.

• Thời gian đánh thức từ chế độ Standby nhỏ hơn 1μs.• Cấu trúc RISC-16 bit, Thời gian một chu kỳ lệnh là 62.5 ns• Cấu hình các module Clock cơ bản:

- Tần số nội lên tới 16 MHz với 4 hiệu chỉnh tần số +- 1%.- Thạch anh 32 KHz.- Tần số làm việc lên tới 16 MHz.- Bộ cộng hưởng.- Nguồn tạo xung nhịp bên ngoài.- Điện trở bên ngoài.

• Timer_A 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit

• Timer_B 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit

• Giao diện truyền thông nối tiếp: - Hỗ trợ truyền thông nối tiếp nâng cao UART, tự động dò tìm

tốc độ Baud.- Bộ mã hóa và giải mã IrDA (Infrared Data Associatio).- Chuẩn giao tiếp động bộ SPI.- Chuẩn giao tiếp I2C.

• Bộ chuyển đổi ADC 10 bit, 200 ksps với điện áp tham chiếu nội, Lấy mẫu và chốt. Tự động quét kênh, điều khiển chuyển đổi dữ liệu.

• Hai bộ khuếch đại thuật toán (hoạt động) có thể định cấu hình (Đối với MSP 430x22x4).

• Bảo vệ sụt áp.• Bộ nạp chương trình.• Module mô phỏng trên chip.• Các thành viên của dòng MSP 430 bao gồm:

- MSP430F2232: 8KB + 256B Flash Memory 512B RAM.- MSP430F2252: 16KB + 256B Flash Memory 512B RAM.

Page 2: Co ban ve msp430

- MSP430F2272: 32KB + 256B Flash Memory 1KB RAM.- MSP430F2234: 8KB + 256B Flash Memory 512B RAM.- MSP430F2254: 16KB + 256B Flash Memory 512B RAM.- MSP430F2274: 32KB + 256B Flash Memory 1KB RAM.

MSP430 được sử dụng và biết đến đặc biệt trong những ứng dụng về thiết bị đo có sử dụng hoặc không sử dụng LCD với chế độ nguồn nuôi rất thấp. Với chế độ nguồn nuôi từ khoảng 1,8 đến 3,6v và 5 chế độ bảo vệ nguồn.

Với sự tiêu thụ dòng rất thấp trong chế độ tích cực thì dòng tiêu thụ là 200uA, 1Mhz, 2.2v; với chế độ standby thì dòng tiêu thụ là 0.7uA. Và chế độ tắt chỉ duy trì bộ nhớ Ram thì dòng tiêu thụ rất nhỏ 0.1uA.

MSP430 có ưu thế về chế độ nguồn nuôi. Thời gian chuyển chế độ từ chế độ standby sang chế độ tích cực rất nhỏ (< 6us). Và có tích hợp 96 kiểu hình cho hiển thị LCD. 16 bit thanh ghi, 16 bit RISC CPU.

Có một đặc điểm của họ nhà MSP là khi MCU không có tín hiệu dao động ngoại, thì MSP sẽ tự động chuyển sang hoạt động ở chế độ dao động nội.

Kiểu chân thiết kế:

TA

PACKAGED DEVICES

PLASTIC 38-PIN TSSOP(DA)

PLASTIC40-PINQFN(RHA)

-- 4 0°C to 85°C

MSP430F2232IDAMSP430F2252IDAMSP430F2272IDAMSP430F2234IDAMSP430F2254IDAMSP430F2274IDA

MSP430F2232IRHAMSP430F2252IRHAMSP430F2272IRHAMSP430F2234IRHAMSP430F2254IRHAMSP430F2274IRHA

-- 4 0°C to 105°C

MSP430F2232TDAwMSP430F2252TDAwMSP430F2272TDAwMSP430F2234TDAMSP430F2254TDAMSP430F2274TDA

MSP430F2232TRHAwMSP430F2252TRHAwMSP430F2272TRHAwMSP430F2234TRHAMSP430F2254TRHAMSP430F2274TRHA

Bảng 1: Kiểu thiết kế MSP430

Page 3: Co ban ve msp430

Sơ đồ chân của các loại MSP 430:

Hình 1: Các kiểu chân của MSP430.

Page 4: Co ban ve msp430

II. MSP430F2274:Sơ đồ khối của vi điều khiển MSP 430F2274:

Hình 2: Sơ đồ khối của MSP 430F2274

Cấu trúc chung của MSP430:

Hình 3: Cấu trúc chung của MSP430

Tìm hiểu về CPU của MSP430F2274:CPU có kiến trúc RISC (Reduced Intruction Set Computer) là một kiến

trúc vi xử lý theo hướng đơn giản hóa tập lệnh. Các lệnh được xây dựng để có

Page 5: Co ban ve msp430

thể thực hiện với chỉ 1 chu kỳ máy. Mặt khác bus dữ liệu và bus địa chỉ (có độ rộng 16 bít) tách dời nhau điều này giúp cho quá trình đọc dữ liệu và mã lệnh có thể diễn ra đồng thời do đó nâng cao hiệu suất làm việc của vi xử lý.

CPU gồm 16 thanh ghi 16 bit. R0-15 có các chức năng đặc biệt. Các thanh ghi còn lại được sử dụng với mục đích chung. CPU có sơ đồ khối như sau:

Hình 4: kiến trúc RISC của CPU

Page 6: Co ban ve msp430

Các chế độ định địa chỉ:MSP 430 có 7 chế độ định địa chỉ: + Chế độ thanh ghi. + Chế độ chỉ số. + Chế độ định địa chỉ ký hiệu. + Chê độ định địa chỉ tuyệt đối. + Chế độ định địa chỉ thanh ghi gián tiếp. + Chế độ định địa chỉ tăng tự động. + Chê độ định địa chỉ tức thời.

Vùng địa chỉ:Vùng nhớ có thể định địa chỉ có dung lượng là 128 KB.

Hình 5: Sơ đồ vùng nhớ chương trình và dữ liệu

a. Bộ nhớ chương trình và dữ liệu Flash/ ROM: Địa chỉ bắt đầu của bộ nhớ chương trình và dữ liệu Flash/ ROM phụ thuộc vào dung lượng hiện thời và sự thay đổi của thiết bị, địa chỉ kết thúc là 0x1FFFF.

b. RAM: Vùng nhớ RAM bắt đầu từ địa chỉ 0200h, địa chỉ kết thúc phụ thuộc vào dung lượng hiện thời và sự thay đổi của thiết bị. RAM có thể sử dụng cho cả hai mã và dữ liệu

c. Các module ngoại vi: Vùng địa chỉ từ 0100h – 01FFh là vùng địa chỉ của các module ngoại vi 16 bít. Vùng địa chỉ từ 010h – 01Fh được đăng ký cho các module ngoại vi 8 bít.

d. Vùng địa chỉ của các thanh ghi đặc biệt (SFRs): Một vài thiết bị ngoại vi được hỗ trở bởi các thanh ghi có chức năng đặc biệt, được định địa chỉ byte và bao gồm 16 byte thấp của vùng địa chỉ.

Page 7: Co ban ve msp430

Tổ chức bộ nhớ:

Hình 6: Tổ chức bộ nhớ

Byte có thể nằm ở vùng địa chỉ chẵn hoặc lẻ. Word chỉ nằm ở vùng địa chỉ chẵn, khi sử dụng cấu trúc word chỉ có vùng địa chỉ chẵn được sử dụng. Byte thấp của 1 word luôn là vùng địa chỉ chẵn. Byte cao của word nằm ở địa chỉ lẻ tiếp theo.

Bộ nhớ có thể được mở rộng thậm chí vượt quá số địa chỉ có thể định địa chỉ trực tiếp, đây là một ưu điểm của bộ nhớ có cấu trúc kiểu RISC. Bộ nhớ được chia thành các Bank, tại một thời điểm chỉ có một Bank được truy xuất.

Page 8: Co ban ve msp430

Chức năng các chân:

Page 9: Co ban ve msp430

Bảng 2: Bảng chức năng các chân.• Chân P1.0/TACLK/ADC10CLK (29):

Chân xuất / nhập số. Ngõ vào xung clock TACLK của Timer A. Bộ chuyển đổi xung của ADC10

• Chân P1.1/TA0 (30): Chân xuất / nhập số. Timer_A: Ngõ vào CCI0A chế độ capture, ngõ ra OUT0 chế độ so

sánh.• Chân P1.1/TA0 (31):

Chân xuất / nhập số. Timer_A: Ngõ vào CCI1A chế độ capture, ngõ ra OUT1 chế độ so

sánh.• Chân P1.3/TA0 (32):

Chân xuất / nhập số. Timer_A: Ngõ vào CCI2A chế độ capture, ngõ ra OUT2 chế độ so

sánh.• Chân P1.4/SMCLK/TCK (33):

Page 10: Co ban ve msp430

Chân xuất / nhập số. Ngõ ra SMCLK (Sub-Main clock) của khối tạo dao động nội. Ngõ vào kiểm tra xung clock TCK .

• Chân P1.5/TA0/TMS (34): Chân xuất / nhập số Ngõ ra OUT0 củaTimer_A chế độ so sánh. TSM: Ngõ vào lựa chọn chế độ kiểm tra.

• Chân P1.6/TA1/TDI/TCLK (35): Chân xuất / nhập số TA1: ngõ ra OUT1của Timer A ở chế độ so sánh. TDI: Ngõ vào kiểm tra dữ liệu. TCLK: Ngõ vào kiểm tra xung clock.

• Chân P1.7/TA2/TDO/TDI (36): Chân xuất / nhập số TA2: ngõ ra OUT2 của Timer A ở chế độ so sánh:. TDI: Ngõ vào kiểm tra dữ liệu. TDO: Ngõ ra kiểm tra dữ liệu.

• Chân P2.0/ACLK/OA0I0 (6): Chân xuất / nhập số. Ngõ ra xung clock ACLK. Ngõ vào tương tự A0 của kênh ADC10.

• Chân P2.1/TAINCLK/SMCLK/A1/OA0O (7): Chân xuất / nhập số. Timer_A. Kênh ADC10: Ngõ vào kênh tương tự A1, ngõ ra kênh tương tự

OA0. Xung clock INCLK của Timer_A Xung clock chủ SMCLK

• Chân P2.2/TAINCLK/SMCLK/A1/OA0O (8): Chân xuất / nhập số. Ngõ vào tương tự A1 kênh ADC10 Ngõ vào CCI0B của Timer_A chế độ capture. Ngõ ra OUT0 của kênh ADC10 chế độ so sánh. Ngõ vào tương tự A2

• Chân P2.3/TA1/A3/VREF-/VeREF-/OA1I1/OA1O (27): Chân xuất / nhập số. Ngõ vào CCI1 của Timer_A. Ngõ ra OUT1 kênh ADC10 chế độ so sánh Ngõ vào tương tự A3 của kênh ADC10. Điện áp tham chiếu âm VREF-/ VeREF-

• Chân P2.4/TA2/A4/VREF+/VeREF+/OA1I0 (28): Chân xuất / nhập số. Ngõ vào tương tự A4 của kênh ADC10 Ngõ ra OUT2 của Timer_A chế độ so sánh.

Page 11: Co ban ve msp430

Điện áp tham chiếu dương VREF+/ VeREF+

• Chân P2.5/ROSC (40): Chân xuất / nhập số. Ngõ vào điện trở ngoài để định nghĩa tần số DCO.

• Chân XIN/ P2.6 (3): Ngõ vào kết nối với dao động thạch anh. Chân xuất/ nhập số.

• Chân XUOT/P2.7 (2): Ngõ vào kết nối với dao động thạch anh. Chân xuất/nhập số.

• Chân P3.0/UCB0STE/UC0CLK/A5 (9): Chân xuất / nhập số. Chân cho phép truyền dữ liệu USCI_B0 khi hoạt động ở chế độ tớ. Ngõ vào tương tự A5 của kênh ADC10

• Chân P3.1/UCB0SIMO/UCB0SDA (10): Chân xuất / nhập số. Ngõ vào USCI_B0 khi hoạt động ở chế độ slave, ngõ ra khi hoạt

động ở chế độ master trong chế độ SPI. Chân dữ liệu SDA I2C trong chế độ I2C.

• Chân P3.2/UCB01SOMI/UCB0SCL (11): Chân xuất / nhập số. Ngõ ra USCI_B0 khi hoạt động ở chế độ tớ, ngõ vào khi hoạt động

ở chế độ chủ trong chế độ SPI. Xung clock SCL I2C trong chế độ I2C.

• Chân P3.3/UCB0CLK/UCA0STE (12): Chân xuất / nhập số. Xung clock USCI_B0 Cho phép truyền dữ liệu USCI_A0 trong chế độ tớ.

• Chân P3.4/UCA0TXD/UCA0SIMO (23): Chân xuất / nhập số. Chân truyền dữ liệu nối tiếp USCI_A0 trong chế độ UART. Ngõ vào chế độ tớ, ngõ ra chế độ chủ trong chế độ SPI.

• Chân P3.5 UCA0RXD/UCA0SOMI (24): Chân xuất / nhập số. Ngõ vào nhận dữ liệu USCI_A0 trong chế độ UART. Ngõ ra chế độ tớ/ ngõ vào chế độ chủ trong chế độ SPI.

• Chân P3.6 / A6/OA0I2 (25): Chân xuất / nhập số. Ngõ vào tương tự A6 của kênh chuyển đổi ADC10. Ngõ vào tương tự OA0I2 của kênh OA0.

• Chân P3.7 / A7/OA1I2 (26): Chân xuất / nhập số. Ngõ vào tương tự A7 của kênh chuyển đổi ADC10. Ngõ vào tương tự OA1I2 của kênh OA1.

Page 12: Co ban ve msp430

• Chân P4.0/TB0 (15): Chân xuất / nhập số. Ngõ vào CCI0A của Timer_B chế độ capture, ngõ ra OUT0 chế độ

so sánh.• Chân P4.1/TB1 (16):

Chân xuất / nhập số. Ngõ vào CCI1A của Timer_B chế độ capture. Ngõ ra OUT1 chế

độ so sánh.• Chân P4.2/TB2 (17):

Chân xuất / nhập số. Ngõ vào CCI2A của Timer_B chế độ capture. Ngõ ra OUT2 chế

độ so sánh.• Chân P4.3/TB0/A12/OA0O (18):

Chân xuất / nhập số. Ngõ vào CCI0B của Timer_B chế độ capture. Ngõ ra OUT0 chế độ

so sánh. Ngõ vào tương tự A12 của kênh chuyển đổi ADC10.

• Chân P4.4/TB1/A13/OA1O (19): Chân xuất / nhập số. Timer_B: Ngõ vào CCI1B chế độ capture. Ngõ ra OUT1 chế độ so

sánh. Ngõ vào tương tự A13 của kênh chuyển đổi ADC10.

• Chân P4.5/TB2/A14/OA0I3 (20): Chân xuất / nhập số. Timer_B: Ngõ ra OUT0 chế độ so sánh. Ngõ vào tương tự A14 của kênh chuyển đổi ADC10.

• Chân P4.6/TBOUTH/A15/OA1I3 (21): Chân xuất / nhập số. Timer_B. Ngõ vào tương tự A15 của kênh chuyển đổi ADC10.

• Chân P4.7/TBCLK (22): Chân xuất / nhập số. Ngõ vào nhận xung TBCLK của timer_B.

• Chân RST/NMI/SBWTDIO (5): Chân Reset tác động ở mức thấp hoặc cấm ngắt.

• Chân TEST/SBWTCK (37):• Chân DVCC (38,39), AVCC (14): Chân cấp nguồn VCC

• Chân DVSS (1,4), AVSS (13): Chân cấp mass• Chân P1.0/TACLK/ADC10/CLK (29):

Chân xuất / nhập số. TACLK: Ngõ vào nhận xung clock cho Timer A. ADC10: Ngõ vào tương tự A10. CLK: Ngõ vào bộ chuyển đổi xung clock từ nguồn xung ngoài.

• Chân P1.1/TA0 (30):

Page 13: Co ban ve msp430

Chân xuất / nhập số. Timer_A, lưu trữ: Ngõ vào CCI0A, so sánh: Ngõ ra OUT0.

• Chân P1.1/TA0 (31): Chân xuất / nhập số. Timer_A, lưu trữ: Ngõ vào CCI1A, so sánh: Ngõ ra OUT1.

• Chân P1.3/TA0 (32): Chân xuất / nhập số. Timer_A, lưu trữ: Ngõ vào CCI2A, so sánh: Ngõ ra OUT2.

• Chân P1.4/SMCLK/TCK (33): Chân xuất / nhập số. SMCLK (Sub-Main clock): Ngõ ra của khối tạo dao động nội,

cung cấp cho các module ngoại vi. TCK: Ngõ vào kiểm tra xung clock cho việc lập trình.

• Chân P1.5/TA0/TMS (34): Chân xuất / nhập số TA0: Timer_A chế độ so sánh, ngõ ra OUT0. TSM: Ngõ vào lựa chọn chế độ kiển tra.

• Chân P1.6/TA1/TDI/TCLK (35): Chân xuất / nhập số TA1: Timer A,chế độ so sánh: ngõ ra OUT1. TDI: Ngõ vào kiểm tra dữ liệu. TCLK: Ngõ vào kiểm tra xung clock.

• Chân P1.7/TA2/TDO/TDI (36): Chân xuất / nhập số TA2: Timer A,chế độ so sánh: ngõ ra OUT2. TDI: Ngõ vào kiểm tra dữ liệu. TDO: Ngõ ra kiểm tra xung clock.

• Chân P2.0/ACLK/OA0I0 (6): Chân xuất / nhập số. Ngõ ra hệ thống xung clock ACLK, ADC10. Ngõ vào kênh tương tự A0/OA0. Ngõ vào kênh tương tự I0.

• Chân P2.1/TAINCLK/SMCLK/A1/OA0O (7): Chân xuất / nhập số. Timer_A. Kênh ADC10: Ngõ vào kênh tương tự A1, ngõ ra kênh tương tự

OA0.• Chân P2.2/TAINCLK/SMCLK/A1/OA0O (8):

Chân xuất / nhập số. Timer_A. Lưu trữ ngõ vào CCI0B, nhận BLS. Ngõ ra OUT0 của kênh ADC10 chế độ so sánh. Ngõ vào kênh tương tự A2/OA0. Ngõ vào kênh tương tự I1.

Page 14: Co ban ve msp430

• Chân P2.3/TA1/A3/VREF-/VeREF-/OA1I1/OA1O (27): Chân xuất / nhập số. Timer_A. Ngõ vào CCI1 chế độ lưu trữ. Chế độ so sánh: ngõ ra OUT1 kênh ADC10. Ngõ vào kênh tương tự A3. Ngõ vào điện áp tham chiếu âm.

• Chân P2.4/TA2/A4/VREF+/VeREF+/OA1I0 (28): Chân xuất / nhập số. Điện áp tham chiếu dương .

• Chân P2.5/ROSC (40): Chân xuất / nhập số. Ngõ vào điện trở ngoài để định nghĩa tần số DCO.

• Chân XIN/ P2.6 (3): Ngõ vào kết nối với dao động thạch anh. Chân xuất/ nhập số.

• Chân XUOT/P2.7 (2): Ngõ vào kết nối với dao động thạch anh. Chân xuất/nhập số.

• Chân P3.0/UCB0STE/UC0CLK/A5 (9): Chân xuất / nhập số. Chân cho phép truyền dữ liệu khi ở chế độ USCI_B0. Ngõ vào nhận xung của USCI_A0. Ngõ ra kênh ADC10. Ngõ vào kênh tương tự A5.

• Chân P3.1/UCB0SIMO/UCB0SDA (10): Chân xuất / nhập số. Ngõ vào chế độ tớ USCI_B0. Ngõ vào chế độ chủ trong chế độ SPI. Dữ liệu SDA I2C trong chế độ I2C.

• Chân P3.2/UCB01SOMI/UCB0SCL (11): Chân xuất / nhập số. Ngõ ra chế độ tớ USCI_B0. Ngõ vào chế độ chủ trong chế độ SPI. Xung clock SCL I2C trong chế độ I2C.

• Chân P3.3/UCB0CLK/UCA0STE (12): Chân xuất / nhập số. Cho phép truyền dữ liệu trong chế độ tớ USCI_A0.

• Chân P3.4/UCA0TXD/UCA0SIMO (23): Chân xuất / nhập số. Chân truyền dữ liệu nối tiếp USCI_A0 trong chế độ UART. Ngõ vào chế độ tớ, ngõ ra chế độ chủ trong chế độ SPI.

• Chân P3.5 UCA0RXD/UCA0SOMI (24): Chân xuất / nhập số.

Page 15: Co ban ve msp430

Ngõ vào nhận dữ liệu USCI_A0 trong chế độ UART. Ngõ ra chế độ tớ/ ngõ vào chế độ chủ trong chế độ SPI.

• Chân P3.6 / A6/OA0I2 (25): Chân xuất / nhập số. Ngõ vào tương tự A6 của kênh chuyển đổi ADC10. Ngõ vào tương tự I2 của kênh OA0.

• Chân P3.7 / A7/OA1I2 (26): Chân xuất / nhập số. Ngõ vào tương tự A7 của kênh chuyển đổi ADC10. Ngõ vào tương tự I2 của kênh OA1.

• Chân P4.0/TB0 (15): Chân xuất / nhập số. Timer_B, chế độ lưu trữ: Ngõ vào CCI0A, chế độ so sánh: Ngõ ra

OUT0.• Chân P4.1/TB1 (16):

Chân xuất / nhập số. Timer_B, chế độ lưu trữ: Ngõ vào CCI1A, chế độ so sánh: Ngõ ra

OUT1.• Chân P4.2/TB2 (17):

Chân xuất / nhập số. Timer_B, chế độ lưu trữ: Ngõ vào CCI2A, chế độ so sánh: Ngõ ra

OUT2.• Chân P4.3/TB0/A12/OA0O (18):

Chân xuất / nhập số. Timer_B, chế độ lưu trữ: Ngõ vào CCI0B, chế độ so sánh: Ngõ ra

OUT0. Ngõ vào tương tự A12 của kênh chuyển đổi ADC10, ngõ ra tương

tự OA0.• Chân P4.4/TB1/A13/OA1O (19):

Chân xuất / nhập số. Timer_B, chế độ lưu trữ: Ngõ vào CCI1B, chế độ so sánh: Ngõ ra

OUT1. Ngõ vào tương tự A13 của kênh chuyển đổi ADC10, ngõ ra tương

tự OA1.• Chân P4.5/TB2/A14/OA0I3 (20):

Chân xuất / nhập số. Timer_B, chế độ so sánh: Ngõ ra OUT0. Ngõ vào tương tự A14 của kênh chuyển đổi ADC10, ngõ vào

tương tự I3 củaOA0.• Chân P4.6/TBOUTH/A15/OA1I3 (21):

Chân xuất / nhập số. Timer_B. Ngõ vào tương tự A15 của kênh chuyển đổi ADC10, ngõ vào

tương tự OA0.• Chân P4.7/TBCLK (22):

Page 16: Co ban ve msp430

Chân xuất / nhập số. Ngõ vào nhận xung TBCLK của timer_B.

• Chân RST/NMI/SBWTDIO (5): Chân Reset tác động ở mức thấp hoặc cấm ngắt.

• Chân TEST/SBWTCK (37):• Chân DVCC (38,39), AVCC (14): Chân cấp nguồn VCC

• Chân DVSS (1,4), AVSS (13): Chân cấp mass

Cấu trúc các thanh ghi:Bốn thanh ghi đầu tiên từ R0 – R3 được chỉ định làm thanh ghi bộ đếm

chương trình, con trỏ ngăn xếp, thanh ghi trạng thái, constant Generator. Các thanh ghi còn lại là những thanh ghi sử dụng mục đích chung.

Các thiết bị ngoại vi được kết nối tới CPU sử dụng dữ liệu, địa chỉ, bus điều khiển.

Page 17: Co ban ve msp430

Hình 8: Cấu trúc thanh ghiCác thanh ghi có chức năng đặc biệt:

Tất cả các ngắt và module cho phép truy xuất BIT đều được tập trung ở vùng địa chỉ thấp nhất. Các bít của các thanh ghi chức năng đặc biệt không được cho phép tới một mục đích chức năng vật lý của thiết bị. Phần mềm đơn giản được cung cấp với sắp xếp này.

Thanh ghi cho phép ngắt 1 và 2:Trong đó:- WDTIE Cho phép ngắt Whatchdog Timer: Không hoạt động:\ nếu chế độ whatchdog được lựa chọn. Hoạt động nếu chế độ timer được lựa chọn.- OFIE : Cho phép dừng bộ phát xung.- NMIIE : Cấm không cho phép ngắt được.

Cấu trúc xuất nhập:Chíp MSP 430F2274 có thể lên tới 8 port xuất nhập từ P1 – P7. Mỗi port có 8

chân. Mỗi chân đều có những chức năng đặc biệt có thể định hướng làm đầu vào hoặc đầu ra, có thể đọc truy suất hoặc điều khiển.

Ports P1 và P2 có khả năng ngắt. Mỗi ngắt được cấu hình riêng theo cạnh lên hoặc cạnh xuống của sườn xung hoặc theo tín hiệu vào tương ứng với các vector ngắt.

Đặc tính xuất nhập bao gồm:+ Chức năng đặc biệt của các chân không phụ thuộc vào việc

lập trình.+ Có thể lựa chọn làm OUTPUT hoặc INPUT.+ P1 và P2 được cấu hình riêng cho tín hiệu ngắt.+ Không phụ thuộc thanh ghi output hay input.+ Cấu hình có điện trở kéo.

Hoạt động xuất nhập:Hoạt động xuất nhập dữ liệu được lập trình bằng phần mềm.

Thanh ghi Input PxIN: Khi được lựa chọn làm đầu vào. Giá trị mỗi bít của thanh ghi tương ứng với

tín hiệu.Bit = 0 đầu vào ở mức thấp.Bit = 1 tín hiệu ở mức cao.

Thanh ghi đầu ra PxOUT:Khi không sử dụng điện trở kéo, và được định hướng làm đầu gia. Giá trị các

bít của thanh ghi tương ứng:Bit =0 đầu ra ở mức thấp.Bit = 1 đầu ra ở mức cao.

Page 18: Co ban ve msp430

Nếu cho phép điện trở kéo, giá trị của bít tương ứng với điện trở được lựa chọn:

Bit = 0 khi điện trở kéo xuống.Bít = 1 khi điện trở kéo lên.

Thanh ghi định hướng PxDIR:Các chân của mỗi port được định hướng làm đầu ra hoặc đầu vào phục thuộc

vào giá trị các bít của thanh ghi PxDIR:Nếu bit = 0 chân được định hướng làm đầu vào.Nếu bit = 1 chân được định hướng làm đầu ra.

Thanh ghi cho phép điện trở kéo:Mối bít của thanh ghi PxREN cho phép hoặc không cho phép điện trở kéo:

Bit = 1 điện trỏ kéo lên. Bit = 0 điện trở kéo xuốNg.

Thanh ghi lựa chọn chức năng PxSEL và PxSEL2:Các chân của mỗi port đều có nhiều chức năng tương ứng với các module

ngoại vi khác nhau. Mỗi bít của thanh ghi PxSEL và PxSEL2 được sử dụng để lựa chọn chức năng là các port xuất nhập hoặc chức năng đặc biệt.

PxSEL2 PXSEL Chức năng của chân0 0 Chức năng xuất nhập0 1 Module đầu tiên được lựa chọn1 0 Đăng ký trước 1 1 Module ngoại vi thứ 2 được lựa chọn

Chú ý: Khi PxSEL =1 các ngắt của P1, P2 bị cấm. Khi bất kỳ bit nào của thanh ghi P1SELx hoặc P2SELx được set, các ngắt tương ứng với các chân này sẽ bị cấm.

Các ngắt P1 và P2:Mỗi chân của port P1 và P2 đều có khả năng ngắt. Các ngắt được cấu hình

bởi các thanh ghi PxIFG, PxIE VÀ PxIES. Tất cả các chân của port P1 một nguyên nhân tương ứng với một vector ngắt. Tất cả các chân của port 2 có nhiều hơn một nguyên nhân khác nhau tương ứng với 1 vector. Có thể sử dụng thanh ghi PxIFG để xác định nguyên nhân các ngắt port P1 và P2.

a) Thanh ghi cờ ngắt P1IFG và P2IFG:- Mỗi bit của thanh ghi PxIFGx là một cờ ngắt tương ứng với chân

xuất/ nhập và khi có cạnh xung tín hiệu tại các chân. Tất cả các cờ ngắt của thanh ghi PxIFGx đòi hỏi một ngắt tương ứng với các bit PxIE và GIE được set. Mỗi cờ ngắt đòi hỏi phải reset bằng phần mềm. Phần mềm cũng có thể set cờ ngắt:

+ Bit =0 Không có ngắt nào đang chờ.+ Bit =1 Có 1 ngắt đang chờ được phục vụ.

Chú ý: Khi thay đổi thanh ghi PxOUT và PxDIP có nghĩa là bạn đang set cờ ngắt tương ứng.

b) Thanh ghi lựa chọn ngắt theo sườn xung P1IES, P2IES:

Page 19: Co ban ve msp430

- Mỗi bit của thanh ghi PxIES lựa chọn ngắt theo cạnh lên hay cạnh xuống tương ứng với mỗi chân xuất/ nhập:

+ Bit = 0 Cờ ngắt được set khi có cạnh lên của xung.+ Bit = 1 Cò ngắt được set khi có cạnh xuống của xung.

c) Thanh ghi cho phép ngắt P1IE và P2IE:- Mỗi bít PxIE cho phép hay cấm ngắt và liên quan đến cờ ngắt tương

ứng:+ Bit = 0: Cấm ngắt.+ Bit = 1: Cho phép ngắt.

Địa chỉ các thanh ghi xuất/nhập số:

MSP 430 được cấu hình để làm việc với BYTE, điều này sẽ gây khó khăn cho người lập quen làm việc với BIT. Để có thể làm việc với BIT ta phải định nghĩa lại địa chỉ của thanh ghi điều khiển PORT.

Page 20: Co ban ve msp430

Bảng 3: Địa chỉ thanh ghi xuất nhập

Bộ định thời:MSP 340 có hai bộ định thời 16 Bit là Timer_A và Timer_B nó cũng đồng

thời đóng vai trò là bộ đếm.

Timer_A:Đặc tính của Timer_A:

Là một bộ Timer/Counter 16 bit. Với ba thanh ghi lưu trữ và 3 thanh ghi so sánh. Là một Timer đa chức năng. Đếm thời gian, so sánh, PWM . Timer_A cũng có khả năng ngắt khi counter đếm tràn hoặc mỗi thanh ghi đếm tràn. Các đặc tính chính của Timer_A bao gồm:

Page 21: Co ban ve msp430

+ Là một Timer/counter 16 Bit không đồng bộ với 4 chế độ hoạt động.+ Có thể lựa chọn và cấu hình nguồn xung+ Hai tới 3 thanh ghi có thể cấu hình capture/compare+ Cấu hình đầu ra với chế độ PWM+ Chốt ngõ vào và ngõ ra không đồng bộ

Hình 9: Sơ đồ khối của Timer_A

Timer hoạt động ở chế độ Counter 16 Bit:Ở chế độ Counter giá trị thanh ghi TAR tăng hoặc giảm theo cạnh lên của

xung clock (tùy thuộc vào chế độ hoạt động). Giá trị của thanh ghi TAR có thể được ghi hoặc đọc bởi phần mềm. Nó có khả năng tạo ra một ngắt khi đếm tràn.

Thanh ghi TAR có thể bị xóa khi set bit TACLR. Việc set bit TACLR đồng thời cũng xóa giá trị lựa chọn cho bộ chia xung hoặc chế độ đếm lên hay đếm xuống.

Lựa chọn nguồn xung và bộ chia xung:

Page 22: Co ban ve msp430

Timer có thể lựa chọn nguồn từ xung từ ACLK, SMCLK hoặc sử dụng nguồn xung ngoài thông qua TACLK hoặc INCLK. Nguồn xung được lựa chọn nhờ bít TASSELx. Các nguồn xung được chọn có thể đã được chia 2, 4 hoặc 8. Bộ chia xung được reset khi set bit TACLR.

Kích hoạt Timer:Timer có thể được kích hoạt hoặc kích hoạt lại bằng các cách sau đây:

+ Timer đếm khi MCx > 0 và nguồn xung đã được kích hoạt.+ Khi timer đang hoạt động ở chế độ đếm lên hoặc đếm xuống. Có thể

dừng timer bằng cách ghi TACCR0 = 0. Timer sẽ kích hoạt trở lại khi giá trị ghi vào TACCR0 khác 0. Giá trị đếm lên sẽ bắt đầu từ 0.

Các chế độ hoạt động của Timer:Timer hoạt động ở 4 chế độ: Chế độ dừng, chế độ đếm lên, chế độ tiếp tục,

chế độ đếm lên/xuống. Các chế độ này được lựa chọn bằng bit MCx.

MCx Mode Hoạt động00 Stop Timer được tạm dừng01 Up Timer đếm từ 0 tới giá trị đỉnh của TACCR010 Continuous Timer đếm từ 0 tới 0FFFFh11 Up/down Timer đếm từ 0 đến giá trị đỉnh của TACCR0

rồi đếm về 0

Các ngắt của Timer_A:Có hai ngắt được tạo ra do Timer_A:

+ Vector ngắt TACCR0 cho TRCCR0 CCIFG.+ Vector ngắt TAIV cho tất cả các cờ ngắt CCIFG khác và TAIFG.

Trong chế độ lưu trữ CCIFG được set khi giá trị của timer được lưu trữ do thanh ghi TACCRx. Trong chế độ so sánh bất kỳ cờ CCIFG được set nếu TAR đếm tới giá trị TACCRx. Có thể sử dụng phần mềm để set hoặc xóa bất kỳ cờ ngắt CCIFG nào. Tất cả các cờ ngắt CCIFG yêu cầu một ngắt khi bit CCIE và GIE được set.

Ngắt TACCR0 CCIFG là ngắt của Timer_A có mức ưu tiên cao nhất. Cờ ngắt TACCR0 CCIFG tự động reset khi ngắt TACCR0 được phục vụ.

Hình 10: Cờ ngắt chế độ trong chế độ so sánh và lưu trữ

Thanh ghi điều khiển Timer_A:

Page 23: Co ban ve msp430

Bảng 4: Bảng liệt kê các thanh ghi điều khiển Timer_A

Thanh ghi điều khiển TACTL:

+ Bit 15-10: Không sử dụng.+ TASSELx Bit 9-8: Lựa chọn nguồn xung clock:

00 TACLK01 ACLK10 SMCLK11 INCLK

+ Idx Bit 7-6: Lựa chọn bộ chia trước:00 /101 /210 /411 /8

+ MCx Bit 5-4: Lựa chọn chế độ hoạt động:0 Dừng chế độ1 Chế độ lên10 Tiếp tục chế độ11 Chế độ lên/xuống

+ TACLR Bit 2: Xóa Timer_A. Khi bit này được set, giá trị đếm, giá trị bộ chia trước đều được reset.

+ TAIE Bit 1: Cho phép ngắt. Khi bit =1 cho phép ngắt, bit = 0 cấm ngắt.+ TAIFG Bit 0: Cờ ngắt của Timer_A:

Bit = 0 Không có ngắt nào đang chờBit = 1 Có ngắt đang chờ phục vụ

Các thanh ghi còn lại các bạn có thể tham khảo trong datasheet.

Timer_B:

Page 24: Co ban ve msp430

Timer_B là bộ định thời 16 bít có thể hoạt động ở 2 chế độ Timer và counter. Timer_B đáp ứng đa chức năng capture/ so sánh, PWM. Timer_B cũng có khả năng tạo ra ngắt khi nó đếm tràn, hoặc các thanh ghi capture/ so sánh.

Các đặc tính của Timer_B:+ Là một Timer/counter 16 Bit không đồng bộ với 4 chế độ hoạt động.+ Có thể lựa chọn và cấu hình nguồn xung.+ Có từ 3 tới 7 thanh ghi có thể cấu hình capture/compare.+ Cấu hình đầu ra với chế độ PWM.+ Chốt ngõ vào và ngõ ra không đồng bộ.

Page 25: Co ban ve msp430

Hình 11: Sơ đồ khối của Timer_B

Những điểm giống và khác nhau giữu Timer_A và Timer_B:Timer_B mang đầy đủ đặc điểm của Timer_A ngoài ra Timer_B có các đặc

tính đặc biệt sau:+ Kích thước của Timer có thể lập trình được có độ dài 8, 10, 12 hoặc 16

Bit.+ Thanh ghi TBCCRx là 2 bộ đệm có thể được nhóm lại.+ Tất cả các đầu ra của Timer_B đều có thể đặt ở trạng thái tổng trở cao.+ Chức năng của bit SCCI không được thực hiện trong Timer_B.

Hoạt động của Timer_B:Timer hoạt động ở chế độ Counter: Khi hoạt động ở chế độ đếm giá trị thanh

ghi TBR tăng hoặc giảm (tùy thuộc vào chế độ hoạt động) theo cạnh lên của xung clock. Thanh ghi TBR có thể ghi hoặc đọc. Timer_B có thể tạo ra ngắt khi đếm tràn.

Thanh ghi TBR cũng có thể được xóa bằng cách set bit TBCLR. Khi bít này được set đồng thời cũng reset lại giá trị của bộ chia và giá trị đếm.

Chú ý: Bạn nên dừng hoạt động của Timer trước khi muốn chỉnh sửa. Những thay đổi ghi vào TRB sẽ được thực thi ngay lập tức vì vậy nếu thay đổi giá trị khi timer đang hoạt động có thể hoạt động của nó không còn chính xác. Có thể đọc giá trị của Timer khi nó đang hoạt động.

Độ dài thanh ghi TBR:Xung cấp cho Timer có thể lấy từ nguồn xung ACLK hoặc SMCLK hoặc từ nguồn xung ngoài TBCLK. Nguồn xung được lựa chọn nhờ bit TBSSELx, nguồn xung được lựa chọn có thể đã được chi trước 2, 4, hoặc 8. Giá trị của bộ chia bị reset khi set bit TBCLR.

Page 26: Co ban ve msp430

2.1.4.2.4 Kích hoạt timer:Timer có thể được khởi động hoặc khởi động lại bằng các cách sau:

+ Timer đếm khi MCx >0 và nguồn xung clock hoạt động.+ Khi timer hoạt động ở một trong hai chế độ up, up/down. Có thể

dừng hoạt động của timer bằng cách đặt TBCL0=0. Timer được kích hoạt trở lại khi giá trị này khác 0. Khi kích hoạt trở lại giá trị của timer bắt đầu từ 0.

Các chế độ hoạt động của Timer:Timer_B hoạt động ở 4 chế độ, các chế được lựa chọn nhờ bit MCx.

MCx Mode Hoạt động00 Stop Tạm dừng Timer01 Up Timer đếm từ 0 tới giá trị đỉnh của TBCL010 Continuous Timer đếm từ 0 tới giá trị được lựa chọn bởi bít

CNTLx11 Up/down Timer đếm từ 0 đến giá trị đỉnh của TBCL0 rồi

đếm xuống về 0

Các ngắt của Timer_B:Timer_B có thể tạo ra 2 ngắt:

+ Vector ngắt TBCCR0 cho TBCCR0 CCIFG.+ Vector ngắt TBIV cho các cờ ngắt CCIFG và TBIFG.

Vector ngắt TBCCR0:Vector ngắt TBCCR0 là ngắt có mức độ ưu tiên cao nhất do Timer_B tạo ra. Cờ ngắt TBCCR0 CCIFG tự động reset khi ngắt TBCCR0 được phục vụ.

Hình 12: Cờ ngắt TBCCR0

Page 27: Co ban ve msp430

Các thanh ghi của Timer_B:

Bảng 5: Thanh ghi của Timer_B

Thanh ghi điều khiển TBCTL:+ Bit 15: không sử dụng + CNTLx Bit 12-11: Độ dài của bộ đếm:

0 16-bit,TBR(max) = 0FFFFh1 12-bit,TBR(max) = 0FFFh10 10-bit,TBR(max) = 03FFh11 8-bit,TBR(max) = 0FFh

+ TBSSELx bit 9-8: Lựa chọn nguồn xung clock:00 TBCLK01 ACLK10 SMCLK11 Đảo TBCLK

+ IDx Bit 7-6: lựa chọn bộ chia xung:00 /101 /210 /411 /8

+ MCx Bit 5-4: Lựa chọn chế độ điều khiển:00 Dừng chế độ01 Chế độ lên10 Tiếp tục chế độ11 Chế độ lên/xuống

Page 28: Co ban ve msp430

+ TBCLR : Xóa Timer_B Khi bit này được set, giá trị bộ đếm, bộ chia xung đều được xóa về 0.

+ TBIE Bit 1: Cho phép ngắt Timer_B. Bit =1 cho phép ngắt, bit = 0 cấm ngắt.

+ TBIFG Bit 0: Cờ ngắt. Bit = 0 không có ngắt nào chờ, bit = 1 có ngắt đang chờ phục vụ. Khi ngắt đã được phục vụ Bit tự động được xóa về 0.

Bộ khuếch đại thuật toán OA:MSP 430 có 2 bộ khuếch đại thuật toán với nhiều kênh khác nhau.Đặc tính của các bộ khuếch đại thuật toán:

+ Nguồn đơn, hoạt động ở chế độ dòng thấp.+ Có thể lựa chọn cấu hình bằng phần mềm.+ Phần mềm có thể lựa chọn điện trở bậc thang phản hồi cho PGA

Hình 13: Sơ đồ khối của OA

Page 29: Co ban ve msp430

Các kênh chuyển đổi ADC:MSP 430 có 2 kênh chuyển đổi ADC 10 bit, ADC10 và ADC12.

Kênh chuyển đổi ADC10:Các đặc tính của kênh chuyển đổi ADC10:

+ Tốc độ chuyển đổi lớn nhất lớn hơn 200ksps.+ Bộ chuyển đổi 10 bit đơn không bị lỗi mã.+ Lấy mẫu và chốt với thời gian lấy mẫu được lập trình.+ Quá trình chuyển đổi được khởi tạo bằng phần mềm hoặc Timer_A.+ Có thể sử dụng phần mềm để lựa chọn điện áp tham chiếu (1.5V hoặc

2.5V).+ Có thể lựa chọn điện áp tham chiếu nội hoặc điện áp tham chiếu ngoài.+ Có 8 kênh đầu vào tương tự, riêng với MSP 340x22xx có tới 12 kênh đầu

vào tương tự.+ Các kênh chuyển đổi cho cảm biến nhiệt độ bên trong, Vcc, và điện áp

tham chiếu ngoài.+ Lựa chọn nguồn xung clock.+ Tự động điều khiển quá trình huyển đổi dữ liệu và lưu kết quả chuyển đổi .

Hình 14: Sơ đồ khối của ADC10

Page 30: Co ban ve msp430

Hoạt động của bộ chuyển đổi ADC10:Kênh ADC10 chuyển đổi một tín hiệu tương tự sang tín hiệu số có độ dài 10

bit, kết quả chuyển đổi được lưu vào thanh ghi ADC10MEM. Sử dụng điện áp tham chiếu VR+ và VR- để xác định giới hạn trên và giới hạn dưới của bộ chuyển đổi. Kết quả chuyển đổi số có giá trị NADC = 03FFh khi đó Vinput > = VR+ (khi đầy) hoặc NADC = 0 khi Vinput< = VR-. Kết quả chuyển đổi được tính bằng công thức như sau:

Bộ chuyển đổi ADC10 được điều khiển bởi 2 thanh ghi ADC10CTL0 và ADC10CTL1. ADC10ON là bit cho phép chuyển đổi. Khi bạn muốn thay đổi các giá trị điều khiển chuyển đổi bạn phải đặt ENC = 0. Khi điều chỉnh xong lưu ý set bit ENC = 1 để quá trình chuyển đổi bắt đầu.

Lựa chọn nguồn xung clock ADC10CLK:Để lựa chọn nguồn xung điều khiển ta sử dụng bit ADC10SSELx. Có thể sử

dụng bộ chia trước bắng bit ADC10DIVx. ADC10CLK có thể lấy xung từ các nguồn SMCLK, MCLK, ACLK hoặc sử dụng bội xung nội ADC10OSC phục vụ riêng cho nó.

Tần số chuyển đổi có thể lên tới 5-MHz, nhung giá trị này cũng tùy thuộc vào nguồn cấp, nhiệt độ và thay đổi do lập trình. Phải luôn cấp xung clock trong quá trình chuyển đổi, nếu ngắt nguồn xung bộ chuyển đổi không hoạt động hoặc kết quả chuyển đổi không chính xác.

Hình 15: Bộ đa hợp ngõ vào ADC10

Kênh chuyển đổi ADC10 có tất cả 12 ngõ vào tương tự, 8 ngõ vào tương tự ngoài và 4 ngõ vào nội, các ngõ vào được lựa chọn chuyển đổi bằng bộ đa hợp.

Lựa chọn kênh tương tự:Các ngõ vào tương tự Ax, VeREF+, and VREF− + động thời cũng là các chân

xuất/nhập. Các chân này là dạng cổng CMOS, khi được lựa chọn làm ngõ vào chuyển đổi có thể tạo ra dòng điện ký sinh có giá trị rất nhỏ từ Vcc về GND. Có thể cấm khuếch đại dòng ký sinh này bằng cách sử dụng bit ADC10Aex.

Page 31: Co ban ve msp430

Điện áp tham chiếu:Ta có thể lựa chọn điện áp tham chiếu nội bằng cách set bit REFON = 1, khi

REFON = 0 lựa chọn điện áp tham chiếu ngoài VRFE+. Bit RFE2_5V lựa chọn giá trị điện áp tham chiếu nội. Khi REF2_5V = 1điện áp tham chiếu nội là 2.5 V. Khi REF2_5V = 0 điện áp tham chiếu nội là 1.5 V.

Đặc tính công suất thấp của điện áp tham chiếu nội:Mọi thiết kế của MSP 430 đếu hướng tới tiêu chí tiết kiệm năng lượng. Kênh

ADC10 tự chuyển sang chế độ tiết kiệm năng lượng khi điện áp tương tự ngõ vào không đổi, nó kích hoạt trở lại khi cần thiết. Khi không có nguồn xung clock dòng chuyển đổi bằng 0.

Thời gian lấy mẫu và chuyển đổi:Bit SHTx được sử dụng để lựa chọn thời gian lấy mẫu, thời gian lấy mẫu có

thể là 4, 8, 16 hoặc 64 chu kỳ xung, thời gian chuyển đổi là 13 chu kỳ xung.

Hình 16: Thời gian lấy mẫu

Tính toán thời gian lấy mẫu:Khi SAMPCON = 0 tất cả các ngõ vào tương tự Ax đều ở trạng thái tổng trở

cao. Khi SAMPCON = 1 tín hiệu tương tự ngõ vào được đưa qua một mạch lọc thông thấp RC. Sơ đồ tương đương như sau:

Nội trở của nguồn Rs và Ri ảnh hưởng đến thời gian lấy mẫu. Thời gian lấy mẫu tối thiểu có thể được tính theo phương trình sau đây:

Với giá trị lớn nhất Ri =2 kΩ, Ci = 27 pF phương trình trên tương đương với:

Page 32: Co ban ve msp430

Nếu Rs = 10kΩ thì thời gian lấy mẫu lớn hơn 2.47 µs.Khi sử dụng bộ đệm tham chiếu trong chế độ burst thì thời gian lấy mẫu phải

lớn hơn thời gian tính toán ở trên và thời gian thiết lập của bộ đệm.

Ví dụ, nếu điện áp tham chiếu ngoài VRef =1.5V, RS = 10 kΩ, tsample lớn hơn than 2.47µs, khi ADC10SR = 0, hoặc 2.5 µs khi ADC10SR = 1. Khi đó thời gian thiết lập của bộ đệm được tính toán như sau:

Trong đó SR: là tốc độ quét của bộ đệm.

Chế độ chuyển đổi:Bộ chuyển đổi tương tự sang số ADC10 có 4 chế độ hoạt động được lựa

chọn bằng bít CONSEQx.

Ngắt của ADC10: Một ngắt được tạo ra do kênh ADC10, ADC10IFG được set khi bắt đầu

quá trình chuển đổi, kết quả chuyển đổi được lưu vào ADC10MEM. Khi qua trình chuyển đổi hoàn thành cờ ngắt ADC10IFG sẽ tạo ra một ngắt, cờ ngắt tự động reset khi ngắt đã được phục vụ.

Hình 17: Ngắt ADC10

Page 33: Co ban ve msp430

Các thanh ghi của ADC10:

Bảng 6: Thanh ghi ADC10

a) Thanh ghi điều khiển ADC10CTL0: Là thanh ghi 16 bit có sơ đồ như sau:

+ Trong đó SREFx 15-13 lựa chọn điện áp tham chiếu:

+ SHTx là bit lựa chọn thời gian lấy mẫu và giữ:

+ ADC10SR Bit 10 là bít lựa chọn tốc độ lấy mẫu:Bit = 1 tốc độ ~ 50 kspsBit = 0 tốc độ ~200 ksps

+ REFOUT Bit 9 Ngõ ra tham chiếu: Bit = 0 Ngõ ra tham chiếu off

Page 34: Co ban ve msp430

Bit = 1 Ngõ ra tham chiếu on+ REF2_5V Bit 6 Lựa chọn điện áp tham chiếu:

Bit = 0 Vref = 1.5 VBit = 1 Vref = 2.5 V

+ ADC10ON Bit 4: Bit = 0 ADC10 offBit = 1 ADC10 on

+ ADC10IE Bit 3 Cho phép ngắt ADC10:Bit = 0 cấm ngătBit = 1 cho phép ngắt

+ ADC10IFG Bit 2 Cờ ngắt:Bit =0 báo không có ngắt nào đợi phục vụBit = 1 Báo có ngắt đợi phục vụ

+ ENC Bit 1 Bít cho phép chuyển đổi:Bit = 0 cấm chuyển đổiBit =1 cho phép chuyển đổi

b)Thanh ghi điều khiển ADC10CTL1:

+ INCHx Bit 15- 12 : Lựa chọn ngõ vào:

+ ADC10DIVx Bit 7-5 Lựa chọn nguồn bộ chia xung:

Page 35: Co ban ve msp430

+ SSELx Bit 4-3 Lựa chọn nguồn xung clock

c)Thanh ghi lưu kết quả chuyển đổi ADC10MEM:

Kết quả 10 bit chuyển đổi được lưu trữ bên phải. Bit 9 là MSB. Bit 10-15 luôn luôn là 0.

Kênh chuyển đổi ADC12:ADC12 là kênh chuyển đổi 12 bít có các đặc tính như sau:

+ Tốc độ chuyển đổi lớn hơn 200-ksps.+ Bộ chuyển đổi 12 bit đơn không bị lỗi mã.+ Lấy mẫu và chốt với thời gian lấy mẫu được lập trình.+ Quá trình chuyển đổi được khởi tạo bằng phần mềm hoặc Timer_A,

Timer_B.+ Có thể sử dụng phần mềm để lựa chọn điện áp tham chiếu (1.5V hoặc

2.5V).+ Có thể lựa chọn điện áp tham chiếu nội hoặc điện áp tham chiếu ngoài.+ Có 8 kênh đầu vào tương tự, riêng với MSP 340x22xx có tới 12 kênh

đầu vào tương tự.+ Các kênh chuyển đổi cho cảm biến nhiệt độ bên trong, Vcc, và điện áp

tham chiếu ngoài.+ Lựa chọn nguồn xung clock.+ Tự động điều khiển quá trình huyển đổi dữ liệu và lưu kết quả chuyển

đổi, thanh ghi lưu kết quả chuyển đổi là thanh ghi 16 bit.+ 18 ngắt ADC12.

Page 36: Co ban ve msp430

Hình 18: Sơ đồ khối của kênh chuyển đổi tương tự sang số ADC12Tính toán kết quả chuyển đổi sử dụng công thức:

Lựa chọn nguồn xung: Để lựa chọn nguồn xung điều khiển ta sử dụng bit ADC12SSELx. Có thể sử

dụng bộ chia trước bắng bit ADC12DIVx. ADC12CLK có thể lấy xung từ các nguồn SMCLK, MCLK, ACLK hoặc sử dụng bội xung nội ADC12OSC phục vụ riêng cho nó.

Tần số chuyển đổi có thể lên tới 5-MHz, nhung giá trị này cũng tùy thuộc vào nguồn cấp, nhiệt độ và thay đổi do lập trình. Phải luôn cấp xung clock trong quá trình chuyển đổi, nếu ngắt nguồn xung bộ chuyển đổi không hoạt động hoặc kết quả chuyển đổi không chính xác.

Page 37: Co ban ve msp430

Hình 19: Bộ đa hợp ngõ vào ADC12Kênh chuyển đổi ADC12 có tất cả 12 ngõ vào tương tự, 8 ngõ vào tương tự

ngoài và 4 ngõ vào nội, các ngõ vào được lựa chọn chuyển đổi bằng bộ đa hợp.

Điện áp tham chiếu:Ta có thể lựa chọn điện áp tham chiếu nội bằng cách set bit REFON = 1, khi

REFON = 0 lựa chọn điện áp tham chiếu ngoài VRFE+. Bit RFE2_5V lựa chọn giá trị điện áp tham chiếu nội. Khi REF2_5V = 1điện áp tham chiếu nội là 2.5 V. Khi REF2_5V = 0 điện áp tham chiếu nội là 1.5 V.Ngắt ADC12:

Kênh ADC12 có 18 nguồn ngắt bao gồm:+ ADC12IFG0-ADC12IFG15.+ Tràn ADC12IFG0-ADC12IFG15.+ Tràn thời gian chuyển đổi ADC12TOV, ADC12.

Khi quá trình chuyển đổi hoàn thành bít ADC12IFGx được set và kết quả chuyển đổi được lưu vào thanh ghi ADC12IFGx. Khi đó một ngắt được tạo ra.

Page 38: Co ban ve msp430

Các thanh ghi điều khiển ADC12:

Bảng 7: Thanh ghi điều khiển ADC 12

Page 39: Co ban ve msp430

Thanh ghi điều khiển ADC12CTL0:

\

Kênh chuyển đổi số sang tương tự DAC12:Là kênh chuyển đổi 12 bit. Tuy nhiêu nó có thể được cấu hình 8 bit hoặc 12

bit.Những đặc tính của kênh chuyển đổi DAC12 bao gồm:

+ Có thể sử dụng điện áp tham chiếu nội và điện áp tham chiếu ngoài.+ Độ phân giải 8 hoặc 12 bit.+ Lập trình thời gian và công suất nguồn.+ Khả năng cập nhật dữ liệu đồng bộ cho nhiều kênh DAC.

Hình 20: Sơ đồ khối của kênh chuyển đổi DAC12

Page 40: Co ban ve msp430

Hoạt động của kênh chuyển đổi DAC12: Kênh chuyển đổi số sang tương tự DAC12 có thể cấu hình để hoạt động ở

chế độ 8 bit hoặc 12 bit bằng cách sử dụng bit DAC12RESx. Bit DAC12IR lựa chọn điện áp tham chiếu. Bít DAC12 cho phép người sử dụng lựa chọn dữ liệu kiểu nhị phân tiêu chuẩn hay 2s-compliment.

Khi sử dụng kiểu định dạng dữ liệu kiểu nhị phân tiêu chuẩn, điện áp đầu ra được tính như sau:

Trong chế độ 8 bit, giá trị lớn nhất của DAC12_xDAT là 0FFh. Trong chế độ 12 bit giá trị tối đa của DAC12_xDAT là 0FFFh.

Điện áp tham chiếu của kênh DAC12:Có thể lựa chọn điện áp tham chiếu ngoài hoặc điện áp tham chiếu nội với 2

mức điện áp tham chiếu 1.5 V và 2.5 V. Điện áp tham chiếu được lựa chọn bằng bit DAC12SREFx. Khi DAC12SREFx = 0,1 sử dụng điện áp tham chiếu VREF+

DAC12SREFx = 2,3 sử dụng điện áp VeREF+ .

Ngắt của DAC12:Vector ngắt của DAC 12 được chia sẻ với bộ điều khiển DMA, vì vậy để xác

định nguyên nhân gây ra ngắt bạn phải kiểm tra cờ ngắt DAC12IFG và DMAIFG.

Bit DAC12IFG được set khi DAC12LSELx > 0 và dữ liệu DAC12 được chốt. Khi DAC12LSELx = 0 Bit DAC12IFG không được set.

Việc set bit DAC12IFG chỉ định rằng DAC12 sẵn sàng cho quá trình chuyển đổi mới. Nếu cả 2 bít DAC12IFG và GIE được set sẽ tạo ra một tín hiệu ngắt. Cờ ngắt DAC12IFG không tự động reset bạn phải đặt lại nó bằng phần mềm.

Các thanh ghi DAC12:

Bảng 8: Thanh ghi DAC12

Page 41: Co ban ve msp430

a)Thanh ghi điều khiển DAC12_xCTL:

+ DAC12OPS Bit 15 lựa chọn ngõ ra DAC12: Bit = 0 ngõ ra DAC12_0 là chân P6.6, ngõ ra DAC12_1 là chân P6.7.Bit = 1 ngõ ra DAC12_0 là chân VeREF+, ngõ ra DAC12_1 là chân

P6.5.+ SREFx Bít 14-13: Lựa chọn điện áp tham chiếu:

00 VREF+

01 VREF+

10 VeREF+

10 VeREF+

+ RES Bit 12: Lựa chọn độ phân giải:Bit = 0 : Độ phân giải 12 bitBit = 1 : Độ phân giải 8 bit

+ CALON Bit 9: Bit hiệu chỉnh trên:Bit = 0: Không hiệu chỉnhBit = 1: Tiến hành hiệu chỉnh

+ DAC12IR Bit 8: Bit dùng để set điện áp tham chiếu ngõ vào và phạm vi điện áp ra:

Bit = 0: Nhân 3 điện áp tham chiếuBit = 1: Giữ nguyên giá trị điện áp tham chiếu

+ DAC12 Bit 7-5 Cài đặt các thông số của bộ khuếch đại:

Page 42: Co ban ve msp430

+ DAC12DF Bit4: Định dạng dữ liệu DAC12:Bit = 0 Dữ liệu kiểu nhị phânBit = 1 Dữ liệu kiểu bù 2 (2’s complement)

+ DAC12IE Bit3: Cho phép ngắt DAC12:Bit = 0 Cấm ngắtBit = 1 cho phép ngắt

+ DAC12IFG Bit 2: Cờ ngắt DAC12:Bit = 0 Không có ngắt nào chờBit = 1 Có ngắt đang chờ phục vụ

+ DAC12ENC Bit 1: Cho phép chuyển đổi DAC12, khi bit DAC12ENC > 0 cho phép chuyển đổi, khi DAC12ENC = 0 không cho phép chuyển đổi.

b)Thanh ghi dữ liệu DAC12_xDAT:

+ DAC12_xDAT là thanh ghi 16 bit. Trong đó Bit 15-12 không sử dụng những bit này luôn bằng 0.

+ DAC12Data Bit 11-0 là bit dữ liệu.

Page 43: Co ban ve msp430

Hệ thống xung clock và bộ phát xung:Hệ thống xung clock của MSP 430f2274 được chia thành nhiều khối khác

nhau, mối module sẽ cung cấp xung clock cho các khối ngoại vi ứng dụng tương ứng.

MSP 430 được thiết kế để đáp ứng yêu cầu tiết kiệm năng lượng nên thạch anh ngoài được sử dụng có tần số 32768 HZ. Nhưng chúng ta có thể thay đổi tần số hoạt động bằng bộ điều khiển tần số dao động DCO(DCO_digitally-controlled oscillator).

Trong đó MCLK: Là xung clock sử dụng cho CPU.SMCLK: Hệ thống xung clock sử dụng cho các module ngoại vi.

Thanh ghi điều khiển DCOCTL:

DCOx : Bit 7-5 là bít lựa chọn tần số xung. Có 8 giá trị xung khác nhau được định nghĩa nhơ thanh ghi RSELx <Trang 299_slau144>

MODx : Bit 4-0 BIT lựa chọn bộ điều chế. Những bit này thường được định nghĩa để sử dụng tần số fDCO+1 trong khoảng thời gian là 32 chu kỳ. Khoảng thời gian còn lại (32-MDO) tần số fDCO được sử dụng. Không thể sử dụng các bít này khi DCOx=7.

Thanh ghi điều khiển hệ thống xung BCSCTL1:

+ XT2OFF Bit 7: Bit điều khiển bộ phát xung XT2:Bit =0 XT2 onBit = 1 XT2 off. Nếu nó không được sử dụng cho MCLK hoặc SMCLK

+ XTSBit 6: Là bít lựa chọn chế độ:

Page 44: Co ban ve msp430

Bit = 0 lựa chọn chế độ tần số thấpBit = 1 lựa chọn chế độ tần số cao

+ DIVAx Bit 5-4: Các bít lựa chọn bộ chia cho ACLK00 /101 /210 /411 /8

+ RSELx Bit 3-0 Lựa chọn dải tần số. Có sẵn 16 dải tần số khác nhau. Giá trị dải tần số thấp nhất được lựa chọn khi RSELx = 0. Bít RSEL3 được bỏ qua khi DCOR=1.

Thanh ghi điều khiển BCSCTL2:

+ SELMx Bit 7-6 Bít lựa chọn nguồn xung cho MCLK:0 DCOCLK1 DCOCLK

10 2CLK khi bộ phát xung XT2 có sẵn trên chíp. LFXT1CLK hoặc VLOCLK khi bộ phát xung XT2 không có sắn trên chíp.

11 FXT1CLK hoặc VLOCLK+ DIVMx Bit 5-4 Bít lựa chọn bộ chia cho MCLK:

00 /101 /210 /411 /8

+ SELS Bit3 Bit lựa chọn nguồn SMCLK:Bit =0 DCOCLKBit = 1 XT2 khi bộ phát xung XT2 có sẵn trên chíp. LFXT1CLK hoặc

VLOCLK khi bộ phát xung XT2 không có sẵn trên chíp+ DIVSx Bit 2-1 Bít lựa chọn bộ chia cho SMCLK :

00 /1 01 /2 10 /4 11 /8

+ DCOR Bit 0 Bít lựa chọn điện trở DCO:Bit = 0 Điện trở nộiBit = 1 Điện trở ngoài

Page 45: Co ban ve msp430

Thanh ghi cho phép ngắt IE1:

OFIF BIT 1 Bit =1 Cho phép ngắtBit =0 Không cho phép ngắt

Các bít còn lại được sử dụng cho module khác.

Thanh ghi cờ ngắt:

OFIFG Bit 1 Bit =0 Không có ngắt nào đang được phục phụBit =1 Có ngắt đang được phục vụ

Các bít còn lại có thể được sử dụng bởi các module khác.

Page 46: Co ban ve msp430

Mođun eZ430-RF2500:Công cụ phát triển eZ430-RF2500:eZ430-RF2500:

eZ430-RF2500 Là một thẻ giao tiếp USB và truyền nhận dữ liệu không dây. eZ430-RF2500 được phát triển dựa trên MSP 430F2274 kết hợp với chíp CC2500 truyền nhận tín hiệu tần số RF 2.4 GHz, tích hợp sẵn cảm biến nhiệt độ. Do đặc điểm dòng MSP 430 có những ưu thế về năng lượng nên đáp ứng được những nhu cầu trong thiết bị di động. MSP430 dùng nguồn 3.6V nên trong thiết kế này có thể sử dụng pin Lithiun 3.7 V.

Bộ eZ430-RF2500T là một sản phẩm có thể làm việc với đầu cắm USB như một hệ thống độc lập với cảm biến bên ngoài. Hoặc sử dụng thiết kế mở rộng với những module ngoại vi. Với Giao diện gỡ lỗi USB cho phép sản phẩm có thể truyền và nhận dữ liệu từ xa từ máy tính cá nhân sử dụng truyền nhận nhận nối tiếp UART

Đặc tính của eZ430-RF2500:+ Giao diện lập trình và gỡ lỗi.+ Có sẵn 21 chân.+ Mật độ tích hợp cao, MSP 430 có nguồn cực thấp siêu tiết kiệm năng

lượng. + Hai chân xuất/ nhập kết nối với hai led xanh và đỏ cho phép người lập

trình mô phỏng trực quan.+ Một nút nhấn dùng để mô phỏng trực quan.

Hình 21: Board eZ430-RF2500 USB

Page 47: Co ban ve msp430

Hình 22: Board eZ430-RF2500 dùng PIN

Chức năng các chân:Những đặc tính đặc biệt của MSP 430 bạn có thể tham khảo trong phần giới

thiệu chi tiết ở trên. MSP 430 được sử dụng để xây dựng board eZ430-RF2500. Ngoài ứng dụng truyền nhận tín hiệu từ xa, board còn lấy ra 18 chân cho người lập trình thực hành và phát triển những ứng dụng riêng của mình.

Page 48: Co ban ve msp430

Hình 23: Sơ đồ chân board eZ430-RF250

Chức năng các chân board eZ430-RF2500Pin Chức năng Mô tả1 GND Mass2 Vcc Chân nguồn Vcc 1.8V - 3.6V3 P2.0 / ACLK / A0 / OA0I0 Chân xuất/nhập số, ngõ ra xung clock

ACLK, ngõ vào tương tự A0 kênh ADC104 P2.1 / TAINCLK / SMCLK

/ A1 /A0OChân xuất/nhập số, ngõ vào analog A1 kênh ADC10, xung clock INCLK của Timer_A, xung clock chủ SMCLK

5 P2.2 / TA0 / A2 / OA0I1 Xuất/nhập, ngõ vào tương tự A2 của kênh ADC10, ngõ vào CCI0B của Timer_A chế độ capture, ngõ ra OUT0 chế độ so sánh.

6 P2.3 / TA1 / A3 / VREF – / VeREF – OA1I1 / OA1O

Xuất/nhập, ngõ vào tương tự A3 kênh ADC10, điện áp tham chiếu âm VREF – / VeREF –, ngõ vào CCI1B của Timer_A, ngõ ra OUT1 chế độ so sánh.

7 P2.4 / TA2 / A4 / VREF+ / VeREF+/ OA1I0

Chân xuất/nhập số, ngõ vào tương tự A4 kênh ADC10, ngõ ra OUT2 Timer_A chế độ so sánh, ngõ vào/ra điện áp tham chiếu.

8 P4.3 / TB0 / A12 / OA0O Chân xuất/nhập số, ngõ vào tương tự A12 kênh ADC10, ngõ vào CCI0B Timer_B chế độ capture, ngõ ra OUT0 chế độ so sánh

9 P4.4 / TB1 / A13 / OA1O Chân xuất/nhập số, ngõ vào tương tự A13 kênh ADC10, ngõ vào CCI1B Timer_B chế độ capture, ngõ ra OUT1 chế độ so sánh

10 P4.5 / TB2 / A14 / OA0I3 Chân xuất/nhập số, ngõ vào tương tự A14 kênh ADC10, ngõ ra OUT0 của Timer_B chế độ so sánh

11 P4.6 / TBOUTH / A15 / OA1I3

Chân xuất/nhập số, ngõ vào tương tự A15 kênh ADC10, chuyển mạch từ TB0 sang TB3 ngõ ra tổng trở cao.

12 GND Mass13 P2.6 / XIN (GDO0) Chân xuất/nhập số, kết nối thạch anh14 P2.7 / XOUT (GDO2) Chân xuất/nhập số, kết nối thạch anh15 P3.2 / UCB0SOMI /

UCB0SCLChân xuất/nhập số, ngõ ra chế độ tớ, ngõ vào chế độ chủ USCI_B0 trong chế độ SPI, nguồn xung clock SCLI2C trong I2C mode

16 P3.3 / UCB0CLK / UCA0STE

Chân xuất/nhập số, ngõ vào xung clock USCI_B0, ngõ ra cho phép truyền dữ liệu USCI_A0 trong chế độ tớ

17 P3.0 / UCB0STE / UCA0CLK / A5

Chân xuất/nhập số, ngõ vào tương tự A5 kênh ADC10, xung USCI_A0, chân cho

Page 49: Co ban ve msp430

phép truyền tín hiệu USCI_B0 trong chế độ tớ

18 P3.1 / UCB0SIMO / UCB0SDA

Chân xuất/ nhập số, , ngõ ra chế độ tớ, ngõ vào chế độ chủ USCI_B0 trong chế độ SPI, dữ liệu SDAI2C trong I2C mode

Bảng 9: Chức năng các chân board eZ430-RF2500

Page 50: Co ban ve msp430

Chức năng các chân Battery Board

PIN Chức năng Mô tả1 P3.4 / UCA0TXD /

UCA0SIMOChân xuất/nhập số, chân truyền dữ liệu USCI_A0 trong chế độ UART, ngõ vào chế độ tớ, ngõ ra chế độ chủ trong chế độ SPI

2 GND Mass

3 RST / SBWTDIO Chân reset tích cực mức thấp

4 TEST / SBWTCK Lựa chọn chế độ kiểm tra cho chân JTAG của port 1.

5 VCC (3.6V) Nguồn Vcc 3.6V

6 P3.5 / UCA0RXD / UCA0SOMI

Chân xuất/nhập số, chân nhận dữ liệu USCI_A0 trong chế độ UART, ngõ vào chế độ tớ, ngõ ra chế độ chủ trong chế độ SPI

Bảng 10 : Chức năng các chân Battery Board

Thông số kỹ thuật:MSP430F2274:

Thông số MIN TYP MAX UNITĐiều kiện làm việcĐiện áp 1.8 3.6 VNhiệt độ -40 85 oCDòng tiêu thụChế độ hoạt động tại 1MHz, 2.2V 270 390 μAChế độ nghỉ 0.7 1.4 μAChế độ tắt duy trì RAM 0.1 0.5 μATần số làm việcVcc ≥ 3.3V 16 MHz

Bảng 11: Các thông số kỹ thuật của MSP430F2274

Page 51: Co ban ve msp430

CC2500:+ Tần số: 2.4 GHz.+ Tốc độ: 500 kbps.+ Dòng tiêu thụ thấp.

Thông số Điều kiện MIN TYP MAX UNITĐiều kiện làm việcĐiện áp 1.8 3.6 VDòng tiêu thụTín hiệu vào RX 250 kbps

Dòng tối ưu 16.6 mA

Optimized sensitivity

18.8 mA

Tín hiệu vào RX 30 dB 250 kbps

Dòng tối ưu 13.3 mAOptimized sensitivity

15.7 mA

Dòng tiêu thụ TX (0 dBm)

21.2 mA

Dòng tiêu thụ TX (-12 dBm)

11.1 mA

Đặc tính tần sốTần số 2400 2483.

5MHz

Dữ liệu 1.2 500 kbpsCông suất ngõ ra -30 0 dBm

Độ nhạy 10 kbps Dòng tối ưu , 2-FSK, 230-kHz

-99 dBm

Lọc thông dải RX, 1% PER

101 dBm

Độ nhạy 250 kbps Độ nhạy tối ưu -87 dBmDòng tối ưu, 500-kHz RX

-89 dBm

Bảng 12: Các thông số kỹ thuật của CC2500

Page 52: Co ban ve msp430

Sơ đồ mạch eZ430-RF2500:

Hình 24: Sơ đồ nguyên lý của USB

Page 53: Co ban ve msp430

Hình 25: Sơ đồ nguyên lý của USB

Page 54: Co ban ve msp430

Hình 25: Sơ đồ nguyên lý của board eZ430-RF2500T

Page 55: Co ban ve msp430

Chip CC2500:Giới thiệu:

CC2500 là chíp thu phát sóng vô tuyến RF tần số 2.4 GHz. Chip sử dụng nguồn thấp tiết kiệm năng lượng có thể sử dụng pin. Thích hợp với những thiết bị di động điều khiển bằng công nghệ không dây, thiết bị điện tử dân dụng, điều khiển đồ chơi, chuột và bàn phím không dây, các ứng dụng điều khiển từ xa khác.

Bộ thu phát được tích hợp với cấu hình modem dải gốc cao. Modem hỗ trợ nhiều hình thức điều chế tín hiệu khác nhau trong đó cấu hình dữ liệu lên tới 500 Kbaud.

CC2500 hỗ trợ phần cứng cho việc xử gói dữ liệu. Tích hợp cảm biến nhiệt độ.Thường CC2500 kết hợp với một chip vi xử lý và các linh kiện thụ động khác

để thực hiện chức năng điều khiển.Phần cứng bao gồm 20 chân:

Hình 26: Sơ đồ chân của CC2500+ Chân 4, 9, 11, 14, 15, 18: Là các chân nguồn nối lên Vcc.+ Chân 16, 19 nối GND.+ Chân 8, 10 nối vơi thạch anh.

Page 56: Co ban ve msp430

Chức năng chi tiết các chân còn lại như sau:

Bảng 13: Chức năng các chân CC2500+ Chân 1: SCLK chân đầu vào số, chân đầu vào nhận xung clock và giao

diện cấu hình nối tiếp+ Chân 2: Đầu ra số. Giao diện cấu hình nối tiếp. Khi CSn ở mức cao thì

chân có chức năng của một chân thông thường.+ Chân 3: GDO2: Đầu ra số. Là chân đầu ra cho mục đích sử dụng chung

Page 57: Co ban ve msp430

- Kiểm tra tín hiệu.- Trạng thái tín hiệu FIFO.- Xóa chân được chỉ định.- Chân đầu ra của xung clock sau khi đã được chia xung từ XOSC.- Chân truyền dữ liệu nối tiếp RX.

+ Chân 4: Chân nguồn DVDD. Sử dụng nguồn từ 1.8 tới 3.6V+ Chân 5: DCOPUL: Chân nguồn 1.6-2V. Chân này chỉ sử dụng cấp

nguồn + riêng cho CC2500 không sử dụng chung cho các thiết bị khác.+ Chân 6: GDO0:Chân vào ra số. Ngoài các chức năng như chân 3 nó còn

có vai trò là chân truyền nhận nối tiếp RX và TX. + Chân 7: CSn: Là chân đầu vào lựa chọn.+ Chân 8, 10: XOSC_Q1, XOSC_Q2: Chân nối thạch anh.+ Chân 9, 11, 14, 15: Chân nguồn cấp nguồn 1.8-3.6V cho khối Analog.+ Chân 12 RF_P: Là chân truyền nhận tín hiệu RF. Là chân đầu vào trong

chế độ truyền, chân đầu ra trong chế độ nhận.+ Chân 13 RF_N: Có chức năng như chân 12 nhưng tín hiệu bị đảo.+ Chân 16, 19: GND.+ Chân 17 RBIAS: Chân vào ra tương tự.+ Chân 20 SI: Chân ngõ vào số. Giao diện cấu hình nối tiếp.

Cấu tạo của chíp:

Hình 27: Cấu tạo CC2500

Page 58: Co ban ve msp430

Nguyên lý hoạt động:CC2500 đóng vai trò là bộ nhận. Tín hiệu được khuếch đại bởi bộ khuếch đại

LNA và bộ đổi pha vuông góc giảm tín hiệu xuống tần xuống tần số trung bình (IF) sau đó tín hiệu được số hóa bởi các bộ chuyển đổi ADC. Tín hiệu đưa tới mạch tự động điều chỉnh độ lợi (AGC).

Những linh kiện sử dụng trong mạch điện ứng dụng:S

Bảng 14: Những linh kiện sử dụng trong mạch điện

Sơ đồ mạch điện cụ thể như sau:

Hình 28: Sơ đồ mạch điện

Page 59: Co ban ve msp430

Giá trị điển hình của các linh liện được sử dụng trong mạch:

Bảng 15: Giá trị của các linh liện được sử dụng trong mạch

Phần mềm biên dịch và nạp chương trình (The IAR Embedded Workbench IDE):

Đối với MSP430 chúng ta có 2 phần mềm biên dịch và nạp chương trình là:+ The IAR Embedded Workbench IDE.+ CCE.

Sử dụng 2 ngôn ngữ Assembly và C/C++. Ở đây nhóm nghiêm cứu chỉ giới thiệu phần mềm The IAR Embedded Workbench IDE.

Cách cài đặt phần mềm:Trong mỗi bộ thí nghiệm MSP430 có một đĩa CD giới thiệu cho ta 2 phần

mềm The IAR Embedded Workbench IDE và CCE. Cách cài đặt và một chương trình demo đo nhiệt độ môi trường từ xa.

Sau khi bỏ đĩa vào máy, ta vào ổ đĩa CD; F:\Software nhấp đúp vào file FET_R511.exe bắt đầu quá trình cài đặt. Sau khi nhấp vào ta thấy màn hình có:

Page 60: Co ban ve msp430

Nhấp vô chữ Setup phần mềm bắt đầu được cài đặt. Sau đó màn hình sẽ xuất hiện như sau và bấm Next, sau đó bấm Accept:

Chọn thư mục cài đặt phần mềm (ta nên để nguyên),sau đó bấm Next:

Page 61: Co ban ve msp430

Chọn Full rồi bấm Next sẽ ra màn hình như sau rồi bấm Next:

Sau đó bấm Next, cài đặt phần mềm vào máy:

Page 62: Co ban ve msp430

Cuối cùng bấm Finish, hoàn tất quá trình cài đặt. Ngoài màn hình Destop vô: Start/ All Programs / IAR Systems / IAR

Embedded Workbench Kickstart for MSP430 V4.10E nhấp đúp vô IAR Embedded Workbench bắt đầu chạy chương trình IAR Embedded Workbench.

Sau khi đã cài đặt xong phần mềm, chúng ta bắt đầu cài đặt thiết bị (Chú ý: Phải cài đặt xong phần mềm rồi mới cài đặt thiết bị).

Cài đặt thiết bị:Cắm eZ430-RF2500 vào cổng USB của máy tính. Góc bên phải ở phía dưới

destop sẽ xuất hiện:

Máy tính đã xác nhận có 1 ổ cứng mới. Sau đó sẽ xuất hiện:

Máy tính đã xác nhận chip của MSP430 theo chuẩn UART. Sau đó màn hình sẽ xuất hiện:

Page 63: Co ban ve msp430

Máy tính tự động tìm ổ đĩa mới. Chọn No, not this time rồi nhấp Next. Màn hình sẽ xuất hiện:

Page 64: Co ban ve msp430

Chọn Install the software automatically (Recommended) rồi tiếp tục bấm Next (Chỉ thực hiện được lệnh này khi đã cài đặt phần mềm IAR Embedded Workbench Kickstart for MSP430 V4.10E). Màn hình sẽ xuất hiện:

Bấm Continue Anyway để cho máy tính tiếp tục tìm ổ cứng mới. Khi quá trình này xong, máy tính đã nhận được thiết bị eZ430 – RF2500.

Để kiểm tra coi máy tính đúng đã nhận thiết bị eZ430 – RF2500 ta tiếp tục làm theo cách sau. Ở màn hình Destop vô: Start / My Computer.

Page 65: Co ban ve msp430

Nhấp chuột phải ta chọn Manage. Màn hình sẽ xuất hiện:

Sau đó chọn vào Device Manager. Màn hình sẽ xuất hiện:

Page 66: Co ban ve msp430

Màn hình phía bên phải ta mở tab: Port (COM & LPT). Khi đó màn hình sẽ xuất hiện:

Ta thấy trong tab: Port (Com & LPT) có dòng MSP430 Application UART (COM 5). Cho biết rằng máy tính đã nhận thiết bị eZ430 – RF2500. Ở đây COM 5 chỉ là nơi cắm thiết bị, có nghĩa máy tính nhận thiết bị eZ430 – RF2500 ở cổng USB số 5.

Ta đã xong phần cài đặt thiết bị, phần tiếp theo là làm theo sử dụng phần mềm, cách tạo 1 Project mới và cách thêm vào 1 Project đã có.

Page 67: Co ban ve msp430

Hướng dẫn sử dụng phần mềm (The IAR Embedded Workbench IDE):

Giới thiệu: IAR Embedded Workbench IDE là phần mềm hỗ trợ đầy đủ các công cụ lập

trình cho dòng sản phẩm MSP 430. Ở khuôn khổ một tài liệu hướng dẫn sử dụng xin được giới thiệu tới các bạn một vài đặc tính của phần mềm như sau:

+ Trình biên dịch cấp cao được tối ưu hóa MSP430 IAR C/C++.+ Hỗ trợ trình biên dịch MSP430 IAR Assembler.+ Công cụ gỡ lỗi mạnh IAR C-SPY® debugger.

Sau khi cài đặt xong click vào đường link thì màn hình sẽ xuất hiện biểu tượng sau:

Page 68: Co ban ve msp430

Hình 29: Cửa sổ khởi động IAR Embedded Workbench IDE

Page 69: Co ban ve msp430

Click vào biểu tượng ta có màn hình soạn thảo như sau:

Hình 30: Màn hình của IAR Embedded Workbench IDE

Giới thiệu cửa sổ soạn thảo của chương trình:

Hình 31: Thanh công cụ soạn thảoIAR Embedded Workbench IDE

Hướng dẫn tạo New Project:Tắt cửa sổ Startup . Để tạo một Project trước tiên bạn phải đóng hết các

Workspace và Project có sẵn . Chọn File / close Workspake. Sau đó bạn vào Window / close All Editor Tabs .

Page 70: Co ban ve msp430

Hình 32: Đóng Workspace có sẵn

Hình 33: Đóng tất cả Editor TabsĐể tạo một Project ta chọn Project / Create New Project. Hộp thoại xuất

hiện:

Hình 34: Cửa sổ tạo project mới

Kiểm tra Tool chain chọn MSP430 sau đó lick OK. Một cửa sổ mới hiện ra bạn đặt tên File rồi Save để hoàn thành các bước tạo một Project mới. Bạn nên tạo sẵn một thư mục mới trong ổ đĩa cứng để lưu những Project của mình.

Page 71: Co ban ve msp430

Hình 35: Cửa sổ Save chương trình

Project sẽ xuất hiện trong vùng làm việc .

Hình 36: Cửa sổ vùng làm việcBạn phải Save vùng làm việc một lần nữa. Chọn File / Save Workspace, một

hộp thoại xuất hiện yêu cầu bạn chọn nơi lưu vùng làm việc. Bạn nên chọn Save vào cùng thư mục với Project đã tạo.

Hình 37: Hộp thoại New Workspake

Page 72: Co ban ve msp430

Bạn đã tạo một Workspace, bạn có thể tạo nhiều Project khác nhau trong cùng một vùng làm việc. Như vậy bạn đã tạo thành công một Project mới, bạn có thể bắt đầu lập trình trong vùng soạn thảo.

Hình 38: Cửa sổ soạn thảo

Thiết lập các thông số cho Project:Để thiết lập các thông số cho Project bạn Click Baitap1-Debug trên cửa sổ

Workspace sau đó vào Project / Options .Tùy chọn Target trong category General Options được hiển thị . Cửa sổ

Device cho chúng ta chọn loại chip cần lập trình , bạn hãy chọn MSP 430F2274.

Hình 39: Cài đặt các tùy chọn

Page 73: Co ban ve msp430

Chọn C/C++Compiler trong Category để hiển thị trang tùy chọn biên dịch, chọn ngôn ngữ lập trình C .

Hình 40: Setting compiler optionsChọn Debugger trong Category. Trong cửa sổ Driver chọn FET Debugger

để chọn tính năng gỡ lỗi và nạp xuống cho vi điều khiển sau đó click OK.

Hình 41: Debugger

Page 74: Co ban ve msp430

Biên dịch và kiểm tra:Sau khi đã soạn thảo chương trình bước tiếp theo là biên dịch và kiểm tra lỗi.

Để biên dịch chương trình bạn chọn Project / Compile, chương trình biên dịch thành công sẽ hiện lên cửa sổ như sau:

Hình 45: Biên dịch và kiểm tra thành côngĐể nạp chương trình cho vi điều khiển Bạn chọn Project / Debug, sau khi đã

nạp thành công bạn chọn Debug / Go. Cửa sổ này chỉ hiện ra khi bạn đã nạp thành công, bạn có thể tạm dừng hoặc thoát bằng tác lệnh Break và Stop Debugging.

Hình 46: Nạp chưong trình

Page 75: Co ban ve msp430

Thêm Project vào Workspace:Như đã giới thiệu ở trên bạn có thể tạo nhiều project trong cùng một

Workspace hoặc add các project đã có sẵn trong thư viện vào vùng làm việc của bạn. Bạn có thể sử dụng các ngôn ngữ lập trình khác nhau cho các project trong cùng một vùng làm việc, đây là một trong những tính năng ưu việt của IAR Embedded Workbench IDE giúp người lập trình so sánh và lựa chọn giải pháp lập trình tối ưu.

Để add files bạn Chọn Project-> Add Files, hộp thoại hiện ra yêu cầu bạn chọn file cần thêm vào, chọn file sau đó click OK để hoàn tất. Bạn có thể Add một hoặc nhiều files kết quả ta được một vùng làm việc với nhiều projet mới như sau:

Hình 47: Thêm Project vào Workspace

Hình 48: Thêm vào thành công

Page 76: Co ban ve msp430

Tập lệnh C sử dụng lập trình:Tập lệnh C được viết dựa trên help của phần mềm IAR Embedded

Wowkbench. Bạn có thể sử dụng tất cả các lệnh và hàm C cơ bản, ngoài ra IAR Embedded Wowkbench còn hỗ trợ một số hàm chức năng đặc biệt.Các kiểu dữ liệu cơ bản:

Khi lập trình bạn phải lưu ý tới các phép toán có thể tràn số, tính toán với số âm hoặc ép kiểu dữ liệu. Bạn có thể khai báo một biến cục bộ hoặc biến toàn cục. Biến toàn cục ảnh hưởng tới toàn bộ chương trình còn biến cục bộ chỉ có giá trị trong hàm hoặc khối lệnh mà bạn khai báo nó. Sau đây là các kiểu dữ liệu cơ bản.

Kiểu dữ liệu Kích thước(Byte)

char 1Unsigned char 1signed char 1int 2unsigned int 2signed int 2short int 2unsigned short int 2signed short int 2long int 4signed long int 4unsigned long int 4float 4double 8long double 10

Trong chương trình đôi khi ta còn gặp các từ khóa đặc biệt.const: là từ khóa khai báo hằng số, có nghĩa là giá trị của biến không thay đổi.volatile: khai báo trước tên biến là một loại biến không bị thay đổi bởi phần

mềm, bản thân biến giúp tối ưu hóa lại cơ cấu chương trình.shifts: dịch chuyển bit.

Page 77: Co ban ve msp430

Toán tử quan hệ và logic:Toán tử quan hệ dùng để kiểm tra mối quan hệ giữa hai biến hay giữa một

biến và một hằng.Toán tử quan hệ.

Toán tử Ý nghĩa

> Lớn hơn

>= Lớn hơn hoặc bằng

< Nhỏ hơn

<= Nhỏ hơn hoặc bằng

== Bằng

!= Không bằng

Toán tử logic

Toán tử Ý nghĩa

&& AND: Kết quả là True khi cả 2 điều kiện đều đúng

|| OR : Kết quả là True khi chỉ một trong hai điều kiện là đúng

! NOT: Tác động trên các giá trị riêng lẻ, chuyển đổi True thành False và ngược lại.

Toán tử xử lý bit: Toán tử chỉ được xử lý khi là các bit nhị phân

Toán tử Mô tả

AND( x & y)

Mỗi vị trí của bit trả về kết quả là 1 nếu bit của hai toán hạng là 1.

OR( x | y)

Mỗi vị trí của bit trả về kết quả là 1 nếu bit của một trong hai toán hạng là 1.

NOT( ~ x)

Ðảo ngược giá trị của toán hạng (1 thành 0 và ngược lại).

XOR( x ^ y)

Mỗi vị trí của bit chỉ trả về kết quả là 1 nếu bit của một trong hai toán hạng là 1 mà không không phải cả hai toán hạng cùng là 1.

>> Dịch phải bit

<< Dịch trái bit.

Page 78: Co ban ve msp430

Tập lệnh ngôn ngữ C:Để viết chương trình cho vi điều khiển yêu cầu người lập trình cần có kiến

thức lập trình cơ bản, nhóm thực hiện để tài chỉ xin liệt kê cấu trúc các lệnh thường dùng để thuận tiện cho người học:

• if (biểu thức luận lý)khối lệnh;

• if (biểu thức luận lý) khối lệnh 1; else khối lệnh 2;• if (biểu thức luận lý 1) khối lệnh 1;

else if (biểu thức luận lý 2)khối lệnh 2;

…………. else khối lệnh n;• switch (biểu thức)

case giá trị 1 : lệnh 1; break; case giá trị 2 : lệnh 2; break; case giá trị n : lệnh n; break;

• switch (biểu thức)case giá trị 1 : lệnh 1; break; case giá trị 2 : lệnh 2; break; case giá trị n : lệnh n; default : lệnh; [ break;]

• for (biểu thức 1; biểu thức 2; biểu thức 3)khối lệnh;

• while (biểu thức)khối lệnh;

• do khối lệnh;while (biểu thức);

Chỉ thị tiền xử lý:a. #include

Cú pháp: #include <filename> hoặc # include “filename”. Tên file có thể (.h) hoặc (.c).

Ví dụ: #include "msp430x22x4.h"Ta đã khai báo thư viện cho vi điều khiển MSP430x22x4.

Page 79: Co ban ve msp430

b. # defineDùng để định nghĩa biến hoặc giá trị trong header file.Ví dụ: Từ tần số tham chiếu 32KHz, ta có thể thiết lập các giá trị tần số

khác nhau (ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO).#define DELTA_1MHZ 244 // 244 x 4096Hz = 999.4Hz#define DELTA_8MHZ 1953 // 1953 x 4096Hz = 7.99MHz#define DELTA_12MHZ 2930 // 2930 x 4096Hz = 12.00MHz#define DELTA_16MHZ 3906 // 3906 x 4096Hz = 15.99MHzSử dụng các BIT đã được định nghĩa trong header file:#define LED1 BIT3#define LED2 BIT4

c. #ifdef ,#en dif: Bổ xung các dòng code cho chương trình kiểm tra.

d. #pragma basic_template_matching

Sử dụng trước một hàm mẫu để khai báo sử dụng các thuộc tính đầy đủ của bộ nhớ MSP430 IAR C/C++ Compiler Reference Guide.

Ví dụ: # pragma basic_template_matching template<typename T> void fun(T *); fun((int __data16 *) 0); /* Template parameter T becomes int __data16 */

e. # warning message Sử dụng chỉ thị tiền xử lý này để nhận được các tin nhắn cảnh báo lỗi.

2.2.3.5 Các hàm xử lý số:Các hàm xử lý số được giới thiệu trong help, người học có thể tìm hiểu để

biết chi tiết, sau đây là một số hàm cơ bản:• abs() : Hàm lấy giá trị tuyệt đối.• asin(), acos(), atan() : là các hàm arcsin, arccos, arctan.• sin(), cos(), tan() : các hàm lượng giác cơ bản.• pow(): hàm tính lũy thừa.• sqrt(): hàm tính căn bậc 2.• exp(): hàm mũ ex.• rand(): lấy giá trị ngẫu nhiên.

Các hàm hỗ trợ đặc biệt:1) __cc_version1

Ví dụ: __cc_version1 int func(int arg1, double arg2)Chức năng: Gọi chương trình con trong C.

2) __set_R4_registerVí dụ: void __set_R4_register(unsigned short);Chức năng: Ghi giá trị đặc biệt vào thanh ghi R4, chức năng này chỉ sử dụng

khi R4 bị khóa.3) __set_SP_register

Ví dụ: void __set_SP_register(unsigned short);Chức năng: Ghi một giá trị đặc biệt vào con trỏ ngăn xếp SP.

4) __swap_bytesVí dụ: unsigned short __swap_bytes(unsigned short);

Page 80: Co ban ve msp430

Chức năng: Trèn vào một giá trị và đảo ngược giá trị phần trên và phần dưới:

__swap_bytes(0x1234) returns 0x3412

5) __set_interrupt_stateCú pháp: void __set_interrupt_state(__istate_t);Chức năng: Phục hồi trạng thái ngắt bằng cách thiết lập giá trị trả về bằng

hàm __get_interrupt_state.6) __interrupt

Ví dụ: #pragma vector=0x14__interrupt void my_interrupt_handler(void);Là hàm dùng chỉ thị tới một hoặc nhiều ngắt. Khai báo bằng chỉ thị tiền xử lý

# pragma vetor= (địa chỉ của các véc tơ ngắt).7) __no_operation

Cú pháp: void __no_operation(void);Chức năng: Trèn một lệnh NOP.

8) __low_power_mode_nCú pháp: void __low_power_mode_n(void);Chức năng: Sử dụng chế độ nguồn thấp của MSP430, n có giá trị 0-4.

9) __get_R4_registerCú pháp: unsigned short __get_R4_register(void);Chức năng: Trả về giá trị của thanh ghi R4.

10) __get_SP_registerCú pháp: unsigned short __get_SP_register(void);Chức năng: Trả về giá trị của con trỏ ngăn xếp SP.

11) __get_SR_registerCú pháp: unsigned short __get_SR_register(void);Chức năng: Trả về giá trị của thanh ghi trạng thái xử lý SR

12) __get_interrupt_stateCú pháp: __istate_t __get_interrupt_state(void);Chức năng: Trở về trạng thái ngắt toàn cụcVí dụ: __istate_t s = __get_interrupt_state(); __disable_interrupt(); /* Do something */ __set_interrupt_state(s);

13) __delay_cyclesCú pháp: void __delay_cycles(unsigned long cycles);Chức năng: Trèn một chương trình tạo trễ với thời gian được chỉ định.

14) __enable_interruptCú pháp: void __enable_interrupt(void);Chức năng: Cho phép ngắt bằng cách trèn vào lệnh EI.

14) __disable_interruptCú pháp: void __disable_interrupt(void);Chức năng: Cấm ngắt bằng cách trèn vào lệnh DI.

15) __bis_SR_registerCú pháp: void __bis_SR_register(unsigned short);Chức năng: Set các bit trong thanh ghi trạng thái.

Page 81: Co ban ve msp430

16) __bis_SR_register_on_exitCú pháp: void __bis_SR_register_on_exit(unsigned short);Chức năng: Set các bit trong thanh ghi trạng thái xử lý khi trỏ về từ chương

trình phục vụ ngắt.17) __bic_SR_register

Cú pháp: void __bic_SR_register(unsigned short);Chức năng: Xóa bit trong thanh ghi trạng thái xử lý

18) __bic_SR_register_on_exitCú pháp: void __bic_SR_register_on_exit(unsigned short);Chức năng: Xóa các bít thanh ghi trạng thái xử lý khi trở về từ một ngắt.

Page 82: Co ban ve msp430

CHƯƠNG 3

THIẾT KẾ PHẦN CỨNG MỞ RỘNG PORT VÀ CÁC BÀI THỰC

TẬP LẬP TRÌNH

Page 83: Co ban ve msp430

3.1 Vấn đề đặt ra:Như đuợc giới thiệu ở trên bộ thí nghiệm eZ430-RF2500 cho ta 18 chân bên

ngoài để sử dụng điều khiển những thiết bị khác . Do kết cấu của quy cách đóng gói ta không sử dụng được 4 chân (chân số 1-4), một chân mass (chân số 12), hai chân đuơc sử dụng để điều khiển tụ thạch anh cho ch IC CC2500 (chân số 13 và 14). Cuối cùng ta còn lại 11 chân, với 11 chân ta chỉ có thể điều khiển những thiết bị đơn giản. Một yêu cầu được đề ra là làm sao để có thể điều khiển những thiết bị cần nhiều chân điều khiển (Một ví dụ đơn giản là điều khiển 32 led đơn sáng). Từ vấn đề trên nhóm đã quyết định sử dụng IC 74HC595 để mở rộng Port.

Và trong qúa trình làm thực nghiệm 1 vấn đề nữa cũng đã nảy sinh . Vì vi điều khiển MSP430 là loại tiết kiệm năng lượng nên mức logic 1 của nó chỉ ở 3.6V (Đó là lý thuyết) còn trong thực nghiệm khi đo chỉ được khoảng 3.2V . Gây khó khăn trong việc xử lý cũng như điều khiển các thiết bị khác, vì với 3.2V các loại thiết bị khác không hiểu được đó là mức logic 1 hay 0. Chính vì lý do đó nhóm đã sử dụng thêm IC 2803, một IC đệm đảo điện áp.

Với 2 vấn đề trên nhóm đã sử dụng 2 IC 74HC595 và 2803 để giải quyết,và chúng ta sẽ nói qua về 2 IC này.

3.2 Các IC sử dụng trong việc mở rộng Port:3.2.1 IC 74HC595:3.2.1.1 Giới thiệu:

IC 74HC595 có các đặc điểm sau:+ IC có 16 chân.+ 8 bit nối tiếp ở ngõ vào.+ 8 bít nối tiếp hoặc song song ở ngõ ra.+ Chốt thanh ghi dịch với 3 trạng thái ở ngõ ra.+ Tần số nhịp xung clock là 100MHz.

3.2.1.2 Sơ đồ chân:

Hình 49: Sơ đồ chân IC 74HC595

Page 84: Co ban ve msp430

Chức năng từng chân:+ Chân 15: Ngõ ra dữ liệu song song bit 0.+ Chân 1 - 7: Ngõ ra dữ liệu song song bit 1 – 7.+ Chân 8: Nối Mass.+ Chân 9: Ngõ ra dữ liệu nối tiếp.+ Chân 10: Reset (Hoạt động mức thấp).+ Chân 11: Nhận xung clock.+ Chân 12: Chốt dữ liệu ngõ ra.+ Chân 13: Cho phép ngõ ra (Hoạt động mức thấp).+ Chân 14: Ngõ vào dữ liệu nối tiếp.+ Chân 16: Cấp nguồn (5V).

3.2.1.3 Cấu tạo và nguyên tắc hoạt động:3.2.1.3.1 Cấu tạo:

Hình 50: Cấu tạo IC 74HC5959

Bên trong gồm 8 con FlipFlop D mắc nối tiếp . Từ tầng 0 - 7 cho ngõ ra từ Q0 - Q7 .

Page 85: Co ban ve msp430

3.2.1.3.2 Nguyên tắc hoạt động:Bảng sự thật:

Bảng 16: Bảng sự thật IC 74HC595

Trong đó:+ H: Mức điện áp cao.+ L: Mức điện áp thấp.+ ↑: Chuyển đổi điện áp từ thấp lên cao.+ ↓: Chuyển đổi điện áp từ cao xuống thấp.+ n.c.: Không thay đổi.+X : Không quan tâm.

Page 86: Co ban ve msp430

Dạng sóng điều khiển:

Hình 51: Dạng sóng điều khiển IC 74HC595Nguyên lý hoạt động:

Page 87: Co ban ve msp430

Hình 52: Nguyên lý hoạt độngĐể IC hoạt động ta phải nối chân số 10 lên nguồn 5V (không tác động Reset)

và nối chân số 13 xuống Mass ( cho phép ngõ ra ). Với dữ liệu 8 bit dữ liệu được đưa vào chân 14 của IC, cứ sau mỗi xung clock được đưa vào chân số 11 của IC thì bit thứ 1 của dữ liệu đầu vào được đưa ra ở ngõ ra. Vậy sau 8 xung clock cung cấp cho chân số 11 thì 8 bit dữ liệu đầu vào sẽ được đưa ra ở ngõ ra từ Q0 – Q7. Khi 8 bit dữ liệu được đưa ra ở ngõ ra như vậy, chúng ta cần 1 xung clock cung cấp cho chân số 12 của IC để chốt dữ liệu đầu ra (Dù có thêm xung clock cung cấp cho chân số 11 thì đầu ra vẫn không thay đổi). Lúc này ta sẽ có 8 bit dữ liệu đầu ra từ Q0 - Q7 trùng khớp với 8 bit dữ liệu được đưa ở đầu vào. Muốn dịch bao nhiêu bit thì ta cần bấy nhiêu xung clock rồi đưa 1 xung chốt để đẩy dữ liệu ra ngoài.

Ở đây nếu muốn dịch số bit lớn hơn 8 thì ta cần nối tiếp thêm IC 74HC595. Nếu là 16 bit thì cần 2 IC, 24 bit thì 3 IC, 32 bit thì 4 IC …. Ta dùng chân số 9 của con thứ nhất nối tiếp vào chân dữ liệu đầu vào của con thứ 2 (chân số 14) và dùng chân số 9 của con thứ 2 nối tiếp vào chân dữ liệu đầu vào của con thứ 3, cứ thế tiếp tục. Muốn dịch bao nhiêu bit thì cần bấy nhiêu xung clock và 1 xung chốt để đẩy dữ liệu ra ngoài. Ở đồ án này, nhóm chỉ cần dịch 16 bit dùng 2 IC 74HC595 nối tiếp. Dùng 3 tầng như thế để có dịch được 48 bit.

3.2.2 IC 2803:3.2.2.1 Giới thiệu:

IC 74HC595 có các đặc điểm sau:+ IC có 18 chân.+ Vi mạch gồm 8 cổng đệm đảo, đầu ra cực thu hở.+ Dòng ngõ ra lên tới 500mA.+ Điện áp ngõ ra lên tới 95V.

3.2.2.2 Sơ đồ chân:

Hình 53: Sơ đồ chân IC 2803

Page 88: Co ban ve msp430

Chức năng từng chân:+ Chân 1 - 8: Điện áp ngõ vào.+ Chân 9: Nối Mass.+ Chân 10: Nối nguồn chuyển đổi (5V,12V).+Chân 11 – 18: Điện áp đảo ngõ ra.

3.2.2.3 Nguyên lý hoạt động:

Hình 54: Nguyên lý hoạt động của IC 2803

Vì mạch chỉ cần dùng điện áp 5V, nên ở đây nối chân 10 của IC2803 lên điện áp 5V (muốn dùng điện áp bao nhiêu thì nối chân số 10 với điện áp đó). Khi có điện áp ngõ vào là 0V IC sẽ đệm lên thành 5V và khi điện áp ngõ vào nhỏ hơn 5V IC sẽ đệm xuống thành 0V. Như thế sẽ cho ra 2 mức logic 1 và 0 để chúng ta có thể sử dụng trong các mạch điều khiển khác.

Page 89: Co ban ve msp430

3.3 Phưong pháp mở rộng Port:3.3.1 Sơ đồ nguyên lý:

Page 90: Co ban ve msp430

Hình 55: Sơ đồ nguyên lý mở rộng Port3.3.2 Nguyên lý hoạt động:

Ở đây ta dùng 3 tầng thanh ghi dịch, mỗi tầng sử dụng dịch 16 bit, vậy tổng cộng ta có thể sử dụng 48 bit ghi dịch. Dùng các chân vi điều khiển MSP430F2274 qua IC 2803 để điều khiển các thanh ghi dịch. Chân số 9 của IC 74HC595 thứ 1 nối với chân số 14 của IC 74HC595 thứ 2 tạo thành tầng thứ nhất 16 bit. Chân số 9 của IC 74HC595 thứ 3 nối với chân số 14 của IC 74HC595 thứ 4 tạo thành tầng thứ hai 16 bit. Chân số 9 của IC 74HC595 thứ 5 nối với chân số 14 của IC 74HC595 thứ 6 tạo thành tầng thứ ba 16 bit.

3.3.3 Sơ đồ mạch in:

Page 91: Co ban ve msp430

Hình 56: Sơ đồ mạch in mở rộng Port3.3.4 Mạch hoàn chỉnh:

Hình 57: Mạch hoàn chỉnh

Page 92: Co ban ve msp430

3.3.5 Giới thiệu bộ Kit thí nghiệm:Bộ Kit thí nghiệm bao gồm:

+ Nguồn cung cấp 12V.+ 32 Led đơn có chung Vcc.+ 8 Led 7 đoạn ANot chung, theo kiểu quét Led. Điều khiển với mức

logic 0.+ 1 LCD 16x2, với 8 đường dữ liệu, 3 đường điều khiển.+ 1 Led ma trận 8x8, với 2x8 đường điều khiển cột ( màu xanh hoặc đỏ)

và 8 đường điều khiển hàng. Điều khiển với mức logic 1.+ 1 ma trận phím 4x4 với 8 đường điều khiển.

Hình 58: Kit thí nghiệm

Page 93: Co ban ve msp430

3.4 Các bài tập ứng dụng:3.4.1 Quy ước chung:

+ Chân 7 của eZ430-RF2500T là chân xung clock của 3 tầng ghi dịch.+ Chân 12 của eZ430-RF2500T là chân Mass chung.+ Chân 18 của eZ430-RF2500T là chân dữ liệu vào của tầng thứ nhất thanh

ghi dịch.+ Chân 16 của eZ430-RF2500T là chân điều khiển xung chốt của tầng thứ

nhất thanh ghi dịch.+ Chân 15 của eZ430-RF2500T là chân dữ liệu vào của tầng thứ hai thanh

ghi dịch.+ Chân 17 của eZ430-RF2500T là chân điều khiển xung chốt của tầng thứ hai

thanh ghi dịch.+ Chân 9 của eZ430-RF2500T là chân dữ liệu vào của tầng thứ ba thanh ghi

dịch.+ Chân 11 của eZ430-RF2500T là chân điều khiển xung chốt của tầng thứ ba

thanh ghi dịch.+ Chân 5, 6, 8, 10 của của eZ430-RF2500T được nối qua IC 2803 dùng để

điều khiển tuỳ ý.+ Chân 13,14 không sử dụng được.

3.4.2 Các lưu ý trước khi sử dụng:3.4.2.1 Cách truy xuất bit trong C:

Như đã nghiêm cứu ở trên, vi điểu khiển MSP430 thường truy xuất Byte, muốn truy xuất bit ta phải định nghĩa lại vùng nhớ của nó.

Một cách truy xuất bit được sử dụng là:

union reg // Khai báo 1 byte với 8 bit struct bit // Khai báo bit trong 1 byte unsigned char b0:1; // Khai báo bit thứ 1 unsigned char b1:1; // Khai báo bit thứ 2 unsigned char b2:1; // Khai báo bit thứ 3 unsigned char b3:1; // Khai báo bit thứ 4 unsigned char b4:1; // Khai báo bit thứ 5 unsigned char b5:1; // Khai báo bit thứ 6 unsigned char b6:1; // Khai báo bit thứ 7 unsigned char b7:1; // Khai báo bit thứ 8 _BIT; // Tên của bit trong byte unsigned char _BYTE; // Tên của byte;

Ví dụ: Để khai báo chân xuất / nhập của Port 2 là:union reg* _P2_DIRECT = (union reg*)0x2A ; // Định nghĩa vùng

nhớ 0x2A là _P2_DIRECT, dùng điều khiển Port 2 là xuất hay nhập.union reg* _P2_OUT = (union reg*)0x29 ; // Định nghĩa vùng

nhớ 0x29 là _P2_OUT, dùng điều khiển các bit xuất của Port 2. union reg* _P2_IN = (union reg*)0x28 ; // Định nghĩa vùng

nhớ 0x28 là _P2_IN, dùng điều khiển các bit nhập của Port 2.

Page 94: Co ban ve msp430

3.4.2.2 Cách mở rộng Port:Ví dụ: Đưa dữ liệu 0xA4BC ra tầng thứ hai của thanh ghi dịch:

Lưu đồ:

Kết nối phần cứng:+ Nối chân 7 của eZ430-RF2500T làm chân xung clock tầng ghi dịch.+ Nối chân 15 của eZ430-RF2500T làm chân dữ liệu vào của tầng thứ hai

thanh ghi dịch.+ Nối chân 17 của eZ430-RF2500T làm chân điều khiển xung chốt của tầng

thứ hai thanh ghi dịch.

Page 95: Co ban ve msp430

+ Nối chân 12 của eZ430-RF2500T làm chân Mass chung.Chương trình:

void MoRongP2(unsigned int q); // Khai báo hàm mở rộng tầng thứ haiunion reg // Khai báo 1 byte 8 bit 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* _P3_DIRECT = (union reg*)0x1A ; // Định nghĩa vùng nhớ 0x1Aunion reg* _P3_OUT = (union reg*)0x19 ; // Định nghĩa vùng nhớ 0x19union reg* _P2_DIRECT = (union reg*)0x2A ; // Định nghĩa vùng nhớ 0x2Aunion reg* _P2_OUT = (union reg*)0x29 ; // Định nghĩa vùng nhớ 0x29

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; // Dừng ngắt _P3_DIRECT->_BYTE = 0xff; // Định nghĩa Port 3 là xuất _P2_DIRECT->_BYTE = 0xff; // Định nghĩa Port 2 là xuất volatile unsigned int a; // Biến khai báo trong RAM a=0xA4BC; // Gán a = A4BC MoRongP2(a); // Mở rộng tầng 2 với 16 bit của a void MoRongP2(unsigned int e) // Hàm mở rộng tầng thứ 2 volatile unsigned int f,g,h; // Biến khai báo trong RAM f=0x8000; // Gán f=8000 g=16; // Cho g=16 while(g>0) // Trong khi g>0 thì thực hiện h = e&f; // h = e and f if ( h == f) // Nếu h=f _P3_OUT->_BIT.b2=1; // bit 2 port 3 là mức 1 Else // ngược lại h không =f

Page 96: Co ban ve msp430

_P3_OUT->_BIT.b2=0; // bit 2 port 3 mức 0 _P2_OUT->_BIT.b4=0; // bit 4 port 2 mức 1(xung clock) _P2_OUT->_BIT.b4=1; // bit 4 port 2 mức 0 f=f>>1; // Xoay phải f g--; // Giảm g đi 1 _P3_OUT->_BIT.b0=0; // bit 04 port 3 mức 1(xung chốt) _P3_OUT->_BIT.b0=1; // bit 04 port 3 mức 1

3.4.3 Các bài tập về Led đơn:Bài 1: Điều khiển 16 led chớp tắt.

Lưu đồ:

Kết nối phần cứng:

Page 97: Co ban ve msp430

+ Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn.Chương trình:

#include "msp430x22x4.h" // Khai báo chipvoid Delay(unsigned int Value); // Khai báo hàm Delayvoid MoRongP2(unsigned int e); // Khai báo hàm mở rộng tầng 2union reg // Khai báo 1 byte 8 bit 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* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; // Dừng ngắt _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; volatile unsigned int n; // Bien khai báo trong RAM for(;;) // Vòng lặp vô định n=0xffff; // 16 Led sáng MoRongP2(n); // Gọi hàm mở rộng tầng 2 với giá trị n Delay(10000); // Gọi hàm delay với giá trị 10000 n=0x0000; // 16 Led tắt MoRongP2(n); Delay(10000); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0)

Page 98: Co ban ve msp430

h = e&f; if ( h == f) _P3_OUT->_BIT.b2=1; else _P3_OUT->_BIT.b2=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void Delay(unsigned int Value) // Hàm delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 99: Co ban ve msp430

Bài 2: Điều khiển điểm sáng chạy 16 Led đơn:

Lưu đồ:

Kết nối phần cứng:

Page 100: Co ban ve msp430

+ Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn.Chương trình:

#include "msp430x22x4.h" // Khai báo chipvoid Delay(unsigned int Value); // Khai báo hàm Delayvoid MoRongP2(unsigned int e); // Khai báo hàm mở rộng tầng 2union reg // Khai báo 1 byte 8 bit 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* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; // Dừng ngắt _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; volatile unsigned int n,p; // Bien khai báo trong

RAM for(;;) // Vòng lặp vô định n=0x0001; // Gán n = 0001; p=16; // Cho p =16; while(p>0) // Trong khi p>0 thì MoRongP2(n); // Gọi hàm mở rộng tầng 2 với giá trị n Delay(10000); // Gọi hàm Delay với giá trị 10000

n=n<<1; // Xoay trái n p--; // Giảm p đi 1

void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h;

Page 101: Co ban ve msp430

f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=1; else _P3_OUT->_BIT.b2=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void Delay(unsigned int Value) // Hàm delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 102: Co ban ve msp430

Bài 3: Điều khiển điểm sáng chạy 32 Led đơn:

Lưu đồ:

Kết nối phần cứng:+ Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn.

Page 103: Co ban ve msp430

+ Nối 16 bit của tầng mở rộng thứ 3 với 16 Led đơn còn lại.Chương trình:

#include "msp430x22x4.h" // Khai báo chipvoid Delay(unsigned int Value); // Khai báo hàm Delayvoid MoRongP2(unsigned int e); // Khai báo hàm mở rộng tầng 2void MoRongP3(unsigned int i); // Khai báo hàm mở rộng tầng 3union reg // Khai báo 1 byte 8 bit 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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; // Dừng ngắt _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; volatile unsigned int n,m,q,p; // Bien khai báo trong

RAM for(;;) // Vòng lặp vô định n=0x0001; p=16; while(p>0) MoRongP2(n); Delay(10000);

n=n<<1; p--; MoRongP2(n); q=0x0001;

Page 104: Co ban ve msp430

m=17; while(m>0) MoRongP3(n); Delay(10000);

q=q<<1; m--;

MoRongP3(q);

void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=1; else _P3_OUT->_BIT.b2=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=1; else

Page 105: Co ban ve msp430

_P4_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1; void Delay(unsigned int Value) // Hàm delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 106: Co ban ve msp430

Bài 4: Điều khiển 32 Led đơn sáng dần:

Lưu đồ:

Kết nối phần cứng:+ Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn.

Page 107: Co ban ve msp430

+ Nối 16 bit của tầng mở rộng thứ 3 với 16 Led đơn còn lại.Chương trình:

#include "msp430x22x4.h" void MoRongP2(unsigned int e);void MoRongP3(unsigned int i);void Delay(unsigned int Value);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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; volatile unsigned int o,n,q,m,p,t,s; for(;;) n=0x0000; m=0x0001; q=16; while (q>0) n=n|m; MoRongP2(n)

Delay(10000);; m=m<<1; q--;

Page 108: Co ban ve msp430

MoRongP2(n); p=0x0000; t=0x0001; s=16; while (s>0) p=p|t; MoRongP3(p); Delay(10000); t=t<<1; s--; MoRongP3(0x0000); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=1; else _P3_OUT->_BIT.b2=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) l = i&j; if ( l == j)

Page 109: Co ban ve msp430

_P4_OUT->_BIT.b4=1; else _P4_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1; void Delay(unsigned int Value) // Hàm DeLay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 110: Co ban ve msp430

3.4.4 Các bài tập về Led 7 đoạn:Bài 1: Đếm từ 0 – 999 hiển thị Led 7 đoạn:

Lưu đồ:

Kết nối phần cứng:+ Kết nối 8 bit đầu của kênh mở rộng thứ 2 với 7 đoạn và dấu chấm thập

phân của Led 7 đoạn.

Page 111: Co ban ve msp430

+ Kết nối 8 bit đầu của kênh mở rộng thứ 3 với 8 transistor điều khiển quét Led.

Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);void MoRongP3(volatile unsigned int i);void Hex_BCD(); // Khai báo hàm chuyển đổi Hex - BCDvoid HienThi(); // Khai báo hàm HienThiunion 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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;volatile unsigned char baydoan[10]=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; // Khai báo mã Led 7 đoạnvolatile unsigned int nghin,tram,chuc,dvi,bien,n;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; for(;;) bien=0; for(bien=0;bien<1000;bien++) // Cho bien chạy từ 0 - 1000 n=bien;

Page 112: Co ban ve msp430

Hex_BCD(); HienThi(); void Hex_BCD() tram=n/100; // Lấy số hàng trăm n=n%100; chuc=n/10; // Lấy số hàng chục n=n%10; dvi=n%10; // Lấy số hàng đơn vị void HienThi() // Hàm HienThi volatile unsigned int v; v=0; while(v<2) // Thời gian đáp ứng MoRongP3(0xFF); // Chống lem MoRongP2(baydoan[dvi]); // Lấy mã 7 đoạn hàng đơn vị MoRongP3(0xFE); // Cho phép Led hàng đơn vị sáng

Delay(750); // Thời gian quét Led MoRongP3(0xFF); MoRongP2(baydoan[chuc]); // Lấy mã 7 đoạn hàng chục MoRongP3(0xFD); // Cho phép Led hàng chục sáng Delay(750); MoRongP3(0xFF); MoRongP2(baydoan[tram]); // Lấy mã 7 đoạn hàng trăm MoRongP3(0xFB); // Cho phép Led hàng trăm sáng Delay(750); MoRongP2(0xFF); v++; void Delay(unsigned int Value) // Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x80; g=8; while(g>0)

Page 113: Co ban ve msp430

h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x80; k=8; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else _P4_OUT->_BIT.b4=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1;

Page 114: Co ban ve msp430

Bài 2: Đồng hồ số hiển thị Led 7 đoạn:

Lưu đồ:

Kết nối phần cứng:+ Kết nối 8 bit đầu của kênh mở rộng thứ 2 với 7 đoạn và dấu chấm thập

phân của Led 7 đoạn.

Page 115: Co ban ve msp430

+ Kết nối 8 bit đầu của kênh mở rộng thứ 3 với 8 transistor điều khiển quét Led.

Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);void MoRongP3(volatile unsigned int i);void Hex_BCD();void HienThi();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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;volatile unsigned char

baydoan[10]=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;volatile unsigned int CHGio,DVGio,CHPhut,DVPhut,CHGiay,DVGiay;volatile unsigned long bien;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; for(;;) CHGio=0;DVGio=0;CHPhut=0;DVPhut=0;CHGiay=0;DVGiay=0; for(bien=0;bien<86400;bien++) // cho bien chạy từ 0 - 86400 if(DVGiay==10) // Nếu đơn vị giây bằng 10

Page 116: Co ban ve msp430

DVGiay=0; // Đơn vị giây =0 CHGiay=CHGiay+1; // Chục giây cộng thêm 1 if(CHGiay==6) CHGiay=0; DVPhut=DVPhut+1; if(DVPhut==10) DVPhut=0; CHPhut=CHPhut+1; if(CHPhut==6) CHPhut=0; DVGio=DVGio+1; if(DVGio==10) DVGio=0; CHGio=CHGio+1; if((CHGio==2) && (DVGio==4)) CHGio=0; DVGio=0; HienThi(); DVGiay++; void HienThi() // Hàm hiển thị volatile unsigned int v; v=0; while(v<1) // Thời gian đáp ứng MoRongP3(0xFF); // Chống lem MoRongP2(baydoan[DVGiay]); // Lấy mã 7 đoạn đơn vị giây MoRongP3(0xFE); // Cho phép đơn vị giây sáng Delay(50); // Thời gian quét Led MoRongP3(0xFF); MoRongP2(baydoan[CHGiay]); // Lấy mã 7 đoạn chục giây MoRongP3(0xFD); // Cho phép chục giây sáng Delay(50); MoRongP3(0xFF);

Page 117: Co ban ve msp430

MoRongP2(0xBF); // Sáng gạch nối MoRongP3(0xFB); Delay(50); MoRongP3(0xFF); MoRongP2(baydoan[DVPhut]); // Lấy mã 7 đoạn đơn vị phút MoRongP3(0xF7); // Cho phép đơn vị phút sáng Delay(50); MoRongP3(0xFF); MoRongP2(baydoan[CHPhut]); // Lấy mã 7 đoạn chục phút MoRongP3(0xEF); // Cho phép chục phút sáng Delay(50); MoRongP3(0xFF); MoRongP2(0xBF); // Sáng gạch nối MoRongP3(0xDF); Delay(50); MoRongP3(0xFF); MoRongP2(baydoan[DVGio]); // Lấy mã 7 đoạn đơn vị giờ MoRongP3(0xBF); // Cho phép đơn vị giờ sáng Delay(50); MoRongP3(0xFF); MoRongP2(baydoan[CHGio]); // Lấy mã 7 đoạn chục giờ MoRongP3(0x7F); // Cho phép chục giờ sáng Delay(50); MoRongP3(0xFF); v++; void Delay(unsigned int Value) // Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x80; g=8; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1;

Page 118: Co ban ve msp430

_P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x80; k=8; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else _P4_OUT->_BIT.b4=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1;

Page 119: Co ban ve msp430

3.4.5 Các bài tập về LCD:

Bài 1: Hiển thị chữ “Thí nghiệm VDK MSP 430” trên 2 dòng bằng cách liệt kê.

Lưu đồ:

Kết nối phần cứng:+ Nối chân 10 eZ430-RF2500T điều khiển chân E của LCD.+ Nối chân 8 của eZ430-RF2500T điều khiển chân RW của LCD.

Page 120: Co ban ve msp430

+ Nối chân 6 của eZ430-RF2500T điều khiển chân RS của LCD.+ Kết nối 8 bit sau của tầng mở rộng thứ nhất với 8 đường dữ liệu LCD.Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP1(volatile unsigned int a);void DKLCD(); // Khai báo hàm điều khiển LCDvoid DLLCD(); // Khai báo hàm ghi dữ liệu LCDunion 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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; MoRongP1(0x00); Delay(500); MoRongP1(0x01); // Lệnh xoá màn hình DKLCD(); MoRongP1(0x38); // Cho phép hiện ở 2 dòng DKLCD(); MoRongP1(0x0C); // Tắt con trỏ DKLCD(); MoRongP1(0x83); // Hiện chữ “Thi Nghiem” dòng 1 cột 3 DKLCD(); MoRongP1('T'); DLLCD();

Page 121: Co ban ve msp430

MoRongP1('h'); DLLCD(); MoRongP1('i'); DLLCD(); MoRongP1(' '); DLLCD(); MoRongP1('N'); DLLCD(); MoRongP1('g'); DLLCD(); MoRongP1('h'); DLLCD(); MoRongP1('i'); DLLCD(); MoRongP1('e'); DLLCD(); MoRongP1('m'); DLLCD(); MoRongP1(0xC2); // Hiện chữ “VDK MSP430” dòng 2 cột 2 DKLCD(); MoRongP1('V'); DLLCD(); MoRongP1('D'); DLLCD(); MoRongP1('K'); DLLCD(); MoRongP1(' '); DLLCD(); MoRongP1('M'); DLLCD(); MoRongP1('S'); DLLCD(); MoRongP1('P'); DLLCD(); MoRongP1('4'); DLLCD(); MoRongP1('3'); DLLCD(); MoRongP1('0'); DLLCD(); void DKLCD() // Hàm điều khiển LCD _P2_OUT->_BIT.b3=1; // _P4_OUT->_BIT.b3=1; _P4_OUT->_BIT.b5=0; Delay(50); _P4_OUT->_BIT.b5=1;

Page 122: Co ban ve msp430

Delay(5); void DLLCD() // Hàm ghi dữ liệu LCD _P2_OUT->_BIT.b3=0; _P4_OUT->_BIT.b3=1; _P4_OUT->_BIT.b5=0; Delay(50); _P4_OUT->_BIT.b5=1; Delay(5); void MoRongP1(unsigned int a) // Hàm mở rộng tầng thứ 1 volatile unsigned int b,c,d; b=0x8000; c=16; while(c>0) d = a&b; if ( d == b) _P3_OUT->_BIT.b1=0; else _P3_OUT->_BIT.b1=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; b=b>>1; c--; _P3_OUT->_BIT.b3=0; _P3_OUT->_BIT.b3=1; void Delay(unsigned int Value) // Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 123: Co ban ve msp430

Bài 2: Hiển thị chữ “MSP 430 SPKT TPHCM” trên 2 dòng bằng cách dùng mảng:

Lưu đồ:

Kết nối phần cứng:+ Nối chân 10 eZ430-RF2500T điều khiển chân E của LCD.+ Nối chân 8 của eZ430-RF2500T điều khiển chân RW của LCD.

Page 124: Co ban ve msp430

+ Nối chân 6 của eZ430-RF2500T điều khiển chân RS của LCD.+ Kết nối 8 bit sau của tầng mở rộng thứ nhất với 8 đường dữ liệu LCD.Chương trình:

#include "msp430x22x4.hvoid Delay(unsigned int Value);void MoRongP1(volatile unsigned int a);void DKLCD(); // Khai báo hàm điều khiển LCDvoid DLLCD(); // Khai báo hàm ghi dữ liệu LCDunion 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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;volatile unsigned char ChuLCD1[]='M','C','U',' ','4','3','0'; // Mảng chữ

dòng 1volatile unsigned char ChuLCD2[]='S','P','K','T',' ','T','P','H','C','M'; //

Mảng chữ dòng 2volatile unsigned int n,m;

int main(void) // Chưong trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; MoRongP1(0x00); Delay(500); MoRongP1(0x01); // Lệnh xoá màn hình DKLCD(); MoRongP1(0x38); // Cho phép hiện ở 2 dòng DKLCD(); MoRongP1(0x0C); // Tắt con trỏ

Page 125: Co ban ve msp430

DKLCD(); MoRongP1(0x84); // Hiện “MCU 430” dòng 1 cột 4 DKLCD(); for(n=0;n<7;n++) MoRongP1(ChuLCD1[n]); DLLCD(); MoRongP1(0xC1); // Hiện “MCU 430” dòng 2 cột 1 DKLCD(); Delay(250); for(m=0;m<10;m++) MoRongP1(ChuLCD2[m]); DLLCD(); void DKLCD() // Hàm điều khiển LCD _P2_OUT->_BIT.b3=1; _P4_OUT->_BIT.b3=1; _P4_OUT->_BIT.b5=0; Delay(50); _P4_OUT->_BIT.b5=1; Delay(5); void DLLCD() // Hàm ghi dữ liệu LCD _P2_OUT->_BIT.b3=0; _P4_OUT->_BIT.b3=1; _P4_OUT->_BIT.b5=0; Delay(50); _P4_OUT->_BIT.b5=1; Delay(5); void MoRongP1(unsigned int a) // Hàm mở rộng tầng thứ 1 volatile unsigned int b,c,d; b=0x8000; c=16; while(c>0) d = a&b; if ( d == b) _P3_OUT->_BIT.b1=0; else

Page 126: Co ban ve msp430

_P3_OUT->_BIT.b1=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; b=b>>1; c--; _P3_OUT->_BIT.b3=0; _P3_OUT->_BIT.b3=1; void Delay(unsigned int Value) // Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 127: Co ban ve msp430

3.4.6 Các bài tập về Led ma trận:

Bài 1: Hiện chữ “ A” bằng phương pháp liệt kệ

Lưu đồ:

Kết nối phần cứng:

Page 128: Co ban ve msp430

+ Kết nối 8 bit sau của kênh mở rộng thứ 2 với 8 hàng của Led ma trận.+ kết nối 8 bit sau của kênh mở rộng thứ 3 với 8 transitor điều khiển cột. Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);void MoRongP3(volatile unsigned int i);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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; for(;;) MoRongP3(0x00); // Chống lem MoRongP2(0xC1); // Đưa mã vào cột thứ nhất MoRongP3(0x01); // Cho phép sáng cột thứ nhất Delay(100); // Thời gian quét Led MoRongP3(0x00); MoRongP2(0xB7); // Đưa mã vào cột thứ hai MoRongP3(0x02); // Cho phép sáng cột thứ hai Delay(100); MoRongP3(0x00); MoRongP2(0x77); // Đưa mã vào cột thứ ba MoRongP3(0x04); // Cho phép sáng cột thứ ba

Page 129: Co ban ve msp430

Delay(100); MoRongP3(0x00); MoRongP2(0xB7); // Đưa mã vào cột thứ tư MoRongP3(0x08); // Cho phép sáng cột thứ tư Delay(100); MoRongP3(0x00); MoRongP2(0xC1); // Đưa mã vào cột thứ năm MoRongP3(0x10); // Đưa mã vào cột thứ năm Delay(100); MoRongP3(0x00); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else

Page 130: Co ban ve msp430

_P4_OUT->_BIT.b4=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1; void Delay(unsigned int Value) // Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 131: Co ban ve msp430

Bài 2: Hiện chữ “ A” bằng phương pháp mảng

Lưu đồ:

Kết nối phần cứng:

Page 132: Co ban ve msp430

+ Kết nối 8 bit sau của kênh mở rộng thứ 2 với 8 hàng của Led ma trận.+ kết nối 8 bit sau của kênh mở rộng thứ 3 với 8 transitor điều khiển cột.Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);void MoRongP3(volatile unsigned int i);void HienThi();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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;volatile unsigned char matran[]=0xC1,0xB7,0x77,0xB7,0xC1; // Mã ma trận chữ A

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; for(;;) bien=0; m=0x0001; while(bien<5) // Số cột của chữ A MoRongP3(0x00); // Chống lem

MoRongP2(matran[bien]); // Lấy mã ma trận chữ A với giá trị bien MoRongP3(m); // Cho phép sáng cột với giá trị m

Page 133: Co ban ve msp430

Delay(10); // Thời gian quét Led bien++; m=m<<1; void MoRongP2(unsigned int e) // Hàm mở rộng port tầng 2 volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng port tầng 3 volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else _P4_OUT->_BIT.b4=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1;

Page 134: Co ban ve msp430

j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1; void Delay(unsigned int Value) // Hàm DeLay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 135: Co ban ve msp430

Bài 3: Hiện chữ “ THANH CONG “ chạy từ phải sang trái

Lưu đồ:

Kết nối phần cứng:

Page 136: Co ban ve msp430

+ Kết nối 8 bit sau của kênh mở rộng thứ 2 với 8 hàng của Led ma trận.+ kết nối 8 bit sau của kênh mở rộng thứ 3 với 8 transitor điều khiển cột.Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);void MoRongP3(volatile unsigned int i);void HienThi();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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;volatile unsigned char matran[]=0x7F,0x7F,0x01,0x7F,0x7F,0x01,0xEF,0xEF,0xEF,0x01,0xC1,0xB7,0x77,0xB7,0xC1,0x01,0xBF,0xDF,0xEF,0x01,0x01,0xEF,0xEF,0xEF,0x01,0xFF,0xFF,0x83,0X7D,0X7D,0X7D,0XBB,0x83,0X7D,0X7D,0X7D,0X83,0x01,0xBF,0xDF,0xEF,0x01,0x83,0x7D,0x65,0x6D,0xA3,0xFF,0xFF,0x7F,0x7F,0x01,0x7F,0x7F,0x01,0xEF; //Mã ma trận“THANHCONG”volatile unsigned int n,p,m;

int main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; for(;;) n=0; while(n<49) // Tổng số cột trong ma trận “ THANHCONG”

Page 137: Co ban ve msp430

bien=n; m=0x01; for(p=0;p<100;p++) MoRongP3(0x00); // Chống lem if(m==256) m=0x01; bien=n;

MoRongP2(matran[bien]); // Lấy mã chữ THANHCONG với giá trị bien

MoRongP3(m); // Cho phép sáng cột với giá m Delay(10); // Thời gian quét Led bien++; m=m<<1; n++; void MoRongP2(unsigned int e) // Hàm mở rộng Port tầng 2 volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng Port tầng 3

Page 138: Co ban ve msp430

volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else _P4_OUT->_BIT.b4=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1; void Delay(unsigned int Value) //Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--);

Page 139: Co ban ve msp430

3.4.7 Các bài tập về nút nhấn:Bài 1: Dùng P2.2 làm nút nhấn. Khi nhấn nút nhấn thì Led ở P1.0 sáng,

không nhấn thì Led P1.0 tắt. Dùng P2.3 là nguồn 3.5V của vi điều khiển.

Lưu đồ:

Page 140: Co ban ve msp430

Chương trình:

#include "msp430x22x4.h"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* _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_IN = (union reg*)0x20 ;

void main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P1_DIRECT->_BIT.b0 = 1; _P2_DIRECT->_BIT.b3 = 1; _P2_DIRECT->_BIT.b2 = 0; // Định nghĩa P2.2 là ngõ vào while (1) _P2_OUT->_BIT.b3 = 1; // Set P2.3 lên 1 if (1 & _P2_IN->_BIT.b2) // Kiểm tra P2.2 nếu = 1 _P1_OUT->_BIT.b0 = 1; // Set P1.0 = 1 else _P1_OUT->_BIT.b0 = 0; // Ngược lại P1.0 = 0

Page 141: Co ban ve msp430

Bài 2: Tạo 3 nút nhấn, Up, Down, ReSet. Nhấn Up thì biến tăng lên 1 và Led P1.0 sáng, nhấn Down thì biến giảm đi 1 và Led P1.1 sáng, nhấn Reset biến về 0. Dùng P2.3 làm nút nhấn Up, dùng P2.2 làm nút nhấn Down, dùng P4.3 làm nút nhấn Reset, dùng P4.5 là nguồn 3.5V của vi điều khiển. Hiển thị trên 2 Led 7 đoạn.

Lưu đồ:

Kết nối phần cứng:

Page 142: Co ban ve msp430

+ Kết nối 8 bit đầu của kênh mở rộng thứ 2 với 7 đoạn và dấu chấm thập phân của Led 7 đoạn.

+ Kết nối 8 bit đầu của kênh mở rộng thứ 3 với 8 transistor điều khiển quét Led.

Chương trình:

#include "msp430x22x4.h"void MoRongP2(unsigned int e);void MoRongP3(unsigned int i);void HienThi();void Delay(unsigned int Value);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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P4_IN = (union reg*)0x1C ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P3_IN = (union reg*)0x18 ;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 ;volatile unsigned char baydoan[10]=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;volatile unsigned int DV,CH;

void main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P1_DIRECT->_BIT.b0 = 1; _P1_DIRECT->_BIT.b1 = 1; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff;

Page 143: Co ban ve msp430

_P2_DIRECT->_BIT.b4 = 1; _P2_DIRECT->_BIT.b2 = 0; // Định nghĩa P2.2 là ngõ vào _P2_DIRECT->_BIT.b3 = 0; // Định nghĩa P2.3 là ngõ vào _P4_DIRECT->_BIT.b3 = 0; // Định nghĩa P4.3 là ngõ vào DV=0; CH=0; _P4_OUT->_BIT.b5 = 1;for(;;) if (1 & _P2_IN->_BIT.b3) // Kiểm tra P2.3, nếu = 1 _P1_OUT->_BIT.b0 = 1; // Thì P1.0 = 1 DV++; // DV thêm 1 if (DV==10) DV=0; CH++; if (CH==10) CH=0; else _P1_OUT->_BIT.b0 = 0; // Ngược lại P1.0 = 0 if (1 & _P2_IN->_BIT.b2) // Kiểm tra P2.2, nếu = 1 _P1_OUT->_BIT.b1 = 1; // Thì P1.1 = 1 DV--; // DV trừ 1 if (DV==-1) DV=9; CH--; if (CH==-1) CH=9; else _P1_OUT->_BIT.b1 = 0; // Ngược lại P1.1 = 0 if (1 & _P4_IN->_BIT.b3) // Kiểm tra P4.3, nếu = 1 DV=0; // DV = 0

Page 144: Co ban ve msp430

CH=0; // CH = 0 HienThi();void HienThi() // Hàm HienThi volatile unsigned int v; v=0; while(v<30) // Thời gian đáp ứng, chống rung MoRongP3(0xFF); MoRongP2(baydoan[DV]); MoRongP3(0xFE); Delay(500); MoRongP3(0xFF); MoRongP2(baydoan[CH]); MoRongP3(0xFD); Delay(500); MoRongP3(0xFF); v++; void Delay(unsigned int Value) // Hàm delay volatile unsigned int l = 0; for(l=Value; l>0; l--); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x80; g=8; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--;

Page 145: Co ban ve msp430

_P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x80; k=8; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else _P4_OUT->_BIT.b4=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1;

Page 146: Co ban ve msp430

3.4.8 Các bài tập về Timer:Bài 1: Sử dụng ngắt Timer_A, sau chu kỳ 50000 thì chớp tắt Led P1.0:

Lưu đồ:

Page 147: Co ban ve msp430

Chương trình:

include "msp430x22x4.h" 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 ;

int main(void) WDTCTL = WDTPW + WDTHOLD; _P1_DIRECT->_BYTE = 0x01; // Định nghĩa P1.0 là ngõ ra TACCTL0 = CCIE; // Cho phép ngắt Timer_A TACCR0 = 50000; // Cho chu kỳ là 50000 TACTL = TASSEL_2 + MC_2; // Sử dụng xung clock SMCLK, chế độ tiếp tục

__bis_SR_register(LPM0_bits + GIE); // Cho phép ngắt LPM0

#pragma vector=TIMERA0_VECTOR // Sử dụng ngắt Timer_A trong suốt quá trình__interrupt void Timer_A (void) // Hàm ngắt Timer_A _P1_OUT->_BIT.b0 ^= 1; // P1.0 Xor 1 TACCR0 = TACCR0 + 50000; // Thiết lập chu kỳ mới là 50000

Page 148: Co ban ve msp430

Bài 2: Sử dụng ngắt Timer_B, sau chu kỳ 50000 thì chớp tắt Led P1.1:

Lưu đồ:

Page 149: Co ban ve msp430

Chương trình:

include "msp430x22x4.h" 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 ;

int main(void) WDTCTL = WDTPW + WDTHOLD; _P1_DIRECT->_BYTE = 0x02; // Định nghĩa P1.1 là ngõ ra TBCCTL0 = CCIE; // Cho phép ngắt Timer_B TBCCR0 = 50000; // Cho chu kỳ là 50000 TBCTL = TBSSEL_2 + MC_2; // Sử dụng xung clock SMCLK, chế độ tiếp tục

__bis_SR_register(LPM0_bits + GIE); // Cho phép ngắt LPM0

#pragma vector=TIMERB0_VECTOR // Sử dụng ngắt Timer_B trong suốt quá trình__interrupt void Timer_B (void) // Hàm ngắt Timer_B _P1_OUT->_BIT.b1 ^= 1; // P1.1 Xor 1 TBCCR0 = TBCCR0 + 50000; // Thiết lập chu kỳ mới là 50000

Page 150: Co ban ve msp430

3.4.7 Các bài tập về ADC10:Bài 1: Dùng cảm biến nhiệt độ có sẵn trong board, đo nhiệt độ. Rồi dùng

ADC10 chuyển nhiệt độ từ tương tự sang số xuất ra 10 Led đơn. Khi chuyển đổi xong, Led P1.0 sáng.

Lưu đồ:

Page 151: Co ban ve msp430

Kết nối phần cứng:+ Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn.Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;union reg* _P1_DIRECT = (union reg*)0x22 ;union reg* _P1_OUT = (union reg*)0x21 ;int degC,temp;

void main(void) // Chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; _P1_DIRECT->_BYTE = 0x01; ADC10CTL1 = INCH_10 + ADC10DIV_4; // Định dạng thanh ghi ADC10CTL1: Dùng cảm biến,clock ADC10 bằng xung nội chia 5 ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ADC10SR; // Định dạng thanh ghi ADC10CTL0 for( degC = 240; degC > 0; degC-- ); // delay cho phép lưu định dạng while(1)

Page 152: Co ban ve msp430

ADC10CTL0 |= ENC + ADC10SC; // Lấy mẫu vào bắt đầu chuyển đổi, lưu vào thanh ghi ADC10MEM __bis_SR_register(CPUOFF + GIE); // Cho phép ngắt LPM0 temp = ADC10MEM; MoRongP2(temp); // Mở rộng tầng 2 với giá trị temp _P1_OUT->_BIT.b0=1; // Set P1.0 = 1 #pragma vector=ADC10_VECTOR // Sử dụng ngắt ADC10 trng suốt qúa trình

__interrupt void ADC10_ISR(void) // Hàm ngắt ADC10 __bic_SR_register_on_exit(CPUOFF); // xoá bit CPUOFF void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2

volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=1; else _P3_OUT->_BIT.b2=0; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1;

Page 153: Co ban ve msp430

Bài 2: Dùng cảm biến nhiệt độ có sẵn trong board, đo nhiệt độ. Rồi dùng ADC10 chuyển nhiệt độ từ tương tự sang số, sau đó chuyển đổi sang độ C, hiển thị ra Led 7 đoạn. Khi chuyển đổi xong, Led P1.0 sáng.

Lưu đồ:

Page 154: Co ban ve msp430

Kết nối phần cứng:+ Kết nối 8 bit đầu của kênh mở rộng thứ 2 với 7 đoạn và dấu chấm thập

phân của Led 7 đoạn.+ Kết nối 8 bit đầu của kênh mở rộng thứ 3 với 8 transistor điều khiển quét

Led.Chương trình:

#include "msp430x22x4.h" void Delay(unsigned int Value);void MoRongP2(volatile unsigned int e);void MoRongP3(volatile unsigned int i);void Hex_BCD();void HienThi();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 ;union reg* _P4_OUT = (union reg*)0x1D ;union reg* _P3_DIRECT = (union reg*)0x1A ;union reg* _P3_OUT = (union reg*)0x19 ;union reg* _P2_DIRECT = (union reg*)0x2A ;union reg* _P2_OUT = (union reg*)0x29 ;union reg* _P1_DIRECT = (union reg*)0x22 ;union reg* _P1_OUT = (union reg*)0x21 ;volatile unsigned char baydoan[10]=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;volatile unsigned int temp,degC,tram,chuc,dvi,n;

int main(void) // chương trình chính WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; _P1_DIRECT->_BYTE = 0x01;

Page 155: Co ban ve msp430

ADC10CTL1 = INCH_10 + ADC10DIV_4; // Định dạng thanh ghi ADC10CTL1: Dùng cảm biến,clock ADC10 bằng xung nội chia 5 ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ADC10SR; // Định dạng thanh ghi ADC10CTL0 for( degC = 240; degC > 0; degC-- ); // delay cho phép lưu định dạng

for(;;) ADC10CTL0 |= ENC + ADC10SC; // Lấy mẫu vào bắt đầu chuyển đổi, lưu vào thanh ghi ADC10MEM temp = ADC10MEM; n = ((temp - 673) * 423) / 1024; // Công thức chuyển sang độ C _P1_OUT->_BIT.b0=1; // Set P1.0 Hex_BCD(); HienThi(); void Hex_BCD() // Hàm chuyển đổi Hex_BCD tram=n/100; n=n%100; chuc=n/10; n=n%10; dvi=n%10; void HienThi() // Hàm Hienthi volatile unsigned int v; v=0; while(v<5) MoRongP3(0xFF); MoRongP2(0xC6); // Hiển thị chữ “ C” MoRongP3(0xFE); Delay(500); MoRongP3(0xFF); MoRongP2(0x9C); // Hiển thị dấu độ 0

MoRongP3(0xFD); Delay(500); MoRongP3(0xFF); MoRongP2(baydoan[dvi]); MoRongP3(0xFB); Delay(500); MoRongP3(0xFF); MoRongP2(baydoan[chuc]); MoRongP3(0xF7); Delay(500);

Page 156: Co ban ve msp430

MoRongP3(0xFF); v++; void Delay(unsigned int Value) // Hàm Delay volatile unsigned int l = 0; for(l=Value; l>0; l--); void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 volatile unsigned int f,g,h; f=0x80; g=8; while(g>0) h = e&f; if ( h == f) _P3_OUT->_BIT.b2=0; else _P3_OUT->_BIT.b2=1; _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 volatile unsigned int j,k,l; j=0x80; k=8; while(k>0) l = i&j; if ( l == j) _P4_OUT->_BIT.b4=0; else _P4_OUT->_BIT.b4=1;

Page 157: Co ban ve msp430

_P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; j=j>>1; k--; _P4_OUT->_BIT.b6=0; _P4_OUT->_BIT.b6=1;

Page 158: Co ban ve msp430

Chương 4

KẾT QUẢ NGHIÊN CỨU KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Page 159: Co ban ve msp430

4 .1 Kết quả nghiên cứu: Sau một thời gian nghiên cứu, thử nghiệm và thi công đề tài “Khảo sát họ vi điều khiển MSP430” đã được hoàn thành với một số nội dung chính sau:

+ Tìm hiểu về cấu tạo, nguyên lý, các đặc tính của vi điều khiển MSP430, đại điện là IC MSP430F2274.

+ Tìm hiểu về cấu tạo, nguyên lý hoạt động, các đặc tính của bộ mođun eZ430-RF2500. Cách cài đặt phần cứng vào máy tính.+ Tìm hiểu về phần mềm IAR Embedded Workbench: cách cài đặt, cách sử dụng, chương trình biên dịch, nạp cho vi xử lý.

+ Tìm hiểu về cách lập trình C trong IAR Embedded Workbench cho vi điều khiển MSP430 (MSP430F2274).+ Thiết kế mođun phần cứng mở rộng port sử dụng cho vi điều khiển MSP430 (MSP430F2274).

+ Thiết kế các bài tập cho vi điều khiển MSP430 (MSP430F2274) trên bộ Kit thí nghiệm:

Các bài tập về Led đơn. Các bài tập về Led 7 đoạn. Các bài tập về LCD. Các bài tập về Led ma trận. Các bài tập về nút nhấn. Các bài tập về Timer. Các bài tập về ADC

4.2 Kết luận : Đề tài cơ bản đã hoàn thành theo đúng ý đồ của nhóm thực hiện. Tuy vậy

trong quá trình hoàn thiện đề tài cũng còn một số thiếu sót và khó khăn nhất định như có một số ý kiến không thống nhất giữa các thành viên, thời gian và kinh phí cũng là vấn đề cần quan tâm. Do vậy ở một chừng mực nhất định những hạn chế khách quan và chủ quan nên có một số nôi dụng chưa được quan tâm thỏa đáng vì vậy đề tài không tránh khỏi có những sai sót.

Nhưng với sự đánh giá khách quan của các thầy cô cũng như sự góp ý chân thành ở bạn bè sẽ giúp nhóm thực hiện đề tài tìm các biện pháp khắc phục những mặt còn hạn chế trong đồ án của mình.

4.3 Hướng phát triển : Sẽ tăng cường, bổ sung thêm cho thiết bị thực tập lập trình các mô đun mới

như mô đun truyền dữ liệu không dây, mô đun mở rộng bộ nhớ.Hoàn thành các bài mẫu cho dòng vi điều khiển MSP trên ngôn ngữ hợp

ngữ. Thiết kế được một giao diện điều khiển cho thiết bị thực tập lập trình, trong đó có nhúng vào môi trường soạn thảo tích hợp, các phần mềm nạp chương trình đa năng.

Page 160: Co ban ve msp430

TÀI LIỆU THAM KHẢO

1. Help phần mềm IAR Embedded Workbech IDE2. Datasheet MSP 430F22473. Trang web chính của Texas Instruments www.ti.com4. User’s Guide5. www.ti.com/automotive6. www.ti.com/broadband7. www.ti.com/digitalcontrol8. www.ti.com/medical9. www.ti.com/military10. www.ti.com/opticalnetwork11. www.ti.com/security12. www.ti.com/telephony13. www.ti.com/video14. www.ti.com/wireless