永发信息网

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

答案:2  悬赏:60  手机版
解决时间 2021-03-04 04:45
我的上位机用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 Byte
uout = Val(Text1.Text)
Text2.Text = uout
MSComm1.Output = Chr(uout)
全部回答
仔细看了你代码,提出以下疑问。   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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
武汉滴滴前两天还好的,这两天怎么听不到单了
经常看到韩剧里面啊西啊西的,是什么意思?
五宫指的是什么
白云山出的金戈好贵啊,两粒九十,五粒二百多
关于吐槽数学课的幽默句子
誉肤堂皮肤修复连锁地址在什么地方,想过去办
怎么才能让她喜欢我
一个小区有24幢楼房,每幢楼有4个单元,每个
工行注册卡
顶上辉煌发型造型设计这个地址在什么地方,我
如何把药品推销给医生让医生给病人用我的药呢
瓷肌无忧无虑净化套多少钱
恒峰茗茶这个地址在什么地方,我要处理点事
java/android的动态变量值传递到另一个类
商业宾馆中餐厅这个地址在什么地方,我要处理
推荐资讯
驾驶证扣分b照怎么处理查询
下列指标中,()指标的经济含义是项目对占用
湛徐高速遂溪县城的入口和出口具体如何走
单方提出离婚需要准备什么材料和手续是怎样..
亲身体验过的人进,怎么减大腿和小腿和双下巴
新车早上起动冒一股蓝烟怎么回事
身份证寄在邮政不去取会一直放着呢
谁给我qq取个名字!要帅!要酷!英文和汉字组合
百姓私房菜馆地址有知道的么?有点事想过去
男生近厂做普工,机械与模具及电子行业哪个最
甲图为秘鲁人口、矿产、河流分布示意图,乙图
庙浜路在哪里啊,我有事要去这个地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?