0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将PIC单片机AD转换数据打包

Wildesbeast 来源:21IC 作者:21IC 2020-07-04 11:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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[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。

四、结论

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

该程序的执行时间仅为990us, 相对于数据的传输时间是很小的。在单片机空间小的情况下, 以程序的执行时间来换取单片机的存储空间是值得的。同时又能有效地缩短数据的上传时间, 提高有效数据的传输速率。但是在数据量较少的时候, 比如只有1 个A/D 转换的数据, 这样做反而会耗费时间、降低效率。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663629
  • 寄存器
    +关注

    关注

    31

    文章

    5589

    浏览量

    129073
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1398

    浏览量

    119830
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机用什么封装

    单片机封装是芯片内部电路与外部引脚连接并包裹保护的结构,不仅影响单片机的安装方式、适用场景,还与电路设计的紧凑性、散热性能密切相关。不同封装类型各有特点,适配从简单电路到复杂系统的多样化需求
    的头像 发表于 08-01 13:47 896次阅读

    单片机的储存优点是什么

    场景。深圳市安凯星科技有限公司在单片机应用开发中,充分利用这些储存优点,为拓邦、朗科、安徽龙多等客户打造了高效稳定的解决方案。 1.集成度高,节省硬件空间 单片机程序存储器(ROM)、数据
    的头像 发表于 07-31 10:09 497次阅读

    PIC18F97J60系列数据手册

    PIC单片机是Microchip公司生产的一类单片机,和冯-诺依曼结构不同的哈佛结构,中文手册对于大家来讲可以方便开发
    发表于 07-28 16:37 0次下载

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 477次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 439次阅读

    单片机怎么烧程序

    单片机烧程序是编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控
    的头像 发表于 07-23 11:47 653次阅读

    低功耗单片机各型号的对比及选型参考

    不同品牌、不同系列的低功耗单片机在功耗控制、性能表现、外设配置等方面各有特点,通过低功耗单片机各型号的对比,能帮助开发者更精准地匹配应用需求。本文围绕主流低功耗单片机型号展开对比,并
    的头像 发表于 07-22 18:25 919次阅读

    辉芒微FT61FC23-RB单片机兼容微芯PIC16F676芯片

    在电子技术飞速发展的今天,单片机作为众多电子设备的核心部件,其性能与适用性直接影响着产品的功能与竞争力。辉芒微推出的 FT61FC23-RB 单片机,凭借与微芯 PIC16F676 芯片的高度兼容性
    的头像 发表于 06-24 14:47 557次阅读
    辉芒微FT61FC23-RB<b class='flag-5'>单片机</b>兼容微芯<b class='flag-5'>PIC</b>16F676芯片

    Microchip发布PIC16F17576系列单片机

    对需要快速捕捉瞬态模拟信号的器件而言,在尽可能降低功耗的同时实现快速响应至关重要,尤其在电池供电应用中。为满足这一需求,Microchip Technology Inc.(微芯科技公司)发布PIC16F17576系列单片机(MCU)产品。该系列
    的头像 发表于 04-30 17:26 1768次阅读

    用ADS1258的8个AIN做单输入通道,转换完成以后用STM32单片机读取转换数据,这个转换的代码是怎么写的?

    请教一下用ADS1258的8个AIN做单输入通道,转换完成以后用STM32单片机读取转换数据,这个转换的代码是怎么写的?ADS1258这个
    发表于 02-11 06:28

    什么是单片机的ADC接口

    在嵌入式系统和工业自动化领域,单片机(Microcontroller)作为核心控制单元,承担着数据采集、处理和控制的重要任务。其中,模数转换器(Analog-to-Digital Converter
    的头像 发表于 02-03 11:27 3731次阅读

    AN4121-采用PIC16F单片机进行系统电源控制

    电子发烧友网站提供《AN4121-采用PIC16F单片机进行系统电源控制.pdf》资料免费下载
    发表于 01-21 14:42 0次下载
    AN4121-采用<b class='flag-5'>PIC</b>16F<b class='flag-5'>单片机</b>进行系统电源控制

    AN4873-使用PIC单片机的集成运算放大器测量水中的总溶解固体

    电子发烧友网站提供《AN4873-使用PIC单片机的集成运算放大器测量水中的总溶解固体.pdf》资料免费下载
    发表于 01-21 14:41 1次下载
    AN4873-使用<b class='flag-5'>PIC</b><b class='flag-5'>单片机</b>的集成运算放大器测量水中的总溶解固体

    TB3320-PIC单片机集成模拟外设入门

    电子发烧友网站提供《TB3320-PIC单片机集成模拟外设入门.pdf》资料免费下载
    发表于 01-21 14:01 0次下载
    TB3320-<b class='flag-5'>PIC</b><b class='flag-5'>单片机</b>集成模拟外设入门

    LMP91200使用单片机片上AD进行模数转换,测得的数据跳动很大,这是什么原因?

    使用LMP91200评估板独立使用,使用单片机片上AD进行模数转换,测得的数据跳动很大,这是什么原因
    发表于 12-31 07:31