
用PC机的9针RS232接口,用VB6 含有的MSComm 控件编程
两台PC机串行通信串行口的接线图:
'==============================
'PC机串行口用命令按钮启动接收/发送VB程序
Private Sub Form_Load()
MSComm1.PortOpen = True '开启通信控件的端口
End Sub
'点击“发送”命令按钮发送数据
Private Sub Command1_Click()
MSComm1.Output = Text1.Text '将文本框Text1的数据发送至对方
End Sub
'点击“接收”命令按钮接收数据
Private Sub Command2_Click()
Dim st As String
st = MSComm1.Input
Text2.Text = st '将接收到的数据至入文本框Text2
End Sub
'==============================
’PC机串行口定时自动接收/发送VB程序
Private Sub Form_Load()
MSComm1.PortOpen = True '开启通信控件的端口
Timer1.Interval = 100 ’自动传送时间间隔100毫秒
End Sub
Private Sub MSComm1_OnComm()
Dim st As String
If MSComm1.InBufferCount >0 Then
st = MSComm1.Input
Text2.Text = st '将收到的数据放入Text2文本框
End If
End Sub
Private Sub Timer1_Timer()
MSComm1.Output = Text1.Text '发送Text1文本框内容
End Sub
LZ的代码错在:
Dim send(4) As Byte
它定义的Byte数组有5个元素,所以单片机不返回数据。应该改为:
Private Sub Command1_Click() '发送HEX数据93 93 93 93
Dim send(3) As Byte
send(0) = "&H93"
send(1) = "&H93"
send(2) = "&H93"
send(3) = "&H93"
MSComm1.Output = send
End Sub
这样才发送4字节指令,此外从MSComm1.RThreshold = 34看是设置接收字节长度为34字节。
以下修改了LZde1代码,供参考:
Option ExplicitDim strdata
Private Sub Command1_Click() '发送HEX数据93 93 93 93
Dim send(3) As Byte
send(0) = "&H93"
send(1) = "&H93"
send(2) = "&H93"
send(3) = "&H93"
MSComm1.Output = send
End Sub
Private Sub Form_Load()
'串口初始化
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 512
MSComm1.RThreshold = 34 '设置接收字节长度
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.CommPort = 1 '串口号
MSComm1.PortOpen = True
Timer1.Interval = 0
End Sub
Private Sub MSComm1_OnComm()
Dim i As Long
Dim strBuff As String
Dim strdata As String
Dim str() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
strBuff = MSComm1.Input
str() = strBuff
For i = 0 To UBound(str) '接收16进制数据
If Len(Hex(str(i))) = 1 Then
strdata = strdata & "0" & Hex(str(i))
Else
strdata = strdata & Hex(str(i))
End If
Next
Text1.Text = strdata
Call Timer1_Timer
End Select
End Sub
Private Sub Timer1_Timer()
strdata = ""
MSComm1.InBufferCount = 0
End Sub
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)