vb做串口通信时,以十六进制发送数据,当数据小于32时接收正确,但大于32时不正确
我的上位机用vb语句写的,就是将text1里的数发出去,用的是十六进制&H形式DimuoutAsVariantuout="&H"&Hex(Val(Text1.Text))...
我的上位机用vb语句写的,就是将text1里的数发出去,用的是十六进制&H形式
Dim uout As Variant
uout = "&H" & Hex(Val(Text1.Text))
Text2.Text = uout
MSComm1.Output = Chr(uout)
单片机部分程序:
if(RI)
{
a=SBUF;
RI=0;
}
P2=a;
我就是简单的接收并显示在P2口上,但问题时,对于0~31部分的数,接收都没问题,当大于31时,数据就会出错,32时本来应该显示0010 0000 ,可是显示的却是0110 0000,多了一个1,求大神指点迷津,谢了 展开
Dim uout As Variant
uout = "&H" & Hex(Val(Text1.Text))
Text2.Text = uout
MSComm1.Output = Chr(uout)
单片机部分程序:
if(RI)
{
a=SBUF;
RI=0;
}
P2=a;
我就是简单的接收并显示在P2口上,但问题时,对于0~31部分的数,接收都没问题,当大于31时,数据就会出错,32时本来应该显示0010 0000 ,可是显示的却是0110 0000,多了一个1,求大神指点迷津,谢了 展开
2个回答
展开全部
仔细看了你代码,提出以下疑问。
Dim uout As Variant
uout = "&H" & Hex(Val(Text1.Text))
这里 uout 实际上是个String吧,是个以16进制字符串。
注意,我说的是16进制字符串,而不是16进制数。
MSComm1.Output = Chr(uout)
那这里发送的到底是什么? Chr有一个String?? 事实上Chr的参数应该是Long。
其实,我是这样理解你的意思
获得文本框(Text1.Text)里的值,这个值不大于一个字节的表达范围(大于0且小于256)
将这个值通过MSComm1发送出去。
如果这个思路是对的,那可以参考以下代码
' 代码中 Buffer 只有一个长度
' 因为这段代码只是为了一次发一个字节
' 变量声明
Dim uOut As Double ' 保存输入的值
Dim Buffer(0) As Byte ' 通讯输出的缓冲
' 获得 Text1.Text 的值
uOut = Val(Text1.Text)
' BYTE(无符号1字节)类型数据的范围检查
If uOut > &HFF Then uOut = &HFF
If uOut < &H00 Then uOut = &H00
' 以VB的16进制格式输出到 Text2
Text2.Text = "&H" & CInt(uOut)
' 将要输出的值写入缓冲
Buffer(0) = Val(Text2.Text)
' 将缓冲中的值写入终端
MSComm1.Output = Buffer
如果你发出去不是一个字节,而需要发送是一个&H开头的字符串。
那参考以下代码:
' 变量声明
Dim uOut As Double ' 保存输入的值
Dim Buffer() As Byte' 通讯输出的缓冲
' 获得 Text1.Text 的值
uOut = Val(Text1.Text)
' 以VB的16进制格式输出到 Text2
Text2.Text = "&H" & CInt(uOut)
' 将要输出的字符串写入缓冲
Buffer = Text2.Text
' 将缓冲中的值写入终端
MSComm1.Output = Buffer
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询