#include "io430.h"
#define uchar unsigned char
#define uint unsigned int
void InitSys()
{
uint iq0;
//使用XT2振荡器
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG;// 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--);// 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0);// 判断XT2是否起振
BCSCTL2 =SELM_2+SELS;//选择MCLK、SMCLK为XT2,四分频
}
void delay(void);
void PutString(uchar *ptr);
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitSys();
uchar value=0;
//以下是串口设置
P3SEL|=0XC0; //P3.6,7选为USART0收发端
P3DIR|=0x40; //P3.6为输出
ME2|=UTXE1+URXE1; // 使能USART0的接收和发送
UCTL1|=CHAR; //8-bit
UTCTL1|=SSEL1; //UCLK=SMCLK
UBR01=0x45; //设置波特率32/2400=13.65
UBR11=0x00;
UMCTL1=0x049;
UCTL1&=~SWRST; //初始USART0状态机
while(1)
{
while(!(IFG2&UTXIFG1)); //USART1发送缓冲器是否准备好
TXBUF1=value++;
value&=0x7f; //保证value的数值小于128
while(!(IFG2&UTXIFG1));
TXBUF1='\n'; //发送换行符
delay();
}
}
void PutString(uchar *ptr) //向PC机发送字符串
{
while(*ptr !='\0' ) //不为字符串结束符
{
while(!(IFG2&UTXIFG1));
TXBUF1=*ptr++; //发送数据
}
}
void delay(void)
{
uchar i=20;
uint j;
while(i--)
{
j=2000;
while(j--);
}
i
例2:PC机想MSP430发送一个数据,+1在发回PC机
#include "io430.h"
#define uint unsigned int
void delay();
void InitSys()
{
uint iq0;
//使用XT2振荡器
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG;// 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--);// 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0);// 判断XT2是否起振
BCSCTL2 =SELM_2+SELS;//选择MCLK、SMCLK为XT
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitSys();
//串口设置
P3SEL|=BIT6+BIT7; //P3.6,7=USART0 TXD,RXD
P3DIR|=BIT6;
ME2 |=URXE1+UTXE1; // 使能发送和接收
UCTL1|=CHAR; //8位
U1TCTL=SSEL1; //UCLK=SMCLK
U1BR0 = 0x45; // 波特率115200
U1BR1 = 0x00; //
UMCTL1 = 0x49; // Modulation
UCTL1&=~SWRST; //usart模块初始化
IE2 |=URXIE1; //社能接收中断
for(;;)
{
__bis_SR_register(LPM0_bits+GIE);
while(!(IFG2&UTXIFG1)); //USART1发送缓冲器是否准备好
TXBUF1=RXBUF1+1; //发送数据
delay();
}
}
#pragma vector=UART1RX_VECTOR
__interrupt void usart0_rx(void)
{
LPM0_EXIT;
}
void delay(void)
{
unsigned i=50000;
while(i!=0)
{i--;}
}