[求助] 单片机不能接收到PC发过来的数据

zzbaizhi   2012-3-8 11:32 楼主

#include "msp430x54x.h"

void main(void)
{ WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P5SEL |=BIT6+BIT7;                        //USCI_A1 TXD/RXD
  P5DIR |=BIT5+BIT6;
  P5OUT &=~BIT5;
 
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_1;                     // CLK = ACLK
  UCA1BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCA1BR1 = 0x00;                           //
  UCA1MCTL = UCBRS_3+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA1IE |= UCRXIE+UCTXIE;                         // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled
  __no_operation();                         // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA1TXBUF = UCA1RXBUF;                  // TX -> RXed character
    P5OUT |=BIT5;
    while (!(UCA1IFG&UCTXIFG));
    P5OUT &=~BIT5;
    break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break; 
  }
}
这是用TI的一个例程改的程序,只是将232改为485而已,但MCU总是停在低功耗状态无法进入中断或者停在红色语句处,一步一步调试时只能进行一次中断,但串口助手无数据显示,已经检查过引脚,没有问题的,不知道哪里出错了,请高手指教

回复评论 (4)

首先建议楼主先确认一下:
单片机能够发送数据吗?PC机能够接收到吗?如果能够那么说明硬件没有问题。
如果不能,那么是没有数据发送出来,还是有数据发送出来PC没有接收到呢?

建议楼主先用示波器确认一下数据的时序信号。
点赞  2012-3-8 14:15
程序上没看出什么问题,建议检查下硬件吧
点赞  2012-3-8 14:39

回复 楼主 zzbaizhi 的帖子

但MCU总是停在低功耗状态无法进入中断或者停在红色语句处
这句话有矛盾啊,如果停留在红色语句处说明退出低功耗模式进入中断响应了。建议检查你外部电路,另外是不是存在电平的问题,430是3.3V的,PC端是5V的
点赞  2012-3-8 21:56

回复 4楼 peter_zheng 的帖子

有的时候会停留在低功耗状态,有的时候又停在红色语句处,我专门写了一个MCU给PC发送数据的程序,试了一下,没问题。又写了一个PC给MCU发送数据的程序,但这次不行,也就是说MCU能发不能收

 PS:PC给MCU发送数据

      基本设置同上面

       while(1)

      { r[n]=UCA1RXBUF;

        n++;

        if(n>=100)

        {n=0;}

       }

      接收区显示乱码,而且接收的数量要比发送的数量多很多,这是怎么回事呀?

      换成

      while(1)

     {while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
     UCA1TXBUF = UCA1RXBUF;                  // TX -> RXed character
     P5OUT |=BIT5;
     while (!(UCA1IFG&UCTXIFG));
     P5OUT &=~BIT5;
    }

    接收区无显示,接收数量远远超过发送数量,而且停止发送和断开程序后,接收数量仍在增加

[ 本帖最后由 zzbaizhi 于 2012-3-9 09:03 编辑 ]
点赞  2012-3-9 08:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复