USART异步串口通信问题

2019-07-27 16:58发布

打算用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();
      
    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。