串口 接收端_嵌入式系统串口传输int float型数据的处理

在做嵌入式系统通信时往往会用到串口,包括嵌入式系统将数据传输给PC,或者是嵌入式系统之间进行数据传输,这时候就会遇到发送数据的问题。

我们知道单片机通过串口发送数据时往往是一次一个字节(8位),如果传输char(8位)型数据则很好办,只需要直接发送就可以了,但是在发送int型数据和float型数据时就会稍微有些复杂。

下面就以常用的8位单片机89c51为例来进行说明。

当发送int型或long型数据时比较简单,一个int型数据是16位,long是32位,把int型/long型数据变成2/4个char型数据发送出去就可以了,程序如下

void long_char(unsigned long l,unsigned char *s)

*s = l>>24;

*(s+1) = l>>16;

*(s+2) = l>>8;

*(s+3) = l;

在串口助手上就可以接收到相应的long型数据了。

当发送float型数据时稍微有些复杂。首先简单介绍下float型数据在内存中的存储方式:

float遵从的是IEEE R32.24 在存储中都分为三个部分:

1.符号位(Sign) : 0代表正,1代表为负

2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储

3.尾数部分(Mantissa):尾数部分

如下图所示:

以8.25和120.5这两个数字来举例:

8.25用二进制表示为:1000.01。1000.01可以表示为1.00001*23

120.5用二进制表示为:1110110.1。1110110.1可以表示为1.1101101*26

十进制小数点转换成二进制,可以上网查一下相关资料,“小数转二进制”,不在本篇讨论的范围内。

下面就看看8.25和120.5在内存中真正的存储方式。

8.25,用二进制的科学计数法表示为: 1.00001*23

120.5,用二进制的科学计数法表示为: 1.1101101*26

介绍完了float型数据在内存中的存储方式,能够知道如何发送float型数据了:直接按照int型类似的发送肯定是不行的,这就需要采用指针的方法(在keil中数据的排放格式是大端模式):

void float_char(float f,unsigned char *s)

unsigned char *p;

p = (unsigned char *)&f;

*s = *p;

*(s+1) = *(p+1);

*(s+2) = *(p+2);

*(s+3) = *(p+3);

通过这种方法把数组s发送出去,在接受端接受到的就是标准的IEEE754结构的原始数据,也就是float型数据在内存中存放的值,这种方法比较简单明了,这时候的串口接收端可以用现成的,不需要自己编写。

还可以采用共用体的方法,如果采用共用体时串口的接收端软件需要自己编写:

我们知道共用体可以使不同的数据类型来共享相同的地址空间,所以程序如下:

void float_char(float f,unsigned char *s)

union change

float d;

unsigned char dat[4];

}r1;

r1.d = f;

*s = r1.dat[0];

*(s+1) = r1.dat[1];

*(s+2) = r1.dat[2];

*(s+3) = r1.dat[3];

接收端采用同样的程序编写就可以得到float型数据的值了,不再需要其他的转换。

类似的,传输long型或int型时也可以采用共用体的方法:

void long_char(unsigned long l,unsigned char *s)

union change

long d;

unsigned char dat[4];

}r1;

r1.d = l;

*s = r1.dat[0];

*(s+1) = r1.dat[1];

*(s+2) = r1.dat[2];

*(s+3) = r1.dat[3];

以上就是串口通信中传输int/float型数据的方式了,有什么疑问一起讨论。

电视遥控器无法操作音响系统的音量

通过HDMI线缆连接兼容HDMI控制功能的电视机,在您观看电视机节目时,可以通过电视机遥控器调节音响系统的音量。此功能仅对兼容HDMI 控制功能的设备有效,如果连接在非Sony生产的设备上使用,其操作不予保证。

如您无法通过电视机遥控器调节音响系统的音量,请按如下步骤进行排查:

注意:以下每一步均为一个解决方案,请在每一步操作完成后都进行确认问题是否已解决。

确保音响系统和电视机的[HDMI控制]功能均已开启。 注意:型号/系统版本不同,菜单名称和设置步骤可能有所差异。具体信息请参考产品的说明书:如何查询产品的说明书?

HT-S2000:在智能手机上安装并打开应用程序“Sony | Home Entertainment Connect” ,点击应用程序的遥控器画面上的[设置] - [HDMI设置] - [HDMI控制],将其设定为[开] 。HT-A9/HT-A5000/HT-A3000:按音响遥控器上的HOME键。选择 [设置] - [高级设定] - [HDMI设定] - [HDMI控制]设定为[开] 。机型HT-S100F/S200F/X8500:

1. 按音响的遥控器上的“VOICE”键持续5秒,将开启HDMI 控制功能。

2. HDMI 控制功能已开启时,机型HT-S100F/S200F的USB指示灯会闪烁2次,机型HT-X8500的HDMI和BLUETOOTH指示灯会闪烁。

以安卓10及更高系统机型为例:按电视机遥控器上的

(快速设置)按钮,然后选择[设置] — [频道 & 输入] — [外部输入] — [RAVIA Sync 设定B] — [BRAVIA Sync 控制]设定为[开] 。

重启音响系统和电视机。按电源键将设备关机,再拔下电源插头断电约约2分钟,再重新通电开机。

将音响系统的系统软件更新至最新版本。您的设备已是最新系统,请略过此步。更新软件的步骤请参考产品的说明书:如何查询产品的说明书?

重新连接音响系统和电视机。将连接音响系统和电视机的HDMI线的两端拔下,重新将HDMI线牢固的插入到音响系统和电视机的HDMI端口。

断开其他外接设备(如有)。将音响系统和电视机上的所连接的其他设备断不能开,排除其他设备的干扰。

将音响系统复位,将电视机恢复出厂设置。然后重新开启设备的[HDMI控制]功能。

如经过上述所有步骤排查后,问题仍不能解决,则需要索尼特约维修站进行判断。您可点击预约维修站上门服务自助预约上门服务。

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://news.xiuzhanwang.com/post/2007.html

友情链接: