#include"msp430G2553.h"
#include "in430.h"
void UartPutchar(unsigned char c);
unsigned char UartGetchar();
unsigned char temp=0;
unsigned char number[2]={0};
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1DIR|=BIT6;
P1OUT&=~BIT6;
P1SEL = BIT1 + BIT2; // P1.1為 RXD, P1.2為TXD
P1SEL2 = BIT1 + BIT2; // P1.1為 RXD, P1.2為TXD
UCA0CTL1 |= UCSSEL_2; // 選擇時(shí)鐘BRCLK
UCA0BR0 = 106; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+...0)/8)
UCA0CTL1 &= ~UCSWRST;
// 初始化順序:SWRST=1設(shè)置串口,然后設(shè)置SWRST=0,最后設(shè)置相應(yīng)中斷
IE2 |= UCA0RXIE; // 使能接收中斷
while(1)
{
//UartPutchar(9);
// display_int(temp,0);
__delay_cycles(10000);
}
}
/**********************************UART接收中斷*************************/
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
//while (!(IFG2&UCA0TXIFG)); // 等待發(fā)送完成
//UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
temp=UCA0RXBUF;
}
/******************************UART發(fā)送字節(jié)函數(shù)*************************/
void UartPutchar(unsigned char c)
{
while(!(IFG2 & UCA0TXIFG)); //待發(fā)送為空
UCA0TXBUF=c;
IFG2 &=~UCA0RXIFG;
}
/*********************************UART接收字節(jié)數(shù)據(jù)******************/
unsigned char UartGetchar()
{
unsigned char c;
while(!(IFG2 & UCA0RXIFG)); //等待接收完成
c=UCA0RXBUF;
IFG2 &=~UCA0TXIFG;
return c;
}
/******智能控制工作室*******/
MSP430g2553串口通信

串行通訊模塊主要由三個(gè)部分組成:波特率生成部分、發(fā)送控制器以及接收控制器。如圖1.2所示。
一、UART模式

(一)UART的初始化
單片機(jī)工作的時(shí)鐘源來自內(nèi)部三個(gè)時(shí)鐘或者外部輸入時(shí)鐘,由SSEL1、SSEL0,以決定最終進(jìn)入模塊的時(shí)鐘信號(hào)BRCLK的頻率。所以配置串行通訊的第一步就是選擇時(shí)鐘。
通過選擇時(shí)鐘源和波特率寄存器的數(shù)據(jù)來確定位周期。所以波特率的配置是串行通訊中最重要的一部分。波特率設(shè)置用三個(gè)寄存器實(shí)現(xiàn):UxBR0(選擇控制器0):波特率發(fā)生器分頻系數(shù)低8位。UxBR1(選擇控制器1):波特率發(fā)生器分頻系數(shù)高8位。UxMCTL
數(shù)據(jù)傳輸?shù)母袷,以及?shù)據(jù)傳輸?shù)哪J绞峭ㄟ^配置控制寄存器UCTL來進(jìn)行設(shè)置。
接收控制部分和發(fā)送控制部分。首先需要串行口進(jìn)行配置、使能以及開啟中斷。串口接收數(shù)據(jù)一般采用中斷方式,發(fā)送數(shù)據(jù)采用主動(dòng)發(fā)送。當(dāng)接收到一個(gè)完整的數(shù)據(jù),產(chǎn)生一個(gè)信號(hào):URXIFG0=1(類似于51單片機(jī)的接收中斷標(biāo)志位),表示接收完整的數(shù)據(jù)。當(dāng)數(shù)據(jù)正在發(fā)送中,UTXIFG0=1,此時(shí)不能再發(fā)送數(shù)據(jù),必須等當(dāng)前數(shù)據(jù)發(fā)送完畢(UTXIFG0=0)才能進(jìn)行發(fā)送。
二、SPI模式
USTAR下的SPI模式有如下特點(diǎn):
1、SPI模式支持3線和4線模式;
2、支持主機(jī)與從機(jī)模式;
3、接受和發(fā)送有各自獨(dú)立的發(fā)送移位寄存器和緩沖器;
4、接受和發(fā)送都有獨(dú)立的中斷能力;
5、移位時(shí)鐘的極性和相位可編程;
6、字符長度可以是7位或者8位。
SPI工作在全雙工下,即主機(jī)發(fā)送的同時(shí)也接收數(shù)據(jù),傳輸?shù)乃俾视删幊虥Q定。4線SPI模式用附加數(shù)據(jù)線,允許從機(jī)數(shù)據(jù)的發(fā)送和接收。其信號(hào)如下: SIMO:從進(jìn)主出,主機(jī)模式下,數(shù)據(jù)輸出;從機(jī)模式下,數(shù)據(jù)輸入。SOMI:從出主進(jìn),主機(jī)模式下,數(shù)據(jù)輸入,從機(jī)模式下,數(shù)據(jù)輸出。UCLK:USART SPI模式時(shí)鐘,信號(hào)有主機(jī)輸出,從機(jī)輸入。CLK時(shí)鐘只能由主機(jī)提供。STE:從機(jī)模式發(fā)送接收允許控制腳,用于4線模式。
(一)SPI初始化
SPI當(dāng)中不需要波特率調(diào)整,所以UxMCTL=0x0000,SPI的初始化及其復(fù)位和UART公用一套寄存器。
在初始化或者重新配置USART的SPI時(shí),必須按照以下順序進(jìn)行:
1、UxCTL寄存器的第0位SWRST置位;
2、在SWRST置位的條件下,初始化所有的SPI寄存器,包括UxCTL寄存器;
3、通過置位模塊使能寄存器MEx的URXEx和UTXEx位使能SPI的接受和發(fā)送使能模塊;
4、通過軟件復(fù)位UxCTL寄存器的第0位SWRST;
5、通過中斷使能寄存器IEx的URXIEx和UTXIEx來使能發(fā)送和接受中斷。
}
三、寄存器及其功能
通信模塊寄存器如下:
表3.1 USART0的寄存器
|
||||
寄存器
|
縮寫
|
讀寫類型
|
地址
|
初始狀態(tài)
|
控制寄存器
|
U0CTL
|
讀/寫
|
070H
|
PUC后001H
|
發(fā)送控制寄存器
|
U0TCTL
|
讀/寫
|
71H
|
PUC后001H
|
接收控制寄存器
|
U0RCTL
|
讀/寫
|
72H
|
PUC后000H
|
波特率調(diào)整控制寄存器
|
U0MCTL
|
讀/寫
|
73H
|
不變
|
波特率控制寄存器0
|
U0BR0
|
讀/寫
|
74H
|
不變
|
波特率控制寄存器1
|
U0BR1
|
讀/寫
|
75H
|
不變
|
接收緩沖器
|
U0RXBUF
|
讀
|
76H
|
不變
|
發(fā)送緩沖器
|
U0TXBUF
|
讀/寫
|
77H
|
不變
|
SFR 模塊使能寄存器1
|
ME1
|
讀/寫
|
004H
|
PUC后000H
|
SFR 模塊使能寄存器1
|
IE1
|
讀/寫
|
000H
|
PUC后000H
|
SFR 模塊使能寄存器1
|
IFG1
|
讀/寫
|
002H
|
PUC后082H
|
(1)控制寄存器UxCTL
控制寄存器內(nèi)的信息決定了USART的基本操作。如:選擇通信協(xié)議、通信模式和校驗(yàn)位。在SWRST復(fù)位使USART復(fù)位操作禁止前,各位應(yīng)根據(jù)選擇的模式進(jìn)行編程。
表3.2 發(fā)送控制寄存器UxCTL
|
||
位
|
含義
|
使用
|
7(PENA)
|
校驗(yàn)允許位
|
0:校驗(yàn)禁止
1:校驗(yàn)允許
|
6(PEV)
|
奇偶校驗(yàn)位
|
0:奇校驗(yàn)
1:偶校驗(yàn)
|
5(SP)
|
停止位選擇
|
0:1位停止位
1:2位停止位
|
4(CHAR)
|
字符長度
|
0:7位
1:8位
|
3(LISTEN)
|
反饋選擇
(選擇是否發(fā)送數(shù)據(jù)由內(nèi)部反饋給接收器)
|
0:無反饋
1:有反饋
|
2(SYNC)
|
USART模塊的模式選擇
|
0:UART模式(異步)
1:SPI模式(同步)
|
1(MM)
|
多機(jī)模式選擇位
|
0:線路空閑多機(jī)協(xié)議
1:地址位多機(jī)協(xié)議
|
0(SWRST)
|
控制位(上電置位)
|
0:USART禁止
1:USART允許
|
(2)發(fā)送控制寄存器UxTCTL(未作說明的位未用)
寄存器UxTCTL控制與發(fā)送操作相關(guān)的USART硬件。
表3.3 發(fā)送控制寄存器UxTCTL
|
||
位
|
含義
|
使用
|
7(CKPH)
|
時(shí)鐘相位控制位
|
0:正常UCLK時(shí)鐘
1:UCLK時(shí)鐘延遲半個(gè)周期
|
6(CKPL)
|
時(shí)鐘極性控制位
|
0:UCLKI信號(hào)與UCLK信號(hào)極性相同
1:UCLKI信號(hào)與UCLK信號(hào)極性相反
|
5(SSEL1)
|
時(shí)鐘源選擇
(確定波特率發(fā)生器的時(shí)鐘源)
|
00:外部時(shí)鐘UCLKI
01:輔助時(shí)鐘ACLK
10:系統(tǒng)時(shí)鐘MCLK
11:子系統(tǒng)時(shí)鐘SMCLK
|
4(SSEL0)
|
||
1(STC)
|
發(fā)送控制位
|
0:SPI為4線模式
1:SPI為3線模式
|
0(TXEPT)
|
發(fā)送器空標(biāo)志,在異步模式與同步模式時(shí)是不一樣的
|
0:正在傳輸數(shù)據(jù)或者發(fā)送緩沖器(UTXBUF)有數(shù)據(jù)
1:表示發(fā)送移位寄存器和UTXBUF空或者SWRST=1
|
(3)接收控制寄存器URCTL
URCTL 控制與接收操作相關(guān)的USART硬件并保存由最新寫入U(xiǎn)RXBUF的字符引起的出錯(cuò)狀況和喚醒條件。若FE、PE、OE、BRK、RXERR 或 RXWake 中的任何一位置位,通過接收下一個(gè)字符不能使其復(fù)位。它們的復(fù)位要通過訪問接收緩存URXBUF、USART的軟件復(fù)位SWRST、系統(tǒng)復(fù)位PUC或用指令修改。
表3.4 接收控制寄存器URCTL
|
||
位
|
含義
|
使用
|
7(FE)
|
幀錯(cuò)誤標(biāo)志位
|
0:無幀錯(cuò)誤
1:有幀錯(cuò)誤
|
6(PE)
|
校驗(yàn)錯(cuò)誤標(biāo)志位
|
0:校驗(yàn)正確
1:校驗(yàn)錯(cuò)誤
|
5(OE)
|
溢出標(biāo)志位
|
0:無溢出
1:有溢出
|
4(BRK)
|
打斷檢測(cè)位
|
0:未打斷
1:打斷
|
3(URXEIE)
|
接收出錯(cuò)中斷允許位
|
0:禁止中斷,不接收出錯(cuò)字符,不改變URXIFG標(biāo)志
1:允許中斷,接收出錯(cuò)字符,置位URXIFG標(biāo)志
|
2(URXWIE)
|
接收喚醒中斷允許位
|
0:接收的所有字符都能夠置位URXIFG
1:只有接收到地址字符才置位URXIFG
|
1(RXWake)
|
接收喚醒檢測(cè)位
|
0:未被喚醒,接收到的字符是數(shù)據(jù)
1:喚醒,接收的字符是地址
|
0(RXERR)
|
接收錯(cuò)誤標(biāo)志位
|
0:未接收到錯(cuò)誤
1:接收到錯(cuò)誤
|
在各種條件下URXEIE和URXWIE對(duì)URXIFG的影響:
URXEIE
|
URXWIE
|
字符出錯(cuò)
|
地址字符
|
接收字符后的標(biāo)志位URXIFG
|
0
|
X
|
1
|
X
|
不變
|
0
|
0
|
0
|
X
|
置位
|
0
|
1
|
0
|
0
|
不變
|
0
|
1
|
0
|
1
|
置位
|
1
|
0
|
X
|
X
|
置位( 接收所 有字符)
|
1
|
1
|
X
|
0
|
不變
|
1
|
1
|
X
|
1
|
置位
|
(4)波特率選擇寄存器和調(diào)制控制寄存器
波特率產(chǎn)生器利用波特率選擇寄存器UxBR1和UxBR0,以及調(diào)整控制寄存器UxMCTL,來產(chǎn)生串行數(shù)據(jù)流的位定時(shí)。UxBR0、UxBR1這兩個(gè)寄存器是用于存放波特率分頻因子的整數(shù)部分,若波特率發(fā)生器的輸入頻率BRCLK不是所需波特率的整數(shù)倍,帶有小數(shù),則整數(shù)部分寫入U(xiǎn)xBR寄存器,小數(shù)部分則由調(diào)整寄存器UxMCT的內(nèi)容反映。波特率由以下公式計(jì)算:
波特率=BRCLK/(UBR+(M7+M6+ …M0)/8)
寄存器各位如下:
寄存器
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
UxBR0
|
||||||||
UxBR1
|
||||||||
UxMCT
|
M7
|
M6
|
M5
|
M4
|
M3
|
M2
|
M1
|
M0
|
(5)接收數(shù)據(jù)緩存URXBUF
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
接收緩存存放移位寄存器最后接收的字符,可由用戶訪問,讀接收緩存可以復(fù)位接收時(shí)產(chǎn)生的各種錯(cuò)誤標(biāo)志、RXWAKE位和URXIFGx位。如果傳輸7位數(shù)據(jù),接收緩存內(nèi)容右對(duì)齊,最高位為0。當(dāng)收接和控制條件為真時(shí),接收緩存裝入當(dāng)前接收到的字符。
條件
|
結(jié)果
|
||||
URXEIE
|
URXWIE
|
裝入U(xiǎn)RXBUF
|
PE
|
FE
|
BRK
|
0
|
1
|
無差錯(cuò)地址字符
|
0
|
0
|
0
|
1
|
1
|
所有地址字符
|
X
|
X
|
X
|
0
|
0
|
無差錯(cuò)字符
|
0
|
0
|
0
|
1
|
0
|
所有字符
|
X
|
X
|
X
|
(6)發(fā)送數(shù)據(jù)緩存UTXBUF
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
發(fā)送緩存含有當(dāng)前要由發(fā)送器發(fā)送的數(shù)據(jù)。UTXIFG 標(biāo)志表示UTXBUF已準(zhǔn)備好接收下一個(gè)要發(fā)送的字符。將數(shù)據(jù)寫入U(xiǎn)TXBUF初始化發(fā)送功能。如果發(fā)送移位寄存器為空或即將為空,數(shù)據(jù)的發(fā)送立即開始。只有當(dāng)UTXBUF為空時(shí),數(shù)據(jù)才能寫入緩存,否則可能發(fā)送不可預(yù)料的字符。
表1.1 MSP430G2553引腳功能表
|
||
引腳號(hào)
|
引腳名
|
引腳功能描述
|
1
|
DVCC
|
接電源
|
2
|
DVSS
|
接地
|
3
|
P1.0
|
通用I/O口、ADC10模擬輸入A0(1) 、Comparator_A+,CA0輸入、TIMER _A時(shí)鐘信號(hào)TACLK輸入、ACLK信號(hào)輸出
|
4
|
P1.1/RXD
|
通用I/O 口、Timer0_A,捕捉:CCI0A輸入,比較:Out0輸出/ BSL發(fā)送、UART模式中USCI_A0接收數(shù)據(jù)輸入、SPI模式中USCI_A0受控器數(shù)據(jù)輸出/主控器輸入、ADC10模擬輸入A1 、Comparator_A+,CA1輸入
|
5
|
P1.2/TXD
|
通用I/O 口、Timer0_A,捕獲:CCI1A輸入,比較:Out1輸出、UART模式中USCI_A0發(fā)送數(shù)據(jù)輸出、SPI 模式中USCI_A0受控器數(shù)據(jù)輸入/主控器輸出、ADC10模擬輸入A2、Comparator_A+,CA2輸入
|
6
|
P1.3
|
通用I/O 口、ADC10,轉(zhuǎn)換時(shí)鐘輸出(1)、ADC10模擬輸入A3、ADC10負(fù)基準(zhǔn)電壓、Comparator_A+,CA3輸入、Comparator_A+,輸出
|
7
|
P1.5
|
通用I/O 口、Timer0_A,比較:Out0輸出/ BSL接收、USCI_B0時(shí)鐘輸入/輸出、USCI_A0受控器發(fā)送使能、ADC10模擬輸入A5、Comparator_A+,CA5輸入、JTAG測(cè)試模式選擇輸入終端
|
8
|
P2.0
|
通用I/O 口、Timer1_A,捕獲:CCI0A輸入,比較:Out0輸出
|
9
|
P2.1
|
通用I/O 口、Timer1_A,捕獲:CCI1A輸入,比較:Out1輸出
|
10
|
P2.2
|
通用I/O 口、Timer1_A,捕獲:CCI1B輸入,比較:Out1輸出
|
11
|
P2.3
|
通用I/O 口、Timer1_A,捕獲:CCI0B輸入,比較:Out0輸出
|
12
|
P2.4
|
通用I/O 口、Timer1_A,捕獲:CCI2A輸入,比較:Out2輸出
|
13
|
P2.5
|
通用I/O 口、Timer1_A,捕獲:CCI2B輸入,比較:Out2輸出
|
14
|
P1.6
|
通用I/O 口、Timer0_A,比較:Out1輸出、、ADC10模擬輸入A6、Comparator_A+,CA6輸入、SPI模式中USCI_B0受控器輸出/主控器輸入、I2C 模式中的USCI_B0SCLI2C 時(shí)鐘、JTAG測(cè)試數(shù)據(jù)輸入或測(cè)試時(shí)鐘輸入
|
15
|
P1.7
|
通用I/O 口、ADC10模擬輸入A7、Comparator_A+,CA7輸入、Comparator_A+,輸出、SPI模式中的USCI_B0受控器輸入/主控器輸出、I2C 模式中的USCI_B0SDAI2C 數(shù)據(jù)輸入、JTAG測(cè)試數(shù)據(jù)輸出終端或測(cè)試數(shù)據(jù)輸入
|
16
|
RST
|
復(fù)位、不可屏蔽中斷輸入、編程及測(cè)試期間的兩線制(Spy-Bi-Wire) 測(cè)試數(shù)據(jù)輸入/輸出
|
17
|
TEST
|
為端口1上JTAG引腳選擇測(cè)試模式、器件保護(hù)熔絲連接至TEST、編程及測(cè)試期間的Spy-Bi-Wire測(cè)試時(shí)鐘輸入
|
18
|
P2.6/XOUT
|
晶體振蕩器的輸出終端、通用I/O 口
|
19
|
P2.7/XIN
|
晶體振蕩器的輸入終端、通用I/O 口、Timer0_A,比較:Out1輸出
|
20
|
DVSS
|
接地
|