引言
pic单片机a/d 转换后的数据通常需要占用两个8 位宽的ram 单元, 而pic 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。为此提出一种数据打包的方法, 使得相同的数据量占用较少的存储空间, 并可提高传输效率。
1 程序设计思路
以10 位的a/d 转换为例, 可以将a/d 转换的结果暂存在a[size] 中, 然后把数组a 中的数据一位一位地取出, 把低8 位和高8 位拆开分别存放, 低8 位存放在数组b 中, 高8 位存放在数组c 中, 由于高8 位的数据中只有2 位是有效数据, 我们可以把有效数据取出组合成一个新的数据存放, 当上传数据后再用相反的方法解码, 把数据恢复到原先的状态。这样对于10 位的a/d 转换来说可以节省3/8 的空间, 需要向上位机传送的数据也会比较少, 数据传输时间仅为原来的5/8。
2 采用c 语言编写的程序
本文采用pic16f877单片机进行试验。其中定义i、h、j、n、m 为int8, a[size] 为int16 的数组, 用于暂存a/d 转换的结果; b[number]、c[number]、d[number] 是int8 的数组。程序原文如下:
程序首先利用一个for 循环将a/d 转换后的数据拆开, 将低8 位存放在数组b 中, 高2 位暂时存放在数组c 中。由于数组c 中的8 位二进制数据都是仅有低2 位是有效数据, 所以第二个for 循环将c[i]、c[i+1]、c[i+2]、c[i+3]中的2 位有效数据取出, 按照由低到高的顺序重新组合成一个8 位的二进制数,放入数组d, 构成一个新的数组。这样a/d 转换结果由原来用数组a 表示变成了由数组b 表示低8 位、数组d 表示高2 位的状态。
程序中的h、j、n、m 用于记录最后转换的数据存储在数组的位置, 在下一次转换的时候, 数据可以接在上一次的数据后面, n 和j 在主程序中convert ( ) 被调用之前首先被赋值为0。
3 结论
根据以上程序, 我们可以按照类似的方法把12位的a/d 转化结果进行组合, 将12 位的a/d 转换结果拆成低8 位和高4 位, 再将2 个高4 位重新组合成一个8 位的二进制数存储, 这样对于12 位的a/d 转化结果可以节省1/4 存储空间, 缩短1/4 传输时间。
该程序的执行时间仅为990us, 相对于数据的传输时间是很小的。在单片机空间小的情况下, 以程序的执行时间来换取单片机的存储空间是值得的。同时又能有效地缩短数据的上传时间, 提高有效数据的传输速率。但是在数据量较少的时候, 比如只有1 个a/d 转换的数据, 这样做反而会耗费时间、降低效率。
光耦的工作原理、结构以及应用知识介绍
并联逆变器的含义,电流顺时针流动
华为P20 华为P20 Lite和华为P20 Pro的外观和价格区别在哪里?
西部数据推出OptiNAND磁盘架构设计,开创容量、性能和可靠性的崭新里程碑
SKY POWER SP-275 TS CR-03发动机规格
PIC单片机AD转换数据存储及串口效率
模拟电路的历史及未来的发展趋势
2008美国汽车零配件展AAPEX/美国汽配展/美国汽配展/
智能锁选哪家?十大知名门锁品牌介绍
关于高温氧化锆氧气传感器O2S-FR-T2产品参数
外媒消息:英伟达 GeForce RTX 3080 和 RTX 3070 被取消
三星电子希望超越台积电的计划距离越来越遥远
流量计的动态原理图以及产品特点
NFV和云环境之间有着怎样的差异
电流互感器二次开路的原因和解决办法
基于复杂可编程逻辑器件的VME总线接口逻辑系统的设计
Exposed Pads: A Brief Introduc
光耦在电路中起到什么作用?
多功能一体机的复印分辨率
石油专题——石油测井高温线性电源工艺及特色