Private Sub cmdSend_Click() Dim sj() As Byte Dim sj_txt As String Dim i As Integer sj_txt = "00FF" '发送16进制两字节数据 Text1 = sj_txt ReDim sj(Len(sj_txt) / 2 - 1) For i = 0 To Len(sj_txt) - 1 Step 2 sj(i / 2) = Val("&H" & Mid(sj_txt, i + 1, 2)) Next MSComm1.Output = sj End SubPrivate Sub Form_Load() Dim port As Integer port = 1 MSComm1.CommPort = port 'COM端口 MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1.InBufferCount = 0 '清空接受缓冲区 MSComm1.OutBufferCount = 0 '清空传输缓冲区 MSComm1.RThreshold = 1 '产生MSComm事件 MSComm1.InBufferSize = 1024 MSComm1.PortOpen = True End Sub
2个字节的话 直接发送 integer 类型的数据也可以 dim s as string,data2 as integer s="10FF" '假设要发送数据10FF 注意这里 低位是 FF 也就是先会发送FF后10 data2=val(s) MSComm1.Output = data2
data2=val(s) ==> data2=val("&H" & s)
To:ayalicer 你的代码在VB运行出错,应使用API函数实现:Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Command2_Click() '发送Integer类型数据 Dim s As String Dim Data2 As Integer Dim Buffer(1) As Byte s = "10FF" '假设要发送数据10FF,注意这里低位是FF,也就是先会发送FF后发10 Data2 = Val("&H" & s) CopyMemory Buffer(0), Data2, 2 MSComm1.Output = Buffer End SubPrivate Sub Form_Load() Dim port As Integer port = 1 MSComm1.CommPort = port 'COM端口 MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1.InBufferCount = 0 '清空接受缓冲区 MSComm1.OutBufferCount = 0 '清空传输缓冲区 MSComm1.RThreshold = 1 '产生MSComm事件 MSComm1.InBufferSize = 1024 MSComm1.PortOpen = True End Sub
谢谢LS的更正 试了下 只能发送byte数组或者 字符串一般情况用byte数组比较直接吧
zdingyun 兄: 我按你的方法改了一下: Dim s As String Dim Data2 As Integer Dim Buffer(1) As Byte Dim ii As Long ii = 65534 s = Hex(ii) '假设要发送数据10FF,注意这里低位是FF,也就是先会发送FF后发10 MsgBox "s=" & s, vbDefaultButton1 Data2 = Val("&H" & s) MsgBox "Data2=" & Data2, vbDefaultButton1 CopyMemory Buffer(0), Data2, 2 MsgBox Buffer(0), vbDefaultButton1 MsgBox Buffer(1), vbDefaultButton1 'MSComm1.Output = Buffer 在msgbox里顺序显示的结果:s=FFFE,Data2=-2,254,255 由于暂时没有单片机调试,我不敢保证其是不是正确的。 所以我想问一下,这样的结果,如果传到单片机里,还会不会是FFFE?(本人菜鸟一个,望指教!谢谢)
没有错的 FFFE 用integer表示就是-2 分开单独表示成2个byte 就是 FE ,FF 254,255
各位,能不能帮我看看下面的程序? 我怎么看,也看不懂。 其功能是实现PC传输一个或者两个字节到单片机里(传输的是时钟号,如果大于768就不行了)Dim mydata2(1 To 1) As Byte Dim buffer2 As Variant Dim ii, i As Integer i = 768 mydata2(1) = 254 Select Case i Case 1 To 96 mydata2(1) = 254 Case 97 To 192 mydata2(1) = 253 Case 193 To 288 mydata2(1) = 251 Case 289 To 384 mydata2(1) = 247 Case 385 To 480 mydata2(1) = 239 Case 481 To 576 mydata2(1) = 223 Case 577 To 672 mydata2(1) = 191 Case 673 To 768 mydata2(1) = 127 End Select ii = mydata2(1) buffer2 = mydata2() 'Comm2.Output = buffer2 MsgBox mydata2(1), vbDefaultButton1 mydata2(1) = CByte((i - 1) Mod 96 + 128) buffer2 = mydata2() MsgBox mydata2(1), vbDefaultButton1 Comm2.Output = buffer2
你代码中的如下一大段代码是无用的 mydata2(1) = 254 Select Case i Case 1 To 96 mydata2(1) = 254 Case 97 To 192 mydata2(1) = 253 Case 193 To 288 mydata2(1) = 251 Case 289 To 384 mydata2(1) = 247 Case 385 To 480 mydata2(1) = 239 Case 481 To 576 mydata2(1) = 223 Case 577 To 672 mydata2(1) = 191 Case 673 To 768 mydata2(1) = 127 End Select ii = mydata2(1) buffer2 = mydata2()现将代码修改,未发现大于768就不行:Private Sub Command1_Click() Dim mydata2(1 To 1) As Byte Dim buffer2 As Variant Dim ii As Integer, i As Integer i = Val(Text1) '768 'Comm2.Output = buffer2 'MsgBox mydata2(1), vbDefaultButton1 mydata2(1) = CByte((i - 1) Mod 96 + 128) buffer2 = mydata2() 'MsgBox mydata2(1), vbDefaultButton1 MSComm1.Output = buffer2 End SubPrivate Sub Form_Load() Text1 = "" MSComm1.PortOpen = True End Sub
Private Sub cmdSend_Click()
Dim sj() As Byte
Dim sj_txt As String
Dim i As Integer
sj_txt = "00FF" '发送16进制两字节数据
Text1 = sj_txt
ReDim sj(Len(sj_txt) / 2 - 1)
For i = 0 To Len(sj_txt) - 1 Step 2
sj(i / 2) = Val("&H" & Mid(sj_txt, i + 1, 2))
Next
MSComm1.Output = sj
End SubPrivate Sub Form_Load()
Dim port As Integer
port = 1
MSComm1.CommPort = port 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End Sub
dim s as string,data2 as integer
s="10FF" '假设要发送数据10FF 注意这里 低位是 FF 也就是先会发送FF后10
data2=val(s)
MSComm1.Output = data2
==>
data2=val("&H" & s)
你的代码在VB运行出错,应使用API函数实现:Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Command2_Click() '发送Integer类型数据
Dim s As String
Dim Data2 As Integer
Dim Buffer(1) As Byte
s = "10FF" '假设要发送数据10FF,注意这里低位是FF,也就是先会发送FF后发10
Data2 = Val("&H" & s)
CopyMemory Buffer(0), Data2, 2
MSComm1.Output = Buffer
End SubPrivate Sub Form_Load()
Dim port As Integer
port = 1
MSComm1.CommPort = port 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End Sub
Dim s As String
Dim Data2 As Integer
Dim Buffer(1) As Byte
Dim ii As Long
ii = 65534 s = Hex(ii) '假设要发送数据10FF,注意这里低位是FF,也就是先会发送FF后发10
MsgBox "s=" & s, vbDefaultButton1
Data2 = Val("&H" & s)
MsgBox "Data2=" & Data2, vbDefaultButton1
CopyMemory Buffer(0), Data2, 2
MsgBox Buffer(0), vbDefaultButton1
MsgBox Buffer(1), vbDefaultButton1
'MSComm1.Output = Buffer
在msgbox里顺序显示的结果:s=FFFE,Data2=-2,254,255
由于暂时没有单片机调试,我不敢保证其是不是正确的。
所以我想问一下,这样的结果,如果传到单片机里,还会不会是FFFE?(本人菜鸟一个,望指教!谢谢)
FFFE 用integer表示就是-2
分开单独表示成2个byte 就是
FE ,FF
254,255
想不出问题所在……
我怎么看,也看不懂。
其功能是实现PC传输一个或者两个字节到单片机里(传输的是时钟号,如果大于768就不行了)Dim mydata2(1 To 1) As Byte
Dim buffer2 As Variant
Dim ii, i As Integer
i = 768
mydata2(1) = 254
Select Case i
Case 1 To 96
mydata2(1) = 254
Case 97 To 192
mydata2(1) = 253
Case 193 To 288
mydata2(1) = 251
Case 289 To 384
mydata2(1) = 247
Case 385 To 480
mydata2(1) = 239
Case 481 To 576
mydata2(1) = 223
Case 577 To 672
mydata2(1) = 191
Case 673 To 768
mydata2(1) = 127
End Select
ii = mydata2(1)
buffer2 = mydata2()
'Comm2.Output = buffer2
MsgBox mydata2(1), vbDefaultButton1
mydata2(1) = CByte((i - 1) Mod 96 + 128)
buffer2 = mydata2()
MsgBox mydata2(1), vbDefaultButton1
Comm2.Output = buffer2
Select Case i
Case 1 To 96
mydata2(1) = 254
Case 97 To 192
mydata2(1) = 253
Case 193 To 288
mydata2(1) = 251
Case 289 To 384
mydata2(1) = 247
Case 385 To 480
mydata2(1) = 239
Case 481 To 576
mydata2(1) = 223
Case 577 To 672
mydata2(1) = 191
Case 673 To 768
mydata2(1) = 127
End Select
ii = mydata2(1)
buffer2 = mydata2()现将代码修改,未发现大于768就不行:Private Sub Command1_Click()
Dim mydata2(1 To 1) As Byte
Dim buffer2 As Variant
Dim ii As Integer, i As Integer
i = Val(Text1) '768
'Comm2.Output = buffer2
'MsgBox mydata2(1), vbDefaultButton1
mydata2(1) = CByte((i - 1) Mod 96 + 128)
buffer2 = mydata2()
'MsgBox mydata2(1), vbDefaultButton1
MSComm1.Output = buffer2
End SubPrivate Sub Form_Load()
Text1 = ""
MSComm1.PortOpen = True
End Sub