代码在下面,底层函数只是发送(1400bytes),pc端的vb只是接收,打大部分都接收不正
确,如果用调试助手是可以接收正确的,波特率只要高于9600肯定又问题。由于51端的发送
是别人负责的,用调试助手也是没问题的,为什么用vb接收就有问题。请xdjm帮帮偶吧,要
郁闷死了,就这几句话在下面!
Dim countertest As LongPrivate Sub Command1_Click()
End
End SubPrivate Sub Form_Load()
'串口初始化
MSComm1.CommPort = 1 '设置串口1
MSComm1.Settings = "115200,N,8,1" '波特率:115200 无奇校验,8位数据,1位停止
位
MSComm1.InputLen = 0 '每次从接收缓冲区中要读的字符数
MSComm1.InBufferSize = 1024 * 10 '设置接收缓冲区为256字节
MSComm1.OutBufferSize = 1024 '设置发送缓冲区为256字节
MSComm1.PortOpen = True '打开串口1
MSComm1.SThreshold = 0 '发送数据的时候不产生oncomm事件
MSComm1.RThreshold = 1 '每1个字符到接收缓冲区时都触发接收事件
MSComm1.InBufferCount = 0 '清除接收缓冲区数据
MSComm1.OutBufferCount = 0 '清除发送缓冲区数据End SubPrivate Sub MSComm1_OnComm() '接收数据触发OnComm()事件
Dim Buffer As Variant '接收数据,必须用这种类型的变量
Dim ReceiveTempArr() As Byte '接受的临时数组
Dim Bufcount As Integer '接收数据包的字符个数
Select Case MSComm1.CommEvent '在CommEvent中接收数据
Case comEvReceive '已经接收到>=规定的字符个数啦
Bufcount = MSComm1.InBufferCount
countertest = countertest + Bufcount
Buffer = MSComm1.Input
ReceiveTempArr = Buffer
If countertest > 1300 Then
Debug.Print countertest
End If
End SelectEnd Sub
确,如果用调试助手是可以接收正确的,波特率只要高于9600肯定又问题。由于51端的发送
是别人负责的,用调试助手也是没问题的,为什么用vb接收就有问题。请xdjm帮帮偶吧,要
郁闷死了,就这几句话在下面!
Dim countertest As LongPrivate Sub Command1_Click()
End
End SubPrivate Sub Form_Load()
'串口初始化
MSComm1.CommPort = 1 '设置串口1
MSComm1.Settings = "115200,N,8,1" '波特率:115200 无奇校验,8位数据,1位停止
位
MSComm1.InputLen = 0 '每次从接收缓冲区中要读的字符数
MSComm1.InBufferSize = 1024 * 10 '设置接收缓冲区为256字节
MSComm1.OutBufferSize = 1024 '设置发送缓冲区为256字节
MSComm1.PortOpen = True '打开串口1
MSComm1.SThreshold = 0 '发送数据的时候不产生oncomm事件
MSComm1.RThreshold = 1 '每1个字符到接收缓冲区时都触发接收事件
MSComm1.InBufferCount = 0 '清除接收缓冲区数据
MSComm1.OutBufferCount = 0 '清除发送缓冲区数据End SubPrivate Sub MSComm1_OnComm() '接收数据触发OnComm()事件
Dim Buffer As Variant '接收数据,必须用这种类型的变量
Dim ReceiveTempArr() As Byte '接受的临时数组
Dim Bufcount As Integer '接收数据包的字符个数
Select Case MSComm1.CommEvent '在CommEvent中接收数据
Case comEvReceive '已经接收到>=规定的字符个数啦
Bufcount = MSComm1.InBufferCount
countertest = countertest + Bufcount
Buffer = MSComm1.Input
ReceiveTempArr = Buffer
If countertest > 1300 Then
Debug.Print countertest
End If
End SelectEnd Sub
跟下位机的协议必须一致,一定要判断停止位。
1。inputmode属性要设成字节方式;
2。在OnComm事件中的第一条可执行代码前加上
MSComm1.RThreshold = 0
End Sub语句前加上
MSComm1.RThreshold = 0
MSComm1.RThreshold = 1
2、两边的波特率是一样的
3、一位停止位这些都是初始化时搞定的,