永发信息网

vb做串口通信时,以十六进制发送数据,当数据小于32时接收正确,但大于32时不正确

答案:2  悬赏:60  手机版
解决时间 2021-03-04 04:45
  • 提问者网友:星軌
  • 2021-03-03 12:40
我的上位机用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,求大神指点迷津,谢了
最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-03-03 13:48
Dim uout As Byte
uout = Val(Text1.Text)
Text2.Text = uout
MSComm1.Output = Chr(uout)
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-03-03 14:22
仔细看了你代码,提出以下疑问。   Dim uout As Variant   uout = "&H" & Hex(Val(Text1.Text))这里 uout 实际上是个String吧,是个以16进制字符串。 注意,我说的是16进制字符串,而不是16进制数。   MSComm1.Output = Chr(uout)那这里发送的到底是什么? Chr有一个String?? 事实上Chr的参数应该是Long。 其实,我是这样理解你的意思 1. 获得文本框(Text1.Text)里的值,这个值不大于一个字节的表达范围(大于0且小于256) 2. 将这个值通过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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯