历史上的今天
返回首页

历史上的今天

今天是:2025年04月12日(星期六)

2019年04月12日 | 关于单片机通过串口发送浮点数信息

2019-04-12 来源:eefocus

最近弄一个小东西的时候,需要将AD采集的数据,通过串口发送上位机。由于还得在下位机部分显示出来,所以这个AD采集的数据转换之后发送到串口,比较容易点。但是问题来了,以前的串口,只有从GPS模块接收的信息是浮点类型外。其他的东西,都只是把字符类型或者字符串类型的数据发到串口。 


查阅了一点资料,这里是资料的链接。 


单片机将浮点数从串口发送出去: 

1.http://www.51hei.com/bbs/dpj-31223-1.html 

采用了将浮点数转换为四个字节的数据,放到数组中,发送到串口。 

2.http://blog.sina.com.cn/s/blog_a8576df901011efv.html 


加入了标准输入输出头文件,可以通过对TI标志位的判断,直接对数据进行串口输出。 


同时自己进行了一个测试,觉得第二种方法比第一种方法来的简单。但是第二种多了一个头文件,大概估计了一下,觉得第二种方法生成的hex文件是比第一种大的。当然现在很多存储都是够的。倒也不是什么大问题,不过大家进行方法选择的时候,可以进行一些测试,以免存储不够的情况出现。


下面是我进行测试的代码


#include

#include

#include


#define uchar unsigned char

#define uint unsigned int


float ad_vo=9.0987;

void init()

{

    //设定T1定时器工作方式2, T0定时器工作方式1

    TMOD = 0x21;

    //为T0定时器装入初值

    TH0 = (65536 - 50000) / 256;

    TL0 = (65536 - 50000) % 256;

    //为T1定时器装入初值

    TH1 = 0xfd;

    TL1 = 0xfd;

    //ET1 = 1;  这里不需要开启定时器1中断,因为定时器1工作在方式2,为8位自动重装方式,进入中断也无事可做

    //启动T1定时器

    TR1 = 1;

    //开启定时器0中断

    ET0 = 1;

    //启动定时器0

    //TR0 = 1; TR0的初始化放在主函数的while中,方便检测到串口发送数据后的1s延时,即延时1s从串口发送完数据开始

    //设定串口工作方式

    //11位异步收发,含9位数据,波特率可变,且由定时器1溢出率控制

    SM0 = 1;

    SM1 = 1;

    //容许串口中断

    REN = 1;

    //开启总中断

    EA = 1;

    //开启串口中断

    ES = 1;

}

void delay(uint count)

{

    uint i=0,j=0;

    for(i=count;i>0;i--)

        for(j=110;j>0;j--);

}


void main()

{

    while(1)

    {

      delay(1000);

      init();

      ES=0;

      TI=1;

      printf("%fn",ad_vo);

      printf("nnnn");

      while(!TI);

      TI=0;

      ES=1;

      delay(1000);

    }

}


推荐阅读

史海拾趣

Advanced Interconnections Corp公司的发展小趣事

随着市场竞争的加剧,AIC公司意识到品质是赢得客户信赖的关键。于是,公司加大了对生产过程的管控力度,从原材料采购到生产流程,再到产品检验,都实行了严格的质量控制。同时,AIC公司还建立了完善的售后服务体系,及时响应客户需求,解决产品使用过程中出现的问题。这些举措使AIC公司的产品赢得了客户的广泛好评,进一步巩固了市场地位。

ECLIPTEK公司的发展小趣事

随着公司规模的扩大和订单量的增加,ECLIPTEK面临着越来越大的供应链管理挑战。为了应对这些挑战,公司投入大量资源优化供应链管理,引入先进的供应链管理系统和自动化生产设备。通过提高生产效率和降低生产成本,ECLIPTEK成功地保持了其在市场上的竞争优势。

Gould Ami公司的发展小趣事
检查电路板是否有明显损坏迹象,如烧焦、变形等。使用万用表等工具检测元件是否老化或接触不良,必要时进行更换或修复。
电连(ECT)公司的发展小趣事

ECT在射频连接器领域取得了显著的技术突破。从2006年到2008年,公司开始研发射频同轴连接器,并在2009年实现精密射频同轴连接器的量产,并成功获得专利。这一技术突破为ECT在射频连接器市场赢得了重要地位,也为公司后续的发展奠定了坚实的基础。

Alpha (Taiwan)公司的发展小趣事

Alpha (Taiwan)公司自创立之初,便致力于电子技术的研发与创新。面对日益激烈的市场竞争,公司不断投入资金,引进先进设备,吸引了一批优秀的研发人才。这些人才凭借深厚的专业知识和敏锐的市场洞察力,成功开发出一系列具有竞争力的电子产品,如高性能的芯片、精密的传感器等。这些产品的推出,不仅提升了公司的市场地位,也为公司的快速发展奠定了坚实基础。

Anpec(茂达)公司的发展小趣事

凭借卓越的产品质量和良好的市场口碑,茂达电子在国内电源模拟IC设计领域的地位逐渐提升。公司不仅在国内市场取得了显著的成绩,还积极拓展海外市场,与众多国际知名企业建立了稳定的合作关系。茂达电子的产品广泛应用于计算机、通信和消费者等领域,为全球客户提供了高质量的电源解决方案。

问答坊 | AI 解惑

DSP2812调试札记

>> warning: creating .stack section with default size of 400 (hex) words.    Use             -stack option to change the default size. 现在这个帖子下面记录一下调试的点点滴滴,如 ...…

查看全部问答>

ZT:老外工程师的待遇和工作

1、收入 LW收入一般5~10 万美元每年,居各行中等偏上水平;国内,大家都各有千秋,但相比其它行业,也差不多是中等偏上吧; 2、工作 LW工作很认真负责,工作时间不会从事无关的事情;国内,大家都能做到吗? 3、休息 LW一下班就走的精光,充分 ...…

查看全部问答>

【藏书阁】C 语言精彩编程百例

目录: 第一篇 基础知识篇 实例1 数据类型转换 实例2 转义字符 实例3 关系和逻辑运算 实例4 自增自减 实例5 普通位运算 实例6 位移运算 实例7 字符译码 实例8 指针操作符 实例9 if判断语句 实例10 else-if语句 实例11 嵌 ...…

查看全部问答>

为什么WINCE下mixeropen这个函数老是执行不成功呢

在PC上是可以的,CE下面也是有这个API的,应该怎么用呢? HMIXER hmx; mixerOpen(&hmx, 0, 0, 0, 0); 都是这么调用,编译也通过,但是执行的时候不成功 …

查看全部问答>

【我给xilinx资源中心做贡献】VHDL实现USB2.0控制器设计

VHDL实现USB2.0控制器设计--控制器SSRAM library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity usbf_mem_arb is  --实体声明 generic(SSRAM_HADR:integer:=14); ...…

查看全部问答>

电池管理 bq20Z95

故障:用bq20Z95自制电池管理电路,使用EV2300调试,SMbus无法通迅。此时状态:1、电池管理电路与EV2300连接时,SMBD为3.3V,SMBC为0.7V,打开bq Evaluation Software过程中,2线的电压无任何变化。2、 bq20Z95芯片的REG25、REG33都有正确 ...…

查看全部问答>

基于msp430f149定时器3

#include <msp430x14x.h> void main (void) {   WDTCTL= WDTPW + WDTHOLD; //设置看门狗控制寄存器,关看门狗              /*  unsigned char j;//使用外部高频晶体振荡 ...…

查看全部问答>

Show一下新做好的200MHz的逻辑分析仪

上了STM32、FPGA等高速器件,花了大半年的时间做了采样速度200MHz,最多32通道的逻辑分析仪,继续能干活了,呵呵。 LA200逻辑分析仪性能参数 1. 功能 最高采样频率:200MHz(16通道),100MHz(32通道) 最大存储深度:256K/通道 x 32通道 ...…

查看全部问答>