本人正在做一个串口通信程序,要求当PC机送出数据20秒后,单片机要是没有回应,则重新发送数据,怎么实现?
怎么用定时器?
怎么知道PC机的onCOMM没有接收到数据?

解决方案 »

  1.   


    Option Explicit
        Dim strData As StringPrivate Sub Command1_Click()
        Timer1.Enabled = True
    End SubPrivate Sub Form_Load()
        MSComm1.RThreshold = 1
        MSComm1.InputMode = comInputModeText
        MSComm1.PortOpen = True
        Timer1.Enabled = False
        Timer1.Interval = 20000 '20秒
    End SubPrivate Sub MsComm1_OnComm()
        Dim intInputLen As Integer
        Select Case Me.MSComm1.CommEvent
            Case comEvReceive
                '此处添加处理接收的代码
                strData = strData & MSComm1.Input
                If strData <> "" Then
                    Timer1.Enabled = False '
                End If
        End Select
    End SubPrivate Sub Timer1_Timer()
        MSComm1.Output = "ABCD" 
    End Sub
      

  2.   

    Dim indata As Variant
    Private Sub Form_Load()
      MSComm1.CommPort = 3
      MSComm1.Settings = "9600,n,8,1"
      MSComm1.InputMode = comInputModeBinary
      MSComm1.InputLen = 0 '读取缓冲区的全部内容
      If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
      MSComm1.RThreshold = 1 '4表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
      MSComm1.SThreshold = 1 '4表示每当串口输出缓冲区中字符小于2个时将引发一个OnComm事件
    End Sub
    Private Sub MSComm1_OnComm()
    Dim i As Integer
    Dim k As Integer
    Dim p As Integer
    Dim j As Integer
    Dim ptr() As Byte
    Dim crcdata() As Byte
    Dim comerr As Boolean
    Dim Arr() As Byte
    Static precommand As Integer
    Static resendnum As Integer
    Select Case MSComm1.CommEvent
    Case comEvReceive 
         indata = MSComm1.Input
         If indata <> Empty Then
         Timer1.Enabled = False
         End If
        End Select
    End Sub
    If indata <> Empty提示不匹配,怎么修改,我的输入模式是而进制
      

  3.   

    而且要是单片机没有回应,则不会执行Private Sub MSComm1_OnComm() 函数If indata <> Empty Then 
        Timer1.Enabled = False 
        End If 这个判断也就没意思了?
      

  4.   


    Option Explicit
        Dim strData As StringPrivate Sub Command1_Click()
        Timer1.Enabled = True
    End SubPrivate Sub Form_Load()
        MSComm1.RThreshold = 1
        MSComm1.InputMode = comInputModeBinary '二进制接收
        MSComm1.PortOpen = True
        Timer1.Enabled = False
        Timer1.Interval = 20000 '20秒
    End SubPrivate Sub MsComm1_OnComm()
        Dim intInputLen As Integer
        Select Case Me.MSComm1.CommEvent
            Case comEvReceive
                '此处添加处理接收的代码
                intInputLen = MSComm1.InBufferCount
                ReDim bytInput(intInputLen)
                bytInput = Me.MSComm1.Input
                For i = 0 To UBound(bytInput)
                    If Len(Hex(bytInput(i))) = 1 Then
                        strData = strData & "0" & Hex(bytInput(i))
                    Else
                        strData = strData & Hex(bytInput(i))
                    End If
                Next
                If strData <> "" Then
                    Timer1.Enabled = False '
                End If
       End Select
    End Sub