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,求大神指点迷津,谢了
展开
 我来答
HotMousE
2013-05-30 · TA获得超过146个赞
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:178万
展开全部

仔细看了你代码,提出以下疑问。

  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
网海1书生
科技发烧友

2013-05-30 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
Dim uout As Byte
uout = Val(Text1.Text)
Text2.Text = uout
MSComm1.Output = Chr(uout)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式