当前位置:首页 > 单片机 > 单片机
[导读]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 转换的数据, 这样做反而会耗费时间、降低效率。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2022年10月19日 /美通社/ -- 提起医院,总是绕不开"南湘雅、北协和、东齐鲁、西华西、中同济"最著名的五所,其中提到东齐鲁就是始建于1890年,经历三个世纪风雨洗礼的山东大学齐...

关键字: 信息集成 数据中心 ACTIVE 数据存储

串口作为单片机开发的一个常用的外设,应用范围非常广。大部分时候,串口需要接收处理的数据长度是不定的。那么怎么才能判断一帧数据是否结束呢,今天就以STM32单片机为例,介绍几种接收不定长数据的方法。

关键字: 单片机 串口 STM32

(全球TMT2022年9月26日讯)21日,在曼谷举行的华为全联接大会2022期间,华为常务董事、ICT基础设施业务管理委员会主任汪涛发布《迈向智能世界》系列白皮书,华为首席战略架构师党文栓对白皮书核心要点进行了详解。...

关键字: 华为 数据存储 数据中心 AI

泰国曼谷2022年9月23日 /美通社/ -- 21日,在曼谷举行的华为全联接大会2022期间,华为常务董事、ICT基础设施业务管理委员会主任汪涛发布《迈向智能世界》系列白皮书,华为首席战略架构师党文栓对白皮书核心要点进...

关键字: 数据存储 数据中心 数字化 AI

(全球TMT2022年9月22日讯)OneAsia宣布,推出高性能计算解决方案OAsis,并作为香港首个同类解决方案,赋能针对复杂数据的计算能力和模拟计算能力。 OAsis支持客户将按需计费的敏捷性云服...

关键字: ASIA 高性能计算 数据存储 模拟

这是FPGA之旅设计的第十例啦,在上一例中,已经成功驱动了OLED屏幕,本例将结合上一例,以及第四例多bytes串口通信做一个有趣的例程。

关键字: FPGA OLED屏 串口

泰国曼谷2022年9月21日 /美通社/ -- 今日,在曼谷举行的华为全联接大会2022上,华为全面阐述了数据存储产业"以数据为中心"的创新理念,聚焦场景需求为行业场景找技术,推出场景化的存储产品和解...

关键字: 华为 数据存储 数据分析 NAS

其实,存储既是一个微观的概念,也是一个宏观的概念。

关键字: 存储 数据存储

接下来测试烧写功能,本次采用串口和USB烧写方式。使用ISP串口烧写这是51单片机常用的方案,本次测试比较顺利,没有遇到什么问题。但是USB烧写没有测试成功,USB烧写方式不需要任何的驱动和硬件支持,直接将USB线和ST...

关键字: PCB控制板 USB 串口

北京2022年9月13日 /美通社/ -- 近日,由存储联盟、BanTech智库、百易传媒DOIT、浪潮信息联袂举办的"有数·对话"线上直播。本次对话,中国银行数据资产运营中心处长李东亚、中国农业银行研发中...

关键字: 数据存储 数字化 智能化 装机容量

单片机

21600 篇文章

关注

发布文章

编辑精选

技术子站

关闭