微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日
微机原理与接口技术 第8章数模与模数转换及应用 朱华贵 2015年12月10日
本章主要内容 数/模转换及应用 2 1 物理信号到电信号的转换 模/数转换及应用 3
8.1 物理信号到电信号的转换 8.1.1 概述 在实际工业控制和参数测量时,经常遇到的是一些连续变化的物理量,例如:温度、压力、速度、水位、流量等,这些参数都是非电的、连续变化的物理信号; 微型计算机中处理的都是数字量,无法识别和处理工业上的物理信号;
8.1 物理信号到电信号的转换 一般先利用传感器(例如光电元件、压敏元件等)把物理信号转换成连续的模拟电压(或模拟电流),这种代表某种物理量的模拟电压(或模拟电流)称为模拟量; 然后再把模拟量转换成数字量送到计算机进行处理,这个过程称为模/数(A/D)转换,实现这个过程的器件称为模/数转换器(A/D转换器或ADC)。
8.1 物理信号到电信号的转换 反过来,微型计算机输出结果是数字量,不能直接控制执行部件,需要将数字量转换成模拟电压或模拟电流,这个过程称为数/模(D/A)转换,实现这个过程的器件称为数/模转换器(D/A转换器或DAC)。 D/A转换是A/D转换的逆过程,这两个互逆的转换过程通常会出现在一个控制系统中。
8.1.2 几种常见的传感器 传感器是一种物理装置,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的物理信号转换成电信号。 光敏传感器 利用光敏元件将光信号转换为电信号; 敏感波长在可见光波长附近,包括红外线和紫外线波长; 种类繁多:光电管、光敏三极管、红外线传感器、紫外线传感器、光纤式光电传感器和太阳能电池等。
8.1.2 几种常见的传感器 温度传感器 温度传感器能感受温度并转换成可用输出信号; 按测量方式可分为接触式和非接触式; 按传感器材料及电子元件特性可分为热电偶和热电阻。 热电偶 热电阻
8.1.2 几种常见的传感器 湿度传感器 湿度传感器能感受气体中水蒸气含量,通过湿度的变化,引起电阻值或电容值发生变化。 湿敏元件是最简单的湿度传感器。 湿敏元件主要有电阻式和电容式两大类。 湿敏电阻 湿敏电容
8.1.2 几种常见的传感器 数字传感器 温度传感器、湿度传感器等都是将物理信号转换成连续变化的电信号,这些信号往往要通过放大、滤波、模数转换等操作才能被微型计算机识别和处理。 数字传感器直接将探测到的物理信号转换成数字量或电脉冲。 角度-数字传感器 角度-数字传感器把角位移转换成电信号,按照工作原理可分为脉冲盘式和码盘式两类。 光栅数字传感器 光栅数字传感器主要用于长度和角度的精密测量及数控系统的位置检测等,主要由标尺光栅、指示光栅、光路系统和光电元件等组成。
8.2 数/模转换及应用 8.2.1 数/模转换器的基本原理 数/模(D/A)转换器是一种把数字量转换为模拟量的线性电子器件,它将输入的二进制数字量转换成模拟量,以电压或电流的形式输出,用于驱动外部执行机构。
8.2.1 数/模转换器的基本原理 D/A转换常用的方法 加权电阻网 T型电阻网
1、运算放大器 在工业控制系统中,一般需要2个环节来实现数字量到模拟量的转换: 把数字量转换成模拟电流,这一步由D/A转换器完成; 将模拟电流转换成模拟电压,这一步由运算放大器完成。 有些D/A转换集成电路芯片中包含有运算放大器,有的没有,这时就需要外接运算放大器。
运算放大器的特点 开环放大倍数很高,正常情况下所需的输入电压非常小; 输入阻抗很高,输入端相当于将一个很小的电压加在一个很大的阻抗上,因此输入电流i极小; 输出阻抗很小,所以驱动能力强。
运算放大器的原理 运算放大器有两个输入端: 同相端,和输出端同相,用“+”表示; 反相端,和输出端反相,用“-”表示; 如图(a)所示,同相端接地,反相端为输入端时,由于Vi很小,则输入点的电位近似于地电位,且输入电流也非常小,可以假定其为0,把这种特殊的情况称为虚地。 (a)
运算放大器的原理 (b) 如图(b)所示为带反馈电阻的运算放大器 G点为运算放大器的虚地,输入端有一个输入电阻Ri,输出端有一个反馈电阻Ro ,因而输入电流:Ii =Vi/Ri 由于运算放大器的输入阻抗极大,可认为运算放大器的电流几乎为0,这样即为输入电流Ii全部流过了,而一端为输出端,一端为虚地,因此上的电压降就是输出电压Vo。即:Vo=-Ro·Ii =-Ro·Vi/Ri 因此,带反馈电阻的运算放大器的放大倍数为: (b)
运算放大器的原理 如图(c),输出端有一个反馈电阻Rf,若输入端有n个支路,则输出电压Vo与输入电压Vin的关系为: (c)
2、加权电阻网 数字量是由一位一位的数位构成的,每个数位都代表一定的权。 例如:二进制数10000101的第7位、第2位和第0位为1,其余位为0,这8个位的权从高位到低位分别是27、26、25、24、23、22、21、20。该二进制数按权相加之后就得到了十进制数133。 数字量要转换成模拟量,必须把每一位上的代码按权转换成对应的模拟分量,再把各模拟分量相加,所得到的总的模拟量便对应于给出的数字量。
2、加权电阻网 加权电阻网D/A转换就是用一个二进制数字的每一位代码产生一个与其相应权成正比的电压(或电流),然后将这些电压(或电流)叠加起来,就可得到该二进制数所对应的模拟量电压(或电流)信号。 加权电阻网D/A转换器由权电阻、位切换开关、运算放大器组成。
2、加权电阻网 下图为4位二进制D/A转换的电路原理图。
2、加权电阻网 设VREF= -10V,由上面的示例图中的开关状态可看出,b3 ~ b0为1101,则: I0 = VREF/(8R);I2 = VREF/(2R);I3 = VREF/R Iout1 = I0 + I2 + I3 = VREF×(1/8+1/2+1)/R = 1.625VREF/R 根据基尔霍夫定律,IRF=-Iout1,若取RF=R, 则Vout= IRF * R = -1.625VREF = 16.25 (伏)
2、加权电阻网 在权电阻解码网络中,假如采用独立的权电阻,那么对于一个8位的D/A转换器,需要8个阻值相差很大的电阻(R,2R,4R,…,128R)。由于电路对这些电阻的误差要求较高,因此使制造工艺的难度也相应增加。 在实际使用中,使用更多的是T形电阻解码网络。
3、T型电阻网 T型电阻网D/A转换器由位切换开关、R-2R电阻网络、运算放大器以及参考电压组成。 使用了T型电阻网络之后,整个网络中只有R和2R两种电阻。 这种转换方法与上述加权电阻网络法的主要区别在于电阻求和网络的形式不同,它采用分流原理来实现对相应数字位的转换。
3、T型电阻网 下图为4位二进制D/A转换的电路原理图。
3、T型电阻网 设VREF= -10V,由上面的示例图中的开关状态可看出,b3 ~ b0为1101,则: 根据基尔霍夫定律,IRF=-Iout1,若取RF=R, 则
8.2.2数/模转换器的性能参数 分辨率 分辨率是D/A转换器模拟输出电压可能被分离的等级数,输入数字量的位数越多,输出电压可分离的等级越多。 理论上以可分辨的最小输出电压与最大输出电压之比表示D/A转换器的分辨率; 通常以输入数字量的二进制位数表示分辨率。 对于一个N位的D/A转换器,它的分辨率为1/(2N-1)。 例如:8位D/A转换器的分辨率为1/255。
转换精度 转换精度是某一数字量的理论输出值和经D/A转换器转换的实际输出值之差。 一般用最小量化阶距来度量,例如±1/2 LSB(Least Significant Bit); 也可用满量程的百分比来度量,例如0.05% FSR(Full Scale Range)。 要注意转换精度和分辨率是两个不同的概念: 转换精度指转换后所得的实际值相对于理想值的接近程度,取决于构成转换器的各个部件的精度和稳定性。 分辨率指能够对转换结果发生影响的最小输入量,取决于转换器的位数。
建立时间 当DAC输入由最小的数字量变为最大的数字量时,DAC的输出达到稳定所需要的时间称为DAC的输出建立时间。
线性度 线性度指当数字量发生变化时,D/A转换器的输出量按比例关系变化的程度。 理想的D/A转换器是线性的,但实际有误差。 通常使用最小数字输入量的分数来给出最大偏差的数值,如±1/2 LSB。
温度系数 温度系数是指在输入不变的情况下,输出模拟电压随温度变化产生的变化量。 一般用满刻度输出条件下温度每升高1℃,输出电压变化的百分数作为温度系数,主要用于说明转换器受温度变化影响的特性。
输入代码和输出电平 输入代码 输入代码有:二进制码、BCD码和偏移二进制码等。 输出电平 不同型号的DAC,其输出电平不相同,一般是:5V~10V。
8.2.3 8位D/A转换器DAC0832 D/A转换芯片是由集成在单一芯片上的解码网络和根据需要而附加上的一些功能电路构成的。 通用、高速和高精度等。 按内部结构分: 不包含数据寄存器的,这种芯片内部结构简单,价格低廉,如AD7520等; 包含数据寄存器的,这种可以直接和系统总线相连,如AD7524、DAC0832等。
1、DAC0832的内部结构及引脚 DAC0832是CMOS工艺制成的8位双缓冲型D/A转换器,其逻辑电平与TTL电平相兼容。 建立时间为1us。 输入数据为8位并行输入,有两级数据缓冲器及使能信号、数据锁存信号等,与CPU接口方便。
1、DAC0832的内部结构及引脚 (1) DAC0832的内部结构:
(2)引脚说明 DI0~DI7 数据线 输入数字量
(2)引脚说明 CS 第一级数据缓冲器的片选信号 低电平有效
(2)引脚说明 XFER 传送控制信号 控制从输入寄存器向DAC寄存器传送数据
(2)引脚说明 ILE 允许输入锁存 高电平有效
(2)引脚说明 WR1 第一级数据缓冲器的写信号 低电平有效 当ILE=1、CS=0、WR1=0时,输入的数字量锁存于输入寄存器中
(2)引脚说明 WR1 第二级数据缓冲器的写信号 低电平有效 当XFER=0、WR2=0时,8位输入寄存器的数字被锁存进8位DAC寄存器,同时进入D/A转换器开始转换
(2)引脚说明 Iout1和Iout2 DAC输出模拟电流 IOUT1+IOUT2=常数 IOUT1和IOUT2随DAC寄存器内容线性变化 若需要电压输出,要通过运算放大器进行电流-电压转换
(2)引脚说明 RFB 反馈电阻 供电流-电压转换电路使用 该电阻被制作在芯片内
(2)引脚说明 VRFE 基准电压输入端 为模拟电压输入 允许范围是: -10V ~ +10V
(2)引脚说明 其他 VCC AGED DGND 逻辑电路的电源 允许范围是: +5V ~ +15V 模拟地 芯片模拟电路接地点 数字地 芯片数字电路接地点
2、DAC0832的模拟输出 DAC0832的模拟输出是电流形式,因此需要使用运算放大器将电流输出转换为电压输出。 根据输入转换的数字量不同,电压输出又分为: 单极性电压输出 双极性电压输出
(1)单极性电压输出 当输入数字为单极性数字时,典型的单极性电压输出电路如图所示,由运算放大器进行电流-电压转换,使用芯片内部的反馈电阻。 输出电压VOUT与输入数字D的关系为: VOUT = — VREF × D / 256
(1)单极性电压输出 假设输入数字量D=0~255,基准电压VREF=—5V 当 D=FFH=255时, 最大输出电压:Vmax=(255/256)×5V=4.98V; 当 D=00H时, 最小输出电压:Vmin =(0/255)×5V=0V; 当 D=01H时,一个最低有效位(LSB)的电压: VLSB=(1/256)×5V=0.0195 V。 VOUT = 0~—VREF×255/256 = 0~4.98V
(2)双极性电压输出 VOUT = 2 × VREF × D / 256 — VREF =( 2D / 256 — 1)VREF 有时输入待转换的数字量有正有负,因而希望D/A转换输出也是双极性的;有些控制系统中,也要求控制电压应有极性变化。 取电阻R2=R3=2R1,输出电压VOUT与输入数字D的关系为: VOUT = 2 × VREF × D / 256 — VREF =( 2D / 256 — 1)VREF
(2)双极性电压输出 假设输入数字量D=0~255,基准电压VREF=—5V 当 D=FFH=255时, Vout=(2×255/256—1)×VREF≈VREF=—5V; 当 D=00H时, Vout =—1×VREF=5V; 当 D=128时,一个最低有效位(LSB)的电压: Vout=(2×128/256—1)× VREF=0V。 VOUT = —5V ~5V
3、DAC0832的工作方式 直通方式 把 、 、 、 接地,即第一级、第二级数据缓冲器都直通。 把 、 、 、 接地,即第一级、第二级数据缓冲器都直通。 数据一旦加在数据线(DI7-DI0)上,DAC的输出就立即响应。 这种方式可用于一些不采用微机的控制系统中。
3、DAC0832的工作方式 单缓冲方式 两级数据缓冲器之一处于直通状态,输入数据只经过一级缓冲送入D/A转换电路。 只需执行一次写操作,即可完成D/A转换,可以提高DAC的数据吞吐量。 有两种方法: 第一级缓冲器直通: 、 接地、ILE接高电平; 第二级缓冲器直通: 、 接地。
3、DAC0832的工作方式 双缓冲方式 适用于系统中有多片DAC0832,特别是要求同时输出多个模拟量的场合。 使用时,多片0832的 和 并联在一起。 先分别将每一路的数据写入各个芯片的第一级数据缓冲器,然后同时将数据锁存到每一片0832的第二级数据缓冲器。
4、DAC0832与CPU接口举例 【例8-1】采用如下图所示单极性电压输出电路图,设DAC0832基准电压VREF=—5V。试编写程序使其输出周期性的锯齿波,并画出输出波形图。
【例8-1】程序段如下: MOV DX ,PORT0832 ;设PORT0832为该片0832的端口地址 MOV AL ,00H ;初值 AGANT: OUT DX ,AL ;转换数据送D/A的数据口 CALL DELAY ;调用延时子程序段,也可用几条NOP指令 INC AL ;AL加1。当AL由255加1时,AL回到0 JMP AGANT …………………… DELAY PROC ;软件延时子程序 MOV CX,10 DELAY1:LOOP DELAY1 RET DELAY ENDP 输出单极性正向锯齿波 锯齿波周期与子程序DELAY的延时时间有关
【例8-1】说明 1 仍采用单极性电压输出电路 将指令 INC AL换成DEC AL 输出单极性反向锯齿波
【例8-1】说明 2 采用双极性电压输出电路 仍使用指令 INC AL 输出双极性正向锯齿波
【例8-1】说明 3 采用双极性电压输出电路 将指令 INC AL换成DEC AL 输出双极性反向锯齿波
8.3 模/数转换及应用 8.3.1 模/数转换器的基本原理 模/数(A/D)转换器是一种把模拟量转换为数字量的线性电子器件,它将输入的模拟电压或模拟电流转换成二进制数字量,便于微机进行处理。
8.3 模/数转换及应用 A/D转换常用方法 计数式:最简单,但转换速度很低,并行转换速率最快,但需要的器件多,价格高;
8.3.1 模/数转换器的基本原理 A/D转换过程 采样 保持 量化 编码
1、采样与保持 采样是将时间上连续变化的信号,转换为时间上离散的信号,即将时间上连续变化的模拟量转换为一系列等间隔的脉冲,脉冲的幅度取决于输入模拟量。 模拟信号经采样后,得到一系列样值脉冲。采样脉冲宽度τ一般是很短暂的,在下一个采样脉冲到来之前,应暂时保持所取得的样值脉冲幅度,以便进行转换。因此,在取样电路之后须加保持电路。 采样保持是通过采样保持器来完成的。
2、量化 量化就是以一定的量化阶距为单位,把数值上连续的模拟量转变为数值上离散的量的过程。 量化是A/D转换的核心。 从原理上讲,量化相当于只取近似整数商的除法运算。 如量化单位用q表示,量化过程为: 把要转换的模拟量除以q; 除法得到的整数部分,用二进制表示,即得转换数字量; 除法得到的余数部分,舍去; 因为舍去的余数是由于量化造成的,所以称为量化误差。
2、量化 量化误差的处理手段 四舍五入(误差小) 只舍不入(误差大) 量化单位越小,转换位数越多,量化误差也就越小。
3、输入极性与编码 量化后的数字量需要进行编码,以便微机读入和识别; 编码仅是对数字量的一种处理方法; 输入不同,编码方式也略有不同: 单极性输入 双极性输入
(1)单极性输入 当输入信号为单极性信号时,以二进制数进行量化编码。 以ADC0808为例,其转换公式为: 其中: VIN为模拟电压输入 VREF(+)和VREF(-)为参考电压输入 假设VREF(+)接+5V,VREF(-)接地,则当输入为0 ~+5V时,输入VIN和输出D之间的关系如右图所示。
(2)双极性输入 当输入信号为双极性信号(即输入信号的幅值可能为正、可能为负)时,对输入信号的编码通常有以下三种方式: 偏移二进制码 以最高位为符号位,1表示正,0表示负;后面的各位表示幅值。 就相当于把单极性的ADC的输入输出特性曲线向左平移了一半。 以ADC0808为例,输入为-2.5V~ +2.5V时,其输入VIN和输出D之间的关系如右图所示。
(2)双极性输入 原码 当输入为正时,符号位为0; 当输入为负时,符号位为1。 后面的各位表示其幅值。 补码 其符号位刚好与偏移二进制码的符号位相反, 后面的各位相同。
8.3.2 模/数转换器的性能参数 量程 分辨率 指A/D转换器能够实现转换的输入电压范围。 指A/D转换器对输入模拟信号的分辨能力,以A/D转换器输出的二进制数的位数有关。 理论上,n位输出的A/D转换器能区分2n个不同等级的输入模拟电压,能区分的输入电压的最小值(即量化阶距)为满量程输入电压的1/2n。当满量程输入电压一定时,输出的位数越多,能区分的输入电压的最小值越小,即分辨率越高。 例如:某A/D转换器的分辨率为8位,满量程输入电压VFS=5V,则分辨率是5/(28-1)≈0.0196(V)。 分辨率通常也可以用输出的二进制位数表示,例如:ADC0808的分辨率为8位。
8.3.2 模/数转换器的性能参数 量化误差 A/D转换器将连续的模拟量转换为离散的数字量,对一定范围内的连续变化的模拟量只能量化成同一个数字量,这种误差是由于量化引起的,所以称为量化误差; 量化误差是量化器固有的,是不可克服的。 转换误差 指A/D转换器实际的输出数字量与理论上的输出数字量之间的差别,通常以整个输入范围内的最大输出误差表示。 一般用最低有效位(LSB)的倍数来表示转换误差,例如转换误差≤±1LSB,就说明在整个输入范围内,输出数字量与理论上的输出数字量之间的误差小于最低位的一个数字。
8.3.2 模/数转换器的性能参数 转换精度 是指最低有效位对应的模拟量; 用来表示理论输出与真实输出的误差; 常用数字量最低有效位LSB对应模拟量的几分之几来表示,如±1/2LSB。 转换时间 是指A/D转换器开始一次转换到完成转换得到相应的数字量输出所需的时间。
8.3.3 8位A/D转换器ADC0808/0809 A/D转换器种类有很多,按位数来分: 有8位、10位、12位、16位等。 按结构来分: 有单一的、包含多路开关的和多功能的。 按转换速度可以分: 有低速、中速和高速。 按输出方式分: 有并行比较型、逐次比较型、双积分型等。
8.3.3 8位A/D转换器ADC0808/0809 并行比较型A/D转换器的转换速度最高,但分辨率一般在8位以内。因为n位并行比较型A/D转换器中需要2n-1个电压比较器,当n大于8以后,需要的电压比较器太多使得芯片的面积大、成本高。 双积分型A/D转换器的分辨率高,抗干扰能力强,但转换速度低,通常用在对速度要求不高但需要很高精度的场合。 逐次比较型A/D转换器的分辨率高,转换速度比并行比较型要低,但远高于双积分型A/D转换器。因此,逐次比较型A/D转换器适合既要求精度、又要求速度的场合。
8.3.3 8位A/D转换器ADC0808/0809 ADC0808是ADC0809的简化版本,功能基本相同。 ADC0808的误差为±1/2LSB ADC0809的误差为±1LSB PROTEUS ISIS软件提供ADC0808模块进行A/D转换。
1、ADC0808/0809的内部结构及引脚 ADC0808/0809是CMOS工艺制作的8位逐次逼近式A/D转换器; 包含有一个8通道的多路模拟开关和寻址逻辑,可接入8个模拟输入电压并对其进行分时转换; 其数字输出部分,分辨率为8位。 具有三态锁存和缓冲能力,可直接与微处理器的总线相连。 转换时间为200µs,工作温度范围为–40℃ ~+85℃,功耗为15mw,输入模拟电压范围为0~5V,采用5V电源供电。
1、ADC0808/0809的内部结构及引脚 (1) ADC0808/0809的内部结构:
(2)引脚说明 IN0~IN7 8路模拟电压输入
(2)引脚说明 ADD 3个引脚分别为:ADDA/ADDB/ADDC 8路模拟电压输入的选择 译码后选择8路模拟电压输入中的一路进行转换
(2)引脚说明 ADDC ADDB ADDA 模拟输入通道 IN0 1 IN1 IN2 IN3 IN4 IN5 IN6 IN7
(2)引脚说明 ALE 地址锁存允许信号 控制通道选择开关的打开与闭合 ALE=1时接通某一路的模拟信号 ALE=0时,锁存该路的模拟信号
(2)引脚说明 D0~D7 8位数字量输出
(2)引脚说明 START 转换启动信号 宽度大于200ns 上升沿逐次逼近寄存器SAR 下降沿启动ADC转换
(2)引脚说明 CLOCK 时钟脉冲输入 频率范围为10KHz~1MHz 典型值为640KHZ
(2)引脚说明 EOC 转换结束信号 输出 上升沿有效闭合
(2)引脚说明 OE CPU允许输出信号 打开三态输出锁存器的门,把转换结果送到数据总线上
(2)引脚说明 VREF(+) 参考电压输入 T形电阻网络用 通常接Vcc VREF(-) 参考电压输入 T形电阻网络用 通常接地
2、ADC0808/0809的工作过程和时序分析 工作过程: 由ADDA、ADDB、ADDC三位决定选择哪一路模拟信号; ALE=1,该路模拟信号经选择开关到达比较器的输入端。 转换启动信号START紧随ALE之后(或与ALE同时)出现,START的上升沿将逐次逼近寄存器复位,下降沿启动A/D转换; START的上升沿之后的2μs加8个时钟周期内(不定),EOC信号将变为低电平,表示正在转换,EOC再变高电平时说明转换结束; 此时转换结果已经保存到8位三态输出锁存器; CPU获取转换结束信号EOC后,设置OE为高电平,打开三态输出锁存器,转换结果出现在数据总线上,CPU即可读取。
2、ADC0808/0809的工作过程和时序分析 时序图:
2、ADC0808/0809的工作过程和时序分析 CPU可以采用多种方式获取EOC,然后读取数据 延时等待方式 查询方式 中断方式 DMA方式
(1)延时等待方式 这种方式下,不使用转换结束信号EOC,但要预先计算好A/D转换的时间。 当CPU启动A/D转换后,执行一段略大于A/D转换时间的延迟程序后,即可读取数据。 采用软件延时方式,无需硬件连线,但要占用CPU大量的时间,而且无法精确计算A/D转换的时间,故多用于CPU处理任务较少的系统中。
(2)查询方式 这种方式下,通常把转换结束信号EOC作为状态信号经三态缓冲器送到系统总线的某一位上。 CPU在启动A/D转换后,开始查询转换是否结束,一旦查到转换结束信号EOC有效(先低后高),便读取ADC中的数据。 这种方式程序设计比较简单,实时性也较强,是比较常用的一种方法。
(3)中断方式 这种方式下,把转换结束信号EOC作为中断请求信号接到系统中的中断控制器(如8259A)。 当转换结束时,向CPU申请中断,CPU响应中断后,在中断服务程序中读取数据。 在这种方式中,ADC与CPU同时工作,效率较高,接口简单。适用于实时性较强或参数较多的数据采集系统。
(4)DMA方式 这种方式下,把转换结束信号EOC作为DMA请求信号接到系统中的DMAC(如8237A)。 转换结束时,向CPU申请DMA传输,CPU响应后,通过DMAC直接将转换结果送入内存缓冲区。 这种方式不需要CPU的参与,特别适合要求高速采集大量数据的情况。
3、DAC0832与CPU接口举例 ADC0808/0809带有8位三态输出锁存器,所以可以直接和CPU连接; 但为了增加I/O的接口功能,通常在使用的过程中通过I/O接口芯片和CPU连接; 这类芯片有74LS373、Intel 8255A等。
3、DAC0832与CPU接口举例 【例8-2】图8-15是ADC0808通过8255A与CPU接口的例子。 图中,0808的D7~D0接8255A的PA口; ADDC、ADDB、ADDA接PB2~PB0;START接PC6,ALE接PC7,EOC接PC0 8255A的PA口输入,PB口输出,PC口高4位输入,PC口低4位输出,三个口均工作于方式0。 8255A的地址为200H~206H。当以查询的方式采样数据时,只需不断检测PC0。
【例8-2】程序段1 编程程序以查询的方式对IN0端进行100次采样数据存入BUF开始的内存中。
【例8-2】程序段1 DATA SEGMENT BUF DB 100 DUP(?);预留100个字节空间,存放采样后结果 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, 10010001B ;8255初始化 MOV DX, 206H OUT DX, AL MOV AL, 00H MOV DX, 204H OUT DX, AL ;START、ALE=0
【例8-2】程序段1 MOV BX, OFFSET BUF ;BUF是数据区首地址 MOV CX, 100 ;CX中是采样次数 MOV AL, 00H MOV DX, 202H OUT DX, AL ; 通过PB2~PB0选中采样通道IN0 AGAIN: MOV AL, 0FH MOV DX, 206H OUT DX, AL ; 通过PC7使ALE=1 MOV AL, 0DH OUT DX, AL ; 通过PC6使START=1
【例8-2】程序段1 MOV DX, 204H ; START、ALE=0 OUT DX, AL MOV AL, 00H MOV DX, 204H ; START、ALE=0 OUT DX, AL WAIT0: IN AL, DX ; 循环检测PC口的PC0(EOC信号) AND AL, 01H JNZ WAIT0 ; 若EOC为低,则开始转换 WAIT1: IN AL, DX ;继续循环检测PC口的PC0(EOC信号) AND AL, 01H JZ WAIT1 ;若EOC为高,则转换结束,可以读数据
【例8-2】程序段1 MOV DX, 200H IN AL, DX ; 从PA口输入数据 MOV [BX], AL ; 存入内存 INC BX LOOP AGAIN ; 循环100次采样 RET CODE ENDS END START
【例8-2】程序段2 如果对8路模拟通道轮流采样,可以采用二重循环结构,内循环对IN0~IN7端进行轮流采样,外循环控制100次内循环,即采集100组数据。程序如下: DATA SEGMENT BUF DB 800 DUP(?) ;预留空间,存放采样后结果 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX
【例8-2】程序段2 MOV AL, 10010001B ;8255编程 MOV DX, 206H OUT DX, AL MOV AL, 00H MOV DX, 204H OUT DX, AL ;START、ALE=0 MOV BX, OFFSET BUF ;BUF是数据区首地址 MOV CX, 100 ;CX中是采样次数 AGAIN0: MOV AH, 00H ;AH中存放通道选择信息,初始化是IN0 AGAIN1: MOV AL, AH MOV DX, 202H OUT DX , AL ;通过PB2-0选中采样通道,一开始是IN0
【例8-2】程序段2 MOV DX, 206H OUT DX, AL ; 通过PC7使ALE=1 MOV AL, 0DH MOV AL, 0FH MOV DX, 206H OUT DX, AL ; 通过PC7使ALE=1 MOV AL, 0DH OUT DX, AL ; 通过PC6使START=1 MOV AL, 00H MOV DX, 204H ; START、ALE=0 WAIT0: IN AL, DX ; 循环检测PC口的PC0(EOC信号) AND AL, 01H JNZ WAIT0 ; 若EOC为低,则开始转换 WAIT1: IN AL, DX ; 继续循环检测PC口的PC0(EOC信号) AND AL, 01H JZ WAIT1 ; 若EOC为高,则转换结束,可以读数据
【例8-2】程序段2 IN AL, DX ; 从PA口输入数据 MOV [BX], AL ; 存入内存 INC BX MOV DX, 200H IN AL, DX ; 从PA口输入数据 MOV [BX], AL ; 存入内存 INC BX INC AH ; 调整AH中通道信息 CMP AH, 8 JNZ AGAIN1 ; 内循环控制IN~IN7端进行轮流采样 LOOP AGAIN0 ; 外循环100组采样 RET CODE ENDS END START
3、DAC0832与CPU接口举例 【例8-3】图8-16是ADC0808通过8255A、8253与CPU接口的例子,与例题9-2相比,多了一片8253(地址为300H~306H),这片8253的作用是提供某种频率的连续性脉冲,进行定时采样。如图所示,OUT0输出的脉冲经反相后接ADC 0809的START和ALE,每个脉冲启动一次A/D变换。8253通道0工作于方式1,CLK0输入1MHZ。同样对IN0连续采样100个数据,编写程序以5KHz频率进行采样,即每隔200µs采样一个数据。通道0的计数初值N=1MHz / 5KHz=200,采用二进制计数法。
【例8-3】图
【例8-3】程序段 DATA SEGMENT BUF DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX, DATA MOV DS, AX MOV AL, 10010001B ;8255编程 MOV DX, 206H OUT DX, AL MOV BX , OFFSET BUF ;BUF是数据区首地址 MOV CX , 100 ;CX中是采样次数
【例8-3】程序段 MOV AL, 00010010B ;8253编程,通道0方式1 MOV DX, 306H OUT DX, AL MOV AL, 00H MOV DX, 202H OUT DX, AL ; 通过PB2-0选中采样通道IN0 AGAIN: MOV AL, 0FH MOV DX, 206H OUT DX, AL ; 通过PC7使ALE=1 MOV AL, 0DH MOV DX, 206H ; 通过PC6使START=1 OUT DX, AL
【例8-3】程序段 MOV AL, 00H MOV DX, 204H ; START、ALE=0 OUT DX, AL WAIT0: IN AL, DX ; 循环检测PC口的PC0(EOC信号) AND AL , 01H JNZ WAIT0 ; 若EOC为低,则开始转换 WAIT1: IN AL , DX ; 继续循环检测PC口的PC0(EOC信号) AND AL, 01H JZ WAIT1 ; 若EOC为高,则转换结束,可以读数据
【例8-3】程序段 MOV DX, 200H IN AL, DX ; 从PA口输入数据 MOV [BX], AL ; 存入内存 INC BX LOOP AGAIN ; 循环100次采样 RET CODE ENDS END START