VB与单片机的通信
运行结果Text1 , Text2 接收到“A”,Text3 却没有收到,即使多发几个也一样没收到,请各位高手帮帮小弟,感激不尽!!(程序如下)
单片机发送用MATLAB仿真过,没有问题Dim str_buff As StringPrivate Sub rungo_click()
If MSC.PortOpen = False Then 
    MSC.InputMode = comInputModeText    '文本接收
    MSC.Settings = "4800,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
    MSC.InputLen = 0                '一次读出输入缓冲区中的所有数据
    MSC.InBufferCount = 0           '清空接收缓冲区
    MSC.OutBufferCount = 0          '清空发送缓冲区
    MSC.OutBufferSize = 512         '发送缓冲区字节
    MSC.RThreshold = 0                '不触发OnComm()事件
    MSC.PortOpen = True              '打开COM1
End If
Call runstart
End SubPrivate Sub runstart()
MSC.Output = addr '一段 BYTE 数据(2字节)
Call comEvent
Text1=  str_buff          '显示接收到的“A”
MSC.Output = hexdata '一段 BYTE 数据(512字节)
Call comEvent
Text2 = str_buff         '显示接收到的“A”
MSC.Output = hexdata2 '一段 BYTE 数据( < 512字节)
Call comEvent
Text3 = str_buff         '显示接收到的“A”
MSC.PortOpen = False      '关闭com1
End SubPrivate Sub comEvent()
Do
    'MSC.InputLen = 1           '接收一个字节
    DoEvents
    str_buff = MSC.Input
Loop Until str_buff = "A" '当接收到"A"继续发送下一段
MSC.InBufferCount = 0           '清空接收缓冲区
MSC.OutBufferCount = 0          '清空发送缓冲区
End Sub

解决方案 »

  1.   

    Option Explicit
        Dim str_buff As String
        Dim addr
        Dim hexdata
        Dim hexdata2Private Sub Form_Load()
        addr = "01"
        hexdata = "0123456789"
        hexdata2 = "9876543210"
    End SubPrivate Sub rungo_click()
        If MSC.PortOpen = False Then
            MSC.InputMode = comInputModeText    '文本接收
            MSC.Settings = "9600,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
            MSC.InputLen = 0                '一次读出输入缓冲区中的所有数据
            MSC.InBufferCount = 0           '清空接收缓冲区
            MSC.OutBufferCount = 0          '清空发送缓冲区
            MSC.OutBufferSize = 512         '发送缓冲区字节
            MSC.RThreshold = 0                '不触发OnComm()事件
            MSC.PortOpen = True              '打开COM1
        End If
        Call runstart
    End SubPrivate Sub runstart()
        MSC.Output = addr   '一段 BYTE 数据(2字节)
        Call comEvent
        Text1 = str_buff          '显示接收到的“A”
        MSC.Output = hexdata    '一段 BYTE 数据(512字节)
        Call comEvent
        Text2 = str_buff         '显示接收到的“A”
        MSC.Output = hexdata2   '一段 BYTE 数据( < 512字节)
        Call comEvent
        Text3 = str_buff         '显示接收到的“A”
        'MSC.PortOpen = False      '关闭com1
    End SubPrivate Sub comEvent()
        Do
            MSC.InputLen = 1           '接收一个字节
            str_buff = MSC.Input
            DoEvents
        Loop Until str_buff = "A"   '当接收到"A"继续发送下一段
        MSC.InBufferCount = 0           '清空接收缓冲区
        MSC.OutBufferCount = 0          '清空发送缓冲区
    End Sub
      

  2.   

    谢谢了!
    不过不行。
    我原来的数据差不多是这样的
    addr(0)=&hf0
    addr(1)=&h0
    hexdata(0)=&hf0  …… hexdata(511)=&hf0
    hexdata(0)=&hf0 …… hexdata(n<512)=&hf0
      

  3.   

    Option Explicit
        Dim str_buff As String
        Dim addr(1) As Byte
        Dim hexdata(511) As Byte
        Dim hexdata2(511) As Byte
        Dim i As Integer
    Private Sub Form_Load()
        addr(0) = &HF0
        addr(1) = &H0
        For i = 0 To 511
        hexdata(i) = &HF0
        hexdata2(i) = &HF0
        Next
    End SubPrivate Sub rungo_click()
        If MSC.PortOpen = False Then
            MSC.InputMode = comInputModeText    '文本接收
            MSC.Settings = "9600,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
            MSC.InputLen = 0                '一次读出输入缓冲区中的所有数据
            MSC.InBufferCount = 0           '清空接收缓冲区
            MSC.OutBufferCount = 0          '清空发送缓冲区
            MSC.OutBufferSize = 512         '发送缓冲区字节
            MSC.RThreshold = 0                '不触发OnComm()事件
            MSC.PortOpen = True              '打开COM1
        End If
        Call runstart
    End SubPrivate Sub runstart()
        MSC.Output = addr   '一段 BYTE 数据(2字节)
        Call comEvent
        Text1 = str_buff          '显示接收到的“A”
        MSC.Output = hexdata    '一段 BYTE 数据(512字节)
        Call comEvent
        Text2 = str_buff         '显示接收到的“A”
        MSC.Output = hexdata2   '一段 BYTE 数据( < 512字节)
        Call comEvent
        Text3 = str_buff         '显示接收到的“A”
        MSC.PortOpen = False      '关闭com1
    End SubPrivate Sub comEvent()
        Do
            MSC.InputLen = 1           '接收一个字节
            str_buff = MSC.Input
            DoEvents
        Loop Until str_buff = "A"   '当接收到"A"继续发送下一段
        MSC.InBufferCount = 0           '清空接收缓冲区
        MSC.OutBufferCount = 0          '清空发送缓冲区
    End Sub
      

  4.   


    MSC.Settings = "9600,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
    改为:
    MSC.Settings = "4800,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
      

  5.   

    很有可能是COM口通讯线有问题