求助各路大神关于MSCOmm接收字节型数据流的问题

u010455361 2013-04-25 06:02:41
小弟最近做一个BCB中用MSComm的通讯问题,pc与单片机通讯,单片机要发给计算机十进制的数据,但是我在接收端总是出现错误,程序如下
OleVariant RxBuff;

if(MSComm1->CommEvent==comEvReceive)
{
if(MSComm1->InBufferCount)
{

len=MSComm1->InBufferCount;
RxBuff=VarArrayCreate(OPENARRAY(int,(0,len-1)),varByte);
RxBuff=MSComm1->Input;

for(i=0;i<=len;i++)
*aRxBuff=RxBuff.GetElement(i);
//ShowMessage(a[0]);
// Memo1->Text=Memo1->Text+IntToStr(aRxBuff[0])+'\x0d'+'\x0a';

}
}

最后想显示出来,求助各位大神,总显示数据溢出或者数据位置不对
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010455361 2013-05-03
  • 打赏
  • 举报
回复
能不能问一句,这些函数都是在哪里学的?我咋找不到在网上??
u010455361 2013-05-02
  • 打赏
  • 举报
回复
小弟经过研究发现数据二进制的传输竟然是按照完全相反的顺序,既本来是1110 0001 传过来就是0111 1000 然后再按位取反,这让小弟很郁闷啊,这么传过来,我怎么对数据进行处理啊
Kanson 2013-05-02
  • 打赏
  • 举报
回复
这个就是把接受到的字符送入Buff当中 后面那句是把十进制数转换为十六进制表示的字符 如10->"0A";
u010455361 2013-05-02
  • 打赏
  • 举报
回复
引用 6 楼 CrHackOS 的回复:
上下的波特率或停止位等设置不一样
buff[i]=RxBuff.GetElement(i); temp=IntToHex(buff[0],2); 敢问大哥这两句话是什么意思,是不是它们把数据搞反了,如果不是的话我就要从单片机入手了
u010455361 2013-05-02
  • 打赏
  • 举报
回复
测试了好几个数据,分别计算的,都是按这个规则传送的,你说郁闷不郁闷》。。。。
Kanson 2013-05-02
  • 打赏
  • 举报
回复
引用 7 楼 u010455361 的回复:
小弟经过研究发现数据二进制的传输竟然是按照完全相反的顺序,既本来是1110 0001 传过来就是0111 1000 然后再按位取反,这让小弟很郁闷啊,这么传过来,我怎么对数据进行处理啊
不可能吧
CrHackOS 2013-04-27
  • 打赏
  • 举报
回复
上下的波特率或停止位等设置不一样
Kanson 2013-04-26
  • 打赏
  • 举报
回复
什么情况?你的单片机回复的是你发送的数据? 你可以下个串口调试工具看看
u010455361 2013-04-26
  • 打赏
  • 举报
回复
虽说是取反,但是怎么才能正确显示呢?我测试了一上午,但是发送16进制,还是10进制,我都取反,但是在接收端都不正确, 比如发送0x01 接收到的是80,,发送0xFD,接收到的却是7F,楼主要崩溃了?各路大神这个是什么原因(只有发送00或者FF时,他才正确,估计是每一位都一样所以正确,但是一变化,数据位似乎就错开了,总是找不到正确的位置读取)
u010455361 2013-04-26
  • 打赏
  • 举报
回复
我明白了,实际上我得到的是二进制的取反信息,所以我如果发送00,就会得到FF,若发送FF就会得到00,我只要在接收端取反就OK了,谢谢啊
u010455361 2013-04-26
  • 打赏
  • 举报
回复
谢谢大神,但是我发送的是数字,读取的为什么是英文?发送的数据时09,接收却是ED,大神是不是我什么地方没弄好
Kanson 2013-04-25
  • 打赏
  • 举报
回复

void __fastcall MSComm1Comm(TObject *Sender)
{
  String temp;
  byte buff[100];
  int ByteNum;
  OleVariant RxBuff;
  if(MSComm1->CommEvent==comEvReceive)
  {
      if(MSComm1->InBufferCount>0)
     {
        RxBuff = MSComm1->Input;
        ByteNum = RxBuff.ArrayHighBound();
        for(int i=0;i<=ByteNum;i++)
        buff[i]=RxBuff.GetElement(i);
        temp=IntToHex(buff[0],2);
        Memo1->Text+=temp;
    }
 }
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧