单片机不能接收到PC发过来的数据

2019-03-24 14:50发布

#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总是停在低功耗状态无法进入中断或者停在红 {MOD}语句处,一步一步调试时只能进行一次中断,但串口助手无数据显示,已经检查过引脚,没有问题的,不知道哪里出错了,请高手指教 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
hlx3012
1楼-- · 2019-03-24 19:36
< 首先建议楼主先确认一下:
单片机能够发送数据吗?PC机能够接收到吗?如果能够那么说明硬件没有问题。
如果不能,那么是没有数据发送出来,还是有数据发送出来PC没有接收到呢?

建议楼主先用示波器确认一下数据的时序信号。
Triton.zhang
2楼-- · 2019-03-24 23:24
 精彩回答 2  元偷偷看……
peter_zheng
3楼-- · 2019-03-25 02:30
但MCU总是停在低功耗状态无法进入中断或者停在红 {MOD}语句处
这句话有矛盾啊,如果停留在红 {MOD}语句处说明退出低功耗模式进入中断响应了。建议检查你外部电路,另外是不是存在电平的问题,430是3.3V的,PC端是5V的
zzbaizhi
4楼-- · 2019-03-25 04:05

有的时候会停留在低功耗状态,有的时候又停在红 {MOD}语句处,我专门写了一个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 编辑 ]

一周热门 更多>

相关问题

    相关文章