不用开发包,直接用mscomm读串口就行了

解决方案 »

  1.   

    http://www.csdn.net/expert/topic/486/486907.xml
    我在里面有回答
      

  2.   

    Option ExplicitPrivate Const LenRxd = 5 '接受的字节长度Private mChannel As Integer '串口号
    Private mTxd As Integer '发送的一个命令字'设置串口
    Private Sub IniComm()
    On Error Resume Next
    MSComm1.InputMode = comInputModeBinary '以二进制方式接受
    MSComm1.InputLen = 0
    MSComm1.OutBufferCount = 0
    MSComm1.InBufferCount = 0 '自己查询串口
    MSComm1.SThreshold = 1
    MSComm1.RThreshold = 0
    MSComm1.CommPort = mChannel
    MSComm1.Settings = "2400,n,8,1"
    End Sub'打开串口
    Private Sub OpenComm()
    If Not MSComm1.PortOpen Then MSComm1.PortOpen = True
    End Sub'发送一个命令字
    Private Sub TxdComm()
    On Error Resume Next
    Dim byTxd(0) As Byte
    MSComm1.InBufferCount = 0
    byTxd(0) = CByte(mTxd)
    MSComm1.Output = byTxd
    End Sub'接受字节数组
    Private Sub RxdComm()
    On Error Resume Next
    Dim byRxd() As Byte
    Dim i As Integer
    byRxd = MSComm1.Input
    For i = 0 To LenRxd - 1
    Debug.Print byRxd(i)
    Next i
    MSComm1.InBufferCount = 0
    End Sub'进行通讯
    Private Sub Comming()
    On Error GoTo ErrHere
    Dim idelay As Integer '一次通讯最大等待时间
    Dim imax As Integer '允许的最大通讯次数
    Dim iwrong As Integer '通讯不正常的次数
    Dim t1 As Singleidelay = 2
    imax = 5'发送一个命令字
    Call TxdComm'下面是查询输入缓存
    '如果没有正常通讯的话
    '可以比较及时和灵活的采取措施
    t1 = Timer
    Do While MSComm1.InBufferCount < LenRxd
    '加上DoEvents,虽然是不断的查询,但是并不影响其他工作
    DoEvents
    If Timer - t1 > idelay Then
    iwrong = iwrong + 1
    If iwrong >= imax Then
    MsgBox "出错了"
    GoTo ErrHere
    Else
    '有的时候由于种种原因造成通讯无反应
    '这时候关掉串口重来一次就可能会成功
    Call CloseComm
    Call IniComm
    Call OpenComm
    Call TxdComm
    t1 = Timer
    End If
    End If
    Loop'接受通讯数据并显示
    Call RxdCommGoTo Sub_ExitErrHere:
    Sub_Exit:
    End Sub'关闭串口
    Private Sub CloseComm()
    If MSComm1.PortOpen Then MSComm1.PortOpen = False
    End Sub