msp430 串口 不停的发00,

2019-03-24 14:45发布

问题如题目, 只有把main函数中的  _EINT();屏蔽掉,才停止发送00,但是我需要接受中断,这可如何是好!!!!!急急急!!!!! 代码如下:   #include <msp430x14x.h>
  char UART0_RX_BUF[],nRX0_Len_temp,nRX0_Len;
  char Data[6]={0x01,0x02,0x03,0x04,0x05,0x06};
  char data1 = 0;
//=======================延时===================================================
void delay(unsigned int n)
  {
    unsigned int i;
    for(i=0;i<n;i++);
  }
//======================串口初始化==============================================
void init_uart0(void)
  {
//====================SWRST置位=================================================   
    U0CTL |= SWRST;
//====================串口工作模式设置==========================================
    U0CTL = 0x00;      // U0CTL包含串口0通信协议、通信模式、校验位等设置,允许UART0
    U0CTL += CHAR;     //(CHAR=0x10)当CHAR=0时为7位数据,当 CHAR=1时为8位数据
                       //不需要校验,数据位为8位,无反馈,异步UART通信,UART被允许
//====================串口发送操作设置==========================================
    //U0TCTL = 0x01;     //U0TCTL包含串口0发送功能操作
    U0TCTL = SSEL1 + TXEPT;   //波特率发生器选择MCLK
//====================串口波特率设置9600========================================
//===================波特率计算公式:波特率=BRCLK/(UBR+(M7+M6+。。。。+M0)/8)
    UBR0_0 = 0x41;     //UBR0_0为串口0波特率整数部分低地址
    UBR1_0 = 0x03;     //UBR1_0为串口0波特率整数部分高地址
    UMCTL_0 = 0x24;    //UBR1_0为串口0波特率小数调整部分
//===================串口收发使能控制===========================================
    ME1 |= UTXE0;      //串口0发送功能使能
    ME1 |= URXE0;      //串口0接收功能使能   
//===================串口中断使能控制===========================================
    IE1 |= UTXIE0;     //串口0发送中断使能
    IE1 |= URXIE0;     //串口0接收中断使能 
//====================SWRST复位=================================================
    U0CTL &= ~SWRST;   //clean SWRST     
  } //======================串口接收中断服务函数====================================
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  while ((IFG1 & URXIFG0) == 1);    //中断标志       
  if((U0RCTL & RXERR) == 0)         //没有接收出错
  {
    data1 = RXBUF0;                 // RXBUF0 to TXBUF0
    //delay(500);
    //TXBUF0=data1;
    //IFG1=IFG1&0xef;
  }
} //======================串口发送中断服务函数====================================
/*
#pragma vector = USART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{ }
*/ /*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
   unsigned int iq0;
   _DINT();
   BCSCTL1 &=~XT2OFF;
   do
   {
      IFG1 &= ~OFIFG;   // 清除振荡器失效标志
      for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
   }
   while ((IFG1 & OFIFG) != 0);  // 判断XT2是否起振  
   BCSCTL2 = SELM1+SELS;                //MCLK,SMCLK时钟为XT2
}
//=============================================================================== void U0putc(unsigned char c)
{
  while((U0TCTL & TXEPT) == 0);
  TXBUF0 = c;
} main()
{
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;     //关闭看门狗
  InitSys();
 
//===================端口第二功能使能===========================================
  P3SEL |= BIT4;     //设置P3。4为UART0 的TXD
  P3SEL |= BIT5;     //设置P3。5为UART0 的RXD
  P3DIR |= BIT4;     //设置P3。4为输出
  P3DIR &= ~BIT5;    //设置P3。5为输入
//==============================================================================
  P6SEL &= ~(BIT1 + BIT2);
  P6DIR |= (BIT1 + BIT2);
 
  init_uart0();
 
  _EINT();           //打开全局中断
 
  while(1)
  {
    for (i = 0; i < 6; i++)
    {
      U0putc(Data);
    }
    delay(6000);
   
    if(data1 == 31)
    {
      P6OUT |= BIT1;
      delay(60000);
      P6OUT &= ~BIT1;
      data1 = 0;
    }
  };
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
guo8113
2019-03-25 07:34
你把发送中断关闭,或者把发送中断函数删掉。因为你的发送中断函数里没有内容,所以出错,实践中是这样的。我也遇过类似麻烦,不过我的是系统一直在初始化。。。。

一周热门 更多>

相关问题

    相关文章