串口查询发送,不开中断可以,开了后一直发FF

2019-07-17 14:25发布

串口查询发送,不开中断可以,开了后一直发FF
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
zhenykun
2019-07-17 19:49
如下:

#include <msp430x16x.h>

void Init_Port(void);

void Init_CLK(void);

void Init_UART1(void);

char data[6]="MSP430";

void main()

{

  WDTCTL=WDTPW+WDTHOLD;

  Init_CLK();

  Init_Port();

  Init_UART1();

  unsigned char i;

  _EINT();

  while(1)

  {

    for(i=0;i<6;i++)

    {

      TXBUF1=data[i];

      while((UTCTL1&0x01)==0);

    }

  }

  

  

}

void Init_Port(void)

{

    //将所有的管脚在初始化的时候设置为输入方式

    P3DIR = 0;



    //将所有的管脚设置为一般I/O口

    P3SEL = 0;

    return;

}

void Init_CLK(void)

{

    unsigned int i;

    //将寄存器的内容清零

    //XT2震荡器开启

    //LFTX1工作在低频模式

    //ACLK的分频因子为1

    BCSCTL1 = 0X00;        

                                       

    do

    {

        IFG1 &= ~OFIFG;                       // 清除OSCFault标志

        for (i = 0x20; i > 0; i--);               

    }

    while ((IFG1 & OFIFG) == OFIFG);      // 如果OSCFault =1   

                                       

    BCSCTL2 = 0X00;                        //将寄存器的内容清零

    BCSCTL2 += SELM1;                //MCLK的时钟源为TX2CLK,分频因子为1

    BCSCTL2 += SELS;                //SMCLK的时钟源为TX2CLK,分频因子为1

}

void Init_UART1(void)

{

    //将寄存器的内容清零

    U1CTL = 0X00;        

    //数据位为8bit

    U1CTL += CHAR;                        

   

    //将寄存器的内容清零

    U1TCTL = 0X00;        

    //波特率发生器选择SMCLK

    U1TCTL += SSEL1;                        

   

    //波特率为9600

    UBR0_1 = 0X00;                        

    UBR1_1 = 0X03;

    //调整寄存器

    UMCTL_1 = 0X00;                        



    //使能UART1的TXD和RXD

    ME2 |= UTXE1 + URXE1;

    //使能UART1的RX中断

    IE2 |= URXIE1;        

    //使能UART1的TX中断

    IE2 |= UTXIE1;                        

   

    //设置P3.6为UART1的TXD

    P3SEL |= BIT6;        

    //设置P3.7为UART1的RXD

    P3SEL |= BIT7;                        

   

    //P3.6为输出管脚

    P3DIR |= BIT6;                        

    return;

}

一周热门 更多>