当前位置:编程学习 > VB >>

求助!用VB6.0实现PC机与单片机串口通讯 急!!!在线等待

毕业设计:用RS-232连接单片机与PC机,用vb将单片机中采集的数据(数据是一个一个采集,有一个数据就传一个到PC机上)传到PC机上并用VB编写代码在PC机上显示出来。关于通信协议暂不知道,怎样编写代码将数据接收过来(数据是小数 例66.84)用Mscomm控件实现,急!!! --------------------编程问答-------------------- 参考一下:http://www.mndsoft.com/blog/article.asp?id=382 --------------------编程问答-------------------- 这也是一个示例,仅供参考:
'*/-------------------------------------------------------------
'*/函 数 名:ReadPort
'*/功    能:读取数据通用函数
'*/返 回 值:字符
'*/参    数:RecordID   字符   记录序号指针,可变
'           MemoryType  字符  存储器型号24铁电(保存参数用,ID:10) 39Flash(保存数据用,ID:01)
'           HljAddre   字符
'*/建立日期:2004-12-26
'*/修改日期:2005-12-26  修正部分
'*/-------------------------------------------------------------
Function ReadPort(MemoryType As String, HAddress As String, RecordID As String) As String
    Dim i As Integer
    Dim ii As Integer
    Dim S_Buffer(9) As Byte
    Dim R_Buffer() As Byte
    Dim SendStr As String

    '前置码
    S_Buffer(0) = &H55
    S_Buffer(1) = &HAA
    S_Buffer(2) = &H2A

    S_Buffer(3) = "&H" & HAddress             '下位机地址

    If HAddress = "80" Then
        S_Buffer(4) = &H80                     '格式化
    Else
        S_Buffer(4) = "&H" & Trim$(MemoryType)  '存储器型号ID
    End If
    S_Buffer(5) = &H0
    S_Buffer(6) = &H0

    '大于255,低位在前,高位在后
    If Val("&H" & RecordID) > 255 Then
        S_Buffer(7) = "&H" & IIf(Len(RecordID) = 3, Left$(RecordID, 1), Left$(RecordID, 2))
        S_Buffer(8) = "&H" & Right$(RecordID, 2) '记录序号指针
    Else
        S_Buffer(7) = &H0
        S_Buffer(8) = "&H" & RecordID           '记录序号指针
    End If

    '异或码
    S_Buffer(9) = "&H" & S_Buffer(3) Xor S_Buffer(4) Xor S_Buffer(7) Xor S_Buffer(8)

    For i = 0 To UBound(S_Buffer)
        SendStr = SendStr & Space$(1) & IIf(Len(Hex$(S_Buffer(i))) = 1, "0" + Hex$(S_Buffer(i)), Hex$(S_Buffer(i)))
    Next

    If Check2.Value = False Then
        sendTextBox = sendTextBox & "发" & Format$(Trim$(Str$(Val("&H" & RecordID) + 1)), "000") & "行  " & SendStr & vbCrLf
    End If
    TextCmd = Trim$(SendStr)

    MSComm1.Output = S_Buffer
    If Val(MemoryType) = 80 Then
        '延时50ms
        Sleep (600)
    Else
        '延时50ms
        Sleep (50)
    End If

    '让系统处理其他事
    DoEvents

ReadData:
    Do Until MSComm1.InBufferCount > 0
        If MSComm1.InBufferCount = 0 Then
            Exit Do
        End If
    Loop

    '读取端口
    R_Buffer = MSComm1.Input

    '判断缓冲区是否完整
    If UBound(R_Buffer) = 13 Then

        For i = 0 To UBound(R_Buffer)
            ReadPort = ReadPort & Space$(1) & IIf(Len(Hex$(R_Buffer(i))) = 1, "0" + Hex$(R_Buffer(i)), Hex$(R_Buffer(i)))
        Next
    Else

        If UBound(R_Buffer) = 0 Then
            ReadPort = Hex$(R_Buffer(0))
            MSComm1.InBufferCount = 0
            MSComm1.OutBufferCount = 0
            If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
            ReadPort = "80"
            Exit Function
        End If
        Erase R_Buffer
        MSComm1.InBufferCount = 0
        MSComm1.OutBufferCount = 0
        MSComm1.Output = S_Buffer
        Sleep (50)

        If ii < 265 Then
            ii = ii + 1
            'Debug.Print ii
            GoTo ReadData
        Else
            MSComm1.InBufferCount = 0
            MSComm1.OutBufferCount = 0
            If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
            ReadPort = "1"
            Exit Function
        End If
    End If
End Function --------------------编程问答-------------------- 谢谢,先看一下 --------------------编程问答-------------------- 不明LZ在说什么 --------------------编程问答-------------------- 不明LZ在说什么
补充:VB ,  资源
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,