PIC单片机AD转换数据存储及串口
PIC24系列单片机原理与开发 第6章 AD转换器及编程

R/W -0
U-0
U-0
R/W-0
U-0
U-0
VCFG<2:0>
未用
未用
CSCNA
未用
未用
bit 15
bit 8
R -0
BUFS bit 7
U-0 未用
R/W -0
R/W -0
R/W -0
SMPI<3:0>
R/W-0
R/W -0 BUFM
R/W -0 ALTS bit 0
其中: U=未用(读为0),R=可读, W=可写,-n =上电复位值
逐次逼近型(SAR)A/D 转换,转换位数或分辨率为 10 位,转换速度最高可达 500 ksps; 最多可有 16 路模拟输入通道,由多路模拟开关切换; 有采样/保持电路(S/H); 具有外部参考电压输入引脚; 有自动通道扫描转换模式; 有多种转换触发源供用户编程选择; 16 个转换结果缓冲器,4 种数据存储格式; 可在 CPU 休眠和空闲模式下工作。
采样完成后,应启动 A/D 转换。PIC24F 提供有 4 种启动 A/D 转换的方式,由位域 SSRC<2:0>的赋值确定。对于自动转换方式(SSRC<2:0>=“111”),采样时间由寄存器 AD1CON3 中的设置值(1~31 个 A/D 的时钟周期 TAD)所确定,采样完毕硬件自动启动 A/D 转换。另 外 3 种结束采样且启动 A/D 转换的方式为:定时器 Timer3 发生匹配时、INT0 引脚产生有 效电平和清零 SAMP 位。对于它们的编程将在下面的应用例程中给予进一步说明 。
PIC单片机 串口通信程序

TXREG=RCREG; //把接收到的数据发送回去
}
}
#include<pic.h> //包含单片机内部资源预定义
__CONFIG(0xFF32);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
/****************************************************************************
TRISC=0XFF; //设置C口方向全为输出
SPBRG=0XC; //设置波特率为119200BPS
TXSTA=0X24; //使能串口发送,选择高速波特率
RCSTA=0X90; //使能串口工作,连功 能:主函数
* 入口参数:无
* 出口参数:无
* 说 明:无
****************************************************************************/
void main()
{
要判断中断源标志
****************************************************************************/
void interrupt usart(void)
{
if(RCIE&&RCIF) //判断是否为串口接收中断
RCIE=0X1; //使能接收中断
GIE=0X1; //开放全局中断
PEIE=0X1; //使能外部中断
while(1) //等待中断
/***************************************************************************************************
PIC单片机的AD和DA技术

§7.3 D/A转换技术
• D/A转换器(数模转换器)是把数字量转换成与之成一
定比例的模拟量的线性电路器件。
• 衡量一个D/A转换器的性能的主要参数有:分辨率、转
换时间、精度和线性度等。
• 主要朝着高精度、高速度、高可靠性和低功耗等方面
发展。
• 按分辨率分有八位、十位、十二位、十四位、十六位
几种;按接口形式分有串行与并行的;按芯片集成组 分有单路、双路、四路、八路。主要的厂家有AD公司、 MAXIM公司、TI公司、Linear Technology公司、 Intersil公司、Xicor公司、Cirrus公司等。
– 转换数据可以在SCLK脉冲串的作用下从DOUT 引脚逐位输出,数据输出的顺序为先高位后低 位。
• 在SCLK的下降沿,DOUT输出数据,在
SCLK的上升沿,数据稳定。
• 在SCLK信号为高电平期间单片机从DOUT引
脚上读数据。需要13个时钟脉冲下降沿来 传送12位数据元和一个导引位。
4 应用实例
• 旁路电容选择
– 推荐最低值是0.1μF. 如果基准的输出阻抗值较高 或是内含纹波等噪声,则紧靠于引脚REF旁安装 一个的旁路电容。
3 MAX187时序
• MAX187的接口时序
3 MAX187时序(续1)
• Max187转换和读数据操作由/CS和SCLK引
脚的数字输入信号控制。
• /CS的下降沿触发转换序列:
• ⑧等待A/D转换完成,读取转换结果
– 当启动A/D转换后,ADCON0<2>会一直保持高 电平,到转换结束自动跳到低电平。通过检测 这一位,判断A/D的转换状态。转换结束后可 以直接读取结果。
例片内RA0通道A/D转换
PIC24系列单片机原理与开发第6章AD转换器及编程

PIC24系列单片机原理与开发第6章AD转换器及编程AD转换器是一种用于将模拟信号转换为数字量的设备,它的主要用途是将模拟量转换为可用于数字控制系统的数字信号。
PIC24系列单片机内置了多路/低速模拟输入AD转换器,可以实现对模拟量的采集、处理和控制。
AD转换器的编程十分复杂,需要明确程序对模拟量的要求,包括采样率、量程、精度等,还需要根据PIC24系列单片机的资源情况,合理配置AD转换器的参数,以便实现模拟量的有效读取。
1)可以多路采样:多路采样可以提高采样精度,在故障时可以减少恢复时间,还可以提高采样率。
2)采样率:根据实际应用需要,调整单片机的时钟频率,来达到最佳的采样率。
3)精度范围:根据实际应用需要,调整AD转换器的精度范围,以保证采集到的数据和处理能力的均衡使用。
4)通道选择:根据实际应用,选择多路采样中的其中一路,来使用最佳的采样精度。
单片机ad转换原理

单片机ad转换原理单片机AD转换原理。
单片机(Microcontroller)是一种集成了微处理器、存储器和各种输入输出设备的微型计算机系统。
在很多电子设备中,单片机都扮演着至关重要的角色。
而AD转换(Analog to Digital Conversion)则是单片机中非常重要的功能之一,它可以将模拟信号转换为数字信号,使得单片机可以对外部的模拟信号进行采集和处理。
本文将介绍单片机AD转换的原理及相关知识。
AD转换的原理是利用单片机内部的模数转换器(ADC)来实现的。
模数转换器是一种将模拟信号转换为数字信号的电路,它可以将模拟信号的大小转换为相应的数字值。
在单片机中,模数转换器可以通过一定的采样和量化过程,将模拟信号转换为数字信号,并输出到单片机的数据总线上,以便单片机进行进一步的处理。
在进行AD转换时,首先需要对模拟信号进行采样。
采样是指在一定时间间隔内对模拟信号进行取样,获取其大小。
这样可以将连续的模拟信号转换为离散的信号。
然后,对采样后的信号进行量化。
量化是指将连续的模拟信号转换为一系列离散的数字值。
在单片机中,量化通常是按照一定的精度和分辨率进行的,精度越高,分辨率越大,转换后的数字值越接近原模拟信号的真实数值。
单片机中的ADC模块通常由输入端、采样保持电路、比较器、计数器、数字转换器和控制逻辑等部分组成。
当单片机需要进行AD转换时,首先需要将模拟信号输入到ADC的输入端,然后ADC会对输入信号进行采样和量化,最终输出转换后的数字信号。
在这个过程中,ADC的控制逻辑会根据预设的转换精度和采样频率等参数,控制ADC的工作状态,以保证转换的准确性和稳定性。
在实际应用中,单片机的AD转换功能被广泛应用于各种测控系统、仪器仪表、传感器等领域。
通过AD转换,单片机可以对外部的模拟信号进行采集和处理,实现数据的数字化和处理,为系统的控制和监测提供了重要的支持。
同时,单片机的AD转换功能也为各种信号处理算法和数字信号处理提供了基础,为系统的功能和性能提升提供了可能。
pic单片机自学手记之adc采样采集模数转换

//ADC采样实验//#include <pic.h>#define uchar unsigned char#define uint unsigned intuchar LED_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//不带小数点的字型码uchar LED_CODE1[]={0x40,0x79,0x24,0x30,0x19,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//带小数点的字型码void delay(uchar x);void init();void display(uchar num1,uchar num2,uchar num3,uchar num4);void beep();uint get_ad()//整型带返回值子函数{uint adval,ad;//定义两个无符号整型变量ADGO=1;//启动AD转换//while(ADGO);//查询AD转换是否完成,此行可以不用,程序一样运行正常//if(ADGO==1);//可以采用while查询也可以用if查询AD转换是否完成,此行一样可以不要//adval=ADRESH;//注释此行可以不要adval=ADRESH<<8|ADRESL;//ADRESH高8位数据左移8位,然后再与ADRESL低8位数据相加ad=adval*41;//这里的41是VDD电压,adval的值在0-1023之间,假设adval当前数字量是800,那么800*41=32800adval=ad/10;//因为我的是4位数码显示,将得到的32800除以10以后给数码管显示当前电压值即:3280(3.28V)return(adval); //返回adval值给主程序调用的地方}void main(){init();//程序初始化uint tempad;//定义临时整型变量uchar s1,s2,s3,s4;//定义4个无符号字符型变量while(1){tempad=get_ad();//调用ad子程序s1=tempad/1000;//将得到的值3280除以1000取商丢去余数,所以s1的值是3(即千位)s2=tempad%1000/100;//3280除1000求余280再除以100取商,所以s2的值是2(取百位)s3=tempad%100/10;//3280除100求余80再除以10取商,所以s3的值是8(取十位)s4=tempad%10;//3280除10求余,余数是0(取个位)display(s1,s2,s3,s4); //给数码管分别显示四位值/////以下是判断ad采样的电压是否大于4v,大于或等于4v时led等亮///// if(s1>=4)//判断千位值{RA5=0;}/////////////~~~~~~~~~~~~~~~~~~~~~~~~~~///////////////////////////////////}}void init(){TRISA=0x01;//RA0设置为输入AN0(AD采集端口)TRISD=0;//D端口全部设置成输出PORTA=0x01;PORTD=0xFF;TRISE=0;PORTE=0;ADCON0=0x41;ADCON1=0x8e;delay(1);//延时5ms稳定AD采用}void display(uchar num1,uchar num2,uchar num3,uchar num4){PORTD=LED_CODE[num4];//数码管个位显示值PORTA=0xfd;//1111 1101 开数码管个位位选delay(1);PORTD=LED_CODE[num3];//数码管十位显示值PORTA=0xfb;//1111 1011delay(1);PORTD=LED_CODE[num2];//数码管百位显示值PORTA=0xf7;//1111 0111delay(1);PORTD=LED_CODE1[num1];//数码管千位显示值(这个值是带小数点的)PORTA=0xef;delay(1);}void delay(uchar x)//5ms延时子函数{uint y,k;for(y=0;y<x;y++)for(k=0;k<200;k++);}void beep(){RE1=0;delay(20);RE1=1;delay(20);}教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。
PIC单片机ADC程序

//实验目的:熟悉A/D转换//软件思路:选择RA0做为模拟输入通道;// 结果只取低8位// 连续转换5次再求平均值做为转换结果// 结果送数码管的高低3位显示//硬件要求:跳线J18接通// 拨码开关S6全部置ON,S5第4-6位置ON,第1-3位置OFF// 为不影响结果,其他拨码开关置OFF。
#include<pic.h> //包含单片机内部资源预定义__CONFIG(0x1832);//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡const char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};//定义常数0-9的数据表格void DELAY(); //delay函数申明void init(); //I/O口初始化函数申明void display(int x); //显示函数申明//------------------------------------------------//主程序开始void main(){int result=0x00; //定义转换结果寄存器while(1) //死循环{int i; //定义循环次数控制寄存器result=0x00; //转换结果清0for(i=5;i>0;i--) //求5次转换结果的平均值{init(); //调用初始化函数ADGO=0X1; //开启转换过程while(ADGO); //等待转换完成result=result+ADRESL; //累计转换结果}result=result/5; //求5次结果的平均值display(result); //调用显示函数}}//-----------------------------------------------//初始化函数void init(){PORTA=0XFF;PORTD=0XFF; //熄灭所有显示TRISA=0X1; //设置RA0为输入,其他为输出TRISD=0X00; //设置D口全为输出ADCON1=0X8E; //转换结果左对齐,RA0做模拟输入口,其它做普通I/O ADCON0=0X41; //系统时钟Fosc/8,选择RA0通道,允许ADC工作DELAY(); //保证采样延时}//----------------------------------------------//延时程序void DELAY() //延时程序{int i; //定义整形变量for(i=0x100;i--;); //延时}//-----------------------------------------------//显示函数void display(int x){int bai,shi,ge,temp; //定义4个临时变量temp=x; //暂存AD转换的结果bai=temp/0x64; //求显示的百位shi=(temp%0x64)/0xa; //求显示的十位ge=(temp%0x64)%0xa; //求显示的个位PORTD=TABLE[bai]; //查表得百位显示的代码PORTA=0x1f; //RA3输出低电平,点亮百位显示DELAY(); //延时一定时间,保证显示亮度PORTD=TABLE[shi]; //查表得十位显示的代码PORTA=0x2F; //RA4输出低电平,点亮十位显示DELAY(); //延时一定时间,保证亮度PORTD=TABLE[ge]; //求个位显示的代码PORTA=0x37; //RA5输出低电平,点亮个位显示DELAY(); //延时一定时间,保证亮度}。
PIC单片机与16位串行D-A转换类型概述

PIC单片机与16位串行D/A转换类型概述
1.电流型D/A
图1 所示为电流衰减型D/A 转换器原理图。
图中T1、T2TN 和RE 构成权电流发生器中的恒流源。
各个管子的RE 是相等的,所以各位恒流源中的电流相等,我们把它记为IE。
R-2R 梯形为电流源的负载。
电子开关K1,K2 KN 可以控制乃通向地端还是流进R-2R 梯形电阻网络和加法器,在加法器的相加点可以流入加权电流的和。
图1 电流衰减型D/A 转换器
如果只有电子开关Κ,将恒流源Y1 和R-2R 梯形电阻网络与加法器接通,其他电子开关均接向地,则通过加法器相加点的电流正好是一个IE。
电流源型D/A 转换器是用源器件(一般是MOS 管)构成的电路来提供加权电流。
与电阻加权型转换器相比,电流源型D/A 转换器速度比较快,对开关的寄生参数不敏感。
这种结构一般用于MOS 结构的D/A 转换器。
电流源型D/A 转换器的简单结构如图2 所示。
图2 电流型D/A 转换器的简单结构
2.电压型D/A
电压型的D/A 转换器原理如图3 所示。
图3 3 位电压定标D/A 转换器
电压定标D/A 转换器特别适合MOS 工艺,MOS 工艺中模拟开关容易实现,而且MOS 缓冲放大器的直流偏置电流很小。
电压定标D/A 转换器常用作MOS
D/A转换器系统中的一个部件,被用作逐次逼近式D/A转换器中的D/A转换子电路。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PIC 单片机AD 转换数据存储及串口
引言
PIC 单片机A/D 转换后的数据通常需要占用两个8 位宽的RAM 单元, 而PIC 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。
为此提出一种数据打包的方法, 使得相同的数据量占用较少的存储空间, 并可提高传输效率。
1程序设计思路
以10 位的A/D 转换为例, 可以将A/D 转换的结果暂存在a[size] 中, 然后把数组a 中的数据一位一位地取出, 把低8 位和高8 位拆开分别存放, 低8 位存放在数组b 中, 高8 位存放在数组c 中, 由于高8 位的数据中只有2 位是有效数据, 我们可以把有效数据取出组合成一个新的数据存放, 当上传数据后再用相反的方法解码, 把数据恢复到原先的状态。
这样对于10 位的A/D 转换来说可以节省3/8 的空间, 需要向上位机传送的数据也会比较少, 数据传输时间仅为原来的5/8。