大地资源网第三页:解锁价值,洞见未来

核心内容摘要

17c白丝:穿越时空的优雅,触及指尖的柔软
纲手179902:解锁医疗新纪元,守护生命健康之光

丁香承认社区的秘密:在那道名为“专业”的围墙背后,究竟藏着什么?

pic单片机作用宽泛对于pic单片机大家已不再像若干年前一样一无所知。

随着对pic单片机的使用大家的pic单片机应用技能逐渐增强、熟练度逐步提高。

但是大家仍会碰到一些pic单片机相关问题。

本文中小编将介绍如何将pic单片机A/D转换数据打包以达到减少空间、提高效率的目的。

如果你对本文内容具有一定兴趣不妨继续往下阅读哦。

引言PIC 单片机A/D 转换后的数据通常需要占用两个8 位宽的RAM 单元, 而PIC 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。

在由单片机和PC 机构成的检测系统中, 通常会由多个单片机采集数据并将经过A/D 转换的数据通过串口送往上位PC 机进行数据处理。

PIC 单片机A/D 转换后的结果大多是8 位或10 位的, 8 位的A/D转换不涉及该问题。

以10 位的数据为例, 在单片机内进行存储时需要占用2 个8 位的字节, 低8 位和高2位分别存储在2 个字节中, 但是用于存储高位数据的8 位宽的RAM 单元中仅有2 位是有效数据。

单片机的存储空间有限, 以单片机为例, RAM 数据存储器按功能分为通用寄存器和特殊功能寄存器两个部分, 除去特殊功能寄存器外, 仅有368 个8 位宽的RAM 单元, 单片机能够存储的数据量很有限。

假设将每次A/D 转换的数据直接存储, 每个数据都要占用2 个字节, 理想状态下也只能存储184 个数据; 假设需要存储100 个A/D 转换的数据, 就要占用200 个字节的单元, 这样的存储方式并未将单片机的存储空间充分利用, 同时, 如果将A/D 转换后的数据通过串口直接上传, 串口就要向上传送200 帧的数据, 有效传输速率比较低, 没有充分利用数据帧中的数据位。

为此,本文提出如下方法将A/D 转换后的数据先进行处理后再存储或上传。

程序设计思路以10 位的A/D 转换为例, 可以将A/D 转换的结果暂存在a[size] 中, 然后把数组a 中的数据一位一位地取出, 把低8 位和高8 位拆开分别存放, 低8 位存放在数组b 中, 高8 位存放在数组c 中, 由于高8 位的数据中只有2 位是有效数据, 我们可以把有效数据取出组合成一个新的数据存放, 当上传数据后再用相反的方法解码, 把数据恢复到原先的状态。

这样对于10 位的A/D 转换来说可以节省3/8 的空间, 需要向上位机传送的数据也会比较少, 数据传输时间仅为原来的5/8。

采用C 语言编写的程序本文采用PIC16F877 单片机进行试验。

其中定义i、h、j、n、m 为int8, a[size] 为int16 的数组, 用于暂存A/D 转换的结果; b[number]、c[number]、d[number] 是int8 的数组。

程序原文如下:void convert (){h j;for ( i 0 ; i size ; i ){b[hi] a[i];c[i] (a[i]

0x03;j ;}m n;for ( i 0 ; i size/4 ; i ){d[mi] (c[4*i]

|c[4*i 1 ];d[mi] (d[mi]

|(c[4*i 2 ]

;d[mi] d[mi]|c[4*i3];n ;}}程序首先利用一个for 循环将A/D 转换后的数据拆开, 将低8 位存放在数组b 中, 高2 位暂时存放在数组c 中。

由于数组c 中的8 位二进制数据都是仅有低2 位是有效数据, 所以第二个for 循环将c[i]、c[i1]、c[i2]、c[i3]中的2 位有效数据取出, 按照由低到高的顺序重新组合成一个8 位的二进制数,放入数组d, 构成一个新的数组。

这样A/D 转换结果由原来用数组a 表示变成了由数组b 表示低8 位、数组d 表示高2 位的状态。

程序中的h、j、n、m 用于记录最后转换的数据存储在数组的位置, 在下一次转换的时候, 数据可以接在上一次的数据后面, n 和j 在主程序中convert ( ) 被调用之前首先被赋值为0。

结论根据以上程序, 我们可以按照类似的方法把12 位的A/D 转化结果进行组合, 将12 位的A/D 转换结果拆成低8 位和高4 位, 再将2 个高4 位重新组合成一个8 位的二进制数存储, 这样对于12 位的A/D 转化结果可以节省1/4 存储空间, 缩短1/4 传输时间。

该程序的执行时间仅为990us, 相对于数据的传输时间是很小的。

在单片机空间小的情况下, 以程序的执行时间来换取单片机的存储空间是值得的。

同时又能有效地缩短数据的上传时间, 提高有效数据的传输速率。

但是在数据量较少的时候, 比如只有1 个A/D 转换的数据, 这样做反而会耗费时间、降低效率。

英语班长乖乖挽起裙子怎么写作文官方正版-英语班长乖乖挽起裙子怎么写作文官方正版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123