...比如说你按下一个键S1 在串口接收区能收到1,干货|串口数据传输中的共用体和结构体如何转换?

bczsa6f0

时间 2024年11月16日 预览 7

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V: 152079-09430 ,欢迎咨询串口程序中接收到的数据是哪一个键位,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、...比如说你按下一个键S1在串口接收区能收到1

用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

二、SCON=0x50;//串行口工作在方式1,允许串行接收0x50是确定的嘛??

是确定的。

SCON是单片机串行口控制寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态。字节地址98H,地址位98H~9FH。

SCON寄存器位定义:

其中SM0、SM1是工作方式控制位,REN接收允许控制位。

工作在方式1且允许数据接收,因此SM0、SM1、REN都为1。

则SCON应为01010000,即0x50。

扩展资料:

工作方式(SM0SM1)

1、方式0(SM0SM1:00):串行口的工作方式0为移位寄存器I/O方式,可外接移位寄存器,一扩展I/O口,也可外接同步I/O设备。 

发送操作:当执行一条“MOVSBUF,A”指令时,启动发送操作,由TXD输出移位脉冲,由RXD串行SBUF中的数据。发送完8位数据后自动置TI=1.请求中断。要继续发送时,TI必须有指令清零。 

接收操作:REN是串行口接收允许控制位。REN=0时禁止接收;REN=1时允许接收。当软件将REN置“1”时,即开始从RXD端口以fosc/12波特率输入数据,当接收到8位数据时,将中断标志RI置“1”。再次接收数据之前,必须用软件将RI清0。

2、方式1(SM0SM1:01):串行口为10位通用异步接口。发送或接收一帧数据信息为10位,包括1位起始位“0”、8位数据位、1位停止位“1”。

发送数据:数据从TXD端口输出,当数据写入发送缓冲器SBUF时,就启动发送器发送。发送完一帧数据后,置中断标志TI=1,申请中断,通知CPU可以发送下一个数据了。

接收数据:首先使REN=1(允许接收数据),串行口从RXD接收数据,当采样到1至0跳变时,确认是起始位“0”,就开始接收一帧数据,当接收完一帧数据时,置中断标志RI=1,申请中断,通知CPU从SBUF取走接收到的数据。

3、方式2(SM0SM1:10):串行口为11位异步通信接口。发送或接收一帧信息包括1位起始位“0”、8位数据位、1位可编程位、1位停止位“1”。

发送数据:发送前,先根据通信协议由软件设置TB8为“奇偶校验位”或“数据标识位”,然后将要发送的数据写入SBUF,即能启动发送器。

接收数据:先置REN=1,使串行口为允许接收状态,同时还要将RI清“0”。然后再根据SM2的状态和所接收到的RB8的状态决定此串行口在信息到来后是否置RI=1,并申请中断,通知CPU接收数据。

4、方式3(SM0SM1:11):为波特率可变的11位异步通信方式,除了波特率有所区别之外,其余方式都与方式2相同。

参考资料来源:百度百科-SCON控制寄存器

干货|串口数据传输中的共用体和结构体如何转换?

我们知道,浮点型float数据类型占用4个字节,实际上在内存当中a=0x43678000,只是嵌入式芯片访问a时,知道a是浮点型数据,所以一次性读取4个字节,而且也按照浮点型的数据表示规定,将a转换为十进制的可读数据231.5。

如果我们从串口接收到4个字节数据,如何把这4个字节的数据转换为float型呢?

对于共用体:

f的4个字节和s[4]的4个字节是共用一个区域,如果我们令f=231.5,然后通过监视窗查看s[4]的数值,下面是测试程序:

监视结果如下所示:

我们同样适用结构体做了相同的实验,将数组s[4]=的首地址s[0]强制转换赋值给结构体z,最后打印输出的结果也是231.5这里我们看到原本应该是0x4367_8000的数据实际存储的时候变成了00H80H67H43H,这是因为计算机系统使用了小端存储。

什么是小端存储呢?

我们都知道,对于一个超过一个字节的数据,其在计算机中的存储需要跨越字节。某些机器选择在存储器中按照从最低为有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高为有效字节到到最低为有效字节的顺序存储,前一种存储方式被称为小端存储,后一种方式被称为大端存储。

举个例子,对于十六进制数0x01234567,其字节的存储顺序便依赖于机器,如下:

我们可以通过下面的函数测试是大端存储还是小端存储:

【FUTURE PROGRAMMING COURSE】尊享对接老板

电话+V: 152079-09430

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

串口程序中接收到的数据是哪一个键位
Copyright2023未知推广科技
拨打电话拨打电话
Copyright2023未知推广科技