单片机要发送大于255的数据,8位二进制数最多就显示到255!
正确的做法应该是什么?我现在解决的方法是将连续两个8位二进制数组合到一起变成16位的二进制!
问题是我一共要取得5个大于255的数!就要接受10个8位二进制数!
而现在我只能接收到8个8位二进制数!
也就是说:
以下数据
11 22 33 44 55 66 77 88 99 11 
我接收到88以后,99和11都接受不到了,这是为什么呀?以下是我的代码:
Private Sub MSComm1_OnComm()
        Dim Buffer As Variant
        Dim Arr() As Byte
        Dim strTemp As String
        Dim i As Long
        '十六进制显示
    Select Case MSComm1.CommEvent
       Case comEvReceive
         '设定 InputMode 读取二进制数据
        MSComm1.InputMode = comInputModeBinary
        '等待直到输入缓冲区有 10 个字节
        Do Until MSComm1.InBufferCount < 10
            DoEvents
        Loop
        '往缓冲区存二进制数据
        Buffer = MSComm1.Input
        '赋值于字节数组以便处理
        Arr = Buffer
        For i = LBound(Arr) To UBound(Arr)
            Text1.text = strTemp & String(2 - Len(Hex(Arr(i))), "0") & Hex(Arr(i))
        Next
         .
         .
         .
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
问题出现在:
UBound(Arr)的值是7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@请高手支教!

解决方案 »

  1.   

    看你的程序出问题在哪里.
    调试一下,看是没有收到所有数据还是数据处理的问题.mscomm不是有个设置接收多少个字节发出oncomm事件吗?
    你把那个值设成10,不要你程序中的判断inburrferCount的语句试试.
      

  2.   

    buffer到arr的转换有问题吗,看看buffer里的数据是否正确
      

  3.   

    没有收到数据吗?
    那估计是你判断缓冲区有10个字节的地方有问题的.
    你试试我上面说的方法改改看.我用mscomm是能够收到信息的,没有丢.
    实在不行,你把Rthreshold属性设为1,那样每返回一个字符都会发生oncomm事件的.
      

  4.   

    inburrferCount=8
    我能收到数据,但是不全!
    99 和 11 没有收到
      

  5.   

    如果每次都发送 10 个字节的话,设置属性 RThreshold = 10。这样收到 10 个字节后才会触发 MSComm1_OnComm() 事件。你的问题是,计算机跑得太快,MSComm1_OnComm() 触发后,串口只来得及发送 8 个字节。或者,改这句:
    Do While MSComm1.InBufferCount < 10
        DoEvents
    Loop
      

  6.   

    应该跟计算机的速度没有关系的.
    你试试把RThreshold改成1或者10,看看到底能不能收到所有的信息.如果能收到所有的,那就是你的处理有问题.如果确实没有收到所有的消息,你就要看看发送是不是有问题.windows自带了一个超级终端,可以对串口进行操作的,你和你的程序一起再试试,看看到底问题在哪里.