本帖最后由 tianming 于 2012-5-11 11:52 编辑
现在在做单片机串口通信,首先将几K大小的数据组成数组data_test分别存入两个单片机中,一单片机利用中断,中断定时1.25ms,当时间到的时候,i由0开始递增将一个八位数据送给SBUF,通过串口发送出去,波特率9600,无校验位。
利用另一单片机的串口进行接收,从开始接收时,每接收一个八位数据,就将该数据与预置的数组data_test[j]中的数据对比,如果不相等,则误码计数器加1,之后j++,再接收下一组数据,进行对比。
可是最终的结果是发送1000组以内的数据时,没有问题的。当发送5000组数组的时候,误码数达到了一半还多点。两单片机的串口设置是一样的。
正在郁闷中,求高手指教~~~
单片机使用的是STC12C5A60S2,晶振22.1184M无源晶振
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如果用循环查询方式没协议的话,一旦查询不及时漏一次后面的就全部错乱了
确实是没有协议,那有没有什么更好的方法呢~~~
我觉得是你数据字节错位了.
因为其中某一字节丢失,导致你后面总是拿data_test[j]与data_test[j+1]比较.
发送端
unsigned char nTxVal=0;
..............
SBUF=nTxVal++;
..............
接收端
unsigned char nRxVal0,nRxVal1;
unsigned int nErrCnt;
nRxVal0=0;
nErrCnt=0;
..............
nRxVal0=nRxVal1+1;
nRxVal1=SBUF;
if(nRxVal0!=nRxVal1) nErrCnt++;
..............
方法二:
把接收端的TXD接到PC上,接收端MCU没接收一个字节就向PC发送一个字节,在PC端验证.
一周热门 更多>