急需mscomm程序

lym616 2008-03-23 12:53:18
请问VB中mscomm编写的发送和接收程序与单片机里面编写的程序有关系吗?是各自编写自己的那部分吗?从单片机发送过来的数据在VB界面显示,电脑发送给单片机的程序也要返回回来在VB显示?请问有没有这方面的程序吗?
...全文
161 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SophSia 2009-04-02
  • 打赏
  • 举报
回复
谢谢各位高手。我受益匪浅呢。牛人们。牛网站。学习到了好多东西啊。谢谢诶!!!
wuliwb 2008-07-28
  • 打赏
  • 举报
回复
我用串口调试助手调试,发送给PC,怎么接受不到,每次运行时调试助手的接受区接收到00
lym616 2008-03-26
  • 打赏
  • 举报
回复
谢谢了!


怎么我的电脑VB装不了.
精简版的又没有mocrosoft common control 6.0这个控件,哪位大哥大姐有啊?
lym616 2008-03-24
  • 打赏
  • 举报
回复
谢谢大家哦,也就是说单片机写的程序跟VB上位机写的程序没有关系?
那我随便发送数据给单片机,它也能接受吗?
不是有个接受规则,比如我发个数组以0XFF开头,那么,我要先检查我接收到的是不是我所需要的,若是,再返回回去进行显示

还有发送一个16进制的数组,在VB界面怎么编写?

本人刚刚接触VB,所以不太懂,望各位高手指点迷津,谢谢!
zdingyun 2008-03-24
  • 打赏
  • 举报
回复
写PC机的VB程序与单片机通信,需按照上下位机间的通信协议要求写。
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

zdingyun 2008-03-24
  • 打赏
  • 举报
回复
TO:LZ
send_Text = "FF0B000102030405060726"
TextSend.Text = send_Text
这两句,若不要,要直接在TextSend.Text中里面直接写,能这样写吗?
send_Text = TextSend.Text (我在TextSend.Text里面写的是FF0B000102030405060726),那发送出去的也是FF0B000102030405060726这个吗?

我答贴已对你贴出代码进行修改,并改正了若干错误代码,可以发送和接收数据。
不知道还需提供何帮助?
lym616 2008-03-24
  • 打赏
  • 举报
回复
哪位大哥大姐,帮帮忙,我在等你们的指点
zdingyun 2008-03-24
  • 打赏
  • 举报
回复
1)严肃的VB程序员,必须注意变量的定义,避免引起错误。
2)
send_Text = "FF0B000102030405060726"
TextSend.Text = send_Text
这两句,若不要,要直接在TextSend.Text中里面直接写,能这样写吗?

可以。

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
lym616 2008-03-24
  • 打赏
  • 举报
回复
send_Text = "FF0B000102030405060726"
TextSend.Text = send_Text
这两句,若不要,要直接在TextSend.Text中里面直接写,能这样写吗?
send_Text = TextSend.Text (我在TextSend.Text里面写的是FF0B000102030405060726),那发送出去的也是FF0B000102030405060726这个吗?
lym616 2008-03-24
  • 打赏
  • 举报
回复
我是参考书本和这个论坛里面写的。
在接收函数里面,strData这个没有定义,要定义吗?
lym616 2008-03-24
  • 打赏
  • 举报
回复
这是我的程序,请问可以吗 ?
有错误 吗?

还有strData = ""这条语句是什么意思?谢谢大家指点

' 初始化程序:主要完成对串口的设置,包括选择串口、设置波特率、设置数据格式、打开串口等。
' 注意:在程序开始之前,必须清空发送和接收缓冲区,以免出错。
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 ' 打开串口
End Sub
'发送数据
'PC机向单片机发送字符串,即一个数组(11个数),包括包头,数据长度,数据和校验和
'单片机正确接收到11个字符后,把11个字符重新又送回来。
Private Sub CmdSend_Click()
Dim send() As Byte
Dim send_Text As String
Dim k As Integer
send_Text = "FF0B000102030405060726"
TextSend.Text = send_Text
ReDim send(Len(send_Text) / 2 - 1)
For k = 0 To Len(send_Tex) - 1 Step 2
send(k / 2) = Val("&H " & Mid(send_Tex, k + 1, 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
Unload Me
End Sub

嗷嗷叫的老马 2008-03-23
  • 打赏
  • 举报
回复
MSCOMM控件只是封装了对串口的读写而已

具体通讯协议还需要看串口上的设备.

建议你多看看基础.
lgh56738307lgh 2008-03-23
  • 打赏
  • 举报
回复
是各自编写自己的那部分!
zdingyun 2008-03-23
  • 打赏
  • 举报
回复
使用MSCOMM控件做的VB代码,这个论坛有不少实例.

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧