news 2026/6/10 10:44:04

pic单片机效率探讨,打包pic单片机A/D转换数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pic单片机效率探讨,打包pic单片机A/D转换数据

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 转换的数据, 这样做反而会耗费时间、降低效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 8:21:41

[STM32L5] 【STM32L562E_DK开发板】--3.串口打印

本篇讲述串口打印功能。 一.原理与准备 1.开发板套件配有一个PMOD扩展板&#xff0c;上面有串口接线端子CN2.硬件接线如下。 2.由扩展板接到主板上&#xff0c;反向找出串口引脚PC10、PC11&#xff0c;查阅datasheet分别为UART3 TX、RX.如下图红框所示。 3.开发板上使用到了…

作者头像 李华
网站建设 2026/6/7 15:46:11

解锁激光加工密码:功率、频率、脉宽、占空比全解析

引言 激光加工,又被称作镭射加工,是指利用高能量密度的激光束照射材料表面,使材料发生汽化、熔化、颜色变化等现象,从而实现对材料的加工处理 。作为 20 世纪人类的四大发明之一,激光加工已广泛应用于工业、军事、科研和日常生活等众多领域。 由于镭射光束具有高亮度、高…

作者头像 李华
网站建设 2026/5/30 2:48:29

论文:项目团队绩效域

一、项目背景2024年11月&#xff0c;我作为项目经理&#xff0c;参与到由XX市政务服务管理办公室发起的“AI民‘声’地图系统”项目的建设工作中。该项目为期6个月&#xff0c;总预算为206万元&#xff0c;目标是构建一个集数据可视化、智能分析与决策支持功能于一体的民生诉求…

作者头像 李华
网站建设 2026/6/10 9:56:29

本科生必看!千笔写作工具,人气爆表的AI论文写作软件

你是否曾为论文选题发愁&#xff0c;绞尽脑汁却难以下笔&#xff1f;是否在反复修改中感到力不从心&#xff0c;又担心查重率过高&#xff1f;面对繁杂的格式要求和文献检索难题&#xff0c;许多学生都深陷“论文焦虑”。别再独自挣扎&#xff0c;千笔AI——一款专为本科生量身…

作者头像 李华
网站建设 2026/6/10 10:04:11

黑客技术可以学,但千万别乱用!

黑客技术可以学&#xff0c;但千万别乱用&#xff01; 为什么说黑客技术可以学&#xff0c;但是千万不能乱用呢&#xff1f; 黑客都把技术用到哪了&#xff0c;来看看黑客干的事就知道了 黑客技术让你的电脑挖矿&#xff0c;黑掉你的银行卡&#xff0c;都是小咖级别&#xff0…

作者头像 李华
网站建设 2026/6/10 10:00:11

NMEA0183协议入门:格式、原理与应用全解析

目录 一、 初学者基础认知 1. 协议定位与核心作用 2. 协议特点&#xff08;适合初学者理解&#xff09; 3. 标准通信参数 二、 协议核心&#xff1a;帧格式详解 1. 起始符&#xff1a;$ 2. 地址域&#xff1a;aaXXX 3. 数据域&#xff1a;data1,data2,...,dataN 4. 校…

作者头像 李华