有个问题一直困惑我,请高手指教。Rthreshold设置为1,接收缓冲区有字符就会出发OnComm事件读取缓冲区的字符。
我用一个串口调试程序发送一个字符串'123456'到串口,那么VC编的这个程序是怎么读缓冲区的字符串的?是一位一位的读,还是一起读?
是不是涉及到Mscomm事件响应的速度和串口调试程序发送字符串的速度比较?如果发送字符串速度比较慢,Mscomm事件就一位一位的处理,如果发送字符串的速度比Mscomm事件响应的速度快,就一起处理,是么?如果要发送的数据特别长,Mscomm事件处理的方式,是不是应该一部分一部分的进行?谢谢

解决方案 »

  1.   

    这是一个VB通用串口事件驱动接收程序。一次性接收一个数据包,数据包可以为任意字节,保证不会丢失一个数据!
    Private Sub MSComm_OnComm()
        Dim S() As Byte
        Dim SS(1024) As Byte
        Static N As Long
        Static T As Variant    If (MSComm.CommEvent = comEvReceive) Then
            S = MSComm.Input                      '只要有数据就收进来,哪怕只是一个
            If (Timer - T > 0.01) Then            '间隔10MS以上就认为是一个新的包
                text1=""                          'text1用于搜集和显示接收(HEX格式)
                N = 0
            End If
            T = Timer
            For i = 0 To UBound(S)               '一个数据包可能产生若干个oncomm事件
                Text1.Text = Text1.Text & Right("0" & Hex(S(i)) & "H", 3) + " "
                SS(N+i)=S(i)                     '接收数据包缓存于SS()
                N=N+UBound(S)
            Next i
        End If
    End Sub
      

  2.   

    如果你串口发送的数据量较大,通信速率较高,建议直接用API。MSCOMM存在BUG,当然低速、少量数据时是较快的实现方法。
      

  3.   

    建议直接用Win32 API。入门级的串口文章到 VC 知识库 看看。
      

  4.   

    对于已经封装好的MSCOMM,初学的时候可以用一下,确实建议用API,对于理解稍底层些的有好处,当然如果用汇编就更直接了。可以到龚建伟的主页上去看看,讲的很详细,各种技术都讲了,而且还有实例。
    www.gjwtech.com