| 
 
| 为什么始终进不了
 #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!='\0')
 {
 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();                   //恢复全局中断
 }
 | 
 |