tianming 发表于 2012-5-11 11:49:05

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

本帖最后由 tianming 于 2012-5-11 11:52 编辑

现在在做单片机串口通信,首先将几K大小的数据组成数组data_test分别存入两个单片机中,一单片机利用中断,中断定时1.25ms,当时间到的时候,i由0开始递增将一个八位数据送给SBUF,通过串口发送出去,波特率9600,无校验位。
利用另一单片机的串口进行接收,从开始接收时,每接收一个八位数据,就将该数据与预置的数组data_test中的数据对比,如果不相等,则误码计数器加1,之后j++,再接收下一组数据,进行对比。
可是最终的结果是发送1000组以内的数据时,没有问题的。当发送5000组数组的时候,误码数达到了一半还多点。两单片机的串口设置是一样的。
正在郁闷中,求高手指教~~~{:sleepy:}

单片机使用的是STC12C5A60S2,晶振22.1184M无源晶振

ttoto 发表于 2012-5-11 12:00:05

你发送函数是在那里等吗,还是用发送中断处理,我觉得后者会好得多。

BXAK 发表于 2012-5-11 12:16:47

同上,接收的那个单片机是不是没使用串口中断方式?
如果用循环查询方式没协议的话,一旦查询不及时漏一次后面的就全部错乱了

tianming 发表于 2012-5-11 14:31:14

谢谢楼上二位!是的,我是用的在定时器中断里进行发送处理的,定时到,则给SBUF赋值。由于波特率是9600,中断定时是1.25ms,所以时间上是足够用的。
确实是没有协议,那有没有什么更好的方法呢~~~

dragon_hn 发表于 2012-5-11 15:56:26

"发送5000组数组的时候,误码数达到了一半还多点。"
我觉得是你数据字节错位了.
因为其中某一字节丢失,导致你后面总是拿data_test与data_test比较.

dragon_hn 发表于 2012-5-11 16:04:39

方法一:
        发送端
        unsigned char nTxVal=0;
        ..............
        SBUF=nTxVal++;
        ..............
       
       
        接收端
        unsigned char nRxVal0,nRxVal1;
        unsigned intnErrCnt;
       
        nRxVal0=0;
        nErrCnt=0;
       
        ..............
        nRxVal0=nRxVal1+1;
        nRxVal1=SBUF;
        if(nRxVal0!=nRxVal1)        nErrCnt++;
        ..............
       
方法二:
       
        把接收端的TXD接到PC上,接收端MCU没接收一个字节就向PC发送一个字节,在PC端验证.

tianming 发表于 2012-5-11 19:07:35

谢谢ls,我试试~~~
页: [1]
查看完整版本: 单片机之间串口传输数据误码率很高~~~求助!!!!