单片机原理及应用北京化工大学信息科学与技术学院主讲教师:林伟国E-mail:linwg@mail.buct.edu,cn第七章单片机的典型外围接口技术一、A/D转换器•A/D转换器是将模拟量转换成数字量的器件.模拟量可是电压、电流等电信号,也可是声、光、压力和温度等随时间连续变化的非电物理量。•非电物理量可通过合适的传感器等转换成电信号,模拟量只有转换成数字量才能被计算机采集、分析和计算处理。第一节ADC接口二、A/D转换方法•电压频率式:精度高价格低,但转换速度不高•积分式:抗干扰能力好,转换速度低•逐次逼近式:转换速度较快•并行转换:•串行转换:三、硬件设计考虑的问题•选择分辨率(3~8位/9~12位/13位以上)•确定精度(误差范围)•A/D转换时间和路数•输入/输出特性和范围•电源种类和功耗•工作环境•接口是否方便8051和ADC0809的接口•ADC0809是逐次比较式的8路8位A/D转换器,转换速度为100US,电源电压+5VADC0809的内部结构图ADC0809与8051的接口原理图ADC0809与8051接口工作方式•EOC:开始转换时为低电平,当转换结束时为高电平.•查询方式:查询EOC引脚•中断方式:EOC经反相器接8051的外部中断引脚•ALE=START=•OE=•端口地址确定应使P2.7=A15=0,A0、A1、A2给出被选择的模拟通道地址编程要点•选通模拟量输入通道•发出启动信号•用查询或中断方法等待转换结束(延时)•读取转换结果•MAIN:MOVR1,#data•MOVDPTR,#7FF8H;P2.7=0,且指向通道O•MOVR7,#08H;置通道数•LOOP:MOVX@DPTR,A;启动A/D转换•MOVR6,#OAH;•DLAY:NOP•NOP•NOP•DJNZR6,DLAY•MOVXA,@DPTR;读取转换结果•MOV@R1,A•INCDPTR;指向下一个通道•INCR1;修改数据区指针•DJNZR7,LOOP;8个通道全采样完了吗?中断方式程序•SETBIT1•SETBEX1•SETBEA•MOVDPTR,#7FF8H•MOVA,#0•MOVX@DPTR,A•…•EINT1:•MOVDPTR,#7FF8H•MOVXA,@DPTR•MOV30H,A•MOVA,#00•MOVX@DPTR,A•RETI四、A/D采集的抗干扰措施•算术平均•滑动平均值法(循环队列)•去极值法•低通滤波五、实验电路•通道的选择是由地址线A0、A1、A2来完成A/D转换实验1、采用定时中断方式,每500ms采样一次,采样通道02、A/D采样采用外部中断方式,后边沿触发3、程序流程:初始化开定时器定时时间到?启动A/D转化A/D转换结束?读A/D转换结果转换结果送发光二极管显示4、实验要求:提前编写程序,并调试正确5、带上第一次实验程序,准备接受检查6、第3次实验为8255键盘显示实验程序概要•伪指令ADPORTEQU8100H;ADC0809通道0地址DISPORTEQU8300H;显示端口地址Flag1BIT00H;定时时间到标志Flag2BIT01H;AD转换结束标志ORG0000HAJMPMAINORG0003HAJMPINTADORG000BHAJMPT0INT•程序初始化ORG0030HMAIN:MOVSP,#70HMOVTMOD,#XXHMOVTH0,#XXHMOVTL0,#XXHMOVR7,#0AH;用于计数定时中断次数CLRFLAG1CLRFLAG2SETBIT0;后边沿触发外部中断SETBET0;T0中断允许SETBEX0;外部中断0中断允许SETBEASETBTR0;开启定时器0•主程序LOOP1:JBCFLAG1,SAMPLE;等待定时时间到,AJMPLOOP1SAMPLE:MOVDPTR,#ADPORTMOVX@DPTR,A;启动A/D转换LOOP2:JBCFLAG2,RDATA;等待A/D转换结束AJMPLOOP2RDATA:MOVXA,@DPTR;读A/D转换结果MOVDPTR,#DISPORTMOVX@DPTR,A;输出数据到发光管AJMPLOOP1;程序循环•定时中断与外部中断程序T0INT:MOVTH0,#XXHMOVTL0,#XXHDECR7CJNER7,#00H,RTNMOVR7,#0AHSETBFLAG1RTN:RETIINTAD:SETBFLAG2RETI单片机与12位A/D的接口与编程•AD574A是一个完整的逐位比较式12位模/数转换器,具有可与8位、12位或16位微处理器直接接口的三态输出缓冲器。其引脚分配和内部结构框图示于下图。引脚分配和内部结构框图AD574A主要特点•AD574A是一片模拟电路,一片数字电路组成的混合式集成芯片。•其主要特点为:•不需要外围缓冲电路可直接与最通用的8位或16位微处理器接口。•短的转换时间,在独立工作方式下,可在25us时间内完成一次转换,并将数据锁存在输出锁存器中。•可提供四种不同的输入范围:单极性输入0~10v或0~20v;双极性输入-5~+5v或-10~+10v。•自带参考电压。该电源除供本身使用外,还可以为外部负载提供1mA的电流输出。AD574A控制引脚•AD574A有两组控制引脚:一般控制引脚(CE、CS和R/C)和内部寄存器控制引脚(12/8和A0)。•一般控制引脚(CE、CS和R/C\)主要控制启动转换和允许的。当CE=1、CS=0、R/C\=0时,启动转换;当CE=1、CS=0、R/C\=1时,读允许。•内部寄存器控制引脚(12/8和A0)主要控制数据输出形式和转换时间的长短的。若12/8\=1,当一般控制引脚发出读数据命令时,12根输出数据线上的数据均有效。若12/8\=0,对于一个8位接口,则根据A0的状态来确定到底是高8位有效还是低4位有效。这时,数据线低4位(16~19脚)要硬连接到高4位(24~27脚)上。在这种情况下,若A0=0,读出高8位数据;若A0=1,高8位数据线禁止,读出低4位数据。A0的另一功能是控制转换周期的长短。在转换周期开始前,若A0处于低电平,完成完整的12位转换需要25us;若A0处于高电平,仅完成8位转换需时约16us。AD574A控制功能•若将AD574A作为一个存储器来对待,为了与8位总线接口,需占据两个存储器地址(用A0来选择)。•当A0为低时,执行的写操作是启动一次完整的12位转换周期;而当A0为高时,执行的写操作是启动一次8位的短转换周期,这样的读数精度低而速度较快。•在转换完成之后,可读取两个字节的数据:当A0为低时,读取的12位中的高8位;当A0为高时,读取的是12位中的低4位。为此,一般将A0接在地址线的A0上。•STS为状态线,当转换开始时,它变高;在转换过程中,一直维持为高;转换周期结束时,它将变为低。AD574与8051的接口基于8051的A/D转换程序•采用中断法采集数据,编程如下:•ORG0003H•LJMPINTR1•ORG0300H•MOVR0,#20H•MOVDPTR,#0H•SETBEX0•SETBEA•MOVX@DPTR,A•ORG1000HINTR1:MOVXA,@DPTRMOV@R0,AINCR0INCDPTRMOVXA,@DPTRMOV@R0,ARETI8051与max187接口程序设计•MAX187的引脚分配如图所示:8051与max187接口程序设计•其各引脚的功能如下:•VDD:电源电压+5V。•AIN:模拟输入,输入范围为0V~Vref。•SHDN:有三极输入。若SHDN拉到低电平,表示芯片处于低功耗状态,此时的电源电流为10uA;若SHDN拉到高电平,允许使用内部的参考电源;若SHDN处于悬浮状态,则禁止内部参考电源,允许使用外部的参考电源。•Vref:参考电压端。当允许内部参考源时,输出4.096V的电压;当禁止内部参考源时,可输入2.5V~VDD范围的精密电压,作参考电压。若采用内部参考源,退藕电容为4.7Uf;若加上的是外部内部参考源,还需增加0.1uF的退藕电容。•GND:模拟地及数字地。•DOUT:串行数据输出。在SCLK的下降沿,数据改变状态。•SCLK:串行时钟输入,时钟输入速率为5MHz。•CS:片选端,输入,低电平有效。在CS的下降沿,初始化转换。当为高时,DOUT线为高阻态。MAX187使用采样/保持器(T/H)和逐位逼近寄存器(SAR)电路将一个模拟输入信号转换成一个12位的数字输出。采样/保持器(T/H)无须外部的保持电容。MAX187的输入信号在0V~Vref范围内,转换时间包括T/H的采样时间在内为10us。串行接口只需三根数字线:SCLK、CS和DOUT,8051与max187接口程序设计•转换有两中工作方式:正常方式和暂停方式。将SHDN拉成低电平,器件处于暂停状态,电源电流减低至10uA;当SHDN拉成高电平或不接,器件将进入正常工作方式。CS的下降沿将初始化转换。转换结果是在DOUT端以单极性串行格式输出。转换结束(EOC)为高电平,跟着是串行数据流(MSB在先)。•MAX187运行于下述两种状态之一:内部参考或外部参考。强迫SHDN为高时,选择内部参考运行;SHDN悬浮时,选择外部参考运行。•参考源零刻度满刻度内部参考0V4.096V外部参考0VVref8051与max187接口程序设计8051与max187接口程序设计8051与max187接口程序设计MAX187与80C51的接口非常简单,只需三根数字线:CS、SCLK和DOUT,接口电路如图所示。80C51的P1.5、P1.6和P1.7分别与MAX187的CS、SCLK和DOUT相连接。在串行接口有效时,设置CPU的串行接口为主方式,因而CPU发出串行时钟,并选择时钟频率为2.5MHz。用P1.5将芯片的片选拉成低电平CS,并保持SCLK为低电平。等待最大转换时间,检测DOUT的上升沿,确定转换是否结束。然后输出SCLK,SCLK有效至少13个时钟周期。时钟的第一个下降沿,DOUT端将出现转换结果的最高位(MSB)。DOUT端在SCLK的下降沿出现下降沿•出现数据,在SCLK的上升沿稳定,80C51可以读入数据。•在时钟的第13个下降沿时或之后,将CS拉成高电平。如果此后CS仍为低电平,在输出LSB位之后将输出0。•随着CS=1,等待特定的时间tcs之后,若使CS拉成低电平,将进行新的一次转换。如果转换结束之前,将拉成高电平来中止转换,则需至少等待一个采样时间taqcq,才能启动一次新的转换。第二节D/A转换器接口•用D/A转换器把微型机输出的数字量转换成电压或电流,可输出各种波形的信号。一、硬件设计考虑的问题•选择分辨率(3~8位/9~12位/13位以上)•确定精度(误差范围)•D/A转换时间和路数•输入/输出特性和范围•电源种类和功耗•工作环境•接口是否方便二、DAC0832芯片介绍•分辨率8位•电流输出,稳定时间1US•双缓冲、单缓冲、直接数字输入•单电源供电逻辑结构工作方式•直通方式:各控制端口一直有效•单缓冲方式:输入锁存器和8位DAC寄存器锁存信号同时有效;或者一个寄存器控制端一直有效。•双缓冲方式:输入锁存器和8位DAC寄存器锁存信号分开控制DAC0832与MCS51的接口•双缓冲方式适用于几个模拟量同时输出的系统时序图•MOVDPTR,#0DFFFH;1•MOVA,#X;2•MOVX@DPTR,A;3•MOVDPTR,#0BFFFH;4•MOVA,#Y;5•MOVX@DPTR,A;6•MOVDPTR,#7FFFH;7•MOVX@DPTR,A;8•系统只有一路模拟量输出或几路模拟量不许同步的输出场合,可采用单缓冲方式通过运放可输出一个锯齿波•MOVDPTR,#7FFFH•MOVA,#00H•LOOP:MOVX@DPTR,A•INCA•AJMPLOOP第三节键盘显示接口0----9ABCDEFASCIICode•DB30H,31H,32H,33H•DB34H,35H,36H,37H•DB38H,39H,41H