1,451
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Dim BytReceived() As Byte
Dim strData As String
Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Text1 = ""
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
'此处写接收后的数据处理代码
'If Len(strData) = 10 Then
' strData = ""
'End If
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
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
Text1 = strData
End Function
Option Explicit
Dim send_Tex As String
Dim strData As String
'TextReceive =
' 初始化程序:主要完成对串口的设置,包括选择串口、设置波特率、设置数据格式、打开串口等。
' 注意:在程序开始之前,必须清空发送和接收缓冲区,以免出错。
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1" ' 设置波特率和发送字符格式
MSComm1.CommPort = 1 ' 设置通讯串口
MSComm1.InputLen = 0 ' 设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据
MSComm1.InBufferSize = 512 ' 设置接收缓冲区512Byte
MSComm1.InBufferCount = 0
MSComm1.OutBufferSize = 512 ' 设置发送缓冲区512Byte
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1 ' 每个字符到接收缓冲区都触发接收事件
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.PortOpen = True ' 打开串口
Timer1.Interval = 200
End Sub
'发送数据
'PC机向单片机发送字符串,即一个数组(11个数),包括包头,数据长度,数据和校验和
'单片机正确接收到11个字符后,把11个字符重新又送回来。
Private Sub CmdSend_Click()
Dim send() As Byte
Dim k As Integer
send_Tex = "FF0B000102030405060726"
TextSend.Text = send_Tex
ReDim send(Len(send_Tex) / 2 - 1)
For k = 1 To Len(send_Tex) Step 2
send((k - 1) / 2) = Val("&H " & Mid(send_Tex, k, 2))
Next
MSComm1.Output = send
End Sub
Private Sub Timer1_Timer()
strData = ""
End Sub
' 接收单片机发送的数据,并显示
Private Sub MSComm1_OnComm()
Dim strBuff As String
Dim BytReceived() As Byte
Dim i As Integer
TextReceive = ""
Select Case MSComm1.CommEvent ' 设置oncomm事件,读取片机内存的值
Case comEvReceive
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
For i = 0 To UBound(BytReceived) '接收数据处理为16进制
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
TextReceive.Text = strData ' 单片机内存的值用TextReceive显示出
Call Timer1_Timer '清除接收的数据
Case Else
End Select
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
End Sub
'关闭串口,关闭程序
Private Sub Cmdquit_Click()
MSComm1.PortOpen = False
End
End Sub