历史上的今天
返回首页

历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2018年09月01日 | 单片机传递浮点数方法

2018-09-01 来源:eefocus

突然用到了用单片机和上位机进行传递浮点数方法是这样的。

1.将浮点数转化为整数,然后传递整数的ascII码形式。

2.进行编码,这个暂时我是这样理解的,比方说a=7.345678这样的浮点数。

可以进行编码  成一个帧数据    帧头 +数据位+ 整数编码+加小数点+小数编码

具体的解码方法是:a/1取整,得到整数7,然后再添加一个小数点编码!(如0x55),然后再用a-7得到小数部分,然后将小数扩大10倍。再取整然后继续进行取整,以此类推将

小数都编码成功。然后发送过去就可以了。

3.第三种方法也是利用内存,不用知到浮点数的具体编码方式,因为在单片机中浮点数占4个字节,就知道这一点就可以了,我们可以采用联合体的方式,

float value=-17.484;
union                            //联合体定义
{
    u8 a[4];
    float b;
}temp;

void  Change_to_byte(void)
{
     temp.b   = value;                //将数据存入联合休中
     array[0] = temp.a[0];        //一个字节一个字节的取出来
     array[1] = temp.a[1];
     array[2] = temp.a[2];
     array[3] = temp.a[3];
}

再用串口把array[0...4]发送出去就可以了,大功告成。

4.收到这种方法的启发,当然我们也可以使用指针来做。

float value=-9.4567;
float *p=&value;
unsigned char *q;
/*******************************************************************************
* 函数名   : main
* 函数描述     : 主函数
* 输入参数      : 无
* 输出结果     : 无
* 返回值        : 无
*******************************************************************************/
int main(void)

int j;


/*设置系统时钟 */
  RCC_Configuration();
/* 设置GPIO端口 */
  GPIO_Configuration();
/* 设置 USART */
USART_Configuration();
q=(unsigned char *)p;
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);
for(j=0;j<4;j++)//发送四个字节,表示一个浮点数
    {
        USART_SendData(USART1,q[j]); 
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);
    } 


推荐阅读

史海拾趣

问答坊 | AI 解惑

降低噪声 与 电磁干扰的一些经验

降低噪声与电磁干扰的一些经验。(1)  能用低速芯片就不用高速的,高速芯片用在关键地方。(2)  可用串一个电阻的办法,降低控制电路上下沿跳变速率。(3)  尽量为继电器等提供某种形式的阻尼。(4)  使用满足 ...…

查看全部问答>

芯片专用散热贴片

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 MAP系列高导热系数软性硅胶导热绝缘垫正被广泛地应用在LED照明,汽车电子、显示器、计算机和电源等电子设备行业。 MAP导热垫主要应用发热器件与散热片及机壳的缝隙填充材料。其材质的柔软 ...…

查看全部问答>

开发板启动后进入一般用户,无法进入root,改怎么办?

请教:我的开发板能正常启动,但是启动后是$,不是#,进入了一个普通用户panws,不知道怎么能到 root用户,su,useradd命令都不能用,我试了好久,问题解决了,是从别人那里拷贝了一个inetd文件, 覆盖了开发板上的/etc/sbin/inetd文件,开发板启 ...…

查看全部问答>

请问一个安装arm-elf-tools-20030314的问题

我在安装的时候,先碰到一个问题是 tail: cannot open `+43\' for reading: No such file or directory 网上搜索了一下,普遍的解决方法是:找到arm-elf-tools-20040427.sh文件的第39行, tail +${SKIP} ${SCRIPT} ¦ gunzip ¦ tar xvf ...…

查看全部问答>

mibcomp使用

vxworks中 如何使用mibcomp编辑命令? 我运行命令行mibcomp -o snmpMib2.c -stub snmpMib2.mib 出现如下错误: exclude error: undefined value referefence \"egp\" 为什么呢? 不知mibcomp命令 是不是这样使用的,初学者,还请指教!…

查看全部问答>

ATmega16使用内部时钟

ATmega16使用内部时钟时,其外围电路是怎样的…

查看全部问答>

MSP430G2333

MSP430G2333哪几个IO具有处理触摸按键的功能?知道的麻烦说下,谢谢…

查看全部问答>

【Nucleo+BLUENRG心得】+ 旋转方块

今天耍了个很好玩的功能,按键控制app中方框的转动,我把代码修改到了每按一次用户键,方块就会X,Y,Z一起转动,很好玩的功能 修改的代码如下 方块转动的图片: …

查看全部问答>

EEWORLD大学堂----TI SimpleLink轻松、快捷的无线解决方案

TI SimpleLink轻松、快捷的无线解决方案:https://training.eeworld.com.cn/course/396…

查看全部问答>