[求助] msp430 uart 接收问题

Domosday   2013-12-6 17:49 楼主
小弟在做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)

回复 楼主Domosday 的帖子

肯定会一样的。因为你是定时发送数据的,
while(j<9)
{resvbuf[j]=RXBUF1;//给数组赋值
IFG2&=~URXIFG1;//这句基本上没用,
j++;}//j自加,没退出这一次接收到数据而进入的中断程序,却让j自加,肯定会让数组里数都一样。
建议,去掉while语句,j 设成全局变量或指针变量,进一次中断j加1,当j大于8时,让它等于0.
一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
点赞  2013-12-6 18:42
同上,进入死循环了,赋值没变
点赞  2013-12-6 19:01

回复 沙发jqh_111 的帖子

非常感谢版主,现在接受到的数据发生变化了,但是还是没有完成modbus rtu的通信,我使用的是一个149单片机读取一个带modbus rtu通信的温度传感器测量的温度值。发送的数据帧是
sendbuf[]={0x01,0x03,0x00,0x00,0x00,0x02,0xc4,0x0b};       
但是接受的数据很乱,返回的数据帧格式跟modbus通讯完全不一致,不知道对于这个问题版主有何高见,小弟洗耳恭听!!!非常感谢~~~
点赞  2013-12-7 09:27

回复 板凳qinkaiabc 的帖子

非常感谢版主,现在接受到的数据发生变化了,但是还是没有完成modbus rtu的通信,我使用的是一个149单片机读取一个带modbus rtu通信的温度传感器测量的温度值。发送的数据帧是
sendbuf[]={0x01,0x03,0x00,0x00,0x00,0x02,0xc4,0x0b};        
但是接受的数据很乱,返回的数据帧格式跟modbus通讯完全不一致,不知道对于这个问题版主有何高见,小弟洗耳恭听!!!非常感谢~~~
点赞  2013-12-7 09:28

回复 4楼Domosday 的帖子

楼主想用149的uart实现modbus rtu,这是两个不同的通信协议。modbus rtu只能半双工通信,通信方式是一根线,信号在这根线上往返传送信号。而uart可以全双工,至少得两根线,一根线负责往,一根线负责返。不知道楼主为何想要这么做。。
一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
点赞  2013-12-7 10:47

回复 6楼jqh_111 的帖子

您好!是这样子的,我现在需要做温度监控,买了一个带485 modbus的温度传感器,想着就用149单片机接液晶显示和按键电路,把测试的温度使用液晶显示出来,因此才需要做modbus rtu 的通信!谢谢~另外如果使用485芯片的话,modbus通信也是两根线吧!?

[ 本帖最后由 Domosday 于 2013-12-7 09:21 编辑 ]
点赞  2013-12-7 17:19

回复 7楼Domosday 的帖子

先不管485芯片,那只是让通信距离加长,和程序没什么关系。我说的几根线是针对传送数据来说的。它的通信像I2C通信,和从机地址有关。uart通信没从机地址这个概念,它的特点是双方波特率得尽量相同,保障他们收发数据正确。所以你这个是不能用uart来通信的,建议你参考modbus rtu或者i2c的驱动程序。加油吧。
一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
点赞  2013-12-7 18:32

回复 8楼jqh_111 的帖子

非常感谢,还以为这块就是使用msp430的uart模块来进行通讯的呢,我再去查资料寻求解决办法!谢谢
可是modbus rtu的通信也是需要要求波特率要保持一致的,不知道这个波特率的设置方法是不是一样的呢?
其实还有一点,就是在查资料过程中,关于modbus通讯的程序大都使用的uart,不知道是不是自己理解
上有问题?还望您给与指点~谢谢

[ 本帖最后由 Domosday 于 2013-12-7 11:18 编辑 ]
点赞  2013-12-7 19:08

回复 9楼Domosday 的帖子

你可不可以把你用的那个温度传感器的资料传上来。我想看看到底是怎么回事。。
一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
点赞  2013-12-8 11:59

回复 10楼jqh_111 的帖子

您好,版主!很不好意思,没有及时给与您回复,我把那个温度传感器的资料给上传了,您看一下。那个采用的是DS18B20测温,51单片机,485 modbus rtu与外界通讯。您看一下,非常感谢您给予我的帮助飞,谢谢
点赞  2013-12-8 17:30

回复 11楼Domosday 的帖子

资料我看了,通信确实是用UART。之前是我理解错了,非常抱歉。照目前的情况来看,你还没实现它两之间的通信,所以厂家那些默认的参数应该没变。你需要做的就是把波特率设为9600,发送八个字节的数据后,等待温度传感器返回数据,然后根据资料把数据进行变换得到正常的数据。从你写的程序来看,大致方向是对了的,不过你发送和接收都是9个字节的数据。你注意到了吗。TX,RX,DQ这三个引脚怎么连接的。

[ 本帖最后由 jqh_111 于 2013-12-8 19:06 编辑 ]
一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
点赞  2013-12-8 18:31

回复 12楼jqh_111 的帖子

您好!版主~引脚是没有问题的,发送的是8个字节数据,接收的是9个字节数据!发送也是成功了,因为我发送的地址是0x01,能够接收到不断变化的数据,如果将地址改变为其他的,比如0x02,就没有接收到数据了,液晶函数也就没有显示。所以通讯应该是建立了,但是可能没有按照标准的modbus rtu 的通讯进行数据的收发,所以接收的数据跟想的不一样!自己也不知道怎么修改~希望版主能给出出主意~帮帮小弟!!!

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

回复 13楼Domosday 的帖子

那把你实验结果给我看看。你发的是什么数据,收到的又是什么数据。如果你这个比较急的话,建议多求助几个人,因为这里一发帖一回帖,效率很低。。。
一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
点赞  2013-12-10 12:50

回复 14楼jqh_111 的帖子

谢谢您!我自己研究了一下,好像已经正常通讯了。还需要再验证一下,很感谢版主给予的帮助!!!
点赞  2013-12-12 19:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复