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);
}
}
|