历史上的今天
今天是: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);
}
}
下一篇:C51中的内存单元与位地址
史海拾趣
|
>> warning: creating .stack section with default size of 400 (hex) words. Use -stack option to change the default size. 现在这个帖子下面记录一下调试的点点滴滴,如 ...… 查看全部问答> |
|
1、收入 LW收入一般5~10 万美元每年,居各行中等偏上水平;国内,大家都各有千秋,但相比其它行业,也差不多是中等偏上吧; 2、工作 LW工作很认真负责,工作时间不会从事无关的事情;国内,大家都能做到吗? 3、休息 LW一下班就走的精光,充分 ...… 查看全部问答> |
|
目录: 第一篇 基础知识篇 实例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自制电池管理电路,使用EV2300调试,SMbus无法通迅。此时状态:1、电池管理电路与EV2300连接时,SMBD为3.3V,SMBC为0.7V,打开bq Evaluation Software过程中,2线的电压无任何变化。2、 bq20Z95芯片的REG25、REG33都有正确 ...… 查看全部问答> |
|
#include <msp430x14x.h> void main (void) { WDTCTL= WDTPW + WDTHOLD; //设置看门狗控制寄存器,关看门狗 /* unsigned char j;//使用外部高频晶体振荡 ...… 查看全部问答> |
|
上了STM32、FPGA等高速器件,花了大半年的时间做了采样速度200MHz,最多32通道的逻辑分析仪,继续能干活了,呵呵。 LA200逻辑分析仪性能参数 1. 功能 最高采样频率:200MHz(16通道),100MHz(32通道) 最大存储深度:256K/通道 x 32通道 ...… 查看全部问答> |




