mscomm1.output="01010101"可以么? 一次发送一帧。一帧包括8个数据位。
5 个解决方案
#1
dim outinfo as byte
outinfo=&h十六进制代码
mscomm.output=outinfo
outinfo=&h十六进制代码
mscomm.output=outinfo
#2
把你要发送的0和1按每8位组合成一个字节发送就可以了
其实你那一句mscomm1.output="01010101"相当于
发送了8个字节,就是0和1的ASCII码,因为UniCode的缘故,准确地说
发送了16个字节,单片机如果不能解释UniCode你就需要发送非UniCode的代码.
最好使用字节数组.dim byteArray() as byte
mscomm控件可以直接发送字节数组 ko
其实你那一句mscomm1.output="01010101"相当于
发送了8个字节,就是0和1的ASCII码,因为UniCode的缘故,准确地说
发送了16个字节,单片机如果不能解释UniCode你就需要发送非UniCode的代码.
最好使用字节数组.dim byteArray() as byte
mscomm控件可以直接发送字节数组 ko
#3
MSComm1.CommPort = 1 '采用COM端口
MSComm1.InputMode = comInputModeBinary '采用二进制传输 !!!
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件
MSComm1.RThreshold = 1 '获得一个字节则产生MSComm事件
MSComm1.InBufferSize = 1024
Dim MyArray(0 To 6) As Byte '这是我做的系统的一段代码
Dim strBCD As String
strBCD = Trim(Format(lngNum, "00000"))
MyArray(0) = &HAC
MyArray(1) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
MyArray(2) = MyArray(1)
MyArray(3) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
MyArray(4) = MyArray(3)
MyArray(5) = Val(Mid(strBCD, 5, 1)) * 16 + Val(ErrNo.StrNum)
MyArray(6) = MyArray(5)
If bCommFlag = False Then
MSComm1.Output = MyArray '发送车位数据到大屏
End If
MSComm1.InputMode = comInputModeBinary '采用二进制传输 !!!
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件
MSComm1.RThreshold = 1 '获得一个字节则产生MSComm事件
MSComm1.InBufferSize = 1024
Dim MyArray(0 To 6) As Byte '这是我做的系统的一段代码
Dim strBCD As String
strBCD = Trim(Format(lngNum, "00000"))
MyArray(0) = &HAC
MyArray(1) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
MyArray(2) = MyArray(1)
MyArray(3) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
MyArray(4) = MyArray(3)
MyArray(5) = Val(Mid(strBCD, 5, 1)) * 16 + Val(ErrNo.StrNum)
MyArray(6) = MyArray(5)
If bCommFlag = False Then
MSComm1.Output = MyArray '发送车位数据到大屏
End If
#4
一次发送一帧。一帧包括8个数据位
应该这样说:帧是以字节为单位的,一般完整的帧包括帧头,帧地址,帧命令,帧数据,帧的校验的数据。
在发一个字节的数据的时候,发出的一般11个比特(位)1个起始位+ 8个数据位+一个校验位+停止位。
日本:数据位为7,其它西欧国家为8位。
应该这样说:帧是以字节为单位的,一般完整的帧包括帧头,帧地址,帧命令,帧数据,帧的校验的数据。
在发一个字节的数据的时候,发出的一般11个比特(位)1个起始位+ 8个数据位+一个校验位+停止位。
日本:数据位为7,其它西欧国家为8位。
#5
在MSComm_ONComm
Case comEvReceive '收到 RThreshold # of chars.
tmrSendCar.Enabled = False '一旦消息来到就停止发车位数据
intDataNum = 0 '超时计数清零
Dim MyArray() As Byte
Dim MyData As Variant
Dim i As Integer
Dim bErrorFlag As Boolean
Static MyArrays(128) As Byte
Static lngBytNum As Long
MyData = MSComm1.Input
MyArray = MyData
If MyArray(0) = &HAC Then
lngBytNum = 0
txtData.Text = ""
End If
For i = 0 To UBound(MyArray)
MyArrays(lngBytNum) = MyArray(i)
lngBytNum = lngBytNum + 1
txtData.Text = txtData.Text + Format(Hex(MyArray(i)), "00") + " "
Next i
If lngBytNum >= 18 Then
MSComm1.InBufferCount = 0 '清空接收缓冲区
lngBytNum = 0
If MyArrays(1) = MyArrays(2) And MyArrays(1) = &HB4 Then
bErrorFlag = False
For i = 0 To 7
If MyArrays(3 + i * 2) <> MyArrays(4 + i * 2) Then
bErrorFlag = True
End If
Next i
If bErrorFlag = False Then
For i = 0 To 3
NoNum(i).StrNum = Right(Hex(MyArrays(3 + i * 4)), 1) + Hex(MyArrays(5 + i * 4))
Next i
End If
End If
End If
Case comEvReceive '收到 RThreshold # of chars.
tmrSendCar.Enabled = False '一旦消息来到就停止发车位数据
intDataNum = 0 '超时计数清零
Dim MyArray() As Byte
Dim MyData As Variant
Dim i As Integer
Dim bErrorFlag As Boolean
Static MyArrays(128) As Byte
Static lngBytNum As Long
MyData = MSComm1.Input
MyArray = MyData
If MyArray(0) = &HAC Then
lngBytNum = 0
txtData.Text = ""
End If
For i = 0 To UBound(MyArray)
MyArrays(lngBytNum) = MyArray(i)
lngBytNum = lngBytNum + 1
txtData.Text = txtData.Text + Format(Hex(MyArray(i)), "00") + " "
Next i
If lngBytNum >= 18 Then
MSComm1.InBufferCount = 0 '清空接收缓冲区
lngBytNum = 0
If MyArrays(1) = MyArrays(2) And MyArrays(1) = &HB4 Then
bErrorFlag = False
For i = 0 To 7
If MyArrays(3 + i * 2) <> MyArrays(4 + i * 2) Then
bErrorFlag = True
End If
Next i
If bErrorFlag = False Then
For i = 0 To 3
NoNum(i).StrNum = Right(Hex(MyArrays(3 + i * 4)), 1) + Hex(MyArrays(5 + i * 4))
Next i
End If
End If
End If
#1
dim outinfo as byte
outinfo=&h十六进制代码
mscomm.output=outinfo
outinfo=&h十六进制代码
mscomm.output=outinfo
#2
把你要发送的0和1按每8位组合成一个字节发送就可以了
其实你那一句mscomm1.output="01010101"相当于
发送了8个字节,就是0和1的ASCII码,因为UniCode的缘故,准确地说
发送了16个字节,单片机如果不能解释UniCode你就需要发送非UniCode的代码.
最好使用字节数组.dim byteArray() as byte
mscomm控件可以直接发送字节数组 ko
其实你那一句mscomm1.output="01010101"相当于
发送了8个字节,就是0和1的ASCII码,因为UniCode的缘故,准确地说
发送了16个字节,单片机如果不能解释UniCode你就需要发送非UniCode的代码.
最好使用字节数组.dim byteArray() as byte
mscomm控件可以直接发送字节数组 ko
#3
MSComm1.CommPort = 1 '采用COM端口
MSComm1.InputMode = comInputModeBinary '采用二进制传输 !!!
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件
MSComm1.RThreshold = 1 '获得一个字节则产生MSComm事件
MSComm1.InBufferSize = 1024
Dim MyArray(0 To 6) As Byte '这是我做的系统的一段代码
Dim strBCD As String
strBCD = Trim(Format(lngNum, "00000"))
MyArray(0) = &HAC
MyArray(1) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
MyArray(2) = MyArray(1)
MyArray(3) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
MyArray(4) = MyArray(3)
MyArray(5) = Val(Mid(strBCD, 5, 1)) * 16 + Val(ErrNo.StrNum)
MyArray(6) = MyArray(5)
If bCommFlag = False Then
MSComm1.Output = MyArray '发送车位数据到大屏
End If
MSComm1.InputMode = comInputModeBinary '采用二进制传输 !!!
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件
MSComm1.RThreshold = 1 '获得一个字节则产生MSComm事件
MSComm1.InBufferSize = 1024
Dim MyArray(0 To 6) As Byte '这是我做的系统的一段代码
Dim strBCD As String
strBCD = Trim(Format(lngNum, "00000"))
MyArray(0) = &HAC
MyArray(1) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
MyArray(2) = MyArray(1)
MyArray(3) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
MyArray(4) = MyArray(3)
MyArray(5) = Val(Mid(strBCD, 5, 1)) * 16 + Val(ErrNo.StrNum)
MyArray(6) = MyArray(5)
If bCommFlag = False Then
MSComm1.Output = MyArray '发送车位数据到大屏
End If
#4
一次发送一帧。一帧包括8个数据位
应该这样说:帧是以字节为单位的,一般完整的帧包括帧头,帧地址,帧命令,帧数据,帧的校验的数据。
在发一个字节的数据的时候,发出的一般11个比特(位)1个起始位+ 8个数据位+一个校验位+停止位。
日本:数据位为7,其它西欧国家为8位。
应该这样说:帧是以字节为单位的,一般完整的帧包括帧头,帧地址,帧命令,帧数据,帧的校验的数据。
在发一个字节的数据的时候,发出的一般11个比特(位)1个起始位+ 8个数据位+一个校验位+停止位。
日本:数据位为7,其它西欧国家为8位。
#5
在MSComm_ONComm
Case comEvReceive '收到 RThreshold # of chars.
tmrSendCar.Enabled = False '一旦消息来到就停止发车位数据
intDataNum = 0 '超时计数清零
Dim MyArray() As Byte
Dim MyData As Variant
Dim i As Integer
Dim bErrorFlag As Boolean
Static MyArrays(128) As Byte
Static lngBytNum As Long
MyData = MSComm1.Input
MyArray = MyData
If MyArray(0) = &HAC Then
lngBytNum = 0
txtData.Text = ""
End If
For i = 0 To UBound(MyArray)
MyArrays(lngBytNum) = MyArray(i)
lngBytNum = lngBytNum + 1
txtData.Text = txtData.Text + Format(Hex(MyArray(i)), "00") + " "
Next i
If lngBytNum >= 18 Then
MSComm1.InBufferCount = 0 '清空接收缓冲区
lngBytNum = 0
If MyArrays(1) = MyArrays(2) And MyArrays(1) = &HB4 Then
bErrorFlag = False
For i = 0 To 7
If MyArrays(3 + i * 2) <> MyArrays(4 + i * 2) Then
bErrorFlag = True
End If
Next i
If bErrorFlag = False Then
For i = 0 To 3
NoNum(i).StrNum = Right(Hex(MyArrays(3 + i * 4)), 1) + Hex(MyArrays(5 + i * 4))
Next i
End If
End If
End If
Case comEvReceive '收到 RThreshold # of chars.
tmrSendCar.Enabled = False '一旦消息来到就停止发车位数据
intDataNum = 0 '超时计数清零
Dim MyArray() As Byte
Dim MyData As Variant
Dim i As Integer
Dim bErrorFlag As Boolean
Static MyArrays(128) As Byte
Static lngBytNum As Long
MyData = MSComm1.Input
MyArray = MyData
If MyArray(0) = &HAC Then
lngBytNum = 0
txtData.Text = ""
End If
For i = 0 To UBound(MyArray)
MyArrays(lngBytNum) = MyArray(i)
lngBytNum = lngBytNum + 1
txtData.Text = txtData.Text + Format(Hex(MyArray(i)), "00") + " "
Next i
If lngBytNum >= 18 Then
MSComm1.InBufferCount = 0 '清空接收缓冲区
lngBytNum = 0
If MyArrays(1) = MyArrays(2) And MyArrays(1) = &HB4 Then
bErrorFlag = False
For i = 0 To 7
If MyArrays(3 + i * 2) <> MyArrays(4 + i * 2) Then
bErrorFlag = True
End If
Next i
If bErrorFlag = False Then
For i = 0 To 3
NoNum(i).StrNum = Right(Hex(MyArrays(3 + i * 4)), 1) + Hex(MyArrays(5 + i * 4))
Next i
End If
End If
End If