发送的十六进制的数据char($FD)的后面如果加上其他字符如“ab”,发送就会出现乱码:“?b”,这该怎么解决?往串口发送十六进制的数据该如何操作?

解决方案 »

  1.   

    我估计数据没有错
    你显示一下收到数据的长度,看看是不是3
    还有,比如你把收到的数据,保存在变量s中
    你showmessage(s[2]);看看那
      

  2.   

    #$FD + 'a' 被系统看成了一个WideChar(多字节字符)~~
    存储是正确的,就是显示不对,不知道你使用在什么地方?~~
      

  3.   

    这是个发给下位机的命令,
    我用啸锋工作室出的“串口调试助手V2.1”选择用十六进制发"fd4142"(即char($FD)+ab)命令给下位机下位机就能返回数据。
    但是我用如下语句mscomm1.output:=char($FD)+'ab',
    结果单步运行时查看output的值为:“?b”,不知道实际发的是什么数据,反正下位机没有了反映。怎么回事?
      

  4.   

    参考:http://218.56.11.178:8020/web/technology.aspx   -》串口通讯应用程序的解决方案 下载基地有例子和相关控件tubropower/spcomm
      

  5.   

    to kuangning:前段时间才装的宽带,没事就溜来灌灌~~
      

  6.   

    mscomm1.output:=char($FD)+'ab'实际是发送FD6162三个十六进制数。
    发送FD4142可以使用mscomm1.output:=char($FD)+char($41)+char($42);
    说明:a的ACSII码是$61,这样应该明白了吧!
      

  7.   

    我后面的ab是我为了说明简单简化的,其实有好长一串:如FD**13588888888FE要把他按十六进制发出去给下位机该怎么写简便
    总不能mscomm1.output:=char($FD)+char($41)+char($43)+char($45)+char($48)+char($48)+char($48)+……………………;
    这么长把,而且这个命令里的数字是变的。
      

  8.   

    var
      OutputBytes:array of Byte;SetLength(OutputBytes,n);
    OutputBytes[0]:=$FD;
    OutputBytes[1]:=$41;
    ...
    MSComm1.Output:=OutputBytes;
      

  9.   

    其实你原来使用的方法是对的,mscomm1.output:=char($FD)+'ab'将从串口发送$FD$61$62,至于调试时显示乘'?b'是因为系统将$FD$61看成一个全角字符!
    (我调试串口程序时,一般使用一条串口通讯线将com1和com2连接起来,使用串口调试程序可以观察我的程序发出何种数据。你也可以这样做。)