单片机之间串口传输数据误码率很高~~~求助!!!!

2020-02-05 09:25发布

本帖最后由 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无源晶振
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
ttoto
1楼-- · 2020-02-05 11:10
 精彩回答 2  元偷偷看……
BXAK
2楼-- · 2020-02-05 15:11
同上,接收的那个单片机是不是没使用串口中断方式?
如果用循环查询方式没协议的话,一旦查询不及时漏一次后面的就全部错乱了
tianming
3楼-- · 2020-02-05 16:01
谢谢楼上二位!是的,我是用的在定时器中断里进行发送处理的,定时到,则给SBUF赋值。由于波特率是9600,中断定时是1.25ms,所以时间上是足够用的。
确实是没有协议,那有没有什么更好的方法呢~~~
dragon_hn
4楼-- · 2020-02-05 17:59
"发送5000组数组的时候,误码数达到了一半还多点。"
我觉得是你数据字节错位了.
因为其中某一字节丢失,导致你后面总是拿data_test[j]与data_test[j+1]比较.
dragon_hn
5楼-- · 2020-02-05 18:06
方法一:
        发送端
        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端验证.

tianming
6楼-- · 2020-02-05 19:48
 精彩回答 2  元偷偷看……

一周热门 更多>