SlideShare a Scribd company logo
1 of 26
Download to read offline
i h c Bách Khoa à N ngĐạ ọ Đ ẵ
Khoa i n T - Vi n ThôngĐ ệ ử ễ
Báo cáo ti u lu nể ậ
MSP430
Thành viên:
Võ Th M nị ẫ
Lê Bá Tu nấ
Bùi H u Triữ
Nguy n H u Anh Khoaễ ữ
GVHD:
Ph m Xuân Trungạ
Chương 1 : Lý thuyết
1.1 Tổng quan về MSP430 (Mixed Signal Controller).
1.1.1 Chip MSP430G2x31.
- Nguồn cung cấp: 1.8V – 3.6V
- Công suất tiêu tán cực thấp.
- 5 chế độ tiết kiệm năng lượng.
- Wake-up nhanh từ chế độ Standby
<1us
- Kiến trúc RISC 16 bits
- Có nhiều nguồn xung Clock để lựa
chọn.
- Timer_A 16 bit với 2 thanh ghi
Compare/Capture.
- USI hỗ trợ I2C, SPI
- 10 bit 200kbps ADC với nguồn
tham chiếu nội, Sample và Hold,
Autoscan.
1.1.2 Sơ đồ chân.
1.2 Hệ thống Reset, Ngắt và các chế độ hoạt động.
1.2.1 Hệ thống Reset và khởi động:
Có 2 hệ thống POR (Power on Reset) và PUC (Power UP Clear).
- POR chỉ được sinh 3 sự kiện sau:
o Cấp nguồn cho thiết bị.
o Tín hiệu ở chân ~RST/NMI xuống mức thấp
o SVS ở mức thấp khi PORON = 1
- PUC được sinh ra khi POR được sinh, nhưng không xảy ra ngược lại. Các sự kiện sau
sẽ sinh ra PUC:
o POR được sinh ra.
o WDT hết hiệu lực
o Chốt an toàn của WDT và Flash memory bị vi phạm.
1.2.2 Hệ thông ngắt
Có 3 loại ngắt trong msp430 là: Reset hệ thống, Non-maskable NMI, maskable.
1.3 Bộ nhớ và tổ chức bộ nhớ
1.3.1 Không gian địa chỉ.
Bộ nhớ MSP430 theo kiến trúc von-Neumann không
gian nhớ bao gồm các thanh ghi có chức năng đặc
biệt SFRs, ngoại vi, RAM, Flash/ROM như hình bên.
- Flash/ROM: độ lớn tùy thuộc vào từng dòng
chip. Bộ nhớ Flash có thể sử dụng cho cả
data và code. Word hoặc byte tables có thể
được lưu trữ và sử dụng ngay trên Flash mà
không cần sao chép vào RAM. Interrupt
vector được định ở 16bytes từ 0FFE0h –
0FFFFh
- RAM: bắt đầu từ 200h, độ lớn của RAM phụ
thuộc vào dòng chip và lượng RAM đang sử
dụng.
- Peripheral Module: 16 bit được định ở địa
chỉ từ 100h – 1FFh, được truy cập bằng word,
nếu truy cập bằng byte thì byte cao luôn luôn
bằng 0. Ngoại vi 8bit từ 10h đến FFh chỉ được truy cập bằng byte.
- SFRs: 16 byte từ 0h đến 16h.
1.3.2 Tổ chức bộ nhớ
Bô nhớ được tổ chức theo các
byte. Các byte được đánh địa chỉ chẵn
và lẽ. Bộ nhớ MSP430 còn có thể thao
tác với word 16bit.
Một word gồm 2 byte kề nhau (High byte & Low
byte), địa
chỉ của
word là
địa chỉ
của byte
thấp, vì
vậy luôn là địa chỉ chẵn
1.4 CPU
Bao gồm ALU , 16 thanh ghi 16 bit và các mạch logic để
giải mã lệnh và thực hiện chương trình.
4 thanh ghi đầu: PC - là bộ đếm chương trình chứa địa chỉ
của lệnh kế tiếp , SP, SR - chứa tập hợp các cờ như C,N,Z,V
hoặc GIE hoặc CPUOFF OSC, Constant Generator - chứa các hằng số như 1 2 4…. . Và 12 thanh
ghi mục đích chung. Cả word và byte đề có thể được ghi vào trong thanh ghi của CPU. Khi dữ liệu ghi
vào là byte thi byte cao sẽ bị xóa byte thấp chứa giá trị của byte đưa vào.
1.5 Clock Generator
Sơ đồ phần cứng và các nguồn xung clock
- Để đồng bộ các hoạt động của Vi điều khiển
- MSP430 có nhiều nguồn xung clock để lựa chọn nhằm tối ưu hóa hiệu suất và công suất hoạt
động. Clock có thể được cấu hình để hoạt động mà không cần thành phần bên ngoài nào,hoặc với
1 điện trở, hoặc với 1 , 2 thạch anh ngoài.
o Low frequency Crystal Clock LFXT1CLK: Nguồn Clock này lấy từ thạch anh ngoài gắn
vào chân XIN, XOUT. Intended frequency là 32Khz là nguồn của ACLK. Có thể hoạt động ở
tần số cao hơn.
o Crystal to Clock XT2CLK : dùng thạch anh ngoài gắn vào 2 chân XT2IN XT2OUT, mục
đích là dùng với thạch anh tần sos cao 400KHz – 6Mhz
o Digitalally Controlled Oscillator Clock (DCOCLK): clock nội, mặc định khi không cấu hình
thì dùng cho tín hiệu MCLK ở 900Khz
o Very Low Frequency (VLOCLK) là ngồn nội có công suất thấp, tấn số thấp 12Khz.
- Các tín hiệu Clock:
o Master Clock: dùng cho CPU. nguồn được chọn bởi SELMx (Basic Clock System Control
Register BCSCTL 2) có thể là VLOCLK XT2CLK LFXT1CLK DCOCLK, chia tần số được lựa
chon bởi DIVMx
o Submaster Clock: dùng cho các ngoại vi, nguồn của nó là VLOCLK XT2CLK LFXT1CLK
DCOCLK được điều khiển bởi các bit SELS SCG (BCSCTL2), chia tần số DIVSx
o Auxillary Clock: dùng cho các module ngoại vi. Nguồn chủa nó LFXT1CLK hoặc VLOCLK,
có thể chia tần số 1 2 4 8 lần.
1.6 Ngõ ra/ vào
1.6.1 Cấu trúc xuất nhập:
o Gồm 8 port xuất nhập từ P0 -> P7.
o Mỗi port gồm 8 chân
o Mỗi chân có thể làm đầu vào hay đầu ra,có thể được đọc hay được ghi riêng lẻ.
o Port P1 và P2 có khả năng ngắt
o Mỗi ngắt được cấu hình theo cạnh lên,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
1.6.2 Đặc tính xuất nhâp:
o chức năng của chân không phụ thuộc vào việc lập trình
o có thể làm input hay output
o P1 và P2 được cấu hình riêng cho ngắt
o không phụ thuộc vào thanh ghi input hay output
o cấu hình có điện trở kéo
1.6.3 Hoạt động xuất nhập:
o Được lập trình bằng phần mềm
1.6.4 Thanh ghi input
o Bit=0:đầu vào ở mức thấp
o Bit =1:đầu vào ở mức cao
1.6.5 Thanh ghi output:
o Khi không sử dụng điện trở kéo,giá trị các thanh ghi tương ứng:
o Bit=0:đầu vào ở mức thấp
o Bit =1:đầu vào ở mức cao
o Khi không sử dụng điện trở kéo,giá trị tương ứng:
o Bit=0: điện trở kéo xuống
o Bit =1: điện trở kéo lên
1.6.6 Thanh ghi định hướng PxDIR:
o Các chân làm đầu vào hay đầu ra được định hướng bởi các bit của thanh ghi PxDIR
o Bit=0:chân được định hướng làm đầu vào(chú ý dễ nhầm lẫn với PIC)
o Bit =1:chân được định hướng làm đầu ra
1.6.7 Thanh ghi cho phép điện trở kéo PxREN:
o Mỗi bit của thanh ghi PxREN cho phép hay không cho phép điện trở kéo
o Bit=0: điện trở kéo xuống
o Bit =1: điện trở kéo lên
1.6.8 Thanh ghi lựa chọn chức năng PxSEL PxSEL2:
o Các bit của thanh ghi PxSEL và PxSEL2 được sử dụng để lựa chọn chức năng là Port xuất nhập
hay các chức năng đặc biệt khác
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
Lưu ý: khi PxSEL=1,các ngắt của P1 và P2 bị cấm.
1.6.9 Các ngắt P1 và P2:
o Mỗi chân của P1 và P2 đều có khả năng ngắt.
o Ngắt đươc cấu hình bởi thanh ghi PxIFG, PxIE và PxIES.
o Sử dụng thanh ghi PxIFG để xác định nguyên nhân ngắt của P1 và P2
a) Thanh ghi cờ ngắt P1IFG và P2IFG
o Mỗi bit của thanh ghi PxIFGx là 1 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 1 ngắt tương ứng với các bit PxIE
và GIE đươc set.
o Mỗi cờ ngắt được reset bằng phần mềm.
o Phần mềm có thể set cờ ngắt
o Bit=0: không có cờ ngắt nào
o Bit =1: có 1 ngắt đang chờ
1.6.10 Thanh ghi lựa chọn ngắt bằng sườn xung P1IES và P2IES.
o Bit=0: cờ ngắt được set lên khi có cạnh lên của xung
o Bit =1: cờ ngắt được set lên khi có cạnh xuống của xung
1.6.11 Thanh ghi cho phép ngắt P1IE và P2IE
o Bit=0: cấm ngắt
o Bit =1: cho phép ngắt
1.7 Timer_A
1.7.1 Giới thiệu về Timer_A:
Timer_A có:
o 16bit timer/counter với 4 chế độ hoạt động: Stop, Up, Continuous, Up/Down.
o Nguồn xung clock có thể lựa chọn và cấu hình từ nhiều nguồn khác nhau
o 3 thanh ghi Capture/Compare (TACCRx)
o PWM
o 2 vector ngắt : TACCR0 và TAIV
1.7.2 Sơ đồ phần cứng Timer_A
1.7.3 Các thanh ghi sử dụng trong Timer_A:
1.7.4 Lựa chọn nguồn xung clock cho Timer_A:
o Nguồn xung clock cho timerA có thể được lựa chọn từ nguồn xung clock : ACLK, SMCLK hay từ
nguồn bên ngoài TACLK, INCLK thông qua việc lựa chọn các bit TASSELx(TACTL). Cụ thể:
TASSELx Nguồn lựa chọn
00 TACLK
01 ACLK
10 SMCLK
11 INCLK
o Các nguồn xung clock được lựa chọn này có thể được sử dụng trực tiếp cho hoạt động của
Timer_A hay có thể được chia bởi 2, 4, 8 bằng cách sử dụng các bit IDx(TACTL). Cụ thể:
IDx Nguồn clock được chia
00 /1
01 /2
10 /4
11 /8
1.7.5 Các chế độ hoạt động của Timer_A:
TimerA có 4 chế độ hoạt động : Stop, Up, Continuous, Up/Down được lựa chọn bởi các bit
MCx(TACTL).Cụ thể:
MCx Mode Description
00 Stop TimerA không hoạt động
01 Up Timer_A đếm lặp lại từ 0 đến giá trị thanh ghi TACCR0
10 Continuous Timer_A đếm lặp lại từ 0 đến giá trị FFFFh
11 Up/Down Timer_A đếm lặp lại từ 0TACCR00
Timer_A hoạt động ngay khi giá trị các bit MCx khác 00 và nguồn xung clock được chọn cho
Timer_A hoạt động.
Khi TimerA hoạt động ở chế độ Up hoặc Up/Down, timer sẽ dừng hoạt động khi ghi giá trị 0
vào thanh ghi TACCR0
1.7.5.1 Up Mode:
Thay đổi giá trị thanh ghi TACCR0 khi timer đang hoạt động:
+ Nếu giá trị mới bằng hay lớn hơn giá trị cũ hay lớn hơn giá trị hiện tại, Timer sẽ đếm đến giá trị
mới.
+ Nếu giá trị mới bé hơn giá trị hiện tại, timer sẽ đếm lại từ giá trị 0.
o Cấu hình Timer_A hoạt động ở chế độ Up:
Cho phép ngắt TACCR0 CCIFG:
 CCIE =1 trong thanh ghi TACCTL0
Nạp giá trị vào thanh ghi TACCR0:
TACCR0 = xxxx
Lựa chọn nguồn xung clock dùng cho Timer_A
 thiết lập giá trị các bits TASSELx trong thanh ghi TACTL
Thiết lập giá trị chia cho xung clock:
 thiết lập bits IDx trong thanh ghi TACTL (mặc định IDx = 00 -- /1)
Lựa chọn timer_A hoạt động ở chế độ Up:
 thiết lập MCx = 01 trong TACTL
 Code cho chương trình ngắt…
1.7.5.2 Continuous Mode:
Cấu hình Timer_A hoạt động ở chế độ Continuous: Tương tự như trên
1.7.5.3 Up/Down Mode:
o Thay đổi giá trị thanh ghi TACCR0 khi timer đang hoạt động:
• Nếu timer đang trong chiều đếm xuống, timer sẽ tiếp tục đếm xuống đến 0.
• Nếu timer đang trong chiều đếm lên và giá trị mới lớn hơn hay bằng giá trị cũ hay lớn hơn giá trị
hiện tại, timer sẽ đếm đến giá trị mới trước khi đếm xuống.
• Nếu timer đang trong chiều đếm lên và giá trị mới bé hơn giá trị giá trị hiện tại, timer sẽ bắt đầu
đếm xuống
o Cấu hình Timer_A hoạt động ở chế độ Up:
Tương tự như trên
1.7.6 Compare Mode:
Compare mode được lựa chọn khi bit CAP()=0(mặc định).
Compare mode dùng để tạo ra khoảng thời gian hay điều chế độ rộng xung PWM
Compare mode hoạt động dựa trên nguyên tắc so sánh giá trị của thanh ghi timer_A(TAR) với giá
trị thanh ghi TACCRx
Khi giá trị của TAR bằng giá trị của TACCRx thì sẽ xuất hiện các sự kiện:
• Cờ ngắt CCIFG =1
• EQUx = 1
• EQUx ảnh hưởng đến lối ra PWM
• Tín hiệu CCI lật sang SCCI
1.7.7 Output Unit:
Mỗi khối capture/compare chứa một bộ OUTPUT UNIT dùng để điều chế độ rộng xung PWM.
Mỗi OUTPUT UNIT có 8 chế độ hoạt động tạo ra tín hiệu dựa trên tín hiệu EQU0 và EQUx.
OUTPUT UNIT được lựa chọn hoạt động dựa trên giá trị của các bit OUTMODx.
Cụ thể:
OUTMODx Mode Description
000 Output Tín hiệu ra OUTx được xác định bởi bit OUTx
001 Set Lối ra được set khi TAR = TACCRx.Nó sẽ giữ nguyên như vậy cho đến
khi timer được reset hay khi 1 output mode khác được lựa chọn và ảnh
hưởng đến lối ra.
010 Toggle/Reset Lối ra đảo trạng thái khi TAR = TACCRx và reset khi TAR = TACCR0
011 Set/Reset Lối ra set khi TAR = TACCRx và reset khi TAR = TACCR0
100 Toggle Lối ra đảo trạng thái khi TAR = TACCRx. Chu kì tín hiện ra gấp 2 lần
chu kì timer
101 Reset Lối ra reset khi TAR = TACCRx. Nó sẽ giữ nguyên như thế cho đến khi
1 output mode khác được lựa chọn và ảnh hưởng đến lối ra
110 Toggle/Set Lối ra đảo trạng thái khi TAR= TACCRx và set khi TAR = TACCR0
111 Reset/Set Lối ra reset khi TAR = TACCRx và set khi TAR = TACCR0
Cấu hình PWM:
Cấu hình chức năng I/O nhận chức năng ra OUTx của PWM:
Vì các chân P1.1 P1.2 và P1.3 là những chân ra của PWM nên cần cấu hình các bits tương ứng
trong thanh ghi P1DIR và P1SEL. Ví dụ: P1DIR = 0x0C, P1SEL= 0x0C chọn chân P1.2 và P1.3 là chân ra
PWM của CCR1 và CCR2
Nạp giá trị cho TACCR0, TACCRx
Lựa chọn thanh ghi capture/compare để tạo PWM :
Thiết lập các bit OUTMODx trong thanh ghi TACCTLx tương ứng.
Lựa chọn nguồn xung clock, hệ số chia và chế độ hoạt động cho Timer_A :
 Thiết lập các bit TASSELx, IDx và MCx trong thanh ghi TACTL
1.7.8 Ngắt Timer_A:
Timer_A có 2 vector ngắt:
Vector ngắt TACCR0 cho TACCR0 CCIFG
Vector ngắt TAIV cho TAIFG và CCIFGs của CCR1 và CCR2
Cụ thể :
Cờ ngắt TACCR0 CCIFG có độ ưu tiên cao nhất trong ngắt Timer_A và tự động reset khi
chương trình ngắt được thực thi
Cờ ngắt TACCR1 CCIFG ,TACCR2 CCIFG và TAIFG có cùng vector ngắt TAIV và được
phân chia theo mức độ ưu tiên như sau:
Ngắt có mức độ ưu tiên cao hơn sẽ được thực hiện trước bằng cách nạp 1 giá trị vào
thanh ghi TAIV. Giá trị này sẽ được tính toán hay cộng vào thanh ghi PC để nhảy tới chương trình
con phục vụ ngắt.
Cờ ngắt CCIFG của TACCR1 và TACCR2 cũng được tự động reset khi thoát khỏi chương
trình ngắt.
Nếu có 1 ngắt khác xảy ra khi đang thực hiện ngắt, ngắt khác đó sẽ được thực hiện ngay
lập tức sau khi ngắt trước được thực thi xong.
1.8 ADC10:
- 10 bit ADC, 8 kênh ADC.
- Tốc độ 200kpbs.
- Có thể lựa chọn nguồn clock cho ADC:
ADC10OSC (5Mhz), ACLK, MCLK,
SMCLK.
- Vref nội và ngoại.
- Autoscan
- Có thể lấy nhiều kênh cùng lúc.
- Điều khiển chuyển đổi dữ liệu và tự động
lưu trữ mẫu đã lấy.
- Có ngắt
1.8.1 Phần cứng và hoạt động:
- ADC10 được cấu hình bởi 2 thanh ghi ADC10CTL0
và ADC10CTL1 và 2 thanh ghi này chỉ được thay
đổi khi ENC = 0; khi bắt đầu lấy mẫu thì phai đưa
ENC = 1;
- Nadc = 1023
- Lựa chọn kênh ADC: ADC10AEx bits
- Voltage Reference Generator: Nguồn nội 1.5V 2.5V
hoặc Vcc được lựa chọn dựa vào bit REFON
REF2_5 REFOUT
- Sample and Conversion Timing: SHTx lựa chọn chu
kì lấy mẫu 4 8 16 64xADC10CLK,
- Conversion Mode:
CÓNEQx MODE
00 Single chanel – Single Conversion
01 Sequence of channels
10 Repeat single channels
11 Repeat Sequence of channels
1.8.2 Mode Single Chanel – Single
Conversion.
- Sau khi bật chuyển đổi ADC10
(ADC10ON) và thiết lập kênh lấy ADC
(INCHx).
- Đợi ENC và ADC10SC được kích hoạt thì
bắt đàu chuyển đổi
- Lấu mẫu dữ liệu vào khi tín hiệu
SAMPCON ở mức cao với tốc độ là
4/8/16/64x ADC10CLK.
- Quá trình chuyển đổi dữ liệu sau đó sẽ
mất thêm 12xADC10CLK.
- Lưu kết quả vào ADC10MEM và set cờ
ADC10IFG mất thêm 1 ADC10CLK
- Trong quá trình thực hiện từng bược trên
nếu có thay đổi tín hiệu SHS, ENC
ADC10SC thì quá trình sẽ nhảy về trạng
thái đợi 1 hoặc tất cả các tín hiệu trên
được set trở lại.
1.8.3 Mode Single of Sequence
- Được phân tích giống mode trên nhưng
khác ở chỗ là quá trình tự kết thúc khi
các kênh lựa chọn đã được lấy mẫu hết
điều này được báo bằng tín hiệu EOS.x
nếu tín hiệu này bằng 1 quá trình chuyễn
đổi các kênh đã xong.
1.8.4 Các bit hay dùng trong
ADC
Trong thanh ghi
ADCCTL1
o INCHx (4bits) : lựa chọn kênh lấy ADC.
o ADC10DIVx (2bits) : ADC10
Clock Divider.
o ADC10SSELx (2bits): Clock
source select.
Trong thanh ghi ADCCTL0
o SREFx (3bits): Chọn nguồn
áp tham chiếu.
o ADC10SHTx (2bits): chọn
thời gian sample và hold.
o ADC10SR (1bits) : tốc độ
lấy mẫu 0 (200kbps)
1(150kbps).
o REFOUT (1bit): Có chọn
nguồn tham chiếu ngoài hay
không.
o REFON (1bit): bật nguồn
tham chiếu nội ->REF2_5V
(1bit) nguồn nội là 1.5V hay
2V
o ADC10ON: Bật ADC10.
o ADC10IE: cho phép ngắt ADC10
Trong thanh ghi ADC10AE0
o ADC10AE0x (Bit 7-0) cho phép chân ngõ vào là ngõ vào Analog
Cách cấu hình đơn giản cho ADC hoạt động.
1.8.5 ADC10 DATA TRANFER CONTROLLER
- Được kích hoạt nếu giá trị thanh ghi ADC10DTC1 khác không.
- Khi ADC10 chuyên đổi xong giá trị được đẩy vao ADC10MEM, bộ chuyển dữ liệu được kích
hoạt.Mỗi DTC tranfer cần 1 chu kỳ MCLK. Có 2 chế độ: One block và two block tranfer
1.8.6 ADC10 Interupt
- Một ngắt và một vector ngắt đi kèm với bộ ADC10.
- Khi DTC không được dùng thì ADC10IFG được set khi quá trình chuyển đổi ADC đã xong và dữ
liệu được load vào ADC10MEM. Khi dùng DTC thì ADC10IFG được set khi khi việc chuyển vào bộ
nhớ 1 block hoàn
thành.Nếu bit GIE và
ADC10IE được set thì khi
ADC10IFG được set thì
sẽ tạo ra ngắt.
1.9 UART
1.9.1 Giới thiệu :
o Là bộ truyền nhận dữ liệu nối tiếp bất đồng bộ
o Khi kết hợp với mỗi thiết bị chuyển đổi điện áp khác nhau nó tạo ra 1 chuẩn giao tiếp khác
nhau ( vd: chuẩn RS232 thông qua MAX232,…)
o Dữ liệu được đóng gói thành các khung truyền trước khi truyền đi, một khung truyền bao
gồm :
o Start bit (=0): báo cho thiết bị nhận chuẩn bị có dữ liệu truyền đến
o Data : là phần dữ liệu gửi đi ngay sau start bit
o Parity bit : là bit được thêm vào để kiểm tra dữ liệu sau khi truyền
o Stop bit : thường là 1 bit hoặc 2 bit dùng để báo kết thúc một khung truyền
o Tốc độ baud ( số bit truyền trong 1s) ở cả 2 thiết bị truyền và nhận phải giống nhau
1.9.2 Hoạt động:
o USCI_UART được reset bởi PUC hoặc set bit UCSWRST
o USCI_UART hoạt động khi clear bit UCSWRST
o Hoạt động nhận dữ liệu của UART
o Sau khi clear bit UCSWRST, bộ nhận dữ liệu và bộ tốc độ baud sẵn sàng và ở trạng thái
chờ
o Khi phát hiện start bit thì quá trình nhận dữ liệu bắt đầu và ngược lại khi không phát hiện
start bit thì quay về trạng thái chờ
o Hoạt động truyền dữ liệu của UART
o Sau khi clear bit UCSWRST, bộ nhận truyền dữ liệu và bộ tốc độ baud sẵn sàng và ở trạng
thái chờ
o Khi có dữ liệu ghi vào thanh ghi UCAxTXBUF thì quá trình truyền dữ liệu bắt đầu
o Dữ liệu được truyền vào Transmit shift register khi thanh ghi này rỗng và tiếp tục được
truyền sang thiết bị nhận
o Cờ UCAxTXIFG được set khi mà UCAxTXBUF đã sẵn sàng cho dữ liệu tiếp theo
o Nếu dữ liệu không được ghi vào UCAxTXBUF thì bộ UART lại tiếp tục vào trạng thái chờ
1.9.3 Thiết lập tốc độ baud :
Có 2 chế độ thiết lập, được lựa chọn bằng bit UCOS16
o BITCLK = tốc độ baud
o Tốc độ baud này được tính từ xung BRCLK qua hệ số chia N = (fBRCLK / Baud rate), do
đó hệ số N thường không phải là số nguyên.Vì vậy để tăng độ chính xác, ngoài bộ chia
divider còn có bộ điều biến modulator
o Để thiết lập tốc độ baud với các độ chính xác khác nhau, ta sử dụng bảng
o “ Commonly used Baud Rates“ của msp430 để thiết lập các giá trị cho UCBRx, UCBRFx,
UCBRSx.
1.9.4 Ngắt UART :
+Transmit interrupt
o Cờ ngắt UCAxTXIFG được set khi thanh ghi UCAxTXBUF đã sẵn sàng nhận dữ liệu mới
cần truyền
o Để xảy ra ngắt thì cờ UCAxTXIE và GIE cần được set
o Cờ ngắt UCAxTXIFG tự động reset khi dữ liệu được ghi vào UCAxTXBUF
+ Receive interrupt
o Cờ ngắt UCAxRXIFG được set dữ liệu được nhận và chứa trong thanh ghi UCAxTXBUF đã
o Để xảy ra ngắt thì cờ UCAxTXIE và GIE cần được set
o Cờ ngắt UCAxRXIFG tự động reset khi dữ liệu được đọc ra khỏi UCAxRXBUF
Thanh ghi :
o UCAxCTL0 : thanh ghi điều khiển 0
o UCAxCTL1 : thanh ghi điều khiển 1
o IE2 : thanh ghi điều khiển ngắt
o UCAxBRO : thanh ghi tạo hệ số chia tần
o UCAxBR1 : thanh ghi tạo hệ số chia tần
o UCA0MCTL : điều khiển modulation
1.9.5 Kích hoạt UART :
o Việc thay đổi giá trị trên các thanh ghi kể trên sẽ kích hoạt UART với nhiều mode khác nhau,
chẳng hạn muốn UART cấu hình : Baud rate = 9600 , nhận dữ liệu nối tiếp truyền từ máy vi
tính
o Chọn nguồn cung cấp clock và thiết lập tốc độ baud theo bảng trong datasheet
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz/104 ~ 9600 , UCBRx = 104
UCA0BR1 = 0;
UCA0MCTL = UCBRS0; // UCBRSx = 1
o Bắt đầu kích hoạt UART
UCA0CTL1 &= ~UCSWRST; // Turn on UART
o Kích hoạt ngắt của bộ nhận
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
1.10SPI
1.10.1 Giới thiệu :
o Cung cấp một giao thức nối tiếp đồng bộ kép giữa MCU và thiết bị ngoại vi
o Giao tiếp SPI được thực hiện thông qua bus 4 dây MISO, MOSI, SCK, SS
MISO: Master Input Slave Output
MOSI: Master Output Slave Input.
SCK : Serial Clock
SS : Slave Select.
1.10.2 Hoạt động:
o Tín hiệu SCK được cung cấp bởi Master nhằm tạo xung đồng bộ cho phép dữ liệu được truyền
đi hoặc khi đọc dữ liệu nhận được.
o Tốc độ của dữ liệu truyền đi sẽ thay đổi theo sự thay đổi của SCK ( sự thay đổi tốc độ truyền
không ảnh hưởng đến dữ liệu ).
o Master và Slave đều có thanh ghi dịch nối tiếp ở bên trong.
o Master bắt đầu việc trao đổi dữ liệu bằng cách truyền đi một byte vào thanh ghi dịch của nó, sau
đó byte dữ liệu sẽ được đưa sang Slave theo đường tín hiệu MOSI
o Slave sẽ truyền dữ liệu nằm trong thanh ghi dịch của chính nó ngược trở về Master thông qua
đường tín hiệu MISO.
+ Như vậy dữ liệu của hai thanh ghi sẽ được trao đổi với nhau. Việc đọc và ghi dữ liệu vào Slave
diễn ra cùng một lúc nên tốc độ trao đổi dữ liệu diễn ra rất nhanh. Do đó, giao thức SPI là một giao thức rất
có hiệu quả.
+ Chỉ có thiết bị Master mới có thể cấp xung SCK, dữ liệu sẽ không được truyền đi nếu như Master
không cung cấp xung SCK.
+ Tất cả các thiết bị Slave đều được điều khiển bởi xung nhịp phát ra từ Master (Slave không có
khả năng phát xung).
+ Thường thì tín hiệu SS dùng để chọn Slave sẽ tác động mức thấp để chỉ ra Slave nào được truy
cập. Tín hiệu này phải được sử dụng khi có nhiều hơn 1 Slave trong cùng hệ thống và thường không sử
dụng đến khi trong mạch chỉ có 1 Slave.
1.10.3 Thanh ghi ảnh hưởng SPI
+ USICKCTL : USI clock control register
+ USICNT : USI bit counter register
+ USICTL0 : USI control register 0
+ USICTL1 : USI control register 1
1.10.4 Kích hoạt SPI
+ Việc thay đổi giá trị trên các thanh ghi kể trên sẽ kích hoạt SPI với nhiều mode khác nhau, chẳng hạn
muốn SPI cấu hình : SPI Master + xung clock ACLK / 4
+ USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE;
+ USICTL1 |= USICKPH + USIIE;
+ USICKCTL = USIDIV_2 + USISSEL_1; // chia 2, ACLK
+ USICTL0 &= ~USISWRST;
+ USICNT = 8;
1.10.5 Ngắt SPI :
+ USIIFG được set khi bit USICNTx = 0 (tự động giảm về 0 khi truyền hết dữ liệu hoặc tự nạp giá trị 0)
+ USIIFG bị xóa khi bit USICNTx > 0 và USIIFGCC = 0 ,hoặc xóa trực tiếp bằng code.
Chương 2: Thực hành
2.1 PORT1 :
//******************************************************************************
// MSP430G2xx1 Demo - Software Poll P1.4, Set P1.0 if P1.4 = 1
//
// Description: Poll P1.4 in a loop, if hi P1.0 is set, if low, P1.0 reset.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430F2x32
// -----------------
// /|| XIN|-
// | | |
// --|RST XOUT|-
// /| | |
// --o--|P1.4 P1.0|-->LED
// |/
//
//******************************************************************************
#include <msp430F2232.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x01; // Set P1.0 to output direction
while (1) // Test P1.4
{
if ((0x10 & P1IN)) P1OUT |= 0x01; // if P1.4 set, set P1.0
else P1OUT &= ~0x01; // else reset
}
}
2.2 PORT1 & INTERRUPT:
//******************************************************************************
// MSP430G2xx1 Demo - Software Port Interrupt Service on P1.4 from LPM4
//
// Description: A hi/low transition on P1.4 will trigger P1_ISR which,
// toggles P1.0. Normal mode is LPM4 ~ 0.1uA. LPM4 current can be measured
// with the LED removed, all unused P1.x/P2.x configured as output or inputs
// pulled high or low, and ensure the P1.4 interrupt input does not float.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430G2x32
// -----------------
// /|| XIN|-
// | | |
// --|RST XOUT|-
// /| | |
// --o--|P1.4 P1.0|-->LED
// |/
//******************************************************************************
#include <msp430g2232.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x01; // Set P1.0 to output direction
P1IE |= 0x10; // P1.4 interrupt enabled
P1IES |= 0x10; // P1.4 Hi/lo edge
P1IFG &= ~0x10; // P1.4 IFG cleared
_BIS_SR(LPM4_bits + GIE); // Enter LPM4 w/interrupt
}
// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1OUT ^= 0x01; // P1.0 = toggle
P1IFG &= ~0x10; // P1.4 IFG cleared
}
2.3 Ví d ho t đ ng c a Timer_A :ụ ạ ộ ủ
#include <msp430g2231.h>
void FaultRoutine(void);
void ConfigWDT(void);
void ConfigClocks(void);
void ConfigLEDs(void);
void ConfigTimerA2(void);
void main(void)
{
ConfigWDT();
ConfigClocks();
ConfigPINs();
ConfigTimerA2();
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/
interrupt
}
void ConfigWDT(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop
watchdog timer
}
//Configure Clock
void ConfigClocks(void)
{
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
FaultRoutine(); // If calibration data is
erased
// run FaultRoutine()
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step +
modulation
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // Clear OSCFault flag
BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3; // MCLK =
DCO/8, SMCLK = DCO/8
}
void FaultRoutine(void)
{
P1OUT = BIT0; // P1.0 on (red LED)
while(1); // TRAP
}
void ConfigPINs(void)
{
P1DIR = BIT6 + BIT0; // P1.6 and P1.0
outputs
P1OUT = 0; // LEDs off
}
void ConfigTimerA2(void)
{
CCTL0 = CCIE; // CCR0 interrupt
enabled
CCR0 = 62500;
TACTL = TASSEL_2 + MC_2; // SMCLK,
contmode
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; // Toggle P1.0
CCR0 += 62500; // Add Offset to CCR0
}
Sơ đồ nguyên lý:
Trong ví dụ trên, Timer_A hoạt động ở chế độ
continuous, sẽ xảy ra ngắt khi giá trị thanh ghi
TAR đếm đến giá trị thanh ghi TACCR0, chương
trình con phục vụ ngắt sẽ lật trạng thái chân P1.0
làm đèn led sáng tắt theo.
Với các chế độ hoạt động khác của Timer_A, ta
chỉ cần thay đổi cấu hình trong chương trình con
ConfigTimerA2
2.4 PWM:
#include <msp430g2231.h>
void FaultRoutine(void);
void ConfigWDT(void);
void ConfigClocks(void);
void ConfigPINs(void);
void ConfigTimerA2(void);
void main(void)
{
ConfigWDT();
ConfigClocks();
ConfigPINs();
ConfigTimerA2();
_BIS_SR(LPM0_bits); // Enter LPM0 w/
interrupt
}
void ConfigWDT(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop
watchdog timer
}
//Configure Clock
void ConfigClocks(void)
{
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
FaultRoutine(); // If calibration data is
erased
// run FaultRoutine()
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step +
modulation
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // Clear OSCFault
flag
BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3; // MCLK =
DCO/8, SMCLK = DCO/8
}
void FaultRoutine(void)
{
P1OUT = BIT0; // P1.0 on (red LED)
while(1); // TRAP
}
void ConfigPINs(void)
{
P1DIR = BIT2 + BIT1; // P1.2 and P1.1 outputs
P1SEL = BIT2 + BIT1; // P1.2 <--> OUT1 and
P1.1 <--> OUT0
}
void ConfigTimerA2(void)
{
CCR0 = 1001; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
CCTL0 = OUTMOD_4; // CCR0 toggle
CCR1 = 501; // CCR1 PWM duty
cycle 50%
TACTL = TASSEL_2 + MC_1; // SMCLK, Up
mode, No divide
S đ nguyên lý:ơ ồ
Trong ví dụ trên, ta sẽ tạo ra 2 xung PWM trên 2
chân P1.1 và P1.2
Xung PWM ở chân P1.1 sẽ là lối ra OUT0 (thanh
ghi TACCR0) hoạt động ở mode 4(toggle).
Xung PWM ở chân P1.2 sẽ là lối ra OUT1 (thanh
ghi TACCR1) hoạt động ở mode 7 (reset/set), độ
rộng
2.5ADC10 & Interupt
//******************************************************************************
// MSP430G2x31 Demo - ADC10, Sample A1, AVcc Ref, Set P1.0 if > 0.5*AVcc
//
// Description: A single sample is made
on A1 with reference to AVcc.
// Software sets ADC10SC to start
sample and conversion - ADC10SC
// automatically cleared at EOC. ADC10
internal oscillator times sample (16x)
// and conversion. In Mainloop MSP430
waits in LPM0 to save power until ADC10
// conversion complete, ADC10_ISR will
force exit from LPM0 in Mainloop on
// reti. If A1 > 0.5*AVcc, P1.0 set, else
reset.
//
// MSP430F2x32
// -----------------
// /|| XIN |-
// | | |
// --|RST XOUT|-
// | |
// >---|P2.1/A1 P1.1|-->LED
//
//******************************************************************************
#include "msp430F2132.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
ADC10CTL1 = INCH_1; // input A1
ADC10AE0 |= 0x02; // PA.1 ADC option select
P1DIR |= BIT1 + BIT2; // Set P1.1, 1.2 to output direction
for (;;)
{
P1OUT |= 0x04;
__delay_cycles(1000);
P1OUT &= ~0x04;
__delay_cycles(1000);
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
if (ADC10MEM < 0x1FF)
P1OUT &= ~0x02; // Clear P1.1 LED off
else
P1OUT |= 0x02; // Set P1.1 LED on
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
2.6 Phần thực hành giao tiếp SPI :
// Giao tiếp msp430g2232 với 74hc595 qua chuẩn giao tiếp SPI
// Dữ liệu từ msp430 sẽ truyền qua 595 để tạo hiệu ứng sáng led trên led 7 đoạn
// Phần cứng sẽ thực hiện trên kit launch pad theo sơ đồ như hình bên
#include <msp430g2231.h>
int i=0;
U 1
7 4 H C 5 9 5G N D
8
SDO
9
CLR
10G
13
SDI
14
V C C
1 6
SRCLK
11
RCLK
12
QA
15QB
1QC
2QD
3QE
4QF
5QG
6QH
7
M S P 4 3 0 G 2 2 3 1
P 1 . 0
C h o t
P 1 . 5
C l k
P 1 . 6
D a t a
8.
U 4
7 S e g m e n t m i n i
a
5b
4c
3d
10e
9f
7g
8p
2
V c c 1
1
V c c 2
6
V C C
V C C
V C C
0
int b[10]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 is output
USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master
USICTL1 |= USICKPH + USIIE; // Counter interrupt, flag remains set
USICKCTL = USIDIV_2 + USISSEL_1; // /4 ACLK
USICTL0 &= ~USISWRST; // USI released for operation
USISRL = b[i];
USICNT = 8; // init-load counter 8 bits
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 + interrupt
}
#pragma vector=USI_VECTOR // USI interrupt service routine
__interrupt void USI_ISR(void)
{
// create positive edge clock on p1.0
P1OUT &= ~0x01;
__delay_cycles(100000);
P1OUT |= 0x01;
USISRL = b[i] ;
if(i==5)
{
i=0;
}
else{
i++;
}
USICNT = 8; // re-load counter
}
2.7 Phần thực hành giao tiếp UART
// Giao tiếp msp430g2553 với máy vi tính qua chuẩn giao tiếp UART
// Dữ liệu được truyền từ máy vi tính xuống msp430 bằng phần mềm Advanced Serial Port Terminal
// Nếu dữ liệu truyền là số, thì msp430 sẽ xử lý và bật tắt các led trên kit launch pad
// Nếu dữ liệu là chữ thì msp430 sẽ truyền ngược lại cho máy vi tính để hiển thị lên màn hình của Advanced Serial
Port Terminal
// Phần cứng sẽ thực hiện trên kit launch pad rev 1.4 , chú ý ghép nối các jump để thực hiện UART trên kit
#include "msp430g2553.h"
#define UART_TXD 0x02
#define UART_RXD 0x04
unsigned int t1;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz / 104 ~ 9600
UCA0BR1 = 0;
UCA0MCTL = UCBRS0; // Modulation = 1
UCA0CTL1 &= ~UCSWRST; // Turn on UART (USCI)
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
P1DIR = 0xFF & ~UART_RXD; // Set all pins but RXD to output
P1OUT = 0x00 ;
__bis_SR_register(LPM0_bits+GIE); //Enable ngat ngoai vi
t1=0;
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
if(UCA0RXBUF > '/' && UCA0RXBUF < ':')
t1 = t1*10 + (UCA0RXBUF-'0') ;
else
{
if(UCA0RXBUF == ':')
{
switch(t1)
{
case 11:
P1OUT |= BIT0;
break; // bat led do p1.0
case 12:
P1OUT |= BIT6;
break; // bat led xanh p1.6
case 91:
P1OUT &=~ BIT0;
break; // tat led do p1.0
case 92:
P1OUT &=~ BIT6;
break; // tat led xanh p1.6
default:
break;
}
t1 = 0 ;
}
else
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
if(UCA0RXBUF != ':')
UCA0TXBUF = UCA0RXBUF;
}
}
2.8 WDT
//******************************************************************************
// MSP430G2xx1 Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK
//
// Description: Toggle P1.0 using software timed by the WDT ISR. Toggle rate
// is approximately 30ms based on default DCO/SMCLK clock source
// used in this example for the WDT.
// ACLK = n/a, MCLK = SMCLK = default
//
// MSP430G2xx2
// -----------------
// /|| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
//******************************************************************************
#include <msp430g2232.h>
void main(void)
{
WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms
IE1 |= WDTIE; // Enable WDT interrupt
P1DIR |= 0x01; // Set P1.0 to output direction
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
// Watchdog Timer interrupt service routine
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
}

More Related Content

What's hot

[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIRThe Nguyen Manh
 
Bao chay bao khoi
Bao chay bao khoiBao chay bao khoi
Bao chay bao khoiHuy Tuong
 
Giáo trình vi điều khiển PIC
Giáo trình vi điều khiển PICGiáo trình vi điều khiển PIC
Giáo trình vi điều khiển PICTrung Thanh Nguyen
 
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngBáo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngHuyen Pham
 
Công thức Máy điện 1 - Chương 2 - Máy biến áp
Công thức Máy điện 1 - Chương 2 - Máy biến ápCông thức Máy điện 1 - Chương 2 - Máy biến áp
Công thức Máy điện 1 - Chương 2 - Máy biến ápMan_Ebook
 
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng ViệtTài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng ViệtCông ty công nghệ tự động hóa Hoàng Gia
 
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給与 クレジット
 
Tài liệu hướng dẫn trình bày đồ án tốt nghiệp
Tài liệu hướng dẫn trình bày đồ án tốt nghiệpTài liệu hướng dẫn trình bày đồ án tốt nghiệp
Tài liệu hướng dẫn trình bày đồ án tốt nghiệpTÀI LIỆU NGÀNH MAY
 
Giao trinh 8051.doc
Giao trinh 8051.docGiao trinh 8051.doc
Giao trinh 8051.docLê Hùng
 
2.stm32 f10e
2.stm32 f10e2.stm32 f10e
2.stm32 f10eBchBlack
 
Chuong 5.1 mang 4 cuc
Chuong 5.1 mang 4 cucChuong 5.1 mang 4 cuc
Chuong 5.1 mang 4 cucthanhyu
 
Chuong 04 mach logic
Chuong 04 mach logicChuong 04 mach logic
Chuong 04 mach logicAnh Ngoc Phan
 
Chuong 02 he thong so
Chuong 02 he thong soChuong 02 he thong so
Chuong 02 he thong soAnh Ngoc Phan
 
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
 
Cac lenh lap trinh ladder
Cac lenh lap trinh ladderCac lenh lap trinh ladder
Cac lenh lap trinh ladderAlain Hua
 

What's hot (20)

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ố
 
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
 
Bao chay bao khoi
Bao chay bao khoiBao chay bao khoi
Bao chay bao khoi
 
Giáo trình vi điều khiển PIC
Giáo trình vi điều khiển PICGiáo trình vi điều khiển PIC
Giáo trình vi điều khiển PIC
 
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngBáo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
 
Ktmt chuong 5
Ktmt chuong 5Ktmt chuong 5
Ktmt chuong 5
 
Công thức Máy điện 1 - Chương 2 - Máy biến áp
Công thức Máy điện 1 - Chương 2 - Máy biến ápCông thức Máy điện 1 - Chương 2 - Máy biến áp
Công thức Máy điện 1 - Chương 2 - Máy biến áp
 
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng ViệtTài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
 
Logic - PLC (1)
Logic - PLC (1)Logic - PLC (1)
Logic - PLC (1)
 
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
 
Tài liệu hướng dẫn trình bày đồ án tốt nghiệp
Tài liệu hướng dẫn trình bày đồ án tốt nghiệpTài liệu hướng dẫn trình bày đồ án tốt nghiệp
Tài liệu hướng dẫn trình bày đồ án tốt nghiệp
 
Thi nghiem xlths
Thi nghiem xlthsThi nghiem xlths
Thi nghiem xlths
 
Giao trinh 8051.doc
Giao trinh 8051.docGiao trinh 8051.doc
Giao trinh 8051.doc
 
2.stm32 f10e
2.stm32 f10e2.stm32 f10e
2.stm32 f10e
 
Đề 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
 
Chuong 5.1 mang 4 cuc
Chuong 5.1 mang 4 cucChuong 5.1 mang 4 cuc
Chuong 5.1 mang 4 cuc
 
Chuong 04 mach logic
Chuong 04 mach logicChuong 04 mach logic
Chuong 04 mach logic
 
Chuong 02 he thong so
Chuong 02 he thong soChuong 02 he thong so
Chuong 02 he thong so
 
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
 
Cac lenh lap trinh ladder
Cac lenh lap trinh ladderCac lenh lap trinh ladder
Cac lenh lap trinh ladder
 

Viewers also liked

Đo khoảng cách bằng MSP430 Launchpad
Đo khoảng cách bằng MSP430 LaunchpadĐo khoảng cách bằng MSP430 Launchpad
Đo khoảng cách bằng MSP430 LaunchpadFPT Telecom
 
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
 
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
 

Viewers also liked (13)

Chuong2
Chuong2Chuong2
Chuong2
 
cam bien sieu am
cam bien sieu amcam bien sieu am
cam bien sieu am
 
Đo khoảng cách bằng MSP430 Launchpad
Đo khoảng cách bằng MSP430 LaunchpadĐo khoảng cách bằng MSP430 Launchpad
Đo khoảng cách bằng MSP430 Launchpad
 
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
 
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
 

Similar to Msptieuluan

Cau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xxCau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xxBùi Ngọc Bảo
 
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
 
datasheet.pdf
datasheet.pdfdatasheet.pdf
datasheet.pdfDuyL84058
 
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87Trần Đức Anh
 
Đồ Á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
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishiddungd4
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishiquanglocbp
 
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
 
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Nguyen Luc
 
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
 
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdfBÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdfMan_Ebook
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucmster_dang
 
Tài liệu PCL tổng hợp
Tài liệu PCL tổng hợpTài liệu PCL tổng hợp
Tài liệu PCL tổng hợpMinh Hoàng
 
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
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thuTrần Đức Anh
 

Similar to Msptieuluan (20)

Cau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xxCau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xx
 
Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
 
datasheet.pdf
datasheet.pdfdatasheet.pdf
datasheet.pdf
 
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
 
Đồ Á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
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishi
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishi
 
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
 
Assembly
AssemblyAssembly
Assembly
 
Chuong2 cấu trúc phần cứng 8051
Chuong2 cấu trúc phần cứng 8051Chuong2 cấu trúc phần cứng 8051
Chuong2 cấu trúc phần cứng 8051
 
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
 
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
 
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdfBÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautruc
 
Tài liệu PCL tổng hợp
Tài liệu PCL tổng hợpTài liệu PCL tổng hợp
Tài liệu PCL tổng hợp
 
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
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
 
Chuong5 hoạt động port nối tiếp
Chuong5 hoạt động port nối tiếpChuong5 hoạt động port nối tiếp
Chuong5 hoạt động port nối tiếp
 

More from Đức Hữu

Basic knowledge of ldo voltage regulators
Basic knowledge of ldo voltage regulatorsBasic knowledge of ldo voltage regulators
Basic knowledge of ldo voltage regulatorsĐức Hữu
 
Datasheet r7 m a10030_s1
Datasheet  r7 m a10030_s1Datasheet  r7 m a10030_s1
Datasheet r7 m a10030_s1Đức Hữu
 
Giao dien c# hien len maytinh
Giao dien c# hien len maytinhGiao dien c# hien len maytinh
Giao dien c# hien len maytinhĐức Hữu
 
Cac he dong luc hoc rat hay
Cac he dong luc hoc rat hayCac he dong luc hoc rat hay
Cac he dong luc hoc rat hayĐức Hữu
 
Bai giang dktd huynhthai hoang
Bai giang dktd huynhthai hoangBai giang dktd huynhthai hoang
Bai giang dktd huynhthai hoangĐức Hữu
 
Chuan giao tiep rs232
Chuan giao tiep rs232Chuan giao tiep rs232
Chuan giao tiep rs232Đức Hữu
 

More from Đức Hữu (11)

Ldo basic
Ldo basicLdo basic
Ldo basic
 
Basic knowledge of ldo voltage regulators
Basic knowledge of ldo voltage regulatorsBasic knowledge of ldo voltage regulators
Basic knowledge of ldo voltage regulators
 
Datasheet r7 m a10030_s1
Datasheet  r7 m a10030_s1Datasheet  r7 m a10030_s1
Datasheet r7 m a10030_s1
 
Giao dien c# hien len maytinh
Giao dien c# hien len maytinhGiao dien c# hien len maytinh
Giao dien c# hien len maytinh
 
Cac he dong luc hoc rat hay
Cac he dong luc hoc rat hayCac he dong luc hoc rat hay
Cac he dong luc hoc rat hay
 
Bai giang dktd huynhthai hoang
Bai giang dktd huynhthai hoangBai giang dktd huynhthai hoang
Bai giang dktd huynhthai hoang
 
Datasheet bq33200
Datasheet bq33200Datasheet bq33200
Datasheet bq33200
 
Chicken ânlog
Chicken ânlogChicken ânlog
Chicken ânlog
 
Chuan giao tiep rs232
Chuan giao tiep rs232Chuan giao tiep rs232
Chuan giao tiep rs232
 
Ga dat cam bien
Ga dat cam bien Ga dat cam bien
Ga dat cam bien
 
Bien doi lapalce
Bien doi lapalceBien doi lapalce
Bien doi lapalce
 

Msptieuluan

  • 1. i h c Bách Khoa à N ngĐạ ọ Đ ẵ Khoa i n T - Vi n ThôngĐ ệ ử ễ Báo cáo ti u lu nể ậ MSP430 Thành viên: Võ Th M nị ẫ Lê Bá Tu nấ Bùi H u Triữ Nguy n H u Anh Khoaễ ữ GVHD: Ph m Xuân Trungạ
  • 2. Chương 1 : Lý thuyết 1.1 Tổng quan về MSP430 (Mixed Signal Controller). 1.1.1 Chip MSP430G2x31. - Nguồn cung cấp: 1.8V – 3.6V - Công suất tiêu tán cực thấp. - 5 chế độ tiết kiệm năng lượng. - Wake-up nhanh từ chế độ Standby <1us - Kiến trúc RISC 16 bits - Có nhiều nguồn xung Clock để lựa chọn. - Timer_A 16 bit với 2 thanh ghi Compare/Capture. - USI hỗ trợ I2C, SPI - 10 bit 200kbps ADC với nguồn tham chiếu nội, Sample và Hold, Autoscan. 1.1.2 Sơ đồ chân.
  • 3. 1.2 Hệ thống Reset, Ngắt và các chế độ hoạt động. 1.2.1 Hệ thống Reset và khởi động: Có 2 hệ thống POR (Power on Reset) và PUC (Power UP Clear). - POR chỉ được sinh 3 sự kiện sau: o Cấp nguồn cho thiết bị. o Tín hiệu ở chân ~RST/NMI xuống mức thấp o SVS ở mức thấp khi PORON = 1 - PUC được sinh ra khi POR được sinh, nhưng không xảy ra ngược lại. Các sự kiện sau sẽ sinh ra PUC: o POR được sinh ra. o WDT hết hiệu lực o Chốt an toàn của WDT và Flash memory bị vi phạm.
  • 4. 1.2.2 Hệ thông ngắt Có 3 loại ngắt trong msp430 là: Reset hệ thống, Non-maskable NMI, maskable. 1.3 Bộ nhớ và tổ chức bộ nhớ 1.3.1 Không gian địa chỉ. Bộ nhớ MSP430 theo kiến trúc von-Neumann không gian nhớ bao gồm các thanh ghi có chức năng đặc biệt SFRs, ngoại vi, RAM, Flash/ROM như hình bên. - Flash/ROM: độ lớn tùy thuộc vào từng dòng chip. Bộ nhớ Flash có thể sử dụng cho cả data và code. Word hoặc byte tables có thể được lưu trữ và sử dụng ngay trên Flash mà không cần sao chép vào RAM. Interrupt vector được định ở 16bytes từ 0FFE0h – 0FFFFh - RAM: bắt đầu từ 200h, độ lớn của RAM phụ thuộc vào dòng chip và lượng RAM đang sử dụng. - Peripheral Module: 16 bit được định ở địa chỉ từ 100h – 1FFh, được truy cập bằng word, nếu truy cập bằng byte thì byte cao luôn luôn bằng 0. Ngoại vi 8bit từ 10h đến FFh chỉ được truy cập bằng byte. - SFRs: 16 byte từ 0h đến 16h.
  • 5. 1.3.2 Tổ chức bộ nhớ Bô nhớ được tổ chức theo các byte. Các byte được đánh địa chỉ chẵn và lẽ. Bộ nhớ MSP430 còn có thể thao tác với word 16bit. Một word gồm 2 byte kề nhau (High byte & Low byte), địa chỉ của word là địa chỉ của byte thấp, vì vậy luôn là địa chỉ chẵn 1.4 CPU Bao gồm ALU , 16 thanh ghi 16 bit và các mạch logic để giải mã lệnh và thực hiện chương trình. 4 thanh ghi đầu: PC - là bộ đếm chương trình chứa địa chỉ của lệnh kế tiếp , SP, SR - chứa tập hợp các cờ như C,N,Z,V hoặc GIE hoặc CPUOFF OSC, Constant Generator - chứa các hằng số như 1 2 4…. . Và 12 thanh ghi mục đích chung. Cả word và byte đề có thể được ghi vào trong thanh ghi của CPU. Khi dữ liệu ghi vào là byte thi byte cao sẽ bị xóa byte thấp chứa giá trị của byte đưa vào. 1.5 Clock Generator Sơ đồ phần cứng và các nguồn xung clock
  • 6. - Để đồng bộ các hoạt động của Vi điều khiển - MSP430 có nhiều nguồn xung clock để lựa chọn nhằm tối ưu hóa hiệu suất và công suất hoạt động. Clock có thể được cấu hình để hoạt động mà không cần thành phần bên ngoài nào,hoặc với 1 điện trở, hoặc với 1 , 2 thạch anh ngoài. o Low frequency Crystal Clock LFXT1CLK: Nguồn Clock này lấy từ thạch anh ngoài gắn vào chân XIN, XOUT. Intended frequency là 32Khz là nguồn của ACLK. Có thể hoạt động ở tần số cao hơn. o Crystal to Clock XT2CLK : dùng thạch anh ngoài gắn vào 2 chân XT2IN XT2OUT, mục đích là dùng với thạch anh tần sos cao 400KHz – 6Mhz o Digitalally Controlled Oscillator Clock (DCOCLK): clock nội, mặc định khi không cấu hình thì dùng cho tín hiệu MCLK ở 900Khz o Very Low Frequency (VLOCLK) là ngồn nội có công suất thấp, tấn số thấp 12Khz. - Các tín hiệu Clock: o Master Clock: dùng cho CPU. nguồn được chọn bởi SELMx (Basic Clock System Control Register BCSCTL 2) có thể là VLOCLK XT2CLK LFXT1CLK DCOCLK, chia tần số được lựa chon bởi DIVMx o Submaster Clock: dùng cho các ngoại vi, nguồn của nó là VLOCLK XT2CLK LFXT1CLK DCOCLK được điều khiển bởi các bit SELS SCG (BCSCTL2), chia tần số DIVSx o Auxillary Clock: dùng cho các module ngoại vi. Nguồn chủa nó LFXT1CLK hoặc VLOCLK, có thể chia tần số 1 2 4 8 lần. 1.6 Ngõ ra/ vào 1.6.1 Cấu trúc xuất nhập: o Gồm 8 port xuất nhập từ P0 -> P7. o Mỗi port gồm 8 chân o Mỗi chân có thể làm đầu vào hay đầu ra,có thể được đọc hay được ghi riêng lẻ. o Port P1 và P2 có khả năng ngắt
  • 7. o Mỗi ngắt được cấu hình theo cạnh lên,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 1.6.2 Đặc tính xuất nhâp: o chức năng của chân không phụ thuộc vào việc lập trình o có thể làm input hay output o P1 và P2 được cấu hình riêng cho ngắt o không phụ thuộc vào thanh ghi input hay output o cấu hình có điện trở kéo 1.6.3 Hoạt động xuất nhập: o Được lập trình bằng phần mềm 1.6.4 Thanh ghi input o Bit=0:đầu vào ở mức thấp o Bit =1:đầu vào ở mức cao 1.6.5 Thanh ghi output: o Khi không sử dụng điện trở kéo,giá trị các thanh ghi tương ứng: o Bit=0:đầu vào ở mức thấp o Bit =1:đầu vào ở mức cao o Khi không sử dụng điện trở kéo,giá trị tương ứng: o Bit=0: điện trở kéo xuống o Bit =1: điện trở kéo lên 1.6.6 Thanh ghi định hướng PxDIR: o Các chân làm đầu vào hay đầu ra được định hướng bởi các bit của thanh ghi PxDIR o Bit=0:chân được định hướng làm đầu vào(chú ý dễ nhầm lẫn với PIC) o Bit =1:chân được định hướng làm đầu ra 1.6.7 Thanh ghi cho phép điện trở kéo PxREN: o Mỗi bit của thanh ghi PxREN cho phép hay không cho phép điện trở kéo o Bit=0: điện trở kéo xuống o Bit =1: điện trở kéo lên 1.6.8 Thanh ghi lựa chọn chức năng PxSEL PxSEL2: o Các bit của thanh ghi PxSEL và PxSEL2 được sử dụng để lựa chọn chức năng là Port xuất nhập hay các chức năng đặc biệt khác 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 Lưu ý: khi PxSEL=1,các ngắt của P1 và P2 bị cấm. 1.6.9 Các ngắt P1 và P2: o Mỗi chân của P1 và P2 đều có khả năng ngắt. o Ngắt đươc cấu hình bởi thanh ghi PxIFG, PxIE và PxIES. o Sử dụng thanh ghi PxIFG để xác định nguyên nhân ngắt của P1 và P2 a) Thanh ghi cờ ngắt P1IFG và P2IFG o Mỗi bit của thanh ghi PxIFGx là 1 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 1 ngắt tương ứng với các bit PxIE và GIE đươc set. o Mỗi cờ ngắt được reset bằng phần mềm. o Phần mềm có thể set cờ ngắt o Bit=0: không có cờ ngắt nào o Bit =1: có 1 ngắt đang chờ
  • 8. 1.6.10 Thanh ghi lựa chọn ngắt bằng sườn xung P1IES và P2IES. o Bit=0: cờ ngắt được set lên khi có cạnh lên của xung o Bit =1: cờ ngắt được set lên khi có cạnh xuống của xung 1.6.11 Thanh ghi cho phép ngắt P1IE và P2IE o Bit=0: cấm ngắt o Bit =1: cho phép ngắt 1.7 Timer_A 1.7.1 Giới thiệu về Timer_A:
  • 9. Timer_A có: o 16bit timer/counter với 4 chế độ hoạt động: Stop, Up, Continuous, Up/Down. o Nguồn xung clock có thể lựa chọn và cấu hình từ nhiều nguồn khác nhau o 3 thanh ghi Capture/Compare (TACCRx) o PWM o 2 vector ngắt : TACCR0 và TAIV 1.7.2 Sơ đồ phần cứng Timer_A 1.7.3 Các thanh ghi sử dụng trong Timer_A: 1.7.4 Lựa chọn nguồn xung clock cho Timer_A: o Nguồn xung clock cho timerA có thể được lựa chọn từ nguồn xung clock : ACLK, SMCLK hay từ nguồn bên ngoài TACLK, INCLK thông qua việc lựa chọn các bit TASSELx(TACTL). Cụ thể: TASSELx Nguồn lựa chọn 00 TACLK 01 ACLK 10 SMCLK 11 INCLK o Các nguồn xung clock được lựa chọn này có thể được sử dụng trực tiếp cho hoạt động của Timer_A hay có thể được chia bởi 2, 4, 8 bằng cách sử dụng các bit IDx(TACTL). Cụ thể: IDx Nguồn clock được chia 00 /1 01 /2 10 /4 11 /8 1.7.5 Các chế độ hoạt động của Timer_A: TimerA có 4 chế độ hoạt động : Stop, Up, Continuous, Up/Down được lựa chọn bởi các bit MCx(TACTL).Cụ thể: MCx Mode Description
  • 10. 00 Stop TimerA không hoạt động 01 Up Timer_A đếm lặp lại từ 0 đến giá trị thanh ghi TACCR0 10 Continuous Timer_A đếm lặp lại từ 0 đến giá trị FFFFh 11 Up/Down Timer_A đếm lặp lại từ 0TACCR00 Timer_A hoạt động ngay khi giá trị các bit MCx khác 00 và nguồn xung clock được chọn cho Timer_A hoạt động. Khi TimerA hoạt động ở chế độ Up hoặc Up/Down, timer sẽ dừng hoạt động khi ghi giá trị 0 vào thanh ghi TACCR0 1.7.5.1 Up Mode: Thay đổi giá trị thanh ghi TACCR0 khi timer đang hoạt động: + Nếu giá trị mới bằng hay lớn hơn giá trị cũ hay lớn hơn giá trị hiện tại, Timer sẽ đếm đến giá trị mới. + Nếu giá trị mới bé hơn giá trị hiện tại, timer sẽ đếm lại từ giá trị 0. o Cấu hình Timer_A hoạt động ở chế độ Up: Cho phép ngắt TACCR0 CCIFG:  CCIE =1 trong thanh ghi TACCTL0 Nạp giá trị vào thanh ghi TACCR0: TACCR0 = xxxx Lựa chọn nguồn xung clock dùng cho Timer_A  thiết lập giá trị các bits TASSELx trong thanh ghi TACTL Thiết lập giá trị chia cho xung clock:  thiết lập bits IDx trong thanh ghi TACTL (mặc định IDx = 00 -- /1) Lựa chọn timer_A hoạt động ở chế độ Up:  thiết lập MCx = 01 trong TACTL  Code cho chương trình ngắt… 1.7.5.2 Continuous Mode: Cấu hình Timer_A hoạt động ở chế độ Continuous: Tương tự như trên 1.7.5.3 Up/Down Mode:
  • 11. o Thay đổi giá trị thanh ghi TACCR0 khi timer đang hoạt động: • Nếu timer đang trong chiều đếm xuống, timer sẽ tiếp tục đếm xuống đến 0. • Nếu timer đang trong chiều đếm lên và giá trị mới lớn hơn hay bằng giá trị cũ hay lớn hơn giá trị hiện tại, timer sẽ đếm đến giá trị mới trước khi đếm xuống. • Nếu timer đang trong chiều đếm lên và giá trị mới bé hơn giá trị giá trị hiện tại, timer sẽ bắt đầu đếm xuống o Cấu hình Timer_A hoạt động ở chế độ Up: Tương tự như trên 1.7.6 Compare Mode: Compare mode được lựa chọn khi bit CAP()=0(mặc định). Compare mode dùng để tạo ra khoảng thời gian hay điều chế độ rộng xung PWM Compare mode hoạt động dựa trên nguyên tắc so sánh giá trị của thanh ghi timer_A(TAR) với giá trị thanh ghi TACCRx Khi giá trị của TAR bằng giá trị của TACCRx thì sẽ xuất hiện các sự kiện: • Cờ ngắt CCIFG =1 • EQUx = 1 • EQUx ảnh hưởng đến lối ra PWM • Tín hiệu CCI lật sang SCCI 1.7.7 Output Unit: Mỗi khối capture/compare chứa một bộ OUTPUT UNIT dùng để điều chế độ rộng xung PWM. Mỗi OUTPUT UNIT có 8 chế độ hoạt động tạo ra tín hiệu dựa trên tín hiệu EQU0 và EQUx. OUTPUT UNIT được lựa chọn hoạt động dựa trên giá trị của các bit OUTMODx. Cụ thể: OUTMODx Mode Description 000 Output Tín hiệu ra OUTx được xác định bởi bit OUTx 001 Set Lối ra được set khi TAR = TACCRx.Nó sẽ giữ nguyên như vậy cho đến khi timer được reset hay khi 1 output mode khác được lựa chọn và ảnh hưởng đến lối ra. 010 Toggle/Reset Lối ra đảo trạng thái khi TAR = TACCRx và reset khi TAR = TACCR0 011 Set/Reset Lối ra set khi TAR = TACCRx và reset khi TAR = TACCR0 100 Toggle Lối ra đảo trạng thái khi TAR = TACCRx. Chu kì tín hiện ra gấp 2 lần chu kì timer 101 Reset Lối ra reset khi TAR = TACCRx. Nó sẽ giữ nguyên như thế cho đến khi 1 output mode khác được lựa chọn và ảnh hưởng đến lối ra 110 Toggle/Set Lối ra đảo trạng thái khi TAR= TACCRx và set khi TAR = TACCR0 111 Reset/Set Lối ra reset khi TAR = TACCRx và set khi TAR = TACCR0 Cấu hình PWM: Cấu hình chức năng I/O nhận chức năng ra OUTx của PWM: Vì các chân P1.1 P1.2 và P1.3 là những chân ra của PWM nên cần cấu hình các bits tương ứng trong thanh ghi P1DIR và P1SEL. Ví dụ: P1DIR = 0x0C, P1SEL= 0x0C chọn chân P1.2 và P1.3 là chân ra PWM của CCR1 và CCR2
  • 12. Nạp giá trị cho TACCR0, TACCRx Lựa chọn thanh ghi capture/compare để tạo PWM : Thiết lập các bit OUTMODx trong thanh ghi TACCTLx tương ứng. Lựa chọn nguồn xung clock, hệ số chia và chế độ hoạt động cho Timer_A :  Thiết lập các bit TASSELx, IDx và MCx trong thanh ghi TACTL 1.7.8 Ngắt Timer_A: Timer_A có 2 vector ngắt: Vector ngắt TACCR0 cho TACCR0 CCIFG Vector ngắt TAIV cho TAIFG và CCIFGs của CCR1 và CCR2 Cụ thể : Cờ ngắt TACCR0 CCIFG có độ ưu tiên cao nhất trong ngắt Timer_A và tự động reset khi chương trình ngắt được thực thi Cờ ngắt TACCR1 CCIFG ,TACCR2 CCIFG và TAIFG có cùng vector ngắt TAIV và được phân chia theo mức độ ưu tiên như sau: Ngắt có mức độ ưu tiên cao hơn sẽ được thực hiện trước bằng cách nạp 1 giá trị vào thanh ghi TAIV. Giá trị này sẽ được tính toán hay cộng vào thanh ghi PC để nhảy tới chương trình con phục vụ ngắt. Cờ ngắt CCIFG của TACCR1 và TACCR2 cũng được tự động reset khi thoát khỏi chương trình ngắt. Nếu có 1 ngắt khác xảy ra khi đang thực hiện ngắt, ngắt khác đó sẽ được thực hiện ngay lập tức sau khi ngắt trước được thực thi xong. 1.8 ADC10: - 10 bit ADC, 8 kênh ADC. - Tốc độ 200kpbs. - Có thể lựa chọn nguồn clock cho ADC: ADC10OSC (5Mhz), ACLK, MCLK, SMCLK. - Vref nội và ngoại.
  • 13. - Autoscan - Có thể lấy nhiều kênh cùng lúc. - Điều khiển chuyển đổi dữ liệu và tự động lưu trữ mẫu đã lấy. - Có ngắt 1.8.1 Phần cứng và hoạt động: - ADC10 được cấu hình bởi 2 thanh ghi ADC10CTL0 và ADC10CTL1 và 2 thanh ghi này chỉ được thay đổi khi ENC = 0; khi bắt đầu lấy mẫu thì phai đưa ENC = 1; - Nadc = 1023 - Lựa chọn kênh ADC: ADC10AEx bits - Voltage Reference Generator: Nguồn nội 1.5V 2.5V hoặc Vcc được lựa chọn dựa vào bit REFON REF2_5 REFOUT - Sample and Conversion Timing: SHTx lựa chọn chu kì lấy mẫu 4 8 16 64xADC10CLK, - Conversion Mode: CÓNEQx MODE 00 Single chanel – Single Conversion 01 Sequence of channels 10 Repeat single channels 11 Repeat Sequence of channels 1.8.2 Mode Single Chanel – Single Conversion. - Sau khi bật chuyển đổi ADC10 (ADC10ON) và thiết lập kênh lấy ADC (INCHx).
  • 14. - Đợi ENC và ADC10SC được kích hoạt thì bắt đàu chuyển đổi - Lấu mẫu dữ liệu vào khi tín hiệu SAMPCON ở mức cao với tốc độ là 4/8/16/64x ADC10CLK. - Quá trình chuyển đổi dữ liệu sau đó sẽ mất thêm 12xADC10CLK. - Lưu kết quả vào ADC10MEM và set cờ ADC10IFG mất thêm 1 ADC10CLK - Trong quá trình thực hiện từng bược trên nếu có thay đổi tín hiệu SHS, ENC ADC10SC thì quá trình sẽ nhảy về trạng thái đợi 1 hoặc tất cả các tín hiệu trên được set trở lại. 1.8.3 Mode Single of Sequence - Được phân tích giống mode trên nhưng khác ở chỗ là quá trình tự kết thúc khi các kênh lựa chọn đã được lấy mẫu hết điều này được báo bằng tín hiệu EOS.x nếu tín hiệu này bằng 1 quá trình chuyễn đổi các kênh đã xong. 1.8.4 Các bit hay dùng trong ADC Trong thanh ghi ADCCTL1
  • 15. o INCHx (4bits) : lựa chọn kênh lấy ADC. o ADC10DIVx (2bits) : ADC10 Clock Divider. o ADC10SSELx (2bits): Clock source select. Trong thanh ghi ADCCTL0 o SREFx (3bits): Chọn nguồn áp tham chiếu. o ADC10SHTx (2bits): chọn thời gian sample và hold. o ADC10SR (1bits) : tốc độ lấy mẫu 0 (200kbps) 1(150kbps). o REFOUT (1bit): Có chọn nguồn tham chiếu ngoài hay không. o REFON (1bit): bật nguồn tham chiếu nội ->REF2_5V (1bit) nguồn nội là 1.5V hay 2V o ADC10ON: Bật ADC10. o ADC10IE: cho phép ngắt ADC10 Trong thanh ghi ADC10AE0 o ADC10AE0x (Bit 7-0) cho phép chân ngõ vào là ngõ vào Analog Cách cấu hình đơn giản cho ADC hoạt động. 1.8.5 ADC10 DATA TRANFER CONTROLLER - Được kích hoạt nếu giá trị thanh ghi ADC10DTC1 khác không. - Khi ADC10 chuyên đổi xong giá trị được đẩy vao ADC10MEM, bộ chuyển dữ liệu được kích hoạt.Mỗi DTC tranfer cần 1 chu kỳ MCLK. Có 2 chế độ: One block và two block tranfer 1.8.6 ADC10 Interupt - Một ngắt và một vector ngắt đi kèm với bộ ADC10. - Khi DTC không được dùng thì ADC10IFG được set khi quá trình chuyển đổi ADC đã xong và dữ liệu được load vào ADC10MEM. Khi dùng DTC thì ADC10IFG được set khi khi việc chuyển vào bộ nhớ 1 block hoàn thành.Nếu bit GIE và ADC10IE được set thì khi ADC10IFG được set thì sẽ tạo ra ngắt.
  • 16. 1.9 UART 1.9.1 Giới thiệu : o Là bộ truyền nhận dữ liệu nối tiếp bất đồng bộ o Khi kết hợp với mỗi thiết bị chuyển đổi điện áp khác nhau nó tạo ra 1 chuẩn giao tiếp khác nhau ( vd: chuẩn RS232 thông qua MAX232,…) o Dữ liệu được đóng gói thành các khung truyền trước khi truyền đi, một khung truyền bao gồm : o Start bit (=0): báo cho thiết bị nhận chuẩn bị có dữ liệu truyền đến o Data : là phần dữ liệu gửi đi ngay sau start bit o Parity bit : là bit được thêm vào để kiểm tra dữ liệu sau khi truyền o Stop bit : thường là 1 bit hoặc 2 bit dùng để báo kết thúc một khung truyền o Tốc độ baud ( số bit truyền trong 1s) ở cả 2 thiết bị truyền và nhận phải giống nhau 1.9.2 Hoạt động: o USCI_UART được reset bởi PUC hoặc set bit UCSWRST o USCI_UART hoạt động khi clear bit UCSWRST o Hoạt động nhận dữ liệu của UART o Sau khi clear bit UCSWRST, bộ nhận dữ liệu và bộ tốc độ baud sẵn sàng và ở trạng thái chờ o Khi phát hiện start bit thì quá trình nhận dữ liệu bắt đầu và ngược lại khi không phát hiện start bit thì quay về trạng thái chờ o Hoạt động truyền dữ liệu của UART o Sau khi clear bit UCSWRST, bộ nhận truyền dữ liệu và bộ tốc độ baud sẵn sàng và ở trạng thái chờ o Khi có dữ liệu ghi vào thanh ghi UCAxTXBUF thì quá trình truyền dữ liệu bắt đầu o Dữ liệu được truyền vào Transmit shift register khi thanh ghi này rỗng và tiếp tục được truyền sang thiết bị nhận o Cờ UCAxTXIFG được set khi mà UCAxTXBUF đã sẵn sàng cho dữ liệu tiếp theo o Nếu dữ liệu không được ghi vào UCAxTXBUF thì bộ UART lại tiếp tục vào trạng thái chờ 1.9.3 Thiết lập tốc độ baud : Có 2 chế độ thiết lập, được lựa chọn bằng bit UCOS16 o BITCLK = tốc độ baud o Tốc độ baud này được tính từ xung BRCLK qua hệ số chia N = (fBRCLK / Baud rate), do đó hệ số N thường không phải là số nguyên.Vì vậy để tăng độ chính xác, ngoài bộ chia divider còn có bộ điều biến modulator o Để thiết lập tốc độ baud với các độ chính xác khác nhau, ta sử dụng bảng o “ Commonly used Baud Rates“ của msp430 để thiết lập các giá trị cho UCBRx, UCBRFx, UCBRSx. 1.9.4 Ngắt UART : +Transmit interrupt o Cờ ngắt UCAxTXIFG được set khi thanh ghi UCAxTXBUF đã sẵn sàng nhận dữ liệu mới cần truyền
  • 17. o Để xảy ra ngắt thì cờ UCAxTXIE và GIE cần được set o Cờ ngắt UCAxTXIFG tự động reset khi dữ liệu được ghi vào UCAxTXBUF + Receive interrupt o Cờ ngắt UCAxRXIFG được set dữ liệu được nhận và chứa trong thanh ghi UCAxTXBUF đã o Để xảy ra ngắt thì cờ UCAxTXIE và GIE cần được set o Cờ ngắt UCAxRXIFG tự động reset khi dữ liệu được đọc ra khỏi UCAxRXBUF Thanh ghi : o UCAxCTL0 : thanh ghi điều khiển 0 o UCAxCTL1 : thanh ghi điều khiển 1 o IE2 : thanh ghi điều khiển ngắt o UCAxBRO : thanh ghi tạo hệ số chia tần o UCAxBR1 : thanh ghi tạo hệ số chia tần o UCA0MCTL : điều khiển modulation 1.9.5 Kích hoạt UART : o Việc thay đổi giá trị trên các thanh ghi kể trên sẽ kích hoạt UART với nhiều mode khác nhau, chẳng hạn muốn UART cấu hình : Baud rate = 9600 , nhận dữ liệu nối tiếp truyền từ máy vi tính o Chọn nguồn cung cấp clock và thiết lập tốc độ baud theo bảng trong datasheet BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz/104 ~ 9600 , UCBRx = 104 UCA0BR1 = 0; UCA0MCTL = UCBRS0; // UCBRSx = 1 o Bắt đầu kích hoạt UART UCA0CTL1 &= ~UCSWRST; // Turn on UART o Kích hoạt ngắt của bộ nhận IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt 1.10SPI 1.10.1 Giới thiệu : o Cung cấp một giao thức nối tiếp đồng bộ kép giữa MCU và thiết bị ngoại vi o Giao tiếp SPI được thực hiện thông qua bus 4 dây MISO, MOSI, SCK, SS MISO: Master Input Slave Output MOSI: Master Output Slave Input. SCK : Serial Clock SS : Slave Select. 1.10.2 Hoạt động: o Tín hiệu SCK được cung cấp bởi Master nhằm tạo xung đồng bộ cho phép dữ liệu được truyền đi hoặc khi đọc dữ liệu nhận được. o Tốc độ của dữ liệu truyền đi sẽ thay đổi theo sự thay đổi của SCK ( sự thay đổi tốc độ truyền không ảnh hưởng đến dữ liệu ). o Master và Slave đều có thanh ghi dịch nối tiếp ở bên trong. o Master bắt đầu việc trao đổi dữ liệu bằng cách truyền đi một byte vào thanh ghi dịch của nó, sau đó byte dữ liệu sẽ được đưa sang Slave theo đường tín hiệu MOSI
  • 18. o Slave sẽ truyền dữ liệu nằm trong thanh ghi dịch của chính nó ngược trở về Master thông qua đường tín hiệu MISO. + Như vậy dữ liệu của hai thanh ghi sẽ được trao đổi với nhau. Việc đọc và ghi dữ liệu vào Slave diễn ra cùng một lúc nên tốc độ trao đổi dữ liệu diễn ra rất nhanh. Do đó, giao thức SPI là một giao thức rất có hiệu quả. + Chỉ có thiết bị Master mới có thể cấp xung SCK, dữ liệu sẽ không được truyền đi nếu như Master không cung cấp xung SCK. + Tất cả các thiết bị Slave đều được điều khiển bởi xung nhịp phát ra từ Master (Slave không có khả năng phát xung). + Thường thì tín hiệu SS dùng để chọn Slave sẽ tác động mức thấp để chỉ ra Slave nào được truy cập. Tín hiệu này phải được sử dụng khi có nhiều hơn 1 Slave trong cùng hệ thống và thường không sử dụng đến khi trong mạch chỉ có 1 Slave. 1.10.3 Thanh ghi ảnh hưởng SPI + USICKCTL : USI clock control register + USICNT : USI bit counter register + USICTL0 : USI control register 0 + USICTL1 : USI control register 1 1.10.4 Kích hoạt SPI + Việc thay đổi giá trị trên các thanh ghi kể trên sẽ kích hoạt SPI với nhiều mode khác nhau, chẳng hạn muốn SPI cấu hình : SPI Master + xung clock ACLK / 4 + USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; + USICTL1 |= USICKPH + USIIE; + USICKCTL = USIDIV_2 + USISSEL_1; // chia 2, ACLK + USICTL0 &= ~USISWRST; + USICNT = 8; 1.10.5 Ngắt SPI : + USIIFG được set khi bit USICNTx = 0 (tự động giảm về 0 khi truyền hết dữ liệu hoặc tự nạp giá trị 0) + USIIFG bị xóa khi bit USICNTx > 0 và USIIFGCC = 0 ,hoặc xóa trực tiếp bằng code. Chương 2: Thực hành
  • 19. 2.1 PORT1 : //****************************************************************************** // MSP430G2xx1 Demo - Software Poll P1.4, Set P1.0 if P1.4 = 1 // // Description: Poll P1.4 in a loop, if hi P1.0 is set, if low, P1.0 reset. // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430F2x32 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // /| | | // --o--|P1.4 P1.0|-->LED // |/ // //****************************************************************************** #include <msp430F2232.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction while (1) // Test P1.4 { if ((0x10 & P1IN)) P1OUT |= 0x01; // if P1.4 set, set P1.0 else P1OUT &= ~0x01; // else reset } } 2.2 PORT1 & INTERRUPT:
  • 20. //****************************************************************************** // MSP430G2xx1 Demo - Software Port Interrupt Service on P1.4 from LPM4 // // Description: A hi/low transition on P1.4 will trigger P1_ISR which, // toggles P1.0. Normal mode is LPM4 ~ 0.1uA. LPM4 current can be measured // with the LED removed, all unused P1.x/P2.x configured as output or inputs // pulled high or low, and ensure the P1.4 interrupt input does not float. // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430G2x32 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // /| | | // --o--|P1.4 P1.0|-->LED // |/ //****************************************************************************** #include <msp430g2232.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction P1IE |= 0x10; // P1.4 interrupt enabled P1IES |= 0x10; // P1.4 Hi/lo edge P1IFG &= ~0x10; // P1.4 IFG cleared _BIS_SR(LPM4_bits + GIE); // Enter LPM4 w/interrupt } // Port 1 interrupt service routine #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1OUT ^= 0x01; // P1.0 = toggle P1IFG &= ~0x10; // P1.4 IFG cleared } 2.3 Ví d ho t đ ng c a Timer_A :ụ ạ ộ ủ #include <msp430g2231.h>
  • 21. void FaultRoutine(void); void ConfigWDT(void); void ConfigClocks(void); void ConfigLEDs(void); void ConfigTimerA2(void); void main(void) { ConfigWDT(); ConfigClocks(); ConfigPINs(); ConfigTimerA2(); _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } void ConfigWDT(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer } //Configure Clock void ConfigClocks(void) { if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) FaultRoutine(); // If calibration data is erased // run FaultRoutine() BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO IFG1 &= ~OFIFG; // Clear OSCFault flag BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8 } void FaultRoutine(void) { P1OUT = BIT0; // P1.0 on (red LED) while(1); // TRAP } void ConfigPINs(void) { P1DIR = BIT6 + BIT0; // P1.6 and P1.0 outputs P1OUT = 0; // LEDs off } void ConfigTimerA2(void) { CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 62500; TACTL = TASSEL_2 + MC_2; // SMCLK, contmode } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P1OUT ^= 0x01; // Toggle P1.0 CCR0 += 62500; // Add Offset to CCR0 } Sơ đồ nguyên lý: Trong ví dụ trên, Timer_A hoạt động ở chế độ continuous, sẽ xảy ra ngắt khi giá trị thanh ghi TAR đếm đến giá trị thanh ghi TACCR0, chương trình con phục vụ ngắt sẽ lật trạng thái chân P1.0 làm đèn led sáng tắt theo. Với các chế độ hoạt động khác của Timer_A, ta chỉ cần thay đổi cấu hình trong chương trình con ConfigTimerA2 2.4 PWM: #include <msp430g2231.h> void FaultRoutine(void); void ConfigWDT(void); void ConfigClocks(void); void ConfigPINs(void); void ConfigTimerA2(void); void main(void) { ConfigWDT(); ConfigClocks(); ConfigPINs(); ConfigTimerA2(); _BIS_SR(LPM0_bits); // Enter LPM0 w/ interrupt } void ConfigWDT(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
  • 22. } //Configure Clock void ConfigClocks(void) { if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) FaultRoutine(); // If calibration data is erased // run FaultRoutine() BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO IFG1 &= ~OFIFG; // Clear OSCFault flag BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8 } void FaultRoutine(void) { P1OUT = BIT0; // P1.0 on (red LED) while(1); // TRAP } void ConfigPINs(void) { P1DIR = BIT2 + BIT1; // P1.2 and P1.1 outputs P1SEL = BIT2 + BIT1; // P1.2 <--> OUT1 and P1.1 <--> OUT0 } void ConfigTimerA2(void) { CCR0 = 1001; // PWM Period CCTL1 = OUTMOD_7; // CCR1 reset/set CCTL0 = OUTMOD_4; // CCR0 toggle CCR1 = 501; // CCR1 PWM duty cycle 50% TACTL = TASSEL_2 + MC_1; // SMCLK, Up mode, No divide S đ nguyên lý:ơ ồ Trong ví dụ trên, ta sẽ tạo ra 2 xung PWM trên 2 chân P1.1 và P1.2 Xung PWM ở chân P1.1 sẽ là lối ra OUT0 (thanh ghi TACCR0) hoạt động ở mode 4(toggle). Xung PWM ở chân P1.2 sẽ là lối ra OUT1 (thanh ghi TACCR1) hoạt động ở mode 7 (reset/set), độ rộng 2.5ADC10 & Interupt //****************************************************************************** // MSP430G2x31 Demo - ADC10, Sample A1, AVcc Ref, Set P1.0 if > 0.5*AVcc //
  • 23. // Description: A single sample is made on A1 with reference to AVcc. // Software sets ADC10SC to start sample and conversion - ADC10SC // automatically cleared at EOC. ADC10 internal oscillator times sample (16x) // and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC10 // conversion complete, ADC10_ISR will force exit from LPM0 in Mainloop on // reti. If A1 > 0.5*AVcc, P1.0 set, else reset. // // MSP430F2x32 // ----------------- // /|| XIN |- // | | | // --|RST XOUT|- // | | // >---|P2.1/A1 P1.1|-->LED // //****************************************************************************** #include "msp430F2132.h" void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ADC10CTL1 = INCH_1; // input A1 ADC10AE0 |= 0x02; // PA.1 ADC option select P1DIR |= BIT1 + BIT2; // Set P1.1, 1.2 to output direction for (;;) { P1OUT |= 0x04; __delay_cycles(1000); P1OUT &= ~0x04; __delay_cycles(1000); ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit if (ADC10MEM < 0x1FF) P1OUT &= ~0x02; // Clear P1.1 LED off else P1OUT |= 0x02; // Set P1.1 LED on } } // ADC10 interrupt service routine #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) 2.6 Phần thực hành giao tiếp SPI : // Giao tiếp msp430g2232 với 74hc595 qua chuẩn giao tiếp SPI // Dữ liệu từ msp430 sẽ truyền qua 595 để tạo hiệu ứng sáng led trên led 7 đoạn // Phần cứng sẽ thực hiện trên kit launch pad theo sơ đồ như hình bên #include <msp430g2231.h> int i=0; U 1 7 4 H C 5 9 5G N D 8 SDO 9 CLR 10G 13 SDI 14 V C C 1 6 SRCLK 11 RCLK 12 QA 15QB 1QC 2QD 3QE 4QF 5QG 6QH 7 M S P 4 3 0 G 2 2 3 1 P 1 . 0 C h o t P 1 . 5 C l k P 1 . 6 D a t a 8. U 4 7 S e g m e n t m i n i a 5b 4c 3d 10e 9f 7g 8p 2 V c c 1 1 V c c 2 6 V C C V C C V C C 0
  • 24. int b[10]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF}; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= 0x01; // P1.0 is output USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master USICTL1 |= USICKPH + USIIE; // Counter interrupt, flag remains set USICKCTL = USIDIV_2 + USISSEL_1; // /4 ACLK USICTL0 &= ~USISWRST; // USI released for operation USISRL = b[i]; USICNT = 8; // init-load counter 8 bits _BIS_SR(LPM3_bits + GIE); // Enter LPM3 + interrupt } #pragma vector=USI_VECTOR // USI interrupt service routine __interrupt void USI_ISR(void) { // create positive edge clock on p1.0 P1OUT &= ~0x01; __delay_cycles(100000); P1OUT |= 0x01; USISRL = b[i] ; if(i==5) { i=0; } else{ i++; } USICNT = 8; // re-load counter } 2.7 Phần thực hành giao tiếp UART // Giao tiếp msp430g2553 với máy vi tính qua chuẩn giao tiếp UART // Dữ liệu được truyền từ máy vi tính xuống msp430 bằng phần mềm Advanced Serial Port Terminal // Nếu dữ liệu truyền là số, thì msp430 sẽ xử lý và bật tắt các led trên kit launch pad // Nếu dữ liệu là chữ thì msp430 sẽ truyền ngược lại cho máy vi tính để hiển thị lên màn hình của Advanced Serial Port Terminal // Phần cứng sẽ thực hiện trên kit launch pad rev 1.4 , chú ý ghép nối các jump để thực hiện UART trên kit #include "msp430g2553.h" #define UART_TXD 0x02 #define UART_RXD 0x04 unsigned int t1; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2; UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz / 104 ~ 9600 UCA0BR1 = 0; UCA0MCTL = UCBRS0; // Modulation = 1 UCA0CTL1 &= ~UCSWRST; // Turn on UART (USCI)
  • 25. IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt P1DIR = 0xFF & ~UART_RXD; // Set all pins but RXD to output P1OUT = 0x00 ; __bis_SR_register(LPM0_bits+GIE); //Enable ngat ngoai vi t1=0; } #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { if(UCA0RXBUF > '/' && UCA0RXBUF < ':') t1 = t1*10 + (UCA0RXBUF-'0') ; else { if(UCA0RXBUF == ':') { switch(t1) { case 11: P1OUT |= BIT0; break; // bat led do p1.0 case 12: P1OUT |= BIT6; break; // bat led xanh p1.6 case 91: P1OUT &=~ BIT0; break; // tat led do p1.0 case 92: P1OUT &=~ BIT6; break; // tat led xanh p1.6 default: break; } t1 = 0 ; } else while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready? if(UCA0RXBUF != ':') UCA0TXBUF = UCA0RXBUF; } } 2.8 WDT //******************************************************************************
  • 26. // MSP430G2xx1 Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK // // Description: Toggle P1.0 using software timed by the WDT ISR. Toggle rate // is approximately 30ms based on default DCO/SMCLK clock source // used in this example for the WDT. // ACLK = n/a, MCLK = SMCLK = default // // MSP430G2xx2 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // | | // | P1.0|-->LED // //****************************************************************************** #include <msp430g2232.h> void main(void) { WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms IE1 |= WDTIE; // Enable WDT interrupt P1DIR |= 0x01; // Set P1.0 to output direction _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } // Watchdog Timer interrupt service routine #pragma vector=WDT_VECTOR __interrupt void watchdog_timer(void) { P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR }