打算用USART1作为串口用,程序如下,但是不知道为什么就是没用,请大神帮忙看看~
#include<msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
void stop();
unsigned char TBuff[2]={1,2}; // 发送缓冲区
#define keyin (P1IN & 0x0F)
void delay(void);
/*******************************************
函数名称:delay
功 能:用于延时消抖
参 数:无
返回值 :无
********************************************/
void delay(void)
{
int tmp1;
int tmp2;
for(tmp1 =2000;tmp1 > 0;tmp1--)
{
for(tmp2=200;tmp2>0;tmp2--);
}
}
/****************************************************************************
* 名称:Sys_Ini()
* 功能:系统初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Sys_Ini(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 &= ~XT2OFF; // XT2on
BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
_NOP();
}
while ((IFG1 & OFIFG)!=0); // OSCFault flag still set?
IFG1&=~OFIFG;
BCSCTL2 |= SELM_2 + SELS;
}
void ini_uart(void)
{
P3SEL |= BIT6+BIT7; // 选择P3.6和P3.7做UART通信端口
P3DIR |=BIT6; //设置TXD1方向为输出
ME2 |= UTXE1 + URXE1; // 使能USART1的发送和接收
U1CTL |= CHAR+SWRST; // 选择8位字符
U1TCTL |= SSEL1; // UCLK = ACLK
U1BR0 = 0x03; // 波特率9600
U1BR1 = 0x00; //
U1MCTL = 0x4A; // 波特率调整
U1CTL &= ~SWRST; // 初始化UART状态机
IE2 |= URXIE1+UTXE1; // 使能USART0的接收中断
IFG2 &=~UTXIFG1;
_EINT(); //打开全局中断
_BIS_SR(LPM3_bits +GIE);
}
void sent_byte(uchar data)
{
while(!(IFG2&UTXIFG1));
U1TXBUF=data;
}
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
uchar data=0;
data=U1RXBUF;
sent_byte(data);
}
void PutString(char *ptr)
{
while(*ptr != ' ')
{
while (!(IFG1 & UTXIFG0)); // TX缓存空闲?
TXBUF0 = *ptr++; // 发送数据
}
while (!(IFG1 & UTXIFG0));
TXBUF0 = '
';
}
char *F2S(double d,char * str)
{
char str1[40];
int j=0,k,i;
i = (int)d; //浮点数的整数部分
//d = d-(int)d;
while(i>0)
{
str1[j++] = i%10+'0';
i /= 10;
}
for(k=0;k<j;k++)
str[k] = str1[j-1-k]; //
str[j++] = '.';
d -= (int)d;
for(i=0;i<10;i++)
{
d *= 10;
str[j++] = (int)d+'0';
d -= (int)d;
}
while(str[--j]=='0');
str[++j] = ' ';
return str;
}
void Print_Str(uchar *s)
{
Send_Byte(*s++);
delay_ms(2);
}
/********************主函数********************/
void main( void )
{
Sys_Ini(); //系统初始化
ini_uart(); //串口设置初始化
//Port_Inti(); //端口初始化
_EINT(); // 开中断
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1DIR = 0x00; //设置P1.0~P.3为输入状态
P2DIR =0xff; //
P2OUT=0XFF; //
while(1)
{
if(keyin != 0x0F) //如果有入侵
{
sent_byte(0);
P2OUT =0XFE;
delay();
}
else
sent_byte(1);
P2OUT =0XFF;
delay();
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#include<msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
void stop();
unsigned char TBuff[2]={1,2}; // 发送缓冲区
#define keyin (P1IN & 0x0F)
void delay(void);
/*******************************************
函数名称:delay
功 能:用于延时消抖
参 数:无
返回值 :无
********************************************/
void delay(void)
{
int tmp1;
int tmp2;
for(tmp1 =2000;tmp1 > 0;tmp1--)
{
for(tmp2=200;tmp2>0;tmp2--);
}
}
/****************************************************************************
* 名称:Sys_Ini()
* 功能:系统初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Sys_Ini(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELM_2 + SELS;
}
void ini_uart(void)
{
P3SEL |= 0xC0; // 选择P3.4和P3.5做UART通信端口
ME2 |= UTXE1 + URXE1; // 使能USART0的发送和接受
UCTL1 |= CHAR; // 选择8位字符
UTCTL1 |= SSEL1; // UCLK = ACLK
UBR01 = 0x45; // 波特率9600
UBR11 = 0x00; //
UMCTL1 = 0x049; // Modulation
UCTL1 &= ~SWRST; // 初始化UART状态机
IE2 |= URXIE1; // 使能USART0的接收中断
_EINT(); //打开全局中断
}
void sent_byte(uchar data)
{
while((IFG2&UTXIFG1)==0);
U1TXBUF=data;
}
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX(void)
{
uchar data=0;
data=U1RXBUF;
sent_byte(data);
}
void PutString(char *ptr)
{
while(*ptr != ' ')
{
while (!(IFG2 & UTXIFG1)); // TX缓存空闲?
TXBUF1 = *ptr++; // 发送数据
}
while (!(IFG2 & UTXIFG1));
TXBUF1 = ' ';
}
/********************主函数********************/
void main( void )
{
Sys_Ini();
ini_uart();
_EINT();
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1DIR = 0x00; //设置P1.0~P.3为输入状态
P2DIR =0xff; //
P2OUT=0XFF; //
while(1)
{
if(keyin != 0x0F) //如果有入侵
{
sent_byte(1);
P2OUT =0XFE;
delay();
}
else
sent_byte(0);
P2OUT =0XFF;
delay();
}
}
建议把tx和rx连一起,先调试下自己给自己数据能否正确收到
一周热门 更多>