1、第9章 模数转换器与数模转换器,任课教师:刘忠国山东大学课程中心网站: http:/ stc15系列单片机器件手册等keil vision软件下载及指导手册(Helpvision Help) http:/ Software Cx51 编译器用户手册: Cx51编译器-对传统和扩展的8051微处理器的优化的C编译器和库参考,2,第9章 模数转换器与数模转换器本章学习目标了解模数转换器的工作原理及性能指标掌握模数转换器的应用了解数模转换器的工作原理及性能指标掌握数模转换器的应用,3,第9章 模数转换器与数模转换器,9.1 模数转换器的工作原理及性能指标9.1.1 模数转换器的工作原理9.1.2 模
2、数转换器的性能指标9.2 IAP15W4K58S4单片机片内集成的模拟量模块9.2.1 IAP15W4K58S4集成的A/D模块的结构及其使用9.2.2 IAP15W4K58S4集成的比较器模块及其使用9.3 数模转换器及其应用9.3.1 数模转换器的工作原理及性能指标9.3.2 12位D/A转换器TLV5616及其接口技术,4,第9章 模数转换器与数模转换器,随着数字电子技术及计算机技术的广泛普及与应用,数字信号的传输与处理日趋普遍。自然形态下的物理量多以模拟量形式存在,如温度、湿度、压力、流量、速度等,实际生产、生活和科学实验中还会遇到化学量、生物量(包括医学)等。从信号工程的角度来看,要
3、进行信号的计算机处理,上述所有的物理量、化学量和生物量等都需要使用相应的传感器,将其转换成电信号(模拟量)。将模拟量转换为计算机能够识别处理的数字量,而后再进行信号的传输、处理、存储、显示和控制。,5,第9章 模数转换器与数模转换器,同样,计算机控制外部设备时,如电动调节阀、调速系统等,需要将计算机输出的数字信号变换成外设能够接受的模拟信号。将模拟量转换成数字量的器件称为模数转换器(Analog to Digital Converter,ADC),也称为A/D转换器或者ADC器件;将数字量转换成模拟量的器件称为数模转换器(Digital to Analog Converter,DAC),也称为
4、D/A转换器。,6,第9章 模数转换器与数模转换器,以单片机为核心,具有模拟量输入和输出的应用系统结构如图所示。,图9-1 具有模拟量输入输出的单片机系统,7,第9章 模数转换器与数模转换器,传感器和变送器的区别检测仪表在模拟电子技术条件下,一般是包括传感器、检测点取样设备及放大器(进行抗干扰处理及信号传输),当然还有电源及现场显示部分(可选择)。传感器是一种把非电量转变成电信号的器件。电信号一般分为连续量、离散量两种,实际上还可分成模拟量、开关量、脉冲量等。,8,第9章 模数转换器与数模转换器,传感器和变送器的区别模拟信号一般采用4-20mA DC的标准信号传输。数字化过程中,常常把传感器和
5、微处理器及通信网络接口封装在一个器件(称为检测仪表)中,完成信息获取、处理、传输、存贮等功能。在自动化仪表中经常把检测仪表称为变送器,如温度变送器、压力变送器等。,9,第9章 模数转换器与数模转换器,本章内容安排本章首先介绍模数转换器的工作原理及性能指标;然后介绍模数转换器ADS7852与单片机的接口方法及编程应用,介绍IAP15W4K58S4单片机片内集成模数转换模块的使用;最后介绍数模转换器TLV5616与单片机的接口方法及编程应用。,10,9.1模数转换器的工作原理及性能指标,9.1.1 模数转换器的工作原理根据转换的工作原理不同,模数转换器可以分为计数-比较式、逐次逼近式和双斜率积分式
6、。计数-比较式模数转换器结构简单,价格便宜,转换速度慢,较少采用。下面主要介绍逐次逼近式和双斜率积分式模数转换器的工作原理。,11,1、逐次逼近式模数转换器的工作原理,逐次逼近式模数转换器主要由逐次逼近寄存器SAR, 数字/电压转换器, 比较器, 时序及控制逻辑等部分组成。,(SuccessiveApproximationRegister),图9-2 逐次逼近式模数转换器的工作原理,1 0 0 0 0 0 0 0,SAR,1,Vx Vc?输出为逻辑1?(或0),Yes,保留1,No,10,1,3.8V,C2H,12,1、逐次逼近式模数转换器的工作原理工作过程,当模数转换器收到“转换命令” 并清
7、除SAR寄存器后,控制电路先设定SAR 中最高位为“1” , 其余位为“0” , 此预测数据被送至D/A转换器, 转换成电压Vc。然后将Vc与输入模拟电压Vx在高增益的比较器中进行比较,比较器的的输出为逻辑0或逻辑1。如果VxVc,说明此位置 “1”是对的,应予保留;如果VxVc,说明此位置“1” 不合适,应予清除。按该方法继续对次高位进行转换、比较和判断,决定次高位应取“1” 还是取“0” 。重复上述过程,直至确定SAR最低位为止。该过程完成后,状态线改变状态,表示已完成一次完整的转换,SAR中的内容就是与输入的模拟电压对应的二进制数字代码。,13,2、双积分式模数转换器的工作原理,双积分模
8、数转换器的组成框图如图所示。,图9-3 双积分式模数转换器的组成框图,S,S闭合放电后再打开,从0计数到2n溢出,K向上闭合,K,电容充电,负,+,K向下闭合,0,电容放电,又从0计数到N,计数停止,正,+,14,2、双积分式模数转换器的工作原理,双积分模数转换器的组成框图如图所示。,图9-3 双积分式模数转换器的组成框图,S,S闭合放电后再打开,从0计数到2n溢出,K向上闭合,K,电容充电,负,+,K向下闭合,0,电容放电,又从0计数到N,计数停止,正,+,充电电流:,放电电流:,固定时间:,定斜率,15,9.1.1 模数转换器的工作原理,2、双积分式模数转换器的工作原理 双积分式模数转换器
9、转换方法的抗干扰能力比逐次逼近式模数转换器强。该方法的基础是测量两个时间:一个是模拟输入电压向电容充电的固定时间,另一个是在已知参考电压下放电所需的时间,模拟输入电压与参考电压的比值就等于上述两个时间值之比。,16,2、双积分式模数转换器的工作原理,双积分式模数转换器优点是精度高、抗干扰能力强,在实际工程中得到了使用, 缺点是转换速度慢。由于逐次逼近式模数转换器能很好的兼顾速度和精度,故在16位以下的模数转换器中得到了广泛应用。还有并联比较型ADC采用各量级同时并行比较, 各位输出码同时并行产生, 转换速度快是它的突出优点。并联比较型ADC的缺点是成本高、功耗大。因为n位输出的ADC, 需要2
10、n个电阻, (2n1) 个比较器和D触发器, 以及复杂的编码网络, 其元件数量随位数的增加, 以几何级数上升。所以这种ADC适用于要求高速、低分辩率的场合。,17,9.1.2模数转换器的性能指标,A/D转换器是实现单片机数据采集的常用外围器件。A/D转换器的品种繁多, 性能各异, 设计数据采集系统时, 需选择合适的A/D转换器以满足系统设计要求。选择A/D转换器需要综合考虑系统技术指标、成本、功耗、安装等因素。,1、分辨率分辨率是A/D转换器能分辨最小信号的能力, 表示数字量变化一个相邻数码所需输入模拟电压的变化量。分辨率越高,转换时对输入模拟信号变化的反应就越灵敏。,18,1、分辨率,例如,
11、8位A/D转换器能够分辨出满刻度的1/256,若满刻度输入电压为5V,则该8位A/D转换器能够分辨出输入电压变化的最小值为19.5mV。分辨率常用A/D转换器输出的二进制位数表示。常见的A/D转换器有8位、10位、12位、14位和16位等。,一般称8位以下的ADC器件为低分辨率ADC器件;912位的ADC器件称为中分辨率ADC器件;13位以上的ADC器件称为高分辨率ADC器件。,19,如何选择ADC器件的分辨率,10位以下ADC器件误差较大,11位以上对减小误差并无太大贡献,但对ADC器件的要求却提得过高。因此,取10位或11位是合适的。由于模拟信号先经过测量装置,再经A/D转换器转换后才进行
12、处理,因此,总的误差是由测量误差和量化误差共同构成的。,A/D转换器的精度应与测量装置的精度相匹配。一方面要求量化误差在总误差中所占的比重要小,使它不显著地扩大测量误差;另一方面必须根据目前测量装置的精度水平,对A/D转换器的位数提出恰当的要求。,20,9.1.2模数转换器的性能指标,2、通道有的单芯片内部含有多个ADC模块,可同时实现多路信号的转换;常见的多路ADC器件只有一个公共的ADC模块,由一个多路转换开关实现分时转换。3、基准电压基准电压有内、外基准和单、双基准之分。,21,9.1.2模数转换器的性能指标,4、转换速率转换时间:A/D转换器从启动转换到转换结束,输出稳定的数字量,需要
13、的一定的转换时间。转换速率:转换时间的倒数即每秒钟完成的转换次数。A/D转换器的型号不同,转换时间不同。逐次逼近式单片A/D转换器转换时间的典型值为1.0200s。,应根据输入信号的最高频率来确定ADC转换速度,保证转换器的转换速率要高于系统要求的采样频率。,ADS7852: 12位逐次逼近式A/D转换器转换速率 500kHzICL7109: 12位双积分式A/D转换器转换速率30次/s,22,9.1.2模数转换器的性能指标,确定A/D转换器的转换速率时,应考虑系统的采样速率。例如,如果用转换时间为100s的A/D转换器,则其转换速率为10KHz。根据采样定理和实际需要,一个周期的波形需采10
14、个样点,那么这样的A/D转换器最高也只能处理频率为1KHz的模拟信号。对一般单片机而言,在如此高的采样频率下,要在采样时间内完成A/D转换以外的工作,如读取数据、再启动、保存数据、循环计数等已经比较困难了。,23,9.1.2模数转换器的性能指标,5、采样/保持器采样/保持也称为跟踪/保持(Track/Hold缩写T/H)。原则上采集直流和变化非常缓慢的模拟信号时可不用采样保持器。对于其他模拟信号一般都要加采样保持器。如果信号频率不高,A/D转换器的转换时间短,即使用高速A/D转换器时,也可不用采样/保持器。,24,9.1.2模数转换器的性能指标,6、量程量程即所能转换的电压范围,如2.5V、5
15、V和10V。7、满刻度误差满度输出时对应的输入信号与理想输入信号值之差称为满刻度误差。8、线性度实际转换器的转移函数与理想直线的最大偏移称为线性度。,25,9.1.2模数转换器的性能指标,9、数字接口方式根据转换的数据输出接口方式,A/D转换器可以分为并行接口和串行接口两种方式。并行方式在转换后可直接接收, 但芯片引脚比较多;串行方式所用芯片引脚少,封装小,但需要软件处理才能得到所需要的数据。单片机I/O引脚不多时, 用串行器件可节省I/O资源。但是并行器件具有明显的转换速度优势。在转换速度要求较高的情况下应选用并行器件。,26,9.1.2模数转换器的性能指标,10、模拟信号类型通常ADC器件
16、的模拟输入信号都是电压信号。同时根据信号是否过零,还分成单极性(Unipolar)信号和双极性(Bipolar)信号。11、电源电压电源电压有单电源,双电源和不同电压范围之分,早期的ADC器件要有+15V/-15V,如果选用单+5V电源的芯片则可以使用单片机系统电源。,27,9.1.2模数转换器的性能指标,12、功耗一般CMOS工艺的芯片功耗较低, 对于电池供电的手持系统对功耗要求比较高的场合一定要注意功耗指标。13、封装常见的封装有双列直插封装(Dual In-line Package, DIP)和表贴型(Surface Mount Devices, SMD)封装。,28,1)M1和M0:方
17、式选择控制位,表7-1 定时/计数器的方式选择,7-1-2 定时/计数器的相关寄存器,1、TMOD:定时器工作方式控制寄存器,29,7-2-1 可编程时钟输出的相关寄存器,T0CLKO=1: 设置P3.5为T0的时钟输出引脚T0CLKO 输出频率=T0溢出率/2,定时器T0工作在模式2 (8位自动重装模式)时:,若C/T=0, T0对内部系统时钟计数, 则: 1T模式时的输出频率=(SYSclk)/(256 - TH1)/212T模式时的输出频率=(SYSclk)/12/(256 - TH1)/2若C/T=1, T0对外部脉冲输入(P3.4/T0)计数, 则输出时钟频率= (T0_Pin_CL
18、K)/(256 - TH1)/2,T0CLKO=0, 不允许将P3.5配置为定时器0的时钟输出。,外部中断使能和时钟输出寄存器INT_CLKO (也称AUXR2),30,3)TR1:T1的运行控制位。可由软件置位或清0。 当GATE(TMOD.7)=0,TR1=1启动T1开始计数,TR1=0时停止T1计数。 当GATE(TMOD.7)=1,TR1=1且INTX输入高电平时,才允许T1计数。 4)TR0:定时器T0的运行控制位。 含义和功能与TR1相似。,TCON定时器控制寄存器,7.1.1定时/计数器的结构及工作原理,31,TCON定时器控制寄存器,TCON(地址为88H,复位值为00H)寄存
19、器的格式如下:,1)TF1:T1溢出标志位。 T1启动计数后,最高位产生溢出时,TF1由硬件置1,向CPU请求中断,当CPU响应中断时,由硬件清0。TF1也可以由程序查询或清0。 2)TF0:定时器/计数器0溢出标志位。 含义和功能与TF1相似。,7.1.1定时/计数器的结构及工作原理,32,9.2 IAP15W4K58S4单片机片内集成的模拟量模块,本节首先介绍IAP15W4K58S4单片机片内集成的ADC模块的结构和使用方法,然后介绍IAP15W4K58S4单片机片内集成的比较器及其使用。,33,9.2.1 IAP15W4K58S4集成A/D模块的结构及其使用,IAP15W4K58S4单片
20、机集成有8路10位高速电压输入型模数转换器(ADC), 速度可达300KHz(30万次/秒), 可做温度检测、压力检测、电池电压检测、按键扫描、频谱检测等。,1、模数转换器的结构及相关寄存器IAP15W4K58S4集成8通道10位模数转换器(ADC) 。ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可通过软件设置将8路中的任何一路设置为ADC功能,不作为ADC使用的口可继续作为I/O口使用。,34,(1)模数转换器的结构,结构如图所示。,ADC控制寄存器ADC_CONTR,P1ASF寄存器控制P1口的模拟功能,图9-4 IAP15W4K58S4单片机ADC结构图,控制时钟
21、速度,启动转换,转换完标志,选择通道,开关电源,35,(1)模数转换器的结构,IAP15W4K58S4的ADC组成多路选择开关比较器逐次比较寄存器SAR10位DAC转换结果寄存器(ADC_RES和ADC_RESL)ADC控制寄存器ADC_CONTR,36,(1)模数转换器的结构,IAP15W4K58S4的ADC转换原理IAP15W4K58S4的ADC是逐次比较型模数转换器。逐次比较型ADC由一个比较器和D/A转换器构成,对每一输入电压(AD0AD7), 通过逐次比较逻辑, 从SAR的最高位(MSB)开始, 顺序预设置1, 然后将内置D/A转换器相应的输出与输入电压进行比较,根据比较结果决定置1
22、的预设是否保留。经多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。,37,1、模数转换器的结构及相关寄存器,(2)参考电压源IAP15W4K58S4单片机ADC模块的参考电压源是输入工作电压Vcc,一般不用外接参考电压源。如果Vcc不稳定(例如电池供电的系统中,电池电压常常在5.3V-4.2V之间漂移), 则可以在8路A/D转换的一个通道外接一个稳定的参考电压源,计算出此时的工作电压Vcc,再计算出其他几路A/D转换通道的电压。,38,(3)与ADC有关的特殊功能寄存器,表9-1 新出现的与ADC模块有关的特殊功能寄存器,39,1)P1口模拟功能控制寄存器P1ASF,P1ASF (地址为
23、9DH, 复位值为00H)各位定义如下:,若要用P1相应口P1.x的模拟功能, 需将P1ASF特殊功能寄存器中的相应位置为1。如, 若要用P1.6的模拟量功能, 则需将P16ASF置为1。注意: P1ASF寄存器不能位寻址, 可用汇编语言指令ORL P1ASF, #40H, 也可用C语言语句P1ASF |= 0x40;,(3)与ADC有关的特殊功能寄存器,P1 Analog Special Function Configure register,(该寄存器是只写寄存器,读无效),40,(3)与ADC有关的特殊功能寄存器,2)ADC控制寄存器ADC_CONTRADC_CONTR(地址为BCH,复
24、位值为00H)各位定义:,ADC_POWER:ADC电源控制位。0:关闭ADC电源。1:打开ADC电源。,41,2)ADC控制寄存器ADC_CONTR,说明建议进入空闲模式前,将ADC电源关闭,即ADC_POWER =0。启动A/D转换前一定要确认ADC电源已打开,A/D转换结束后关闭ADC电源可降低功耗,也可不关闭。初次打开内部ADC转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于提高A/D转换的精度。,42,2)ADC控制寄存器ADC_CONTR,SPEED1, SPEED0:ADC转换速度控制位
25、。,表9-2 ADC转换速度控制,27MHz/90=300KHz,43,2)ADC控制寄存器ADC_CONTR,IAP15W4K58S4单片机A/D转换模块的时钟使用外部晶体时钟或内部R/C振荡器所产生的系统主时钟,不使用时钟分频寄存器CLK_DIV对系统时钟分频后所产生的供给CPU工作所使用的时钟(系统时钟)。优点:不仅可以让ADC用较高的频率工作,提高A/D的转换速度;而且可以让CPU用较低的频率工作,降低系统的功耗。,STC12C5A60S2.pdf说明书有此叙述, STC15系列无。,IAP15W4K58S4单片机A/D转换模块的时钟就是CPU工作所使用的时钟(系统时钟)。,44,2)
26、ADC控制寄存器ADC_CONTR,ADC_FLAG:A/D转换结束标志位。A/D转换完成后,ADC_FLAG = 1,要由软件清零。不管A/D转换完成后由该位申请产生中断, 还是由软件查询该标志位判断A/D转换是否结束, 当A/D转换完成后, ADC_FLAG = 1, 取数据后, 一定要软件清0。,用MOV 语句对ADC_CONTR寄存器进行赋值。,45,2)ADC控制寄存器ADC_CONTR,ADC_START: ADC转换启动控制位, 设置为“1”时, 开始转换,转换结束后为0。,用MOV 语句对ADC_CONTR寄存器进行赋值。, CHS2、CHS1、CHS0:模拟输入通道选择, 具
27、体选择情况见表9-3 。,46, CHS2、CHS1、CHS0:模拟输入通道选择,见下表。,表9-3 模拟输入通道选择,ADC_CONTR 控制寄存器,47,2)ADC控制寄存器ADC_CONTR,需要注意设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。典型代码如下: MOV ADC_CONTR, #DATA ; #DATA是设置值 NOP NOP NOP NOP MOV A, ADC_CONTR ;经4个时钟延时,才能正确读ADC_CONTR控制寄存器值,48,3)A/D转换结果存储格式控制及A/D转换结果寄存器,
28、ADC_RES、ADC_RESLADC_RES(地址:BDH, 复位值: 00H)和ADC_RESL(地址:BEH,复位值:00H)用于保存A/D转换结果。特殊功能寄存器CLK_DIV中的ADRJ位用于设置A/D转换结果的存储格式。ADRJ位在时钟分频寄存器CLK_DIV (也称PCON2,地址: 97H, 复位值: 0000 x000B)中, 其各位的定义如下:,ADRJ: ADC转换结果调整寄存器位,the adjustment bit of ADC result,49,3)A/D转换结果存储格式控制及A/D转换结果寄存器,ADRJ=0时, ADC_RES7:0存放高8位ADC结果, AD
29、C_RESL1:0存放低2位ADC结果;,ADRJ=1时,ADC_RES1:0存放高2位ADC结果,ADC_RESL7:0存放低8位ADC结果。,50,3)A/D转换结果存储格式控制及A/D转换结果寄存器,ADRJ=1时,ADC_RES1:0存放高2位ADC结果,ADC_RESL7:0存放低8位ADC结果。,51,3)A/D转换结果存储格式控制及A/D转换结果寄存器,如果IAP15W4K58S4单片机的10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中,模/数转换结果计算公式如下:取10位结果 : (ADC_RES7:0, ADC_RESL1:0) =
30、1024Vin/Vcc取8位结果: ADC_RES7:0 = 256Vin / Vcc Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。,52,4)与A/D转换中断有关的寄存器,中断允许控制寄存器IE中的EADC位 (D5位) 用于开放ADC中断;EA位 (D7位) 用于开放CPU中断。,中断优先级寄存器IP中的PADC位(D5位)用于设置A/D中断的优先级,在中断服务程序中, 要用软件将A/D中断标志位ADC_FLAG (也是A/D转换结束标志位)清0。,53,9.2.1 IAP15W4K58S4集成A/D模块的结构及其使用,2、IAP15W4K5
31、8S4单片机ADC模块的使用编程要点打开ADC电源,第一次使用时要打开内部模拟电源 (设置ADC_CONTR . ADC_POWER =1)。适当延时,等内部模拟电源稳定。一般延时1ms以内即可。设置P1口中的相应口线作为A/D转换通道 (设置P1ASF寄存器)。(也可在打开ADC电源前设置),(在此可设置CLK_DIV中的ADRJ位: 转换结果存储格式),54,2、IAP15W4K58S4单片机ADC模块的使用,选择ADC通道(设置ADC_CONTR中CHS2CHS0 位)。延时(若切换了通道, 延时20s200s, 否则略)。启动ADC转换(ADC_CONTR中ADC_START位置1)。
32、 (ADC_CONTR的各位设置可一次完成)查询A/D转换结束标志ADC_FLAG,判断A/D转换是否完成,若完成,则读出结果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。,(根据需要设置CLK_DIV中的ADRJ位: 转换结果存储格式),55,2、IAP15W4K58S4单片机ADC模块的使用,读取转换结果注意:如果是多通道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取20s200s即可,与输入电压源的内阻有关。如果输入电压信号源的内阻在10K以下,可不加延时。如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不需要加延时。,56,
33、2、IAP15W4K58S4单片机ADC模块的使用,若采用中断方式,还需进行中断设置(EADC置1,EA置1)。在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零。,57,9.2.1 IAP15W4K58S4集成A/D模块的结构及其使用,2、IAP15W4K58S4单片机ADC模块的使用编程要点 (以下步骤顺序较简洁)设置P1口中的相应口线作为A/D转换通道 (设置P1ASF寄存器)。根据需要设置转换结果存储格式(设置CLK_DIV中的ADRJ位)。设置ADC_CONTR(包括打开ADC电源, 时钟速度,通道选择,开启) 。适当延时,等内部模拟电源稳定,设置值稳定
34、。一般延时1ms以内即可。,58,2、IAP15W4K58S4单片机ADC模块的使用,查询A/D转换结束标志ADC_FLAG,判断A/D转换是否完成,若完成,则读出结果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。 若是多通道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取20-200s即可(与输入电压源的内阻有关),如果输入电压源的内阻在10K以下,可不加延时。若用中断方式, 还需进行中断设置(EADC置1,EA置1)。在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零。,59,单片机ADC模块的使用举例,【例9
35、-1】 编程实现利用IAP15W4K58S4单片机ADC通道2采集外部模拟电压信号, 8位精度, 采用查询方式循环进行转换, 并将转换结果保存于30H单元中。假设时钟频率为18.432MHz。解: 按ADC编程要点, 打开ADC电源,延时, 设置通道(P1ASF, ADC_CONTR中CHS2 CHS0 位) ,延时;8位精度时, 若ADRJ=0, 则可直接使用ADC_RES的值。因复位后, ADRJ=0, 因此, 按ADC编程要点进行初始化,启动后, 直接查询判断ADC_FLAG标志是否为1;若ADC_FLAG为1, 则读出ADC_RES寄存器的值, 并存入30H即可; 若为0, 则继续等待
36、。,60,【例9-1】 ADC通道2采集电压, 8位精度,结果存30H。,汇编语言程序代码如下:$INCLUDE (STC15.INC) ;包含STC15单片机寄存器定义文件ADC_DAT EQU 30H ; (30H)存储单元内存A/D转换结果 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源 MOV A, #20H (1版延迟子程用A) LCALL DELAY ;开电源后加适当延时, 1ms以内即可 MOV P1ASF,#04H ;设置P1.2的模拟量功能 MOV ADC
37、_CONTR,#11100010B ;选择P1.2为A/D转换通道 MOV A, #05H (1版) LCALL DELAY ;如果切换A/D转换通道, 则需要加延时,DELAY延时时间 47.41 ms,DELAY延时时间 47.41 ms,转换周期: 90个时钟,61,【例9-1】 ADC通道2采集电压, 8位精度,结果存30H,WAIT_AD: ORL ADC_CONTR, #00001000B ;启动A/D转换 MOV A, #00010000B ;判断A/D转换是否完成 ANL A, ADC_CONTR JZ WAIT_AD ;A/D转换尚未完成, 继续等待 ANL ADC_CONT
38、R, #11100111B ;将ADC_FLAG清0 MOV A, ADC_RES ;读取A/D转换结果 MOV ADC_DAT, A ;保存A/D转换结果到30H单元 LJMP WAIT_AD ;等待下一次转换完成,用查询(ADC_FLAG)方式,查询方式也需清0,62,DELAY: ;延时子程序 MOV R2, #2 ;2个时钟周期 MOV R3, #0 ;2T MOV R4, #0 ;2TDELAY_LOOP: DJNZR3, DELAY_LOOP ;4个时钟周期 DJNZ R4, DELAY_LOOP ;4T DJNZ R2, DELAY_LOOP ;4T RET ;4T END,延时
39、时间大约为:(256*4)*256)*2 +10/11.0592MHz 47.41 ms,DELAY: ;延时子程序 PUSH 02 ;将寄存器组0的R2入栈 ,不能PUSH R2, 因寄存器寻址 PUSH 03 ;将寄存器组0 的 R3 入栈 ;3T PUSH 04 ;将寄存器组0 的 R4 入栈 ;3T MOV R2, #2 ;2个时钟周期 MOV R3, #0 ;2T MOV R4, #0 ;2TDELAY_LOOP: DJNZR3, DELAY_LOOP ;4个时钟周期 DJNZ R4, DELAY_LOOP ;4T DJNZ R2, DELAY_LOOP ;4T POP 04 ;2T
40、 POP 03 POP 02 RET ;4T END,【例9-1】 ADC通道2采集电压, 8位精度,结果存30H,63,【例9-2】 ADC通道2采集电压, 8位精度,结果存30H,DELAY: ;延时子程序 PUSH 02 ;将寄存器组0的R2入栈 ,不能PUSH R2, 因寄存器寻址 PUSH 03 ;将寄存器组0 的 R3 入栈 PUSH 04 ;将寄存器组0 的 R4 入栈 MOV R4, A DELAY_LOOP0: MOV R3, #200 ;2个时钟周期Delay_LOOP1: MOV R2, #249 ;2个时钟周期DELAY_LOOP: DJNZ R2, DELAY_LOO
41、P ;4个时钟周期 DJNZ R3, DELAY_LOOP1 ;4个时钟周期 DJNZ R4, DELAY_LOOP0 ;4个时钟周期 POP 04 POP 03 POP 02 RET END,延时时间大约为:(249*4)*200)*A值/18.432MHz 10.81 ms*A值,(第1版延迟子程用A),64,【例9-1】 ADC通道2采集电压, 8位精度,结果存30H,C语言程序代码如下:#include “stc15.h” /包含STC15单片机寄存器定义文件unsigned char data adc_dat _at_ 0x30; /A/D转换结果变量void main(void)
42、unsigned long i; /i用于for循环 unsigned char status; /status用来存储ADC_CONTR 的ADC_FLAG ADC_CONTR|=0x80; /开A/D转换电源 for (i=0; i10000; i+); /适当延时 P1ASF=0x04; /选择P1.2作为A/D转换通道 ADC_CONTR=0xE2; /11100010B, P1.2为A/D通道 for (i=0;i10000;i+); /适当延时,转换周期: 90个时钟,65,【例9-1】 C语言程序代码:,while(1) /循环进行A/D 转换 ADC_CONTR |=0x08;
43、 /(重新)启动 A/D 转换 status=0; /status用来存储ADC_CONTR 的ADC_FLAG while(status=0) /等待A/D转换结束, 即ADC_FLAG=1 status=ADC_CONTR /保存A/D转换结果,高8位 ,ADC_START: 置 “1”时, 开始转换, 转换结束后为0。,66,单片机ADC模块的使用举例,【例9-2】 编程实现利用IAP15W4K58S4单片机ADC通道2采集外部模拟电压信号, 10位精度, 采用中断方式进行转换,并将转换结果保存于30H和31H单元中。假设时钟频率为18.432MHz。解:ADRJ=0时,ADC结果的高8
44、位在ADC_RES中,低2位在ADC_RESL的低2位。因此, 可在中断服务程序中读出ADC_RESL寄存器的值, 屏蔽高6位后存入30H单元,读出ADC_RES寄存器的值,存入31H单元。,67,例9-2 ADC通道2采集电压, 10位精度, 结果存30H, 31H,汇编语言程序代码如下:$INCLUDE (STC15.INC) ;包含STC15F寄存器定义文件 ADC_HI EQU 31H ;A/D转换结果高8位 ADC_LOW EQU 30H ;A/D转换结果低2位 ORG 0000H LJMP MAIN ORG 002BH ;ADC中断入口地址 LJMP ADC_ISR ;ADC中断服务程序入口 ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源 MOV A, #20H(1版延迟子程用A) LCALL DELAY ;开电源后要适当延时, 1ms以内即可,DELAY延时时间 47.4 ms,68,例9-2 ADC通道2采集电压, 10位精度, 结果存30H, 31H,