SlideShare une entreprise Scribd logo
1  sur  160
I. Tổng quan về MSP430:
MSP 430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởi
công ty Texas Instruments.
MSP là chữ viết tắt của “MIXED SIGNAL MICROCONTROLLER”. Là
dòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng điện
áp nguồn cấp từ 1.8V – 3.6V.
MSP 430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các
module ngoại vi. Đặc biệt Chíp MSP 430 là giải pháp thích hợp cho những ứng
dụng yêu cầu trộn tín hiệu.
Những đặc tính của dòng MSP 430 bao gồm:
• Điện áp nguồn: 1.8V – 3.6 V.
• Mức tiêu thụ năng lượng cực thấp:
- Chế độ hoạt động: 270 μA tại 1MHz, 2,2 V.
- Chế độ chờ: 0.7 μA.
- Chế độ tắt (RAM vẫn được duy trì): 0.1 μA.
• Thời gian đánh thức từ chế độ Standby nhỏ hơn 1μs.
• Cấu trúc RISC-16 bit, Thời gian một chu kỳ lệnh là 62.5 ns
• Cấu hình các module Clock cơ bản:
- Tần số nội lên tới 16 MHz với 4 hiệu chỉnh tần số +- 1%.
- Thạch anh 32 KHz.
- Tần số làm việc lên tới 16 MHz.
- Bộ cộng hưởng.
- Nguồn tạo xung nhịp bên ngoài.
- Điện trở bên ngoài.
• Timer_A 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16
bit
• Timer_B 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16
bit
• Giao diện truyền thông nối tiếp:
- Hỗ trợ truyền thông nối tiếp nâng cao UART, tự động dò tìm
tốc độ Baud.
- Bộ mã hóa và giải mã IrDA (Infrared Data Associatio).
- Chuẩn giao tiếp động bộ SPI.
- Chuẩn giao tiếp I2C.
• Bộ chuyển đổi ADC 10 bit, 200 ksps với điện áp tham chiếu nội, Lấy
mẫu và chốt. Tự động quét kênh, điều khiển chuyển đổi dữ liệu.
• Hai bộ khuếch đại thuật toán (hoạt động) có thể định cấu hình (Đối với
MSP 430x22x4).
• Bảo vệ sụt áp.
• Bộ nạp chương trình.
• Module mô phỏng trên chip.
• Các thành viên của dòng MSP 430 bao gồm:
- MSP430F2232: 8KB + 256B Flash Memory 512B RAM.
- MSP430F2252: 16KB + 256B Flash Memory 512B RAM.
- MSP430F2272: 32KB + 256B Flash Memory 1KB RAM.
- MSP430F2234: 8KB + 256B Flash Memory 512B RAM.
- MSP430F2254: 16KB + 256B Flash Memory 512B RAM.
- MSP430F2274: 32KB + 256B Flash Memory 1KB RAM.
MSP430 được sử dụng và biết đến đặc biệt trong những ứng dụng về thiết bị
đo có sử dụng hoặc không sử dụng LCD với chế độ nguồn nuôi rất thấp. Với chế độ
nguồn nuôi từ khoảng 1,8 đến 3,6v và 5 chế độ bảo vệ nguồn.
Với sự tiêu thụ dòng rất thấp trong chế độ tích cực thì dòng tiêu thụ là 200uA,
1Mhz, 2.2v; với chế độ standby thì dòng tiêu thụ là 0.7uA. Và chế độ tắt chỉ duy trì
bộ nhớ Ram thì dòng tiêu thụ rất nhỏ 0.1uA.
MSP430 có ưu thế về chế độ nguồn nuôi. Thời gian chuyển chế độ từ chế độ
standby sang chế độ tích cực rất nhỏ (< 6us). Và có tích hợp 96 kiểu hình cho hiển
thị LCD. 16 bit thanh ghi, 16 bit RISC CPU.
Có một đặc điểm của họ nhà MSP là khi MCU không có tín hiệu dao động
ngoại, thì MSP sẽ tự động chuyển sang hoạt động ở chế độ dao động nội.
Kiểu chân thiết kế:
TA
PACKAGED DEVICES
PLASTIC 38-PIN
TSSOP
(DA)
PLASTIC40-PINQFN
(RHA)
-- 4 0°C to 85°C
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
Sơ đồ chân của các loại MSP 430:
Hình 1: Các kiểu chân của 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ó độ
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
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ỉ.
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.
Chức năng các chân:
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ố.
 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.
• 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 I2
C trong chế độ I2
C.
• 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 I2
C trong chế độ I2
C.
• 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ố.
 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):
 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.
• 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 I2
C trong chế độ I2
C.
• 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 I2
C trong chế độ I2
C.
• 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ố.
 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
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.
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.
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.
Bảng 3: Địa chỉ thanh ghi xuất nhập
Bộ định thời:
MSP 340 có hai bộ định thời 16 Bit là Timer_A và Timer_B nó cũng đồng
thời đóng vai trò là bộ đếm.
Timer_A:
Đặc tính của Timer_A:
Là một bộ Timer/Counter 16 bit. Với ba thanh ghi lưu trữ và 3 thanh ghi so
sánh. Là một Timer đa chức năng. Đếm thời gian, so sánh, PWM . Timer_A
cũng có khả năng ngắt khi counter đếm tràn hoặc mỗi thanh ghi đếm tràn. Các
đặc tính chính của Timer_A bao gồm:
+ Là một Timer/counter 16 Bit không đồng bộ với 4 chế độ hoạt động.
+ Có thể lựa chọn và cấu hình nguồn xung
+ Hai tới 3 thanh ghi có thể cấu hình capture/compare
+ Cấu hình đầu ra với chế độ PWM
+ Chốt ngõ vào và ngõ ra không đồng bộ
Hình 9: Sơ đồ khối của Timer_A
Timer hoạt động ở chế độ Counter 16 Bit:
Ở chế độ Counter giá trị thanh ghi TAR tăng hoặc giảm theo cạnh lên của
xung clock (tùy thuộc vào chế độ hoạt động). Giá trị của thanh ghi TAR có thể
được ghi hoặc đọc bởi phần mềm. Nó có khả năng tạo ra một ngắt khi đếm tràn.
Thanh ghi TAR có thể bị xóa khi set bit TACLR. Việc set bit TACLR đồng
thời cũng xóa giá trị lựa chọn cho bộ chia xung hoặc chế độ đếm lên hay đếm
xuống.
Lựa chọn nguồn xung và bộ chia xung:
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ụ.
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:
0 Dừng chế độ
1 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ộ.
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.
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
Các thanh ghi của Timer_B:
Bảng 5: Thanh ghi của Timer_B
Thanh ghi điều khiển TBCTL:
+ Bit 15: không sử dụng
+ CNTLx Bit 12-11: Độ dài của bộ đếm:
0 16-bit,TBR(max) = 0FFFFh
1 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
+ 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
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
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.
Đ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:
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
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
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:
+ 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.
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.
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.
Các thanh ghi điều khiển ADC12:
Bảng 7: Thanh ghi điều khiển ADC 12
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
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
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:
+ 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.
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
+ XTSBit 6: Là bít lựa chọn chế độ:
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:
0 DCOCLK
1 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
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.
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
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.
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
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 o
C
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
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
Sơ đồ mạch eZ430-RF2500:
Hình 24: Sơ đồ nguyên lý của USB
Hình 25: Sơ đồ nguyên lý của USB
Hình 25: Sơ đồ nguyên lý của board eZ430-RF2500T
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.
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
- 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
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
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ó:
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:
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:
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:
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:
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.
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:
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ó.
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:
Hình 29: Cửa sổ khởi động IAR Embedded Workbench IDE
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 .
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.
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
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
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
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
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
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.
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.
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.
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);
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.
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.
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
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
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 .
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.
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
Để 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
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.
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
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
3.3.4 Mạch hoàn chỉnh:
Hình 57: Mạch hoàn chỉnh
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
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.
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.
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
{
_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.
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)
{
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--);
}
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.
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;
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--);
}
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.
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)
{
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;
}
_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--);
}
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.
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);
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)
{
_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--);
}
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430
Co ban ve msp430

Contenu connexe

Tendances

Tài liệu profibus
Tài liệu profibusTài liệu profibus
Tài liệu profibusVu Phong
 
Chuong 05 transistor bjt
Chuong 05 transistor bjtChuong 05 transistor bjt
Chuong 05 transistor bjtJean Okio
 
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCDĐồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCDMr Giap
 
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tục[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tụcPham Hoang
 
Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Vũ Anh
 
lap trinh assembly cho VXL
lap trinh  assembly cho VXLlap trinh  assembly cho VXL
lap trinh assembly cho VXLThân Khương
 
Các loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptuneCác loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptune給与 クレジット
 
thuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu sothuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu soKimkaty Hoang
 
Lập trình pic hainguyen
Lập trình pic hainguyenLập trình pic hainguyen
Lập trình pic hainguyenHải Nguyễn
 
Vi Điều Khiển Ứng Dụng AT89s52
Vi Điều Khiển Ứng Dụng AT89s52Vi Điều Khiển Ứng Dụng AT89s52
Vi Điều Khiển Ứng Dụng AT89s52Mr Giap
 

Tendances (20)

Tài liệu profibus
Tài liệu profibusTài liệu profibus
Tài liệu profibus
 
Ky thuat do luong
Ky thuat do luongKy thuat do luong
Ky thuat do luong
 
Chuong 05 transistor bjt
Chuong 05 transistor bjtChuong 05 transistor bjt
Chuong 05 transistor bjt
 
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCDĐồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
 
ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!
ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!
ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!
 
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAYĐề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
 
Xử lý tín hiệu số
Xử lý tín hiệu sốXử lý tín hiệu số
Xử lý tín hiệu số
 
ĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PIC
ĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PICĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PIC
ĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PIC
 
Thiết kế mạng cảm biến không dây cho giám sát sức khỏe, HAY
Thiết kế mạng cảm biến không dây cho giám sát sức khỏe, HAYThiết kế mạng cảm biến không dây cho giám sát sức khỏe, HAY
Thiết kế mạng cảm biến không dây cho giám sát sức khỏe, HAY
 
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tục[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
 
Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520
 
Đề tài: Mô phỏng kênh truyền vô tuyến số bằng matlab, 9đ
Đề tài: Mô phỏng kênh truyền vô tuyến số bằng matlab, 9đ Đề tài: Mô phỏng kênh truyền vô tuyến số bằng matlab, 9đ
Đề tài: Mô phỏng kênh truyền vô tuyến số bằng matlab, 9đ
 
lap trinh assembly cho VXL
lap trinh  assembly cho VXLlap trinh  assembly cho VXL
lap trinh assembly cho VXL
 
Đề tài: Động cơ không đồng bộ ba pha, HAY, 9đ
Đề tài: Động cơ không đồng bộ ba pha, HAY, 9đĐề tài: Động cơ không đồng bộ ba pha, HAY, 9đ
Đề tài: Động cơ không đồng bộ ba pha, HAY, 9đ
 
Các loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptuneCác loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptune
 
Luận văn: Thiết kế mạch điều khiển tốc độ động cơ một chiều, HAY
Luận văn: Thiết kế mạch điều khiển tốc độ động cơ một chiều, HAYLuận văn: Thiết kế mạch điều khiển tốc độ động cơ một chiều, HAY
Luận văn: Thiết kế mạch điều khiển tốc độ động cơ một chiều, HAY
 
Đề tài: Thiết bị cảnh báo khí gas & phòng chống cháy nổ, HAY
Đề tài: Thiết bị cảnh báo khí gas & phòng chống cháy nổ, HAYĐề tài: Thiết bị cảnh báo khí gas & phòng chống cháy nổ, HAY
Đề tài: Thiết bị cảnh báo khí gas & phòng chống cháy nổ, HAY
 
thuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu sothuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu so
 
Lập trình pic hainguyen
Lập trình pic hainguyenLập trình pic hainguyen
Lập trình pic hainguyen
 
Vi Điều Khiển Ứng Dụng AT89s52
Vi Điều Khiển Ứng Dụng AT89s52Vi Điều Khiển Ứng Dụng AT89s52
Vi Điều Khiển Ứng Dụng AT89s52
 

En vedette

Giao trinh fpga
Giao trinh fpgaGiao trinh fpga
Giao trinh fpgaSon Vuong
 
Tong quan ve_fpga__1226
Tong quan ve_fpga__1226Tong quan ve_fpga__1226
Tong quan ve_fpga__1226KowLoon1
 
Kts cac bt giai san ve vhdl 2011
Kts cac bt giai san ve vhdl 2011Kts cac bt giai san ve vhdl 2011
Kts cac bt giai san ve vhdl 2011Hoàng Elab
 
Đại số boolean và mạch logic
Đại số boolean và mạch logicĐại số boolean và mạch logic
Đại số boolean và mạch logicwww. mientayvn.com
 
Bai giang-vhdl
Bai giang-vhdlBai giang-vhdl
Bai giang-vhdlhoangclick
 
Cong thuc va pp nhan biet
Cong thuc va pp nhan bietCong thuc va pp nhan biet
Cong thuc va pp nhan bietDuong Pham Hai
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnMr Giap
 
Giáo trình Lập trình C căn bản - Aptech
Giáo trình Lập trình C căn bản - AptechGiáo trình Lập trình C căn bản - Aptech
Giáo trình Lập trình C căn bản - AptechMasterCode.vn
 

En vedette (12)

Msptieuluan
MsptieuluanMsptieuluan
Msptieuluan
 
Giao trinh fpga
Giao trinh fpgaGiao trinh fpga
Giao trinh fpga
 
Tổng quan về FPGA
Tổng quan về FPGATổng quan về FPGA
Tổng quan về FPGA
 
Tong quan ve_fpga__1226
Tong quan ve_fpga__1226Tong quan ve_fpga__1226
Tong quan ve_fpga__1226
 
Bao cao vdk_va_pic
Bao cao vdk_va_picBao cao vdk_va_pic
Bao cao vdk_va_pic
 
Kts cac bt giai san ve vhdl 2011
Kts cac bt giai san ve vhdl 2011Kts cac bt giai san ve vhdl 2011
Kts cac bt giai san ve vhdl 2011
 
Đại số boolean và mạch logic
Đại số boolean và mạch logicĐại số boolean và mạch logic
Đại số boolean và mạch logic
 
Bai giang-vhdl
Bai giang-vhdlBai giang-vhdl
Bai giang-vhdl
 
Cong thuc va pp nhan biet
Cong thuc va pp nhan bietCong thuc va pp nhan biet
Cong thuc va pp nhan biet
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiển
 
Giáo trình Lập trình C căn bản - Aptech
Giáo trình Lập trình C căn bản - AptechGiáo trình Lập trình C căn bản - Aptech
Giáo trình Lập trình C căn bản - Aptech
 
bai tap_kts
bai tap_ktsbai tap_kts
bai tap_kts
 

Similaire à Co ban ve msp430

datasheet.pdf
datasheet.pdfdatasheet.pdf
datasheet.pdfDuyL84058
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucmster_dang
 
Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Yến Thanh Thanh
 
Báo cáo thực tập công nhân hệ thống báo động phát hiện rò rỉ khí gas
Báo cáo thực tập công nhân   hệ thống báo động phát hiện rò rỉ khí gas Báo cáo thực tập công nhân   hệ thống báo động phát hiện rò rỉ khí gas
Báo cáo thực tập công nhân hệ thống báo động phát hiện rò rỉ khí gas nataliej4
 
Tailieu.vncty.com do-an-vi-dieu-khien
Tailieu.vncty.com   do-an-vi-dieu-khienTailieu.vncty.com   do-an-vi-dieu-khien
Tailieu.vncty.com do-an-vi-dieu-khienTrần Đức Anh
 
Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Ngananh Saodem
 
BGKTMT Ch3 mức logic số
BGKTMT Ch3 mức logic sốBGKTMT Ch3 mức logic số
BGKTMT Ch3 mức logic sốCao Toa
 
ky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.pptky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.pptChienNguyenViet
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 inteldark_valley
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishiddungd4
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishiquanglocbp
 
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...Viết thuê báo cáo thực tập giá rẻ
 
Lap trinh-c-cho-vdk
Lap trinh-c-cho-vdkLap trinh-c-cho-vdk
Lap trinh-c-cho-vdkHiepsvd Bk
 
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRViết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRMr Giap
 
Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2Vuong Sói
 

Similaire à Co ban ve msp430 (20)

Nhóm-HM.docx
Nhóm-HM.docxNhóm-HM.docx
Nhóm-HM.docx
 
datasheet.pdf
datasheet.pdfdatasheet.pdf
datasheet.pdf
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautruc
 
Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520
 
Báo cáo thực tập công nhân hệ thống báo động phát hiện rò rỉ khí gas
Báo cáo thực tập công nhân   hệ thống báo động phát hiện rò rỉ khí gas Báo cáo thực tập công nhân   hệ thống báo động phát hiện rò rỉ khí gas
Báo cáo thực tập công nhân hệ thống báo động phát hiện rò rỉ khí gas
 
Ceec
CeecCeec
Ceec
 
Tailieu.vncty.com do-an-vi-dieu-khien
Tailieu.vncty.com   do-an-vi-dieu-khienTailieu.vncty.com   do-an-vi-dieu-khien
Tailieu.vncty.com do-an-vi-dieu-khien
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
 
Assembly
AssemblyAssembly
Assembly
 
Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951
 
BGKTMT Ch3 mức logic số
BGKTMT Ch3 mức logic sốBGKTMT Ch3 mức logic số
BGKTMT Ch3 mức logic số
 
ky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.pptky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.ppt
 
câu 1.docx
câu 1.docxcâu 1.docx
câu 1.docx
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 intel
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishi
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishi
 
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
 
Lap trinh-c-cho-vdk
Lap trinh-c-cho-vdkLap trinh-c-cho-vdk
Lap trinh-c-cho-vdk
 
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRViết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
 
Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2
 

Co ban ve msp430

  • 1. 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.
  • 2. - MSP430F2272: 32KB + 256B Flash Memory 1KB RAM. - MSP430F2234: 8KB + 256B Flash Memory 512B RAM. - MSP430F2254: 16KB + 256B Flash Memory 512B RAM. - MSP430F2274: 32KB + 256B Flash Memory 1KB RAM. MSP430 được sử dụng và biết đến đặc biệt trong những ứng dụng về thiết bị đo có sử dụng hoặc không sử dụng LCD với chế độ nguồn nuôi rất thấp. Với chế độ nguồn nuôi từ khoảng 1,8 đến 3,6v và 5 chế độ bảo vệ nguồn. Với sự tiêu thụ dòng rất thấp trong chế độ tích cực thì dòng tiêu thụ là 200uA, 1Mhz, 2.2v; với chế độ standby thì dòng tiêu thụ là 0.7uA. Và chế độ tắt chỉ duy trì bộ nhớ Ram thì dòng tiêu thụ rất nhỏ 0.1uA. MSP430 có ưu thế về chế độ nguồn nuôi. Thời gian chuyển chế độ từ chế độ standby sang chế độ tích cực rất nhỏ (< 6us). Và có tích hợp 96 kiểu hình cho hiển thị LCD. 16 bit thanh ghi, 16 bit RISC CPU. Có một đặc điểm của họ nhà MSP là khi MCU không có tín hiệu dao động ngoại, thì MSP sẽ tự động chuyển sang hoạt động ở chế độ dao động nội. Kiểu chân thiết kế: TA PACKAGED DEVICES PLASTIC 38-PIN TSSOP (DA) PLASTIC40-PINQFN (RHA) -- 4 0°C to 85°C 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
  • 3. Sơ đồ chân của các loại MSP 430: Hình 1: Các kiểu chân của MSP430.
  • 4. 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ó
  • 5. thể thực hiện với chỉ 1 chu kỳ máy. Mặt khác bus dữ liệu và bus địa chỉ (có độ rộng 16 bít) tách dời nhau điều này giúp cho quá trình đọc dữ liệu và mã lệnh có thể diễn ra đồng thời do đó nâng cao hiệu suất làm việc của vi xử lý. CPU gồm 16 thanh ghi 16 bit. R0-15 có các chức năng đặc biệt. Các thanh ghi còn lại được sử dụng với mục đích chung. CPU có sơ đồ khối như sau: Hình 4: kiến trúc RISC của CPU
  • 6. 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ỉ.
  • 7. 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.
  • 9. 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):
  • 10.  Chân xuất / nhập số.  Ngõ ra SMCLK (Sub-Main clock) của khối tạo dao động nội.  Ngõ vào kiểm tra xung clock TCK . • Chân P1.5/TA0/TMS (34):  Chân xuất / nhập số  Ngõ ra OUT0 củaTimer_A chế độ so sánh.  TSM: Ngõ vào lựa chọn chế độ kiểm tra. • Chân P1.6/TA1/TDI/TCLK (35):  Chân xuất / nhập số  TA1: ngõ ra OUT1của Timer A ở chế độ so sánh.  TDI: Ngõ vào kiểm tra dữ liệu.  TCLK: Ngõ vào kiểm tra xung clock. • Chân P1.7/TA2/TDO/TDI (36):  Chân xuất / nhập số  TA2: ngõ ra OUT2 của Timer A ở chế độ so sánh:.  TDI: Ngõ vào kiểm tra dữ liệu.  TDO: Ngõ ra kiểm tra dữ liệu. • Chân P2.0/ACLK/OA0I0 (6):  Chân xuất / nhập số.  Ngõ ra xung clock ACLK.  Ngõ vào tương tự A0 của kênh ADC10. • Chân P2.1/TAINCLK/SMCLK/A1/OA0O (7):  Chân xuất / nhập số.  Timer_A.  Kênh ADC10: Ngõ vào kênh tương tự A1, ngõ ra kênh tương tự OA0.  Xung clock INCLK của Timer_A  Xung clock chủ SMCLK • Chân P2.2/TAINCLK/SMCLK/A1/OA0O (8):  Chân xuất / nhập số.  Ngõ vào tương tự A1 kênh ADC10  Ngõ vào CCI0B của Timer_A chế độ capture.  Ngõ ra OUT0 của kênh ADC10 chế độ so sánh.  Ngõ vào tương tự A2 • Chân P2.3/TA1/A3/VREF-/VeREF-/OA1I1/OA1O (27):  Chân xuất / nhập số.  Ngõ vào CCI1 của Timer_A.  Ngõ ra OUT1 kênh ADC10 chế độ so sánh  Ngõ vào tương tự A3 của kênh ADC10.  Điện áp tham chiếu âm VREF-/ VeREF- • Chân P2.4/TA2/A4/VREF+/VeREF+/OA1I0 (28):  Chân xuất / nhập số.  Ngõ vào tương tự A4 của kênh ADC10  Ngõ ra OUT2 của Timer_A chế độ so sánh.
  • 11.  Điện áp tham chiếu dương VREF+/ VeREF+ • Chân P2.5/ROSC (40):  Chân xuất / nhập số.  Ngõ vào điện trở ngoài để định nghĩa tần số DCO. • Chân XIN/ P2.6 (3):  Ngõ vào kết nối với dao động thạch anh.  Chân xuất/ nhập số. • Chân XUOT/P2.7 (2):  Ngõ vào kết nối với dao động thạch anh.  Chân xuất/nhập số. • Chân P3.0/UCB0STE/UC0CLK/A5 (9):  Chân xuất / nhập số.  Chân cho phép truyền dữ liệu USCI_B0 khi hoạt động ở chế độ tớ.  Ngõ vào tương tự A5 của kênh ADC10 • Chân P3.1/UCB0SIMO/UCB0SDA (10):  Chân xuất / nhập số.  Ngõ vào USCI_B0 khi hoạt động ở chế độ slave, ngõ ra khi hoạt động ở chế độ master trong chế độ SPI.  Chân dữ liệu SDA I2 C trong chế độ I2 C. • 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 I2 C trong chế độ I2 C. • 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.
  • 12. • Chân P4.0/TB0 (15):  Chân xuất / nhập số.  Ngõ vào CCI0A của Timer_B chế độ capture, ngõ ra OUT0 chế độ so sánh. • Chân P4.1/TB1 (16):  Chân xuất / nhập số.  Ngõ vào CCI1A của Timer_B chế độ capture. Ngõ ra OUT1 chế độ so sánh. • Chân P4.2/TB2 (17):  Chân xuất / nhập số.  Ngõ vào CCI2A của Timer_B chế độ capture. Ngõ ra OUT2 chế độ so sánh. • Chân P4.3/TB0/A12/OA0O (18):  Chân xuất / nhập số.  Ngõ vào CCI0B của Timer_B chế độ capture. Ngõ ra OUT0 chế độ so sánh.  Ngõ vào tương tự A12 của kênh chuyển đổi ADC10. • Chân P4.4/TB1/A13/OA1O (19):  Chân xuất / nhập số.  Timer_B: Ngõ vào CCI1B chế độ capture. Ngõ ra OUT1 chế độ so sánh.  Ngõ vào tương tự A13 của kênh chuyển đổi ADC10. • Chân P4.5/TB2/A14/OA0I3 (20):  Chân xuất / nhập số.  Timer_B: Ngõ ra OUT0 chế độ so sánh.  Ngõ vào tương tự A14 của kênh chuyển đổi ADC10. • Chân P4.6/TBOUTH/A15/OA1I3 (21):  Chân xuất / nhập số.  Timer_B.  Ngõ vào tương tự A15 của kênh chuyển đổi ADC10. • Chân P4.7/TBCLK (22):  Chân xuất / nhập số.  Ngõ vào nhận xung TBCLK của timer_B. • Chân RST/NMI/SBWTDIO (5):  Chân Reset tác động ở mức thấp hoặc cấm ngắt. • Chân TEST/SBWTCK (37): • Chân DVCC (38,39), AVCC (14): Chân cấp nguồn VCC • Chân DVSS (1,4), AVSS (13): Chân cấp mass • Chân P1.0/TACLK/ADC10/CLK (29):  Chân xuất / nhập số.  TACLK: Ngõ vào nhận xung clock cho Timer A.  ADC10: Ngõ vào tương tự A10.  CLK: Ngõ vào bộ chuyển đổi xung clock từ nguồn xung ngoài. • Chân P1.1/TA0 (30):
  • 13.  Chân xuất / nhập số.  Timer_A, lưu trữ: Ngõ vào CCI0A, so sánh: Ngõ ra OUT0. • Chân P1.1/TA0 (31):  Chân xuất / nhập số.  Timer_A, lưu trữ: Ngõ vào CCI1A, so sánh: Ngõ ra OUT1. • Chân P1.3/TA0 (32):  Chân xuất / nhập số.  Timer_A, lưu trữ: Ngõ vào CCI2A, so sánh: Ngõ ra OUT2. • Chân P1.4/SMCLK/TCK (33):  Chân xuất / nhập số.  SMCLK (Sub-Main clock): Ngõ ra của khối tạo dao động nội, cung cấp cho các module ngoại vi.  TCK: Ngõ vào kiểm tra xung clock cho việc lập trình. • Chân P1.5/TA0/TMS (34):  Chân xuất / nhập số  TA0: Timer_A chế độ so sánh, ngõ ra OUT0.  TSM: Ngõ vào lựa chọn chế độ kiển tra. • Chân P1.6/TA1/TDI/TCLK (35):  Chân xuất / nhập số  TA1: Timer A,chế độ so sánh: ngõ ra OUT1.  TDI: Ngõ vào kiểm tra dữ liệu.  TCLK: Ngõ vào kiểm tra xung clock. • Chân P1.7/TA2/TDO/TDI (36):  Chân xuất / nhập số  TA2: Timer A,chế độ so sánh: ngõ ra OUT2.  TDI: Ngõ vào kiểm tra dữ liệu.  TDO: Ngõ ra kiểm tra xung clock. • Chân P2.0/ACLK/OA0I0 (6):  Chân xuất / nhập số.  Ngõ ra hệ thống xung clock ACLK, ADC10.  Ngõ vào kênh tương tự A0/OA0.  Ngõ vào kênh tương tự I0. • Chân P2.1/TAINCLK/SMCLK/A1/OA0O (7):  Chân xuất / nhập số.  Timer_A.  Kênh ADC10: Ngõ vào kênh tương tự A1, ngõ ra kênh tương tự OA0. • Chân P2.2/TAINCLK/SMCLK/A1/OA0O (8):  Chân xuất / nhập số.  Timer_A.  Lưu trữ ngõ vào CCI0B, nhận BLS.  Ngõ ra OUT0 của kênh ADC10 chế độ so sánh.  Ngõ vào kênh tương tự A2/OA0.  Ngõ vào kênh tương tự I1.
  • 14. • Chân P2.3/TA1/A3/VREF-/VeREF-/OA1I1/OA1O (27):  Chân xuất / nhập số.  Timer_A.  Ngõ vào CCI1 chế độ lưu trữ.  Chế độ so sánh: ngõ ra OUT1 kênh ADC10.  Ngõ vào kênh tương tự A3.  Ngõ vào điện áp tham chiếu âm. • Chân P2.4/TA2/A4/VREF+/VeREF+/OA1I0 (28):  Chân xuất / nhập số.  Điện áp tham chiếu dương . • Chân P2.5/ROSC (40):  Chân xuất / nhập số.  Ngõ vào điện trở ngoài để định nghĩa tần số DCO. • Chân XIN/ P2.6 (3):  Ngõ vào kết nối với dao động thạch anh.  Chân xuất/ nhập số. • Chân XUOT/P2.7 (2):  Ngõ vào kết nối với dao động thạch anh.  Chân xuất/nhập số. • Chân P3.0/UCB0STE/UC0CLK/A5 (9):  Chân xuất / nhập số.  Chân cho phép truyền dữ liệu khi ở chế độ USCI_B0.  Ngõ vào nhận xung của USCI_A0.  Ngõ ra kênh ADC10.  Ngõ vào kênh tương tự A5. • Chân P3.1/UCB0SIMO/UCB0SDA (10):  Chân xuất / nhập số.  Ngõ vào chế độ tớ USCI_B0.  Ngõ vào chế độ chủ trong chế độ SPI.  Dữ liệu SDA I2 C trong chế độ I2 C. • 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 I2 C trong chế độ I2 C. • 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ố.
  • 15.  Ngõ vào nhận dữ liệu USCI_A0 trong chế độ UART.  Ngõ ra chế độ tớ/ ngõ vào chế độ chủ trong chế độ SPI. • Chân P3.6 / A6/OA0I2 (25):  Chân xuất / nhập số.  Ngõ vào tương tự A6 của kênh chuyển đổi ADC10.  Ngõ vào tương tự I2 của kênh OA0. • Chân P3.7 / A7/OA1I2 (26):  Chân xuất / nhập số.  Ngõ vào tương tự A7 của kênh chuyển đổi ADC10.  Ngõ vào tương tự I2 của kênh OA1. • Chân P4.0/TB0 (15):  Chân xuất / nhập số.  Timer_B, chế độ lưu trữ: Ngõ vào CCI0A, chế độ so sánh: Ngõ ra OUT0. • Chân P4.1/TB1 (16):  Chân xuất / nhập số.  Timer_B, chế độ lưu trữ: Ngõ vào CCI1A, chế độ so sánh: Ngõ ra OUT1. • Chân P4.2/TB2 (17):  Chân xuất / nhập số.  Timer_B, chế độ lưu trữ: Ngõ vào CCI2A, chế độ so sánh: Ngõ ra OUT2. • Chân P4.3/TB0/A12/OA0O (18):  Chân xuất / nhập số.  Timer_B, chế độ lưu trữ: Ngõ vào CCI0B, chế độ so sánh: Ngõ ra OUT0.  Ngõ vào tương tự A12 của kênh chuyển đổi ADC10, ngõ ra tương tự OA0. • Chân P4.4/TB1/A13/OA1O (19):  Chân xuất / nhập số.  Timer_B, chế độ lưu trữ: Ngõ vào CCI1B, chế độ so sánh: Ngõ ra OUT1.  Ngõ vào tương tự A13 của kênh chuyển đổi ADC10, ngõ ra tương tự OA1. • Chân P4.5/TB2/A14/OA0I3 (20):  Chân xuất / nhập số.  Timer_B, chế độ so sánh: Ngõ ra OUT0.  Ngõ vào tương tự A14 của kênh chuyển đổi ADC10, ngõ vào tương tự I3 củaOA0. • Chân P4.6/TBOUTH/A15/OA1I3 (21):  Chân xuất / nhập số.  Timer_B.  Ngõ vào tương tự A15 của kênh chuyển đổi ADC10, ngõ vào tương tự OA0. • Chân P4.7/TBCLK (22):
  • 16.  Chân xuất / nhập số.  Ngõ vào nhận xung TBCLK của timer_B. • Chân RST/NMI/SBWTDIO (5):  Chân Reset tác động ở mức thấp hoặc cấm ngắt. • Chân TEST/SBWTCK (37): • Chân DVCC (38,39), AVCC (14): Chân cấp nguồn VCC • Chân DVSS (1,4), AVSS (13): Chân cấp mass Cấu trúc các thanh ghi: Bốn thanh ghi đầu tiên từ R0 – R3 được chỉ định làm thanh ghi bộ đếm chương trình, con trỏ ngăn xếp, thanh ghi trạng thái, constant Generator. Các thanh ghi còn lại là những thanh ghi sử dụng mục đích chung. Các thiết bị ngoại vi được kết nối tới CPU sử dụng dữ liệu, địa chỉ, bus điều khiển.
  • 17. 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. 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.
  • 18. Nếu cho phép điện trở kéo, giá trị của bít tương ứng với điện trở được lựa chọn: Bit = 0 khi điện trở kéo xuống. Bít = 1 khi điện trở kéo lên. Thanh ghi định hướng PxDIR: Các chân của mỗi port được định hướng làm đầu ra hoặc đầu vào phục thuộc vào giá trị các bít của thanh ghi PxDIR: Nếu bit = 0 chân được định hướng làm đầu vào. Nếu bit = 1 chân được định hướng làm đầu ra. Thanh ghi cho phép điện trở kéo: Mối bít của thanh ghi PxREN cho phép hoặc không cho phép điện trở kéo: Bit = 1 điện trỏ kéo lên. Bit = 0 điện trở kéo xuốNg. Thanh ghi lựa chọn chức năng PxSEL và PxSEL2: Các chân của mỗi port đều có nhiều chức năng tương ứng với các module ngoại vi khác nhau. Mỗi bít của thanh ghi PxSEL và PxSEL2 được sử dụng để lựa chọn chức năng là các port xuất nhập hoặc chức năng đặc biệt. PxSEL2 PXSEL Chức năng của châ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:
  • 19. - 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.
  • 20. Bảng 3: Địa chỉ thanh ghi xuất nhập Bộ định thời: MSP 340 có hai bộ định thời 16 Bit là Timer_A và Timer_B nó cũng đồng thời đóng vai trò là bộ đếm. Timer_A: Đặc tính của Timer_A: Là một bộ Timer/Counter 16 bit. Với ba thanh ghi lưu trữ và 3 thanh ghi so sánh. Là một Timer đa chức năng. Đếm thời gian, so sánh, PWM . Timer_A cũng có khả năng ngắt khi counter đếm tràn hoặc mỗi thanh ghi đếm tràn. Các đặc tính chính của Timer_A bao gồm:
  • 21. + Là một Timer/counter 16 Bit không đồng bộ với 4 chế độ hoạt động. + Có thể lựa chọn và cấu hình nguồn xung + Hai tới 3 thanh ghi có thể cấu hình capture/compare + Cấu hình đầu ra với chế độ PWM + Chốt ngõ vào và ngõ ra không đồng bộ Hình 9: Sơ đồ khối của Timer_A Timer hoạt động ở chế độ Counter 16 Bit: Ở chế độ Counter giá trị thanh ghi TAR tăng hoặc giảm theo cạnh lên của xung clock (tùy thuộc vào chế độ hoạt động). Giá trị của thanh ghi TAR có thể được ghi hoặc đọc bởi phần mềm. Nó có khả năng tạo ra một ngắt khi đếm tràn. Thanh ghi TAR có thể bị xóa khi set bit TACLR. Việc set bit TACLR đồng thời cũng xóa giá trị lựa chọn cho bộ chia xung hoặc chế độ đếm lên hay đếm xuống. Lựa chọn nguồn xung và bộ chia xung:
  • 22. 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ụ. Hình 10: Cờ ngắt chế độ trong chế độ so sánh và lưu trữ Thanh ghi điều khiển Timer_A:
  • 23. 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: 0 Dừng chế độ 1 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:
  • 24. 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ộ.
  • 25. 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.
  • 26. 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
  • 27. Các thanh ghi của Timer_B: Bảng 5: Thanh ghi của Timer_B Thanh ghi điều khiển TBCTL: + Bit 15: không sử dụng + CNTLx Bit 12-11: Độ dài của bộ đếm: 0 16-bit,TBR(max) = 0FFFFh 1 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
  • 28. + 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
  • 29. 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
  • 30. 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.
  • 31. Đ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:
  • 32. 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
  • 33. 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
  • 34. 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:
  • 35. + 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.
  • 36. 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.
  • 37. 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.
  • 38. Các thanh ghi điều khiển ADC12: Bảng 7: Thanh ghi điều khiển ADC 12
  • 39. 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
  • 40. 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
  • 41. 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:
  • 42. + 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.
  • 43. 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 + XTSBit 6: Là bít lựa chọn chế độ:
  • 44. 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: 0 DCOCLK 1 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
  • 45. 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.
  • 46. 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
  • 47. 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.
  • 48. 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. 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
  • 49. 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
  • 50. 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 o C 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
  • 51. 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
  • 52. Sơ đồ mạch eZ430-RF2500: Hình 24: Sơ đồ nguyên lý của USB
  • 53. Hình 25: Sơ đồ nguyên lý của USB
  • 54. Hình 25: Sơ đồ nguyên lý của board eZ430-RF2500T
  • 55. 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.
  • 56. 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
  • 57. - 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
  • 58. 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
  • 59. 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ó:
  • 60. 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:
  • 61. 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:
  • 62. 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:
  • 63. 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:
  • 64. 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.
  • 65. 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:
  • 66. 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ó.
  • 67. 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:
  • 68. Hình 29: Cửa sổ khởi động IAR Embedded Workbench IDE
  • 69. 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 .
  • 70. 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.
  • 71. 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
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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.
  • 77. 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.
  • 78. 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.
  • 79. 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);
  • 80. 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.
  • 81. 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.
  • 82. 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
  • 83. 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
  • 84. 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 .
  • 85. 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.
  • 86. 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:
  • 87. Hình 52: Nguyên lý hoạt động Để IC hoạt động ta phải nối chân số 10 lên nguồn 5V (không tác động Reset) và nối chân số 13 xuống Mass ( cho phép ngõ ra ). Với dữ liệu 8 bit dữ liệu được đưa vào chân 14 của IC, cứ sau mỗi xung clock được đưa vào chân số 11 của IC thì bit thứ 1 của dữ liệu đầu vào được đưa ra ở ngõ ra. Vậy sau 8 xung clock cung cấp cho chân số 11 thì 8 bit dữ liệu đầu vào sẽ được đưa ra ở ngõ ra từ Q0 – Q7. Khi 8 bit dữ liệu được đưa ra ở ngõ ra như vậy, chúng ta cần 1 xung clock cung cấp cho chân số 12 của IC để chốt dữ liệu đầu ra (Dù có thêm xung clock cung cấp cho chân số 11 thì đầu ra vẫn không thay đổi). Lúc này ta sẽ có 8 bit dữ liệu đầu ra từ Q0 - Q7 trùng khớp với 8 bit dữ liệu được đưa ở đầu vào. Muốn dịch bao nhiêu bit thì ta cần bấy nhiêu xung clock rồi đưa 1 xung chốt để đẩy dữ liệu ra ngoài. Ở đây nếu muốn dịch số bit lớn hơn 8 thì ta cần nối tiếp thêm IC 74HC595. Nếu là 16 bit thì cần 2 IC, 24 bit thì 3 IC, 32 bit thì 4 IC …. Ta dùng chân số 9 của con thứ nhất nối tiếp vào chân dữ liệu đầu vào của con thứ 2 (chân số 14) và dùng chân số 9 của con thứ 2 nối tiếp vào chân dữ liệu đầu vào của con thứ 3, cứ thế tiếp tục. Muốn dịch bao nhiêu bit thì cần bấy nhiêu xung clock và 1 xung chốt để đẩy dữ liệu ra ngoài. Ở đồ án này, nhóm chỉ cần dịch 16 bit dùng 2 IC 74HC595 nối tiếp. Dùng 3 tầng như thế để có dịch được 48 bit. 3.2.2 IC 2803: 3.2.2.1 Giới thiệu: IC 74HC595 có các đặc điểm sau: + IC có 18 chân. + Vi mạch gồm 8 cổng đệm đảo, đầu ra cực thu hở. + Dòng ngõ ra lên tới 500mA. + Điện áp ngõ ra lên tới 95V. 3.2.2.2 Sơ đồ chân: Hình 53: Sơ đồ chân IC 2803
  • 88. 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.
  • 89. 3.3 Phưong pháp mở rộng Port: 3.3.1 Sơ đồ nguyên lý:
  • 90. Hình 55: Sơ đồ nguyên lý mở rộng Port 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:
  • 91. Hình 56: Sơ đồ mạch in mở rộng Port 3.3.4 Mạch hoàn chỉnh: Hình 57: Mạch hoàn chỉnh
  • 92. 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
  • 93. 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.
  • 94. 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.
  • 95. + Nối chân 12 của eZ430-RF2500T làm chân Mass chung. Chương trình: void MoRongP2(unsigned int q); // Khai báo hàm mở rộng tầng thứ 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
  • 96. { _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:
  • 97. + Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn. Chương trình: #include "msp430x22x4.h" // Khai báo 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)
  • 98. { 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--); }
  • 99. 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:
  • 100. + Nối 16 bit của tầng mở rộng thứ 2 với 16 Led đơn. Chương trình: #include "msp430x22x4.h" // Khai báo 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;
  • 101. f=0x8000; g=16; while(g>0) { h = e&f; if ( h == f) { _P3_OUT->_BIT.b2=1; } else { _P3_OUT->_BIT.b2=0; } _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; } _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; } void Delay(unsigned int Value) // Hàm delay { volatile unsigned int l = 0; for(l=Value; l>0; l--); }
  • 102. 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.
  • 103. + Nối 16 bit của tầng mở rộng thứ 3 với 16 Led đơn còn lại. Chương trình: #include "msp430x22x4.h" // Khai báo 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;
  • 104. m=17; while(m>0) { MoRongP3(n); Delay(10000); q=q<<1; m--; MoRongP3(q); } } } void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 { volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) { h = e&f; if ( h == f) { _P3_OUT->_BIT.b2=1; } else { _P3_OUT->_BIT.b2=0; } _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; } _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; } void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 { volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) { l = i&j; if ( l == j) { _P4_OUT->_BIT.b4=1; } else
  • 106. 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.
  • 107. + Nối 16 bit của tầng mở rộng thứ 3 với 16 Led đơn còn lại. Chương trình: #include "msp430x22x4.h" void MoRongP2(unsigned int e); void MoRongP3(unsigned int i); void Delay(unsigned int Value); union reg { struct bit { unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }_BIT; unsigned char _BYTE; }; union reg* _P4_DIRECT = (union reg*)0x1E ; union reg* _P4_OUT = (union reg*)0x1D ; union reg* _P3_DIRECT = (union reg*)0x1A ; union reg* _P3_OUT = (union reg*)0x19 ; union reg* _P2_DIRECT = (union reg*)0x2A ; union reg* _P2_OUT = (union reg*)0x29 ; int main(void) // Chương trình chính { WDTCTL = WDTPW + WDTHOLD; _P4_DIRECT->_BYTE = 0xff; _P3_DIRECT->_BYTE = 0xff; _P2_DIRECT->_BYTE = 0xff; volatile unsigned int o,n,q,m,p,t,s; for(;;) { n=0x0000; m=0x0001; q=16; while (q>0) { n=n|m; MoRongP2(n) Delay(10000);; m=m<<1; q--; }
  • 108. MoRongP2(n); p=0x0000; t=0x0001; s=16; while (s>0) { p=p|t; MoRongP3(p); Delay(10000); t=t<<1; s--; } MoRongP3(0x0000); } } void MoRongP2(unsigned int e) // Hàm mở rộng tầng 2 { volatile unsigned int f,g,h; f=0x8000; g=16; while(g>0) { h = e&f; if ( h == f) { _P3_OUT->_BIT.b2=1; } else { _P3_OUT->_BIT.b2=0; } _P2_OUT->_BIT.b4=0; _P2_OUT->_BIT.b4=1; f=f>>1; g--; } _P3_OUT->_BIT.b0=0; _P3_OUT->_BIT.b0=1; } void MoRongP3(unsigned int i) // Hàm mở rộng tầng 3 { volatile unsigned int j,k,l; j=0x8000; k=16; while(k>0) { l = i&j; if ( l == j)