打印
[AVR单片机]

vb发送浮点数到单片机的处理

[复制链接]
1258|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
paco_cai|  楼主 | 2014-11-11 20:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
vb发送一个浮点数到单片机中,例如0.1,在vb中将其转换成四个十六进制数再发送(即为0xcd 0xcc 0xcc 0x3d),用串口调试助手接收正常,显示为:
图中勾选“十六进制显示”后得到8个两位数,为什么?

另外,在单片机中,给定一个四个十六进制的数组后通过相关语句也能成功转换成浮点数。我想知道从vb中发来的是连续的四个十六进制数,在单片机中应该怎样处理,将其放入数组中?

QQ截图20141111194925.png (4 KB )

QQ截图20141111194925.png

QQ截图20141111194935.png (4.18 KB )

QQ截图20141111194935.png

相关帖子

沙发
wangch_sh| | 2014-11-12 09:19 | 只看该作者
你是发送的8个字符吧?字符3的ASCII码对应十六进制数0x33,D的ASCII码对应十六进制数0x44.
可以把它放入数组中。

使用特权

评论回复
板凳
ayb_ice| | 2014-11-14 09:38 | 只看该作者
将4个字节强制转换成浮点数就可以了

使用特权

评论回复
地板
paco_cai|  楼主 | 2014-11-15 22:05 | 只看该作者
wangch_sh 发表于 2014-11-12 09:19
你是发送的8个字符吧?字符3的ASCII码对应十六进制数0x33,D的ASCII码对应十六进制数0x44.
可以把它放入数 ...

嗯,发送的是8个两位的十六进制数字,然后我用以下代码,将其转换成ASCII码,通过LCD1602也正常显示出3DCCCCCD等8个字符了:
           if(UCSR0A & (1<<RXC0))
                {
                        data=uart_receive0();       
                        asc=HexToAsc(data);//十六进制转换成ASCII码
                        display1602(0x80+n,a[asc]);n++;//a数组为a[]={"0123456789ABCDEF"}
                }
我现在需要的是把转换得到的3DCCCCCD两两一组,放入数组中,即达到数组[]={0X3D,0XCC,0XCC,0XCD}这种效果,但自己试了好几次,都不成功。请问有什么好方法嘛?

使用特权

评论回复
5
paco_cai|  楼主 | 2014-11-15 22:08 | 只看该作者
ayb_ice 发表于 2014-11-14 09:38
将4个字节强制转换成浮点数就可以了

我有将4个字节转换成浮点数的函数,但前提是我要提供一个{0X3D,0XCC,0XCC,0XCD}这样的数组,我现在得到了3DCCCCCD这几个字符,但将其两两一组放到数组中则不太成功。。

使用特权

评论回复
6
wangch_sh| | 2014-11-15 23:15 | 只看该作者
字符0-9的ASCII码是0x30-0x39,字符A-F的ASCII码是0x41-0x46.
你可以通过这个数大于0x39或者小于等于0x39来判断是0-9还是A-F.
如果是0-9,则减去0x30,得到0-9范围内的数;
如果是A-F,则减去0x40,得到A-F范围内的数。
然后,通过把前面的数左移4为或上后面的数就可以了。

使用特权

评论回复
7
airwill| | 2014-11-16 14:01 | 只看该作者
最简单: 四个16进制数按序放在内存中, 然后强制转换这个地址的数据类型.

使用特权

评论回复
8
paco_cai|  楼主 | 2014-11-16 20:32 | 只看该作者
airwill 发表于 2014-11-16 14:01
最简单: 四个16进制数按序放在内存中, 然后强制转换这个地址的数据类型.

额可能我表达有问题,但我现在就是在想如何得到四个十六进制数,发送过来的是33 44 43 43 43 43 43 44 8个十六进制数,我将其转换成了对应的ASCII码3 D C C C C C D。然后想将其两两一组,放入数组hexbyte中,以下是我的代码:
if(UCSR0A & (1<<RXC0))
{
   data=uart_receive0();
   t++;//t初值为0
if(t==1)
{
   asc=HexToAsc(data);shi=asc*10;
}
if(t==2)
{
   t=0;asc=HexToAsc(data);//十六进制转ASCII码
   sum=shi+asc;
   hexbyte[m]=sum;m++;
}
}       

使用特权

评论回复
9
ayb_ice| | 2014-11-17 11:16 | 只看该作者
paco_cai 发表于 2014-11-15 22:08
我有将4个字节转换成浮点数的函数,但前提是我要提供一个{0X3D,0XCC,0XCC,0XCD}这样的数组,我现在得到了 ...

将3D转换成0x3d,CC转换成0xcc...

使用特权

评论回复
10
paco_cai|  楼主 | 2014-11-23 18:54 | 只看该作者
ayb_ice 发表于 2014-11-17 11:16
将3D转换成0x3d,CC转换成0xcc...

我还是不成功,将3和D变成0X3D,就是将3乘以10然后加上D吧,我通过LCD查看结果,3成功变为30,其他也是,但将其加上个位数时,通过LCD看到的则完全不对。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

62

帖子

1

粉丝