单片机要发送大于255的数据,8位二进制数最多就显示到255!
正确的做法应该是什么?我现在解决的方法是将连续两个8位二进制数组合到一起变成16位的二进制!
问题是我一共要取得5个大于255的数!就要接受10个8位二进制数!
而现在我只能接收到8个8位二进制数!
也就是说:
以下数据
11 22 33 44 55 66 77 88 99 11
我接收到88以后,99和11都接受不到了,这是为什么呀?以下是我的代码:
Private Sub MSComm1_OnComm()
Dim Buffer As Variant
Dim Arr() As Byte
Dim strTemp As String
Dim i As Long
'十六进制显示
Select Case MSComm1.CommEvent
Case comEvReceive
'设定 InputMode 读取二进制数据
MSComm1.InputMode = comInputModeBinary
'等待直到输入缓冲区有 10 个字节
Do Until MSComm1.InBufferCount < 10
DoEvents
Loop
'往缓冲区存二进制数据
Buffer = MSComm1.Input
'赋值于字节数组以便处理
Arr = Buffer
For i = LBound(Arr) To UBound(Arr)
Text1.text = strTemp & String(2 - Len(Hex(Arr(i))), "0") & Hex(Arr(i))
Next
.
.
.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
问题出现在:
UBound(Arr)的值是7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@请高手支教!
正确的做法应该是什么?我现在解决的方法是将连续两个8位二进制数组合到一起变成16位的二进制!
问题是我一共要取得5个大于255的数!就要接受10个8位二进制数!
而现在我只能接收到8个8位二进制数!
也就是说:
以下数据
11 22 33 44 55 66 77 88 99 11
我接收到88以后,99和11都接受不到了,这是为什么呀?以下是我的代码:
Private Sub MSComm1_OnComm()
Dim Buffer As Variant
Dim Arr() As Byte
Dim strTemp As String
Dim i As Long
'十六进制显示
Select Case MSComm1.CommEvent
Case comEvReceive
'设定 InputMode 读取二进制数据
MSComm1.InputMode = comInputModeBinary
'等待直到输入缓冲区有 10 个字节
Do Until MSComm1.InBufferCount < 10
DoEvents
Loop
'往缓冲区存二进制数据
Buffer = MSComm1.Input
'赋值于字节数组以便处理
Arr = Buffer
For i = LBound(Arr) To UBound(Arr)
Text1.text = strTemp & String(2 - Len(Hex(Arr(i))), "0") & Hex(Arr(i))
Next
.
.
.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
问题出现在:
UBound(Arr)的值是7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@请高手支教!
调试一下,看是没有收到所有数据还是数据处理的问题.mscomm不是有个设置接收多少个字节发出oncomm事件吗?
你把那个值设成10,不要你程序中的判断inburrferCount的语句试试.
那估计是你判断缓冲区有10个字节的地方有问题的.
你试试我上面说的方法改改看.我用mscomm是能够收到信息的,没有丢.
实在不行,你把Rthreshold属性设为1,那样每返回一个字符都会发生oncomm事件的.
我能收到数据,但是不全!
99 和 11 没有收到
Do While MSComm1.InBufferCount < 10
DoEvents
Loop
你试试把RThreshold改成1或者10,看看到底能不能收到所有的信息.如果能收到所有的,那就是你的处理有问题.如果确实没有收到所有的消息,你就要看看发送是不是有问题.windows自带了一个超级终端,可以对串口进行操作的,你和你的程序一起再试试,看看到底问题在哪里.