串口通信——串口助手发送正数/负数(以ascii码的形式发送或者以16进制形式发送),最后展示出发送的数
1. 实验目的
1.串口助手发送一个数(发送的形式是ascii码),最后除以100展示这个数,如发送一个-29987,最后要展示出-299.87。
2.串口助手发送一个数(发送的形式是16进制),最后除以100展示这个数,如发送一个-3,最后要展示出-0.03。
其中串口是USART1,其端口是GPIOA,引脚是PIN9、PIN10,一个用来收数据,一个用来发收据。
2. 实验流程
初始化串口;
编写数据转换函数函数;
编写接收数据中断函数和空闲中断函数。
2.1 初始化串口
2.2 编写数据转换函数函数
在写转换函数之前,先要看这个ASCII码中的0123456789对应的是什么。在空闲中断里面打印接收到的数据,下面是部分代码,详细代码参见2.3。
得到结果如下图所示:
所以我们通过判断接收过来的字节,判断这个值是哪个数字。
先找规律,这里是假设发送的数字是-29987,函数中传入的值一个是数组,一个是数组的总索引值,这里取到的字节首先要减去0X30,得到这个数字是几,然后再乘以10的几次方,2在万位上,需要乘以10000,它的索引值对应的是1,传来的索引总数是6,所以乘的10次方应该是:10的次方数 = 6(总索引值) – 1(2所在的索引值) – 1;9在千位上,需要乘以1000,它的索引值对应的是2,所以乘的10次方应该是:10的次方数 = 6(总索引值) – 2(9所在的索引值) – 1;第二个9在百位上,需要乘以100,它的索引值对应的是3,所以乘的10次方应该是:10的次方数 = 总索引值 – 3(9所在的索引值) – 1;以此类推。
如果是正数的话,假如是29987,2在万位上,需要乘以10000,它的索引值对应的是1,传来的索引总数是5,所以乘的10次方应该是:10的次方数 = 5(总索引值) – 1(2所在的索引值) – 1;9在千位上,需要乘以1000,它的索引值对应的是2,传来的索引总数是5,所以乘的10次方应该是:10的次方数 = 5(总索引值) – 1(2所在的索引值) – 1;以此类推。
数据转换函数函数(发送ASCII的形式的)如下:
数据转换函数函数(发送的是16进制的)如下:
计算机中存放的整型数据都是按补码的形式存放的,负数的补码是其本身绝对值的原码取反再加1。
~本身绝对值 + 1 = 负数;现在求本身绝对值就是:本身绝对值 = ~(负数 – 1);对应下面代码的temp = ~(value – 1);
2.3 编写接收数据中断函数和空闲中断函数
3. 实验结果
以ASCII发送正数和负数如下图所示:
以16进制发送正数和负数如下图所示:
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/94269.html