您的位置 首页 电路

削减空间进步功率:PIC单片机A/D转化数据打包

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

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 转化后的数据先进行处理后再存储或上传。

  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 的数组。程序原文如下:

  vo idconvert ()

  {

  h= j;

  for ( i= 0 ; i< size ; i+ + )

  {

  b[h+i]= a[i];

  c[i] = (a[i]>> 8)&0x03;

  j++ ;

  }

  m= n;

  for ( i= 0 ; i< size/4 ; i+ + )

  {

  d[m+i]= (c[4*i]<< 2) |c[4*i+ 1 ];

  d[m+i]= (d[m+i]<< 4) |(c[4*i+ 2 ]<< 2) ;

  d[m+i]= d[m+i]|c[4*i+3];

  n++ ;

  }

  }

  程序首要使用一个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 转化的数据, 这样做反而会消耗时刻、下降功率

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/268031.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部