
是不是VB接收数据时候有问题你使用的方法是事件驱动吧Main_MSCommRThreshold =1 ' 每X个字符到接收缓冲
你可以尝试改一下Main_MSCommRThreshold这个值,MSDN上面也说了,如果你传送的数据是定长的,那用事件驱动就不会有问题,但是数据不定长,就有时候会出问题了
'不清楚的地方请百度HI我,添加一个按钮和一个mscomm控件,然后粘贴代码
Dim recive(1 To 5) As Byte
Dim send() As Byte
Private Sub Command1_Click()
MSComm1CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1InputLen = 0
' 打开端口。
MSComm1PortOpen = True
MSComm1InputMode = comInputModeBinary'二进制方式发送
MSComm1Output = recive' 发送数据
Do Until MSComm1InBufferCount >= 5'等待数据
DoEvents
Loop
send = MSComm1Input'接受
Dim i As Integer
Dim s As String
For i = 0 To UBound(send)
s = s & Hex(send(i)) & " "
Next i
MsgBox "收到5字节:" & s'显示
End Sub
Private Sub Form_Load()
recive(1) = &H41
recive(2) = &H42
recive(3) = &H43
recive(4) = &H44
recive(5) = &H45
End Sub
VB用MSCOMM控件与单片机经RS232串口实现通讯。一方为主发,一方为应答。规定好通讯格式。VB程序利用MSCOMM的ONCOMM事件进行接收。
Output
属性示例
下面的例子说明如何将用户键入的每一个字符送到串行端口:
Private
Sub
Form_KeyPress
(KeyAscii
As
Integer)
Dim
Buffer
as
Variant
'
设置并打开串口
MSComm1CommPort
=
1
MSComm1PortOpen
=
True
Buffer
=
Chr$(KeyAscii)
MSComm1Output
=
Buffer
End
Sub
同样在串口打开时,给MSCOMM的属性Output赋值,就向串口写入数据
串口传送数据实质是传送ASCII码,对于数值数据的处理:通常以16位二进制数字传递,而小数点不传递,仅乘一定倍率来实现同时16位二进制数字按两个8位(ASCII码值)输送,上位机通过程序代码处理成10进制数
串口通信中数制转换必须相当重视。
详细请参阅MSDN和人民邮电出版社的"UISUAL
BASIC
串口通讯工程开发实例导航"一书其中有详细介绍重点第一章“串口调试精灵”。其代码修改后可用作通讯模块。
这个需要分步来完成
1、实现单片机串口通讯
2、编写VB程序,添加串口控件,实现VB与单片机串口通讯
3、写单片机IO驱动,实现脉冲输出
4、VB发数据给单片机,实现脉冲数量和频率控制
5、更详细的可以私信我完成
Private Sub Command1_Click()
If Len(Text1Text) = 0 Then Exit Sub
Dim x, l, i As Integer
Dim SendByte() As Byte
l = Len(Text1Text) \ 2
ReDim SendByte(l - 1)
For i = 0 To l - 1
SendByte(i) = "&h" & Mid(Text1Text, i 2 + 1, 2)
Next
If MSComm1PortOpen = True Then MSComm1Output = SendByte
End Sub
Private Sub Form_Load()
Dim x, l, i As Integer
Text1Text = ""
Text2Text = ""
Text3Text = 1
Text4Text = ""
MSComm1Settings = "9600,n,8,1"
MSComm1CommPort = Text3Text '通讯端口号,根据text3中所输入的内容
MSComm1NullDiscard = False
MSComm1RThreshold = 1
MSComm1InputMode = 1
MSComm1PortOpen = True
End Sub
部分代码作了修改。
对你三点疑问的看法:
1)运行时,按第一次command1能接发数据,第二次再按就出错了!!
出错是串口重复打开。
2)接收串口的数据是不断变化,我用了定时器但数据都不会改变,为什么呢??
既然使用ONCOMM事件就不需使用定时器
3)如何能连续接发数据,那怎样能接收完一帧命令后,再在另下一行接收第二帧,不要一帧接一帧,每一帧都独立的占一行??
这些须依据你的通信协议设计。
太阳雨多年积攒极其珍贵的原创VB串口通信技术资料V20
VB串口通信编程源码206个,多种行业多种应用
VB串口通信技术文章160多篇,详尽地对VB串口通信的诠释
VB串口通信电子书籍16部,工业通信名家著作,经典细致
VB串口通信控件16个,简化串口通信编码,提高开发效率
VB串口调试工具80个,应用于各种串口调试与校验计算
VB串口视频教程46个,两套完整视频教程,讲解直观,更快掌握
程序员发展类文章和书籍12部,帮助您的成长,健康和发展
超级赠品一:OSI网络模型教程48M
超级赠品二:串口硬件层知识大全资料包24M
你在淘宝搜索“太阳雨VB串口资料”就可以找到,希望可以帮助到你。
以上就是关于vb串口通讯设置问题全部的内容,包括:vb串口通讯设置问题、用VB的mscomm控件串口通信,怎么发十六进制、向串口写数据 VB 源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)