完成一个通过串口的控制程序,具体要求如下:
1、以工作方式3全双工串行通信,每帧11位(第1位开始位,第2~9位是数据位,第10位为奇校验位,第11位是停止位),,采用11.0592MH的系统时钟频率,波特率为1200波特。
2、采用应答式传送。单片机每发送一帧信息,计算机对接收的数据进行奇校验,若奇校验正确,计算机便向单片机发出00H作为回答信号,单片机接受此回答信号后再发送下一字节;若奇校验错,计算机则发出FFH,表示“数据发送不正确”,要求单片机再次发送原数据,直至数据发送正确。
3、双工通信要求收,发同时进行。
如哪位大侠能提供用MSComm控件实现的源码不胜感激!

解决方案 »

  1.   

    怎么没有人顶啊
    我做了一个怎么接收不到数据呢
    Private Sub Comm1_OnComm()      '数据传输
        On Error Resume Next
        Select Case Comm1.CommEvent
        Case comEvReceive
        Dim str As Byte
        str = Comm1.Input
        txt_Receive.Text = txt_Receive.Text & StrConv(str, vbUnicode)
        Comm1.Output = txt_send.Text
        帮我看看是哪里的问题啊
    提示 类型不匹配
    究竟input进来 的是什么属性啊
      

  2.   

    Private Sub MSComm1_OnComm()
      Dim Ip() As Byte
      Dim Tmp As String
      Dim Rec_ccitt As String
      
      Select Case MSComm1.CommEvent
      Case comEvReceive
        Ip = MSComm1.Input
        For i = LBound(Ip) To UBound(Ip)
            If Len(Hex(Ip(i))) = 1 Then Buf = Buf & "0"
            Buf = Buf & Hex(Ip(i))
        Next  End Select
    End Sub
      

  3.   

    按照你的协议,就不可能是全双工,因为你的主机一定要等到应答才能决定下一帧发送什么。Private Sub Form_Load()
    With Comm1
        .CommPort = 1
        .Settings = "1200, O, 8, 1"
        .RThreshold = 1
        .InputLen = 1
        .InputMode = ComInputModeBinary
        .PortOpen = True
    End With
    End SubPrivate Sub Form_UnLoad()
    Comm1.PortOpen = False
    End SubPrivate Sub Comm1_OnComm()             '数据传输 
    Dim bytInfo() As Byte, varTmp As Variant
    Dim bytResp As Byte    Select Case Comm1.CommEvent 
            Case comEvReceive 
                varTmp = Comm1.Input
                bytInfo = varTmp 
                txt_Receive = txt_Receive & Right("0" & Hex(bytInfo(0)), 2)        Case comEventRxParity
                Comm1.InputBufferCounter = 0
                bytResp = &HFF
        End Select
        Comm1.Output = bytResp
    End Sub        
      

  4.   

    看看你的MSCOmm控件的RThreshhold属性设置多少了?是不是大于接收的数据个数了?
      

  5.   

    有几个地方你需要注意
    “Dim   str   As   Byte 
            str   =   Comm1.Input ”

    这个input要赋值给变体 不能是普通的byte变量,你说显示“类型不匹配”应该就是这里的问题2 .RThreshold  .InputLen .InputMode 都要设置好才行可以参看下MSDN的资料
      

  6.   

    以工作方式3全双工串行通信,每帧11位(第1位开始位,第2~9位是数据位,第10位为奇校验位,第11位是停止位),,
     .Settings = "1200, O, 8, 1" 
    上面这样设置对吗?怎么没有指明:第1位开始位,第10位为奇校验位啊?