我的430串口接收中断程序为什么始终进不了啊

2019-03-24 13:11发布

#include"msp430.h"
/**************宏定义***********************/#define uchar unsigned char #define uint  unsigned int
uchar  Buffer_Rx[40];uchar  Buffer_TX[40]="串口程序调试";           //定义发送缓冲区uchar  Rx_long;uchar  Flag=0;                                              //一旦我们进入中断,就改变此标志位,控制灯闪烁
/**************串口初始化,采用查询方式***********************//*************注意:串口初始化完成后,是处于复位状态**********************/void  Init_usart(void){    P3SEL|=0XC0;                //串口1的I/O口选择位外围模块功能    P3DIR|=0X40;                //P3.6为输出,P3.7为输入        U1TCTL=SSEL1+SSEL0;         //选择SMCLK    U1CTL=SWRST+CHAR;           //先将串口处于复位状态,8位数据,无校验,停止位1位 //   U1RCTL|=URXEIE;           //接收出错中断允许位    U1TXBUF=0x00;               //先将发送缓冲区和接收缓冲区清0 //   U1RXBUF=0x00;    U1BR1=0;    U1BR0=208;                  //波特率为38400    U1MCTL=0x89;    ME2|=UTXE1+URXE1;           //允许发送和接收    IE2|=URXIE1;                //接收中断使能}void main(){    volatile unsigned int i=0;            // volatile to prevent optimization        WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer        P4DIR |= 0x04;                        // Set P4.3  当接收完成后置位    BCSCTL1&=~XT2OFF;                     //开启XT2    BCSCTL2|=SELM1+SELS;                   //选择XT2CLK为MCLK和SMCLK时钟源        do    {          IFG1&=~OFIFG;       //清除振荡器失效标志          for(i=255;i>0;i--);     }while(IFG1&OFIFG);//判断XT2是否起振         Init_usart();    //SR|=GIE;                            //开总中断        U1CTL&=~SWRST;                        //关闭串口的复位    _BIS_SR(GIE);                         //开总中断  //  _EINT();               while(Buffer_TX!='')    {                while((IFG2&UTXIFG1)==0);        U1TXBUF=Buffer_TX; //       UTXIFG1=0;        i++;    }    while(1)    {          if(Rx_long==8)        {            i=0;             while(Rx_long!=i)            {                        while((IFG2&UTXIFG1)==0);                U1TXBUF=Buffer_TX;                i++;            }            Rx_long=0;        }        if(Flag==1)        {            P4OUT ^= 0x04;                      // Toggle P4.2 using exclusive-OR
            i = 5000;                          // SW Delay            do i--;            while (i != 0);            P4OUT ^= 0x04;                      // Toggle P4.2 using exclusive-OR
            i = 5000;                          // SW Delay            do i--;            while (i != 0);                   }    }}/************串口接收中断服务子程序**********************/#pragma vector=USART1RX_VECTOR__interrupt void UART1RXINT(void){       _DINT();                  //关闭全局中断      Flag=1;      if((IFG2&URXIFG1)!=0)      {            Buffer_Rx[Rx_long]=U1RXBUF;            Rx_long++;       }      _EINT();                   //恢复全局中断}
上面的是我的程序源码,应该是很简单的   但就是进不了  麻烦给位大虾帮我检查一下     万分感激啊  前面有个发送给PC 的部分,能够正确接收到“串口程序调试”记个字  我参照了网上的记个串口接收初始化的代码 都没得问题   我确实没辙了   麻烦各位了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
yangxf1217
2019-03-25 13:41
if(Rx_long==8)
这个条件满足才能输出来,
while(Rx_long!=i)
            {        
                while((IFG2&UTXIFG1)==0);
                U1TXBUF=Buffer_TX;                i++;
            }
这句话U1TXBUF=Buffer_TX

一周热门 更多>

相关问题

    相关文章