导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→高手请进~~VB与单片机的串口通信问题。。急~~~ 加急~~

* 105894: 高手请进~~VB与单片机的串口通信问题。。急~~~ 加急~~~请帮帮忙

   duoduokoko 
duoduokoko发表的帖子 

 高手请进~~VB与单片机的串口通信问题。。急~~~ 加急~~~请帮帮忙
我从单片机接收了数据过来,现在又需要把从单片机接收的数据再从串口发回到单片机。如:发送F0,单片机回:F0,发送0F,单片机回09(这个数据是随机的,不是固定的)。现在我需要把这个随机的数据再从串口发到单片机中,如,接着发送09,单片机回09 0F。现在我的问题是:发送F0以及0F可以接收到F0 09,但是再将09发回去就不行了,必须要按两次cmdSend_Click 才行。而且按第一次的时候,在MSCOMM1_OnComm函数中,随机数a1可以显示在text2中,但不能显示在SendData2函数中的text4,要按第二次cmdSend_Click ,才能显示在text4中。但是从单片机接收到的数据就不对了。
我照你的程序大致如下:

dim a1 as variant '定义a1为全局变量
Private Sub cmdSend_Click()
Dim bytData(0) As Byte
dim bytData(0) As Byte
dim bytData2 As variant
bytData(0) = &HF0
bytData1(0)=&HF

Call SendData(bytData)
call SendData1(bytData1)
bytData2 = a1
call SendData2(bytData2)
End Sub

Public Function SendData2(ByRef bytData2 As variant) As Long
    text4.text = a1
    On Error Resume Next
    MSComm1.InBufferCount = 0 '清空接收缓冲区
    MSComm1.Output = bytData2 '发送数据
    Do
        DoEvents
    Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
    MSComm1.OutBufferCount = 0          '清空发送缓冲区
End Function
Public Function SendData1(ByRef bytData1() As Byte) As Long
    On Error Resume Next
    MSComm1.InBufferCount = 0 '清空接收缓冲区
    MSComm1.Output = bytData 1'发送数据
    Do
        DoEvents
    Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
    MSComm1.OutBufferCount = 0          '清空发送缓冲区
End Function
Public Function SendData(ByRef bytData() As Byte) As Long
    On Error Resume Next
    MSComm1.InBufferCount = 0 '清空接收缓冲区
    MSComm1.Output = bytData '发送数据
    Do
        DoEvents
    Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
    MSComm1.OutBufferCount = 0          '清空发送缓冲区
End Function
Private Sub Form_Load()
    MSComm1.CommPort = 1                   'COM端口
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.InputMode = comInputModeBinary      '采用二进制传输
    MSComm1.InBufferCount = 0   '清空接受缓冲区
    MSComm1.OutBufferCount = 0  '清空传输缓冲区
    MSComm1.RThreshold = 1      '产生MSComm事件
    MSComm1.PortOpen = True '打开端口
    Text3 = ""
End Sub

Private Sub MSComm1_OnComm()
On Error Resume Next
    Dim BytReceived() As Byte
    Dim strBuff As String
    Dim strData As String
    Dim i As Integer
    Dim x As Integer
    Select Case MSComm1.CommEvent
        Case 2
            MSComm1.InputLen = 0
            strBuff = MSComm1.Input
            BytReceived() = strBuff
            For i = 0 To UBound(BytReceived)
                If Len(Hex(BytReceived(i))) = 1 Then
                    strData = strData & "0" & Hex(BytReceived(i))
                Else
                    strData = strData & Hex(BytReceived(i))
                End If
            Next
            Text3 = Text3 + strData
            If Left(strData, 2) = "F0" And Len(strData) = 4 Then
                Text1.Text = strData
                text2.text = right(strData,2)
                a1 = text2.text
                Call DataClear
            End If
    End Select
End Sub

Public Sub DataClear()
    MSComm1.OutBufferCount = 0   '清空发送缓冲区
    MSComm1.InBufferCount = 0
    Text3 = ""
End Sub


发表时间:2007年5月15日19:42:19

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:[求助]谁能向我解释一下下面关于步进电机的程序,多谢。下面是驱动步进电机的程序,是驱动步进电机正转三
[下一篇帖子]:[求助]你好!!我向你请教下这个程序..希望你能提供一些资料给我,,如电路图及程序..急用!!谢谢!