历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2020年02月07日 | PIC单片机A/D转换数据存储以及串口效率

2020-02-07 来源:eefocus

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 位是有效数据。


单片机的存储空间有限, 以PIC16F877 单片机为例, 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 转换的数据, 这样做反而会耗费时间、降低效率。

推荐阅读

史海拾趣

Datalinear公司的发展小趣事

在国内市场取得成功后,Datalinear公司开始寻求国际化的发展。公司派遣团队前往欧美等发达国家进行市场调研,并根据当地市场需求进行产品定制。通过不懈的努力,Datalinear公司的产品在海外市场取得了良好的销售业绩,并逐步建立了全球化的销售网络。

Comus_International公司的发展小趣事

在过去几十年里,Comus International通过持续的有机增长和收购增长相结合的方式,实现了公司的快速发展。这种增长策略不仅使公司规模不断扩大,也使其业务范围更加广泛。最终,Comus International成功发展成为一家集团公司,成为电子行业中的佼佼者。

以上就是Comus International在电子行业中的五个发展故事。这些故事充分展示了公司在创新、质量、服务以及市场拓展等方面的卓越表现,也揭示了其能够在竞争激烈的电子行业中脱颖而出的原因。

Axiohm公司的发展小趣事

随着国内市场的饱和,Axiohm公司开始寻求国际化发展。公司制定了详细的国际化战略,先后在亚洲、欧洲和北美设立了分支机构和研发中心。通过与当地企业的合作,Axiohm成功打入多个国际市场,并根据不同地区的需求进行产品定制。这一战略不仅拓宽了公司的销售渠道,还提升了品牌知名度。

Comchip Technology公司的发展小趣事

为了进一步扩大市场份额,Comchip Technology积极开拓国内外市场,与多家知名企业建立了长期稳定的合作关系。同时,公司还加强了与国际同行的交流与合作,引进了先进的技术和管理经验,不断提升自身的竞争力。

Diodes公司的发展小趣事

在竞争激烈的电子行业中,合作共赢是企业发展的重要途径。Diodes公司始终坚持合作共赢的理念,与众多上下游企业建立了紧密的合作关系。例如,在供应链方面,Diodes与多家原材料供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量保障;在销售方面,Diodes与多家分销商建立了战略合作伙伴关系,共同开拓市场、推广产品。这些合作关系不仅为Diodes带来了更多的商业机会和市场份额,也促进了整个产业链的健康发展。

FRIWO公司的发展小趣事

为了更好地服务中国市场和亚太地区的客户,FRIWO在中国深圳设立了生产基地——飞煌德商科技(深圳)有限公司。该生产基地负责开发、生产、加工电源变换器、电源充电器等产品,并承担自产产品及同类商品的批发、佣金代理、进出口及相关配套业务。飞煌德商科技(深圳)有限公司的成立和发展,不仅增强了FRIWO在中国市场的竞争力,也为公司的全球化战略提供了有力支持。通过不断优化生产流程、提升产品质量和服务水平,飞煌德商科技(深圳)有限公司逐渐成为了FRIWO在全球供应链中的重要一环。

问答坊 | AI 解惑

自己写得一个DDS 效果不错!!

自己前段时间学习得时候写得一个DDS   希望大家喜欢!!!!!!!!…

查看全部问答>

现在貌似找工作时都没要求同时得会arm和fpga

如果同时掌握了arm和cpld会不会有所帮助? 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

求ADC0809资料,电路图或小程序

那位大哥有的话发一个到我邮箱行吗?谢谢! sodik@126.com…

查看全部问答>

请教:X 开N次方在硬件上如何实现?

请教:X 开N次方在硬件上如何实现?…

查看全部问答>

NDIS的一点疑问?

我的是一个协议层驱动,有个疑问就是 A.使用CreateService,OpenService,QueryServiceStatus及StartService等一系列API安装起来的驱动 B.使用Inf文件及INetCfg的COM接口安装的驱动 问题是 1.这两种方式有什么不同? 2.为什么A安装后\"本地连接\" ...…

查看全部问答>

当我开辟一个大的数组到外部sram,lcd就不能正常显示了

我现在做图片解码显示,用的是ze的片子,我开辟了的一个大的数组在sram里,请放心这个数组确实在外部,我去过地址查看,0x6800xxx位置,现在的问题是,我如果把这个数组开辟的小一点,比如几百字节,lcd显示正常,开辟大来人比如几百k &n ...…

查看全部问答>

全国电子设计竞赛A题交流群101126312

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 全国电子设计竞赛A题交流群101126312  …

查看全部问答>

初学者求助C54x程序运行结果

请各位大侠帮忙看一下如下三条语句,已知(80H)=20H,(81H)=30H, LD #0,DP LD 80H,16,B ADD 81H,B 运行后B等于多少?这到底是属于绝对地址寻址还是直接寻址啊?谢谢!…

查看全部问答>

想买msp430开发板,坛里有吗?

想买msp430开发板,坛里有吗?谢谢,麻烦贴个网址! 另外建议斑竹开辟一个关于购买开发板的小版块,呵呵!…

查看全部问答>

msp430f5418的DCO最高倍频是多少

msp430f5418的DCO最高倍频多少?能不能倍到40MHz或以上?尝试过没成功…

查看全部问答>