php接收rs485的数据如何处理,为什么485不能连续接收?

谢谢各位的回复!

我的STC11F04XE单片机程序如下,中断接收数据,主程序中判断收到4个字节数据就转发。

PC串口转485通过MAX485与单片机UART连接。调试助手发送单个字节,发送4次,能正确收到转发回来的数据。一次发送4个字节,则必须发送两次,才能收到转发回来的4个字节数据,不过该数据是两次发送的前2个字节。

用示波器观察MAX485的数据接收端RI,波形很好。无论发送单字节还是4字节,波形都正确!问题应该在程序。请各位帮助我分析一下程序,我可能陷入某个误区。

void        Serial0_ISR()        interrupt 4

{

unsigned char temp;

EA=0; //disable interrupt

if (RI)

{

RI=0;

temp=SBUF;                //读取串口接收字节

RxData[RxCounter]=temp;        //接收数据,4字节

RxCounter++;

}

}

//-------------------------------------------------------------------

void SendChar(unsigned char temp)

{

SBUF=temp;

while(TI==0);

TI=0;

}

/********************************************************************/

void main (void)

{

unsigned char i;

ini8051();

delayxms(200); //延时一段时间

//        CLRWDT();                //start watchdog

RxCounter =0;        //串行口接收数据计数器

RS485T1R0=0;        //485接收

start3:

RS485T1R0=0;        //485接收

ES=1; //enable UART interrupt

EA=1; //enable interrupt

if (RxCounter <4) goto noRevDa;//一帧数据,4字节

//命令协议解析处理

ES=0; //disable UART interrupt

RxCounter=0;

//转发485收到的数据

RS485T1R0=1;        //485发送

_nop_(); _nop_(); _nop_(); _nop_();

//                for (i=5;i>0;--i) delayxms(200); //delay 1 seconds

for (i=0;i<4;i++)

{

SendChar(RxData);

}

ES=1;        //enable UART interrupt

RS485T1R0=0;        //485接收

for (i=0;i<3;i++) //LED闪烁3次,调试观察

{

LED1=0; delayxms(200);

LED1=1; delayxms(200);

}

noRevDa:

//                ES=1; //enable UART interrupt

EA=1; //enable interrupt

//                RS485T1R0=1;        //485发送

LED1=0;  //LED亮灭,调试观察

for (i=10;i>0;--i) delayxms(200); //delay 1 seconds

LED1=1;

for (i=10;i>0;--i) delayxms(200); //delay 1 seconds

_nop_();

goto start3;

}        // end of main

//仅仅重排版,使程序读起来更容易。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值