co ban ve msp430

158
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. - MSP430F2272: 32KB + 256B Flash Memory 1KB RAM.

Upload: luu-minh-hoang

Post on 15-Feb-2015

408 views

Category:

Documents


2 download

TRANSCRIPT

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.

- MSP430F2272: 32KB + 256B Flash Memory 1KB RAM.

Page 2: Co Ban Ve MSP430

- 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

MSP430F2232IDA

MSP430F2252IDA

MSP430F2272IDA

MSP430F2234IDA

MSP430F2254IDA

MSP430F2274IDA

MSP430F2232IRHA

MSP430F2252IRHA

MSP430F2272IRHA

MSP430F2234IRHA

MSP430F2254IRHA

MSP430F2274IRHA

-- 4 0°C to

105°C

MSP430F2232TDAw

MSP430F2252TDAw

MSP430F2272TDAw

MSP430F2234TDA

MSP430F2254TDA

MSP430F2274TDA

MSP430F2232TRHAw

MSP430F2252TRHAw

MSP430F2272TRHAw

MSP430F2234TRHA

MSP430F2254TRHA

MSP430F2274TRHA

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ó

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ó độ

Page 5: Co Ban Ve MSP430

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):

Chân xuất / nhập số.

Page 10: Co Ban Ve MSP430

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.

Đ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.

Page 11: Co Ban Ve MSP430

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ế độ I

2C.

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ế độ I

2C.

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.

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ố.

Page 12: Co Ban Ve MSP430

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):

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):

Page 13: Co Ban Ve MSP430

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.

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.

Page 14: Co Ban Ve MSP430

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ế độ I

2C.

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ế độ I

2C.

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ố.

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ố.

Page 15: Co Ban Ve MSP430

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):

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

Page 16: Co Ban Ve MSP430

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.

Hình 8: Cấu trúc thanh ghi

Cá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.

Page 17: Co Ban Ve MSP430

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.

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.

Page 18: Co Ban Ve MSP430

PxSEL2 PXSEL Chức năng của chân

0 0 Chức năng xuất nhập

0 1 Module đầu tiên đƣợc lựa chọn

1 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:

- 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 19: Co Ban Ve MSP430

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

Page 20: Co Ban Ve MSP430

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:

+ 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

Page 21: Co Ban Ve MSP430

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: 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 động

00 Stop Timer được tạm dừng

01 Up Timer đếm từ 0 tới giá trị đỉnh của TACCR0

10 Continuous Timer đếm từ 0 tới 0FFFFh

11 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ụ.

Page 22: Co Ban Ve MSP430

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

Thanh ghi điều khiển Timer_A:

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 TACLK

01 ACLK

10 SMCLK

11 INCLK

+ Idx Bit 7-6: Lựa chọn bộ chia trước:

00 /1

01 /2

10 /4

11 /8

+ MCx Bit 5-4: Lựa chọn chế độ hoạt động:

00 Dừng chế độ

Page 23: Co Ban Ve MSP430

01 Chế độ lên

10 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: 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 24: 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 25: 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 động

00 Stop Tạm dừng Timer

01 Up Timer đếm từ 0 tới giá trị đỉnh của TBCL0

10 Continuous Timer đếm từ 0 tới giá trị được lựa chọn bởi bít

CNTLx

11 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 26: 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:

00 16-bit,TBR(max) = 0FFFFh

01 12-bit,TBR(max) = 0FFFh

10 10-bit,TBR(max) = 03FFh

11 8-bit,TBR(max) = 0FFh

+ TBSSELx bit 9-8: Lựa chọn nguồn xung clock:

00 TBCLK

01 ACLK

10 SMCLK

11 Đảo TBCLK

+ IDx Bit 7-6: lựa chọn bộ chia xung:

00 /1

01 /2

10 /4

11 /8

+ MCx Bit 5-4: Lựa chọn chế độ điều khiển:

00 Dừng chế độ

01 Chế độ lên

10 Tiếp tục chế độ

11 Chế độ lên/xuống

Page 27: 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 28: 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 29: 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 30: 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 31: 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 32: 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 ksps

Bit = 0 tốc độ ~200 ksps

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

Bit = 0 Ngõ ra tham chiếu off

Page 33: 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 V

Bit = 1 Vref = 2.5 V

+ ADC10ON Bit 4:

Bit = 0 ADC10 off

Bit = 1 ADC10 on

+ ADC10IE Bit 3 Cho phép ngắt ADC10:

Bit = 0 cấm ngăt

Bit = 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 đổi

Bit =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 34: 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 35: Co Ban Ve MSP430

Hình 18: Sơ đồ khối của kênh chuyển đổi tương tự sang số ADC12

Tí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 36: Co Ban Ve MSP430

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

Kê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 37: 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 38: 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 39: 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 40: 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 bit

Bit = 1 : Độ phân giải 8 bit

+ CALON Bit 9: Bit hiệu chỉnh trên:

Bit = 0: Không hiệu chỉnh

Bit = 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ếu

Bit = 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 41: Co Ban Ve MSP430

+ DAC12DF Bit4: Định dạng dữ liệu DAC12:

Bit = 0 Dữ liệu kiểu nhị phân

Bit = 1 Dữ liệu kiểu bù 2 (2’s complement)

+ DAC12IE Bit3: Cho phép ngắt DAC12:

Bit = 0 Cấm ngắt

Bit = 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 42: 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 on

Bit = 1 XT2 off. Nếu nó không được sử dụng cho MCLK hoặc SMCLK

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

Page 43: Co Ban Ve MSP430

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

Bit = 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 ACLK

00 /1

01 /2

10 /4

11 /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:

00 DCOCLK

01 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 /1

01 /2

10 /4

11 /8

+ SELS Bit3 Bit lựa chọn nguồn SMCLK:

Bit =0 DCOCLK

Bit = 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ội

Bit = 1 Điện trở ngoài

Page 44: Co Ban Ve MSP430

Thanh ghi cho phép ngắt IE1:

OFIF BIT 1 Bit =1 Cho phép ngắt

Bit =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 45: 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 46: 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.

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

Chức năng các chân board eZ430-RF2500

Pin Chức năng Mô tả

1 GND Mass

2 Vcc Chân nguồn Vcc 1.8V - 3.6V

3 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 ADC10

4 P2.1 / TAINCLK / SMCLK

/ A1 /A0O

Châ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.

Page 47: Co Ban Ve MSP430

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 Mass

13 P2.6 / XIN (GDO0) Chân xuất/nhập số, kết nối thạch anh

14 P2.7 / XOUT (GDO2) Chân xuất/nhập số, kết nối thạch anh

15 P3.2 / UCB0SOMI /

UCB0SCL

Châ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

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 48: 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 /

UCA0SIMO

Châ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 V

Nhiệt độ -40 85 oC

Dòng tiêu thụ

Chế độ hoạt động tại 1MHz, 2.2V 270 390 μA

Chế độ nghỉ 0.7 1.4 μA

Chế độ tắt duy trì RAM 0.1 0.5 μA

Tần số làm việc

Vcc ≥ 3.3V 16 MHz

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

Page 49: 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 V

Dò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 mA

Optimized

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.5 MHz

Dữ liệu 1.2 500 kbps

Cô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 dBm

Dòng tối ưu, 500-

kHz RX

-89 dBm

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

Page 50: Co Ban Ve MSP430

Sơ đồ mạch eZ430-RF2500:

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

Page 51: Co Ban Ve MSP430

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

Page 52: Co Ban Ve MSP430

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

Page 53: 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 54: 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 55: 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 56: 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 57: 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 58: 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 59: 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 60: 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 61: 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 62: 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 63: 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 64: 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 65: 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 66: Co Ban Ve MSP430

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

Page 67: 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 68: 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 69: 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ệc

Bạ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 70: 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 71: 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 options

Chọ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 72: 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 73: 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 74: 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 1

Unsigned char 1

signed char 1

int 2

unsigned int 2

signed int 2

short int 2

unsigned short int 2

signed short int 2

long int 4

signed long int 4

unsigned long int 4

float 4

double 8

long 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 75: 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 76: 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 77: Co Ban Ve MSP430

b. # define

Dù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.99MHz

Sử dụng các BIT đã được định nghĩa trong header file:

#define LED1 BIT3

#define LED2 BIT4

c. #ifdef ,#endif:

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_register

Ví 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_bytes

Ví dụ: unsigned short __swap_bytes(unsigned short);

Page 78: 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_state

Cú 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_n

Cú 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_register

Cú pháp: unsigned short __get_R4_register(void);

Chức năng: Trả về giá trị của thanh ghi R4.

10) __get_SP_register

Cú 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_register

Cú 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_state

Cú pháp: __istate_t __get_interrupt_state(void);

Chức năng: Trở về trạng thái ngắt toàn cục

Ví dụ: __istate_t s = __get_interrupt_state();

__disable_interrupt();

/* Do something */

__set_interrupt_state(s);

13) __delay_cycles

Cú 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_interrupt

Cú 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_interrupt

Cú 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_register

Cú pháp: void __bis_SR_register(unsigned short);

Chức năng: Set các bit trong thanh ghi trạng thái.

Page 79: Co Ban Ve MSP430

16) __bis_SR_register_on_exit

Cú 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_exit

Cú 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 80: 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 81: 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 82: 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 83: 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 84: Co Ban Ve MSP430

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

Hình 51: Dạng sóng điều khiển IC 74HC595

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

Hình 52: Nguyên lý hoạt động

Page 85: Co Ban Ve MSP430

Để 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 86: 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 87: Co Ban Ve MSP430

3.3 Phƣong pháp mở rộng Port:

3.3.1 Sơ đồ nguyên lý:

Hình 55: Sơ đồ nguyên lý mở rộng Port

Page 88: Co Ban Ve MSP430

3.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:

Hình 56: Sơ đồ mạch in mở rộng Port

Page 89: Co Ban Ve MSP430

3.3.4 Mạch hoàn chỉnh:

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

Page 90: 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 91: 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 92: 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.

+ Nối chân 12 của eZ430-RF2500T làm chân Mass chung.

Page 93: Co Ban Ve MSP430

Chƣơng trình:

void MoRongP2(unsigned int q); // Khai báo hàm mở rộng tầng thứ hai

union 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ớ 0x1A

union reg* _P3_OUT = (union reg*)0x19 ; // Định nghĩa vùng nhớ 0x19

union reg* _P2_DIRECT = (union reg*)0x2A ; // Định nghĩa vùng nhớ 0x2A

union 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 94: 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:

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

Page 95: Co Ban Ve MSP430

Chƣơng trình:

#include "msp430x22x4.h" // Khai báo chip

void Delay(unsigned int Value); // Khai báo hàm Delay

void MoRongP2(unsigned int e); // Khai báo hàm mở rộng tầng 2

union 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 96: 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 97: 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:

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

Page 98: Co Ban Ve MSP430

Chƣơng trình:

#include "msp430x22x4.h" // Khai báo chip

void Delay(unsigned int Value); // Khai báo hàm Delay

void MoRongP2(unsigned int e); // Khai báo hàm mở rộng tầng 2

union 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;

f=0x8000;

g=16;

Page 99: Co Ban Ve MSP430

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 100: 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.

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

Page 101: Co Ban Ve MSP430

Chƣơng trình:

#include "msp430x22x4.h" // Khai báo chip

void Delay(unsigned int Value); // Khai báo hàm Delay

void MoRongP2(unsigned int e); // Khai báo hàm mở rộng tầng 2

void MoRongP3(unsigned int i); // Khai báo hàm mở rộng tầng 3

union 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;

m=17;

while(m>0)

Page 102: Co Ban Ve MSP430

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

_P4_OUT->_BIT.b4=0;

Page 103: 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;

void Delay(unsigned int Value) // Hàm delay

volatile unsigned int l = 0;

for(l=Value; l>0; l--);

Page 104: 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.

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

Page 105: Co Ban Ve MSP430

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--;

MoRongP2(n);

Page 106: Co Ban Ve MSP430

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 107: 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 108: 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.

+ 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.

Page 109: Co Ban Ve MSP430

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 -

BCD

void HienThi(); // Khai báo hàm 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; //

Khai báo mã Led 7 đoạn

volatile 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;

Hex_BCD();

HienThi();

Page 110: Co Ban Ve MSP430

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)

h = e&f;

if ( h == f)

Page 111: Co Ban Ve MSP430

_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 112: 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.

+ 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.

Page 113: Co Ban Ve MSP430

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

DVGiay=0; // Đơn vị giây =0

CHGiay=CHGiay+1; // Chục giây cộng thêm 1

Page 114: Co Ban Ve MSP430

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);

MoRongP2(0xBF); // Sáng gạch nối

MoRongP3(0xFB);

Page 115: Co Ban Ve MSP430

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;

_P2_OUT->_BIT.b4=0;

_P2_OUT->_BIT.b4=1;

Page 116: Co Ban Ve MSP430

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 117: 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.

+ 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.

Page 118: Co Ban Ve MSP430

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 LCD

void DLLCD(); // Khai báo hàm ghi dữ liệu LCD

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;

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();

MoRongP1('h');

DLLCD();

Page 119: Co Ban Ve MSP430

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;

Delay(5);

Page 120: Co Ban Ve MSP430

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 121: 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.

+ 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.

Page 122: Co Ban Ve MSP430

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 LCD

void DLLCD(); // Khai báo hàm ghi dữ liệu LCD

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 ChuLCD1[]='M','C','U',' ','4','3','0'; // Mảng chữ

dòng 1

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

Mảng chữ dòng 2

volatile 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ỏ

DKLCD();

MoRongP1(0x84); // Hiện “MCU 430” dòng 1 cột 4

Page 123: Co Ban Ve MSP430

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

_P3_OUT->_BIT.b1=1;

Page 124: Co Ban Ve MSP430

_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 125: 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:

+ 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.

Page 126: Co Ban Ve MSP430

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

Delay(100);

MoRongP3(0x00);

Page 127: Co Ban Ve MSP430

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

_P4_OUT->_BIT.b4=1;

Page 128: 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;

void Delay(unsigned int Value) // Hàm Delay

volatile unsigned int l = 0;

for(l=Value; l>0; l--);

Page 129: 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:

+ 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.

Page 130: Co Ban Ve MSP430

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

Delay(10); // Thời gian quét Led

bien++;

Page 131: Co Ban Ve MSP430

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;

j=j>>1;

k--;

Page 132: Co Ban Ve MSP430

_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 133: 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:

+ 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.

Page 134: Co Ban Ve MSP430

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,0xE

F,0x01,0xFF,0xFF,0x83,0X7D,0X7D,0X7D,0XBB,0x83,0X7D,0X7D,0X7D

,0X83,0x01,0xBF,0xDF,0xEF,0x01,0x83,0x7D,0x65,0x6D,0xA3,0xFF,0xF

F,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”

bien=n;

m=0x01;

Page 135: Co Ban Ve MSP430

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

volatile unsigned int j,k,l;

j=0x8000;

k=16;

Page 136: Co Ban Ve MSP430

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 137: 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 138: 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 139: 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:

+ 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.

Page 140: Co Ban Ve MSP430

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;

_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

Page 141: Co Ban Ve MSP430

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

CH=0; // CH = 0

HienThi();

Page 142: Co Ban Ve MSP430

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--;

_P3_OUT->_BIT.b0=0;

_P3_OUT->_BIT.b0=1;

Page 143: Co Ban Ve MSP430

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 144: 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 145: 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 146: 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 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 = 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 148: 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 đồ:

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 149: Co Ban Ve MSP430

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)

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

Page 150: Co Ban Ve MSP430

_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 151: 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 đồ:

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.

Page 152: Co Ban Ve MSP430

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;

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(;;)

Page 153: 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

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);

MoRongP3(0xFF);

v++;

void Delay(unsigned int Value) // Hàm Delay

volatile unsigned int l = 0;

Page 154: Co Ban Ve MSP430

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;

_P2_OUT->_BIT.b4=0;

_P2_OUT->_BIT.b4=1;

j=j>>1;

k--;

_P4_OUT->_BIT.b6=0;

Page 155: Co Ban Ve MSP430

_P4_OUT->_BIT.b6=1;

Page 156: 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 157: 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 158: Co Ban Ve MSP430

TÀI LIỆU THAM KHẢO

1. Help phần mềm IAR Embedded Workbech IDE

2. Datasheet MSP 430F2247

3. Trang web chính của Texas Instruments www.ti.com

4. User’s Guide

5. www.ti.com/automotive

6. www.ti.com/broadband

7. www.ti.com/digitalcontrol

8. www.ti.com/medical

9. www.ti.com/military

10. www.ti.com/opticalnetwork

11. www.ti.com/security

12. www.ti.com/telephony

13. www.ti.com/video

14. www.ti.com/wireless