Dim rece As Byte
receive = MSComm1.Input
结果是类型不匹配。
有些列子(虽然不知道能不能用),写了很多。连BulidCommDCB都出来了。不知道是不是要这么写。
frmMain.ctrMSComm.InputMode = comInputModeBinary
其他单片机的程序写的很简单的样子。这个数据是一个字节,十六位的。数据是“CC ”变成了“烫”
其他现成的程序用Hex可以正常显示。

解决方案 »

  1.   

    本帖最后由 bcrun 于 2011-11-20 12:09:01 编辑
      

  2.   


    Dim receive As Varint
    dim intP as integer 
    dim bytR(0 to 100) as byte
    MSCOMM1.inputLen
    receive = MSComm1.Input
    bytR(intP)=receive(0)
    参阅这个
      

  3.   

    主要是A-F这几个字母不被Byte类型识别,一直显示类型不匹配。
      

  4.   

    那是你的InputMode的问题
    参阅一下我给你的那个例子。
      

  5.   

    不只是inputmode问题,只改inputmode没有用的,稍稍看了下程序,觉得以下程序的可能性更高
    outbte(q) = Val("&h" + Hex(Asc(vChar(q))))
    Text4.Text = Text4.Text & Hex(Asc(Mid(out, q + 1, 1)))
     Text4.Text = Text4.Text & Hex(CRC(1)) & Hex(CRC(0))
      

  6.   

    本帖最后由 bcrun 于 2011-11-20 12:09:27 编辑
      

  7.   

    个人有个想法觉得是arm板传输的数据是8位的(西文),但是新的数据接收方式都是16位(全部),所以十六位数据传输时,最后变成了中文乱码。
    在找各种语句,函数可以进行转换。比如说限制读取位数。虽然有转换的函数StrConv,但那个太慢了,而且影响数据传输的流畅性。以上为个人观点,但是还在摸索没有结论。VB里,没找到现成的十六进制完美转换十进制的方式。
      

  8.   

    我决定你的认为是错误的,首先StrConV转换是不会出现乱码的。其次它的处理速度也不慢。
      

  9.   

    不是strconv转换出现乱码。是正常传输过程中,用十六进制显示的是英文,而普通显示为中文。
    我认为速度慢是因为,我在编一个串口极限速度,USB转RS232,921600的波特率。
    这已经是硬件的极限了,在接受时,没有那么多时间,一边接受一边用strconv转换。
    如果是很慢或者只传输几个字符,那解决方法有很多,但是用最大速率时,很多计算必须精简,不然你转换的速率没有接受的快就会出现数据错误。
      

  10.   

    本人计算机的物理COM口能设置到波特率为115200.