msp430 uart 接收问题

2019-03-24 12:00发布

小弟在做modbusrtu通信,使用149单片机定时发送数据帧,但是接收到到数据帧怎么都一样呢?
resvbuf[0]——resvbuf[8]接收到的是一样的16进制数据,不知道什么原因,还望高手给予指点!!!谢谢
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{   
  DE;
    uint i;
      i=0;
   while(i<8)
  {
    TXBUF1=sendbuf;
   while(!(IFG2 & UTXIFG1));
    IFG2 &= ~UTXIFG1;
   i++;
  }
  RE;
}
void Set_UART1(void)
{
    P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口
    ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD
    UCTL1 |= CHAR;                            //选择8-bit字符
    UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK
    UBR01 = 0x03;                             //波特率9600
    UBR11 = 0x00;
    UMCTL1 = 0x6B;                            //调整
    UCTL1 &= ~SWRST;                          //初始化UART状态机
    IE2 |= URXIE1;
}
/*********异步接受中断***/
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX (void)
{   

  uint j=0;
  if (URXIFG1)  
{
    while(j<9)
     {
    resvbuf[j]=RXBUF1;  
       IFG2 &=~ URXIFG1 ;
     j++;
     }
}

}


[ 本帖最后由 Domosday 于 2013-12-8 09:27 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
jqh_111
1楼-- · 2019-03-25 22:05
先不管485芯片,那只是让通信距离加长,和程序没什么关系。我说的几根线是针对传送数据来说的。它的通信像I2C通信,和从机地址有关。uart通信没从机地址这个概念,它的特点是双方波特率得尽量相同,保障他们收发数据正确。所以你这个是不能用uart来通信的,建议你参考modbus rtu或者i2c的驱动程序。加油吧。
Domosday
2楼-- · 2019-03-25 23:12
 精彩回答 2  元偷偷看……
jqh_111
3楼-- · 2019-03-26 02:13
你可不可以把你用的那个温度传感器的资料传上来。我想看看到底是怎么回事。。
Domosday
4楼-- · 2019-03-26 02:43
您好,版主!很不好意思,没有及时给与您回复,我把那个温度传感器的资料给上传了,您看一下。那个采用的是DS18B20测温,51单片机,485 modbus rtu与外界通讯。您看一下,非常感谢您给予我的帮助飞,谢谢
jqh_111
5楼-- · 2019-03-26 08:37
 精彩回答 2  元偷偷看……
Domosday
6楼-- · 2019-03-26 09:19
您好!版主~引脚是没有问题的,发送的是8个字节数据,接收的是9个字节数据!发送也是成功了,因为我发送的地址是0x01,能够接收到不断变化的数据,如果将地址改变为其他的,比如0x02,就没有接收到数据了,液晶函数也就没有显示。所以通讯应该是建立了,但是可能没有按照标准的modbus rtu 的通讯进行数据的收发,所以接收的数据跟想的不一样!自己也不知道怎么修改~希望版主能给出出主意~帮帮小弟!!!

[ 本帖最后由 Domosday 于 2013-12-9 13:38 编辑 ]

一周热门 更多>

相关问题

    相关文章