本帖最后由 twohorses 于 2009-06-14 13:42:24 编辑

解决方案 »

  1.   

    MSComm1.InputMode = comInputModeText 
    这句话有问题,请你把它设置为:MSComm1.InputMode = comInputModeBinary给你推荐一个串口调试器(附代码):http://download.csdn.net/source/1262066
    你可以借鉴一下,绝对对你有帮助。
      

  2.   

    Option Explicit
        Dim strRec As String
    Private Sub Form_Load()
        MSComm1.RThreshold = 1
        MSComm1.InputMode = comInputModeText
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm()
        Select Case MSComm1.CommEvent
            Case 2
                strRec = strRec & MSComm1.Input
                Text1 = strRec
                If Mid(strRec, 1, 1) = "S" And Mid(strRec, 7, 1) = "O" Then
                    '数据处理
                      Text2 = strRec
                    strRec = ""
            End If
        End Select
    End SubLZ:你给出的是接收ASCII字符串的代码,帧首字节是字符号"S",帧尾字节是字符"O"(注意是英文字母"O"不是数字"0".关于"直接把处理程序写在oncomm里,不去 case  comEvReceive,这样有区别吗?"
    当然有区别,用case  comEvReceive则是接收事件.无则可能是其它事件触发.以至引起接收混乱.
      

  3.   


    MSComm1.RThreshold = 1 仅仅设定当缓存中接收到的数据长度从 0 变为 1 时,引发一个 OnComm 事件。与能够接收多少字节以及你每次从缓存提取多少字节没有关系。
      

  4.   


    你的意思是说:接收一个字节,程序在处理comEvReceive事件时,缓存区又接收了其他字节吗?comm口接收数据的速度比程序快???
      

  5.   

    4楼没那么说!
    设置MSComm1.RThreshold = 1是接收缓冲区到达1字节就必然产生接收OnComm事件.
    但不是接收到N字节,就一定产生N次OnComm事件.
      

  6.   

    这么麻烦干嘛?
    这样修改:
    Option Explicit 
    Dim strRec As String 
    Private Sub Form_Load() 
    MSComm1.RThreshold = 1 
    MSComm1.InputMode = comInputModeText 
    MSComm1.inputLen=0    '每次读完串口缓冲区的内容
    MSComm1.PortOpen = True 
    End Sub 
    Private Sub MSComm1_OnComm() 
    Select Case MSComm1.CommEvent 
    Case 2 
    MSComm1.RThreshold = 0   '防止在处理数据时产生OnComm事件
    strRec = strRec & MSComm1.Input 
    Text1 = strRec 
    If Mid(strRec, 1, 1) = "S" And Mid(strRec, 7, 1) = "O" Then 
    '数据处理 
    Text2 = strRec 
    strRec = "" 
    End If 
    MSComm1.RThreshold = 1   '处理完毕,打开触发
    End Select 
    End Sub 专业的串口调试器都是这样处理的,这样可以避免你再处理事件是又触发事件。
      

  7.   

    LZ:你要每次读1个字节,请设置
    MSComm1.inputLen = 1 
      

  8.   

    设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件