关于串口通讯!不能够接到大于127的数据!500分!

htnz 2003-09-16 08:57:17
任务要求就是接收160个字节,有些数据是大于127的
程序能够正确接到1个小于127的字,但是假如单片机连续给PC
发2个以上PC就溢处!接收的是负数
只要程序如下:
Private Sub Form_Load()
f = 0
MSComm1.CommPort = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 0
MSComm1.RThreshold = 1
MSComm1.Settings = "9600,N,8,1"
'MSComm1.SThreshold = 1
MSComm1.PortOpen = True
MSComm1.DTREnable = False

count1 = 0

End Sub

Private Sub MSComm1_OnComm()
Dim Buffer As Variant
Dim ist As String
Dim temp(1) As Byte
Dim page As Integer
Dim a As Byte
Dim p As Integer
temp(0) = 127
f = f + 1
' MSComm1.InputMode = comInputModeText
Select Case MSComm1.CommEvent
Case comEvReceive
Buffer = MSComm1.Input
ist = Buffer
p = Asc(ist)
a = p
aa(f) = a
Text1.Text = Text1.Text + Trim(a)
End Select
End Sub
...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
watt 2003-09-16
  • 打赏
  • 举报
回复
Private Sub MSComm1_OnComm()


Dim Buffer As Variant
Dim ist As String
Dim temp(1) As Byte
Dim page As Integer
Dim a As Byte
Dim p As Integer

Dim intCount As Integer
Dim bytRec() As Byte
Dim i As Integer

temp(0) = 127
' MSComm1.InputMode = comInputModeText
Select Case MSComm1.CommEvent
Case comEvReceive

intCount = MSComm1.InBufferCount

Buffer = MSComm1.Input

ReDim bytRec(1 To intCount)

bytRec = Buffer

For i = 1 To intCount
f = f + 1
aa(f) = bytRec(i)
Next

End Select

End Sub
龙华 2003-09-16
  • 打赏
  • 举报
回复
bytes 为8 位数值形式,你能不能把大点的数转化成两个8位来处理?
watt 2003-09-16
  • 打赏
  • 举报
回复
Private Sub MSComm1_OnComm()

Dim Buffer As Variant
Dim ist As String
Dim temp(1) As Byte
Dim page As Integer
Dim a As Byte
Dim p As Integer

Dim intCount As Integer
Dim bytRec() As Byte
Dim i As Integer

temp(0) = 127
f = f + 1
' MSComm1.InputMode = comInputModeText
Select Case MSComm1.CommEvent
Case comEvReceive

intCount = MSComm1.InBufferCount

Buffer = MSComm1.Input

ReDim bytRec(1 To intCount)

bytRec = Buffer

For i = 1 To intCount
Debug.Print "收到的内容是" & bytRec(i)
Next

ist = Buffer



p = Asc(ist)
a = p
aa(f) = a
Text1.Text = Text1.Text + Trim(a)
End Select
wingchi 2003-09-16
  • 打赏
  • 举报
回复
up
fuxc 2003-09-16
  • 打赏
  • 举报
回复
这不是串口的问题,是VB处理字符串的问题。

vb会自动把字符型数据转换为unicode,所以处理二进制数据,一定要用byte数组。
yijiansong 2003-09-16
  • 打赏
  • 举报
回复
.InputMode 用 bin

dim buf() as byte ' 或者是variant
buf=MSComm1.Input
然后可以用 strconv 转为unicode
橙子orange_01 2003-09-16
  • 打赏
  • 举报
回复
.InputMode 用 bin

dim buf() as byte ' 或者是variant
buf=MSComm1.Input
然后可以用 strconv 转为unicode

我写过一个虚拟仪器的程序,就是用的这个办法
armu80830 2003-09-16
  • 打赏
  • 举报
回复
楼上几位说得对,要从串口接受数据,需采用字节数组

7,789

社区成员

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

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