在串口通信时 如何以16进制发送数据啊!

bkm2000 2007-11-22 09:47:57
在串口通信时 如何以16进制发送数据啊!
为什么我只能发送字符呢

例如 我发送端输入 1 接收的是 31

应该如何设置啊!!
...全文
718 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
rainy0214 2007-11-23
  • 打赏
  • 举报
回复
MSComm1.InputMode = comInputModeBinary '采用二进制接收
,如果你发送的数据为“1”,在接收到的数据进行处理“hex(asc(1))=31”去试试吧
zdingyun 2007-11-23
  • 打赏
  • 举报
回复
这是在TxtSend文本框写16进制命令发送的代码:

Private Sub cmdSend_Click()
Dim sj() As Byte
Dim sj_Txt As String
Dim i As Integer
sj_Txt = TxtSend
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
If MSComm1.PortOpen = True Then
MSComm1.Output = sj
Else
MSComm1.PortOpen = True
MSComm1.Output = sj
End If
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1 '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 '打开端口
TxtSend = ""
End Sub
candy110 2007-11-23
  • 打赏
  • 举报
回复

控件:command1,text1,MSComm1
//发送
Private Sub Command1_Click()
Dim strBuffer As String
Dim a As String
Dim Send_Chr(13) As Byte

With MSComm1
strBuffer = Trim(txet1.Text)//text里面输入的数字是没有空格的,如果有,改变下面的FOR循环
For i = 0 To Len(strBuffer) - 1 Step 2
a = Mid(strBuffer, i + 1, 2)
Send_Chr(i / 2) = "&H" & a
Next
.Output = Send_Chr
End With
End Sub

//接收,可以用MSComm1_OnComm,不过这个不是很稳定.
//下面用的是TIMER循环接收,代码都一样
Dim ReceivedLen As Integer
Dim av As Variant
Dim ab(1024)
With MSComm1
If .InBufferCount > 0 Then
ReceivedLen = .InBufferCount

''ReDim ab(ReceivedLen + 1)
For i = 1 To ReceivedLen
av = .Input
ab(i) = av(0)

Text2.Text = Text2.Text & vbNewLine & "ab(" & i & "): " & Hex(ab(i))
Text2.SelStart = Len(Text1.Text)
Next
end if
以上都是我以前写的一个串口通讯工具里面拿出来的.没有单独调试.大概就是这样.
candy110 2007-11-23
  • 打赏
  • 举报
回复
一楼给你的就是固定输出的.
你要输出什么数据要自己改Data1(i)里面的值.
还有接收到数据以后怎么显示也要自己写.
bkm2000 2007-11-23
  • 打赏
  • 举报
回复
1楼 你这段代码我试了下 不行啊

现在无论我输入什么数据 接收到的都是18191A1B1C1D1E49呀

麻烦您再帮我看下!!谢谢啊!!
zdingyun 2007-11-23
  • 打赏
  • 举报
回复

Private Sub Form_Load()
'设置端口
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1 "
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
End Sub

Private Sub Command1_Click()
Dim Data1(31) As Byte
MSComm1.InputLen = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
For i = 0 To 30
Data1(i) = Val("&H" & Hex(i))
Next
Data1(31) = &H49
MSComm1.Output = Data1
End Sub

864

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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