搜索
bottom↓
回复: 4

comport 有时接收数据会错误【恢复】

[复制链接]

出0入0汤圆

发表于 2008-10-21 19:27:11 | 显示全部楼层 |阅读模式
comport 接收数据会错误,大家遇到这样的问题吗?

我是用comport来读单片机里的数据然后显示在Memo上,我用sscom32串口调试助手调试单片机时数据就不会有错,用comport就有问题,能帮小弟解决一下吗?下面是接收部分的代码



procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);

var

  SendDat,RecvDat:string;

  i,IntPercent: Integer;



begin

  SetLength(Command,Count);

  Comport.Read(Command[0],Count);

  case Command[0] of

  00:

     begin

     Memo1.Lines.Append('Program Fail !  Please Check!');

     AddressNumber:=0;

     ProgressBar1.Position:=0;

     Label1.Color:=clRed;

     Label1.Caption:='E r r o r !   ';

     Timer1.Enabled:=false;

     Windows.Beep(784,100);

     sleep(100);

     Windows.Beep(784,100);

     end;

//  01:



  02:

     begin

     Memo1.Lines.Append('Programmer is Ready !');

     AddressNumber:=0;

     end;

  03:

      begin

      for i:=1 to 32 do

      SendDat:=SendDat+SendStr[AddressNumber*32+i];

      Insert('0707',SendDat,0);

      SendDat:=HexStrToStr(SendDat);

      Comport.WriteStr(SendDat);

      AddressNumber:=AddressNumber+1;

      if AddressNumber=DownLoadSet.StopPos div 16+1 then   //if the Address End

      begin

      sleep(50);         //50ms Waiting of the Programer

      Command[0]:=08;    //Send Stop Command

      Comport.Write(Command[0],18);

      Timer1.Enabled:=false;

      AddressNumber:=0;

      ProgressBar1.Position:=0;

      Label1.Color:=clGreen;

      Label1.Caption:='OK   ';

      end;

      end;

   04:

       begin

       for i:=0 to 15 do

       RecivBuffer[AddressNumber*16+i]:=Command[i+2];

       RecvDat := IntToHex(AddressNumber*16,6)+'  '+ IntToHex(RecivBuffer[AddressNumber*16+0],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+1],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+2],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+3],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+4],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+5],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+6],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+7],2)+'  '+ IntToHex(RecivBuffer[AddressNumber*16+8],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+9],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+10],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+11],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+12],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+13],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+14],2)+' '+

                 IntToHex(RecivBuffer[AddressNumber*16+15],2);

                 EditHexForm.DisHexFile.Lines.Append(RecvDat);

       AddressNumber:=AddressNumber+1;

       Command[0]:=09;

       Comport.Write(Command[0],3);

       end;

 //  05:



   06:

      begin

      Memo1.Lines.Append('Earse Succssed !');

      AddressNumber:=0;

      Timer1.Enabled:=True;

      if Command[1]=1 then

      Memo1.Lines.Append('Programming Now Please Wait !');

      end;

    07:

       begin

     Memo1.Lines.Append('Program Succssed!');

     Windows.Beep(784,200);

     end;

 //   08:

    09:

      Memo1.Lines.Append('Lock Succssed !');



 end;

end;

////////////////////////////////////////



end.

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2008-10-22 08:57:26 | 显示全部楼层
遇到怪事了。今天用sscom32串口调试助手来摸拟单片机和上位机通信,结果接收的数据全部都正确,调试助手我是按1ms自动发送18字节数据的。这样的话我都不能确定是上位机还是下位机的问题。

两者用调试助手都可以,但两个连起来就是不行,上位机接收的数据很多是错误的。真是搞得头都大了,请高手指点。

出0入0汤圆

 楼主| 发表于 2008-10-22 08:38:03 | 显示全部楼层
小弟在线等待,请高手帮忙解决,指点指点。

出0入0汤圆

 楼主| 发表于 2008-10-21 19:35:19 | 显示全部楼层
09是上位机接收到数据并请求单片机继续发数据的命令。

出0入0汤圆

 楼主| 发表于 2008-10-21 19:33:21 | 显示全部楼层
04是命令字节,然后我提取2--18的数据为一帧。04是单片机发来的,有时候comport接收到的是其它命令数据o

还有一帧数据里只有前12字节是正确的,后4个字节就错误了,你们有遇到这样的情况吗?郁闷。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 16:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表