STC15单片机 485数据收发切换,数据有丢失和乱码的问题, 求指教
波特率9600, 每隔150ms发送8字节,每隔100ms收取10字节
1. 485串口数据进行发送和接收,是通过中断来实现的;
2. 一定的频度下,单单发送,单单接收都是正常的;
3. 当收发频繁切换进行通讯的时候,尤其是收发的时差在60-70ms上下的时候,会出现数据有丢失和数据混乱的现象。而且这种频度越高越容易出现。
尝试过在收发切换的时候,延时,但是输出数据的情况看,并没有多大的效果
求大神指点!
附相关代码:
void Send1StrWithLen(uchar *s, uchar len)
{
if(len <= 0)
{
return;
}
if(Send.busy)
{
return;
}
if(Recv.busy)
{
return;
}
T485();
//Delay5ms();
Send.strLen = len;
Send.pStr = s;
SBUF = *(Send.pStr);
Send.busy = 1;
Send.cnt = 0;
}
void Uart1ISR() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
Recv.dat = SBUF;
RecCmd[Recv.cnt] = Recv.dat;
if(Recv.cnt == 0)
{
Recv.busy = 1;
}
Recv.cnt++;
if(Recv.cnt >= CMD_LEN)
{
Recv.cnt = 0;
Recv.busy = 0;
Recv.endFlag = 1;
//T485(); //加上接收数据不能正常进行
}
}
if (TI)
{
TI = 0; //清除TI位
Send.cnt++;
if(Send.cnt >= Send.strLen)
{
//Delay40ms();
R485();
Send.busy = 0; //清忙标志
return;
}
SBUF = *(Send.pStr + Send.cnt);
}
}
|