ch.8 模拟量的输入输出

63
Ch.8 模模模模模模模模 模模模模 模模模模模模模模模模模模 D/A 模模模 模模模模模模模模模 A/D 模模模 模模模模模模模模模

Upload: jael-elliott

Post on 02-Jan-2016

95 views

Category:

Documents


1 download

DESCRIPTION

Ch.8 模拟量的输入输出. 本章内容 模拟量输入输出通道的组成 D/A 转换器 原理及连接使用方法 A/D 转换器 原理及连接使用方法. 概述. 模拟量 I/O 接口的作用: 实际工业生产环境 —— 连续变化的模拟量 例如:电压、电流、压力、温度、位移、流量 计算机内部 —— 离散的数字量 二进制数、十进制数 工业生产过程的闭环控制. 模拟量. 数字量. 数字量. 模拟量. 传感器. A/D. D/A. 执行元件. 计算机. 模拟量输入 ( 数据采集 ). 模拟量输出 ( 过程控制 ). 8.1 模拟量 I/O 通道的组成. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ch.8  模拟量的输入输出

Ch.8 模拟量的输入输出

本章内容 模拟量输入输出通道的组成 D/A 转换器

原理及连接使用方法 A/D 转换器

原理及连接使用方法

Page 2: Ch.8  模拟量的输入输出

模拟量 I/O 接口的作用: 实际工业生产环境——连续变化的模拟量

例如:电压、电流、压力、温度、位移、流量 计算机内部——离散的数字量

二进制数、十进制数 工业生产过程的闭环控制

概述

模拟量D/A传感器 执行元件A/D

数字量 数字量 模拟量

模拟量输入( 数据采集 )

模拟量输出( 过程控制 )

计算机

Page 3: Ch.8  模拟量的输入输出

8.1 模拟量 I/O 通道的组成

模拟接口电路的任务模拟电路的任务

00101101

10101100工

传感器

放大滤波

多路转换&

采样保持

A/D

转换

放大驱动

D/A

转换输出接口

机执行机构

输入接口

物理量变换

信号处理

信号变换

I/O

接口

输入通道

输出通道

Page 4: Ch.8  模拟量的输入输出

模拟量输入通道 传感器( Transducer )

非电量→电压、电流 变送器( Transformer )

转换成标准的电信号 信号处理( Signal Processing )

放大、整形、滤波 多路转换开关( Multiplexer )

多选一 采样保持电路( Sample Holder, S/H )

保证变换时信号恒定不变 A/D 变换器( A/D Converter )

模拟量转换为数字量

Page 5: Ch.8  模拟量的输入输出

模拟量输出通道 D/A 变换器( D/A Converter )

数字量转换为模拟量 低通滤波

平滑输出波形 放大驱动

提供足够的驱动电压,电流

Page 6: Ch.8  模拟量的输入输出

8.2 数 / 模( D/A )变换器 8.2.1 D/A 变换器的基本原理及技术指标

D/A 变换器的基本工作原理 组成:模拟开关、电阻网络、运算放大器 两种电阻网络:权电阻网络、 R-2R 梯形电阻网络 基本结构如图:

Vref

Rf

模拟开关电阻网络

VO

数字量∑

Page 7: Ch.8  模拟量的输入输出

D/A 变换原理

运放的放大倍数足够大时,输出电压 Vo 与输入电压 Vin 的关系为:

fO in

RV = - V

R式中: Rf 为反馈电阻 R 为输入电阻 Vin

Rf

Vo

R

Page 8: Ch.8  模拟量的输入输出

若输入端有 n 个支路 , 则输出电压 VO 与输入电压 Vi 的关系为:

n

0 f ini=1 i

1V = -R V

R

Vin

Rf

VO

R1式中: Ri 为第 i 支路的输

入电阻

Rn

Page 9: Ch.8  模拟量的输入输出

令每个支路的输入电阻为 2iRf , 并令 Vin 为一基准电压 Vref ,则有

如果每个支路由一个开关 Si 控制, Si=1 表示Si 合上, Si=0 表示 Si 断开,则上式变换为

n n

0 f ref refi ii=1 i=1f

1 1V = -R V = - V

2 R 2

n

0 i refii=1

1V = - S V

2若 Si=1, 该项对 VO 有贡

若 Si=0, 该项对 VO 无贡献

Page 10: Ch.8  模拟量的输入输出

2R

4R

8R

16R

32R

64R

128R

256R

Vref

Rf

VO

S1

S2

S3

S4

S5

S6

S7

S8

与上式相对应的电路如下 ( 图中 n=8) :

图中的电阻网络就称为权电阻网络

Page 11: Ch.8  模拟量的输入输出

如果用 8 位二进制代码来控制图中的 S1~S8(Di=1时 Si 闭合; Di=0时 Si 断开 ) ,那么根据二进制代码的不同,输出电压 VO 也不同,这就构成了 8 位的 D/A 转换器。

可以看出,当代码在 0~ FFH 之间变化时,VO 相应地在 0~ -(255/256)Vref 之间变化。

为控制电阻网络各支路电阻值的精度,实际的 D/A 转换器采用 R-2R 梯形电阻网络( 见下页 ) ,它只用两种阻值的电阻 (R和2R) 。

Page 12: Ch.8  模拟量的输入输出

R-2R 梯形电阻网络

Rf

ViV0

…Vref

n-1 2 1 0

2R 2R 2R2R

R R RVn-1 V2 V1 V0

2R

+

-

Page 13: Ch.8  模拟量的输入输出

D/A 转换器的主要技术指标 分辨率( Resolution )

输入的二进制数每 ±1 个最低有效位 (LSB) 使输出变化的程度。

一般用输入数字量的位数来表示 : 如 8 位、 10 位例:一个满量程为 5V的 10位DAC,±1 LSB 的变化将使输出变化 5/(210-1)=5/1023=0.004888V=4.888mV

转换精度(误差) 实际输出值与理论值之间的最大偏差。 一般用最小量化阶⊿来度量,如 ±1/2 LSB 也可用满量程的百分比来度量,如 0.05% FSRLSB: Least Significant BitFSR: Full Scale Range)

Page 14: Ch.8  模拟量的输入输出

转换时间

从开始转换到与满量程值相差 ±1/2 LSB 所对应的模拟量所需要的时间

t

V

1/2 LSB

tC

VFULL

0

Page 15: Ch.8  模拟量的输入输出

8.2.2 典型 D/A 转换器 DAC0832

特性: 8 位电流输出型 D/A 转换

器 T 型电阻网络 差动输出

引线图见教材 p351

12345678910

20191817161514131211

DAC0832

CS

1WRAGND

3DI

2DI

1DI

0DIREFV

fbR

DGND 1OUTI2OUTI

7DI6DI5DI4DI

XFER

2WR

ILE

VCC

Page 16: Ch.8  模拟量的输入输出

DAC0832 内部结构

输入数据 ~4 7

~13 16

19

12

18

17XFERWR2

WR1

CS

I LE &

≥ 1

≥ 1

LE1 LE2 Rfb

8 位输入寄存器

8 位DAC寄存器

8 位D/A转换器

VREF

I OUT2

I OUT1

Rfb

AGND( )模拟地

VCC(+5V +15V或 )20

10

3

9

11128

DAC0832框图DGND(数字地)

D0 D7 ~~

Page 17: Ch.8  模拟量的输入输出

引脚功能 D7~ D0 :输入数据线 ILE :输入锁存允许 CS :片选信号 用于把数据写入到输入锁存器 WR1 :写输入锁存器 WR2 :写 DAC 寄存器 XFER :允许输入锁存器的数据传送到 DAC 寄存器 上述二个信号用于启动转换 VREF :参考电压, -10V~ +10V ,一般为 +5V或 +10V IOUT1、 IOUT2: D/A 转换差动电流输出,接运放的输入 Rfb :内部反馈电阻引脚,接运放输出 AGND、 DGND :模拟地和数字地

Page 18: Ch.8  模拟量的输入输出

工作时序 D/A 转换可分为两个阶段:

CS=0、WR1=0、 ILE=1 ,使输入数据锁存到输入寄存器; WR2=0、 XFER=0 ,数据传送到 DAC 寄存器,并开始转换。

D0 D7~

CS

WR1

I LE(高电平)

WR2

XFER

(模拟输出电流变化)

写输入寄存器

写 DAC寄存器

Page 19: Ch.8  模拟量的输入输出

工作方式 单缓冲方式

使输入锁存器或 DAC 寄存器二者之一处于直通。 CPU 只需一次写入即开始转换。控制比较简单。见教材 p352 图。

双缓冲方式(标准方式) 转换要有两个步骤:

将数据写入输入寄存器 CS=0、WR1=0、 ILE=1

将输入寄存器的内容写入 DAC 寄存器 WR2=0、XFER=0

优点:数据接收与 D/A 转换可异步进行; 可实现多个 DAC 同步转换输出——分时写入、同步转换

直通方式 使内部的两个寄存器都处于直通状态。模拟输出始终跟随输入变化。 不能直接与数据总线连接,需外加并行接口 (如 74LS373、 8255等 ) 。

Page 20: Ch.8  模拟量的输入输出

双缓冲方式——同步转换举例

A10-A0

译码器

0832-1

0832-2

port1

port2

port3

Page 21: Ch.8  模拟量的输入输出

输出方式

DAC0830 为电流输出型 D/A 转换器,要获得模拟电压输出时,需要外接一个运算放大器。

(1) 单极性模拟电压输出。如果参考电压为 +5 V ,则当数

字量 N从 00H至 FFH 变化时,对应的模拟电压 VO 的输出范围

是- 0~ 5 V ,如下图所示。 VREF

VFB

IOUT2

IOUT1

£

£«

AGND

VO

DAC

0830

0831

0832

DB

£«5 V

Page 22: Ch.8  模拟量的输入输出

(2) 双极性模拟电压输出。如果要输出双极性电压,则需

在输出端再加一级运算放大器作为偏移电路,如下图所示。当

数字量 N从 00H至 FFH 变化时,对应的模拟电压 VO 的输出范

围是- 5~ +5 V 。

VREF

VFB

IOUT2

IOUT1

£

£«

AGND

VO

DAC

0830

0831

0832

DB

15 k£«5 V

7.5 k£

£«

15 k

VO

Page 23: Ch.8  模拟量的输入输出

双缓冲方式的程序段示例

本例中三个端口地址的用途:port1 选择 0832-1 的输入寄存器

port2 选择 0832-2 的输入寄存器 port3 选择 0832-1和 0832-2的DAC 寄存器

MOV AL, data ; 要转换的数据送 AL

MOV DX, port1 ; 0832-1 的输入寄存器地址送 DX

OUT DX, AL ; 数据送 0832-1 的输入寄存器MOV DX, port2 ; 0832-2 输入寄存器地址送 DX

OUT DX, AL ; 数据送 0832-2 的输入寄存器MOV DX, port3 ; DAC 寄存器端口地址送 DX

OUT DX, AL ; 数据送 DAC 寄存器,并启动同步转换

HLT

Page 24: Ch.8  模拟量的输入输出

D/A 转换器的应用 函数发生器

只要往 D/A 转换器写入按规律变化的数据,即可在输出端获得正弦波、三角波、锯齿波、方波、阶梯波、梯形波等函数波形。

直流电机的转速控制 用不同的数值产生不同的电压,控制电机的转速 其他需要用电压 / 电流来进行控制的场合

例子参见 p354-p356 。

Page 25: Ch.8  模拟量的输入输出

应用举例【例 1 】 锯齿波的产生。

VREF

RFB

IOUT2

IOUT1

£

£«VO

£«5 VD0¡«D 7

DAC0830

ILE

CS

1WR

2WR

XFER

8255A

PA 0¡«PA 7

PB4

PB3

PB2

PB1

PB0

8086»ò

8088

Page 26: Ch.8  模拟量的输入输出

控制程序清单如下:

; 8255A 初始化

MOV DX, 0E003H ; 8255A 的控制端口地址

MOV AL, 80H ;设置 8255A 的方式字

OUT DX, AL

; B 口控制 DAC 的转换

MOV DX, 0E001H ; 8255A的 B 口地址

MOV AL, 10H ;置 0830 为直通工作方式

OUT DX, AL

Page 27: Ch.8  模拟量的输入输出

;生成锯齿波

MOV DX, 0E000H ;设置 DAC 端口号

MOV AL, 0H ;设置初值

L1 : OUT DX, AL ;向 DAC 送数据

INC AL ;输出数据加 1

NOP ;延时

JMP L1

Page 28: Ch.8  模拟量的输入输出

通过 AL加 1 ,可得到正向的锯齿波。如要得到负向的锯

齿波,则只要将程序中的 INC AL 改为 DEC AL 即可。可以通

过延时的办法改变锯齿波的周期,若延迟时间较短,则可用

NOP 指令来实现;若延迟时间较长,则可用一个延时子程序。

延迟时间不同,波形周期不同,锯齿波的斜率就不同。

Page 29: Ch.8  模拟量的输入输出

【例 2 】 三角波的产生。在原有硬件电路的基础上,换用下述程序即可产生三角波。

MOV DX, 0E000H

MOV AL, 0H ;输出数据从 0 开始L2: OUT DX, AL

INC AL ;输出数据加 1

JNZ L2 ; AL 是否加满?未满,继续MOV AL, 0FFH ;已满, AL 置全“ 1”

L3: OUT DX, AL

DEC AL ;输出数据减 1

JNZ L3 ; AL 是再减到“ 0” ?不是,继续JMP L2

Page 30: Ch.8  模拟量的输入输出

8.3 模 / 数( A/D )转换器 用途

将连续变化的模拟信号转换为数字信号,以便于计算机进行处理。

常用于数据采集系统或数字化声音。 A/D 转换的四个步骤

采样→保持→量化→编码 采样 /保持:由采样保持电路( S/H)完成 量化 /编码:由 ADC 电路完成( ADC: AD 变换

器)

Page 31: Ch.8  模拟量的输入输出

1) 采样和保持

采样 将一个时间上连续变化的模拟量转为时间上断续变化的

(离散的)模拟量。 或:把一个时间上连续变化的模拟量转换为一个脉冲串,脉冲的幅度取决于输入模拟量。

保持 将采样得到的模拟量值保持下来,使之等于采样控制脉

冲存在的最后瞬间的采样值。 目的: A/D 转换期间保持采样值恒定不变。

对于慢速变化的信号,可省略采样保持电路

Page 32: Ch.8  模拟量的输入输出

采样保持电路( S/H)

由MOS管采样开关 T 、保持电容 Ch 和运放构成的跟随器三部分组成。

采样控制信号 S(t)=1 时, T导通, Vin向 Ch充电, Vc和 Vout 跟踪 Vin 变化,即对 Vin 采样。 S(t)=0 时, T截止, Vout 将保持前一瞬间采样的数值不变。

Ch

T VoutVin

采样控制

S(t)

Page 33: Ch.8  模拟量的输入输出

采样保持电路的波形

Vin

S(t)

Vout

进行 A/D 转换时所用的输入电压,就是对保持下来的采样电压(每次采样结束时的输入电压)进行转换。

Page 34: Ch.8  模拟量的输入输出

采样周期的确定

采样通常采用等时间间隔采样。 采样频率 fs 不能低于 2fimax( fimax 为输入

信号 Vin 的最高次谐波分量的频率); fs 的上限受计算机的速度、存储容量、器件

速度的限制。 实际中一般取 fs为 fimax 的 4-5倍。

Page 35: Ch.8  模拟量的输入输出

2) 量化和编码 量化就是用基本的量化电平的个数来表示采样到模拟电压值。即把时间上离散而数值上连续的模拟量以一定的准确度变换为时间上、数值上都离散的具有标准量化级的等效数字值。(量化电平的大小取决于 A/D 变换器的字长)

只有当电压值正好等于量化电平的整数倍时,量化后才是准确值,否则量化后的结果都只能是输入模似量的近似值。这种由于量化而产生的误差叫做量化误差。量化误差是由于量化电平的有限性造成的,所以它是原理性误差,只能减小,而无法消除。为减小量化误差,根本的办法是减小量化电平(即增加字长)。

编码是把已经量化的模拟数值 (它一定是量化电平的整数倍 )用二进制码、 BCD 码或其它码来表示。

Page 36: Ch.8  模拟量的输入输出

A/D 转换器的分类 根据 A/D 转换原理和特点的不同,可把 ADC

分成两大类:直接 ADC和间接 ADC。 直接 ADC 是将模拟电压直接转换成数字量,常用的

有: 逐次逼近式 ADC 、计数式 ADC 、并行转换式 ADC 等。

间接 ADC 是将模拟电压先转换成中间量,如脉冲周期 T 、脉冲频率 f 、脉冲宽度 τ 等,再将中间量变成数字量。常见的有:

单积分式 ADC 、双积分式 ADC, V/F 转换式 ADC 等。

Page 37: Ch.8  模拟量的输入输出

各种 ADC 的优缺点 计数式 ADC :最简单,但转换速度最慢。 并行转换式 ADC :速度最快,但成本最高。 逐次逼近式 ADC :转换速度和精度都比较高,且比较简单,价格低,所以在微型机应用系统中最常用。

双积分式 ADC :转换精度高,抗干扰能力强,但转换速度慢,一般应用在精度高而速度不高的场合,如测量仪表。

V/F 转换式 ADC :在转换线性度、精度、抗干扰能力等方面有独特的优点,且接口简单、占用计算机资源少,缺点也是转换速度慢。在一些输出信号动态范围较大或传输距离较远的低速过程的模拟输入通道中应用较为广泛。

Page 38: Ch.8  模拟量的输入输出

8.3.1 工作原理及技术指标 逐次逼近型 A/D 转换器

结构:由 D/A 转换器、比较器和逐次逼近寄存器SAR组成。见 P360页图。

Vi -

+逐次逼近寄存器

D/A 转换器

Vc

比较器

数字量输出

控制电路模拟量输入

Page 39: Ch.8  模拟量的输入输出

工作原理

类似天平称重量时的尝试法,逐步用砝码的累积重量去逼近被称物体。 例如:用 8个砝码 20g , 21g ,…, 27g ,可以称出 1~ 255g 之 间的物体。现有一物体,用砝码称出其重量(假定重量为 176g )。

1) ADC从高到低逐次给 SAR 的每一位“置 1”(即加上不同权重的砝码), SAR 相当于放法码的称盘;

2)每次 SAR 中的数据经 D/A 转换为电压 VC ;3) VC 与输入电压 Vi 比较,若 VC≤Vi ,保持当前位的‘ 1’ ,

否则当前位‘置 0’ ;4)从高到低逐次比较下去,直到 SAR 的每一位都尝试完;5) SAR 内的数据就是与 Vi 相对应的 2 进制数。

Page 40: Ch.8  模拟量的输入输出

主要技术指标 精度

量化间隔 ( 分辨率 ) = Vmax/ 电平数 ( 即满量程值 ) 例:某 8 位 ADC 的满量程电压为 5V ,则其分辨率为 5V/255=19.6mV

量化误差 : 用数字(离散)量表示连续量时,由于数字量字长有限而无法精确地表示连续量所造成的误差。( 字长越长,精度越高 )绝对量化误差 = 量化间隔 /2 = ( 满量程电压 /(2n-1))/2

相对量化误差 = 1/2 * 1/ 量化电平数目 * 100%

例:满量程电压 =10V, A/D 变换器位数 =10 位,则 绝对量化误差 ≈ 10/211 = 4.88mV

相对量化误差 ≈ 1/211 *100% = 0.049%

Page 41: Ch.8  模拟量的输入输出

主要技术指标(续) 转换时间

转换一次需要的时间。精度越高(字长越长),转换速度越慢。

输入动态范围 允许转换的电压的范围。如 0 ~ 5V、 -

5V~+5V 、 0 ~ 10V等。

Page 42: Ch.8  模拟量的输入输出

典型的 A/D 转换器简介 ADC0809

8 通道( 8 路)输入

8 位字长 逐位逼近型 转换时间 100μs 内置三态输出缓冲

器(可直接接到数据总线上)

外部引脚见教材p359

Page 43: Ch.8  模拟量的输入输出

引脚功能

D7~D0 :输出数据线(三态)IN0~ IN7: 8 通道(路)模拟输入ADDA、ADDB、ADDC :通道地址(通道选

择)ALE :通道地址锁存START :启动转换EOC :转换结束,可用于查询或作为中断申请OE :输出允许(打开输出三态门)CLK :时钟输入( 10KHz~ 1.2MHz )VREF(+)、VREF(-) :基准参考电压

Page 44: Ch.8  模拟量的输入输出

ADC0809 内部结构START EOC CLK OE

D7

D0

VREF(+) VREF(-)

ADDCADDBADDA

ALE

IN0

IN7

比较器

8 路模拟开关

树状开关

电阻网络

三态输出锁存

时序与控制

地址锁存

及译码

D/A

8个模拟输入通道

8 选 1逐位逼近寄存器

SAR

Page 45: Ch.8  模拟量的输入输出

工作时序

启动地址锁存

ADDA ADDC

ALE/ START

EOC

OE

D0 D7

转换时间

② ③

Page 46: Ch.8  模拟量的输入输出

ADC0809 的工作过程

根据时序图, ADC0809 的工作过程如下:①把通道地址送到 ADDA~ ADDC 上,选择一个模拟输入

端; ②在通道地址信号有效期间, ALE 上的上升沿使该地址锁

存到内部地址锁存器;③START 引脚上的下降沿启动 A/D 变换;

④变换开始后, EOC 引脚呈现低电平, EOC重新变为高

电平时表示转换结束;⑤OE 信号打开输出锁存器的三态门送出结果 。

Page 47: Ch.8  模拟量的输入输出

ADC0809 与系统的连接 模拟输入端 INi

单路输入 模拟信号可连接到任何一个输入端; 地址线可根据输入固定连接;也可以由 CPU给一个固定地址。

多路输入 模拟信号按顺序分别连接到输入端; 要转换哪一路输入,就将其编号送到地址线上 ( 动态选择 ) 。

单路输入时

ADDCADDBADDA

IN4

ADC0809

输入

多路输入时

ADDCADDBADDA

IN0IN1IN2IN3IN4ADC0809

输入 0输入 1输入 2输入 3输入 4

CPU 指定通道号

+5V

Page 48: Ch.8  模拟量的输入输出

地址线 ADDA-ADDC 多路输入时,地址线不能固定连接到+ 5V 或地线,而是要通过一

个接口芯片与数据总线连接。接口芯片可以选用: 锁存器 74LS273, 74LS373等(要占用一个 I/O 地址) 可编程并行接口 8255 (要占用四个 I/O 地址)

CPU 用一条OUT 指令把通道地址通过接口芯片送给 ADC0809

ADDCADDBADDA

IN0IN1IN2IN3IN4

ADC0809

输入

DB

74LS273

Q2Q1Q0CP

来自 I/O译码

D0-D7

ADDCADDBADDA

IN0IN1IN2IN3IN4

ADC0809

DB

8255

PB2PB1PB0CS

来自 I/O译码

D0-D7

A1A0

A1A0

用锁存器作为 ADC0809 的接口 用 8255 作为 ADC0809 的接口

Page 49: Ch.8  模拟量的输入输出

数据输出线 D0-D7

内部已接有三态门,故可直接连到 DB 上 也可另外通过一个外部三态门与 DB 相连 上述两种方法均需占用一个 I/O 地址

D0-D7

ADC0809

DB

OE来自 I/O

译码

D0-D7

ADC0809

DB

OE

来自 I/O译码

直接与 DB 相连 通过三态门与 DB 相连

74LS244

+5V

DIDO

E1E2

Page 50: Ch.8  模拟量的输入输出

地址锁存信号 ALE和启动转换信号 START 两种连接方法:

分别连接:用两个信号分别进行控制——需占用两个 I/O 端口或两个 I/O线 ( 用 8255时 ) ;

统一连接:用一个脉冲信号的上升沿进行地址锁存,下降沿实现启动转换——只需占用一个 I/O 端口或一个 I/O线 ( 用8255时 ) ,参见教材 p362 图。

ADC0809

ALE

START

独立连接

来自 I/O译码 1

来自 I/O译码 2

ADC0809

ALE

START

统一连接

来自 I/O译码

Page 51: Ch.8  模拟量的输入输出

转换结束 EOC

软件延时等待 ( 比如延时 1ms)—— 不用 EOC 信号 CPU 效率最低,只能按最大转换时间延时 简单,容易实现

软件查询 EOC状态 EOC 通过一个三态门连到数据总线的 D0( 或D1、D2等 ) 三态门要占用一个 I/O 端口地址 CPU 效率低

把 EOC 作为中断申请信号,向CPU申请中断 在中断服务程序中读入转换结果,效率高

Page 52: Ch.8  模拟量的输入输出

D0

IN0

A15-A0

IOR

IOW

D7-D0 D7-D0

EOC

OE

START

ALEADDCADDBADDA

ADC0809

一个连接实例(用查询方式)

模拟信号输入

Page 53: Ch.8  模拟量的输入输出

进行一次 A/D 转换的程序 ( 以上图为例 ) 用延时等待的方法

……

MOV DX, start_port

OUT DX, AL ; 启动转换CALL DELAY_1MS ;延时 1ms

MOV DX, oe_port

IN AL, DX ;读入结果……

用查询 EOC状态的方法

……

MOV DX, start_port

OUT DX, AL ; 启动转换LL: MOV DX, eoc_port

IN AL, DX ;读入 EOC状态AND AL, 01H ;测试第 0位 (EOC状态位 )

JZ LL ;未转换完,则循环检测MOV DX, oe_port

IN AL, DX ;读入结果……

Page 54: Ch.8  模拟量的输入输出

ADC芯片的应用例 1 编程启动、转

换结束中断处理

例 2 编程启动、转换结束查询处理

Page 55: Ch.8  模拟量的输入输出

中断方式

D0~ D7

220h

IRQ2

A0~ A9 译码

Vcc

D0~ D7

EOC

ADDAADDBADDCALE

模拟输入( 0~ 5V)500KHzCLOCK

VREF(+)

+5V

IN0

OE

START

GND VREF(-)

IOR

IOW

Page 56: Ch.8  模拟量的输入输出

主程序; 数据段adtemp db 0 ;给定一个临时变量; 代码段

…… ; 设置中断向量等工作

sti ; 开中断mov dx,220h

out dx,al ; 启动 A/D 转换…… ;其他工作

Page 57: Ch.8  模拟量的输入输出

中断服务程序adint proc

sti ; 开中断push ax ; 保护寄存器push dxpush dsmov ax,@data ;设置数据段 DSmov ds,axmov dx,220hin al,dx ; 读 A/D 转换的数

字量mov adtemp,al ; 送入缓冲区

Page 58: Ch.8  模拟量的输入输出

中断服务程序mov al,20h ; 发送 EOI命令out 20h,al

pop ds ;恢复寄存器pop dx

pop ax

iret ; 中断返回adint endp

Page 59: Ch.8  模拟量的输入输出

查询方式

8 通道模拟输入( 0~ 5V )

Vcc

D7

A3~A9

D0~D7

D0~D7

OE

EOC

A0

A1

A2

ADDAADDBADDC

译码

500KHzCLOCK

START

GND

VREF(+)

VREF(-)

ALE

+5V

IN0IN1IN2IN3IN4IN5IN6IN7

220h~ 227h

238h~ 23fh

IOR

IOW

Page 60: Ch.8  模拟量的输入输出

启动转换; 数据段

counter equ 8

buf db counter dup(0) ; 数据缓冲区; 代码段

mov bx,offset buf

mov cx,counter

mov dx,220h ;从 IN0 开始转换start1: out dx,al ; 启动 A/D 转换

push dx

Page 61: Ch.8  模拟量的输入输出

查询读取mov dx,238h ;查询是否转换结束

start2: in al,dx ;读入状态信息test al,80h ;D7 = 1 ,转换结束

否 ?jz start2 ; 没有结束,继续查

询pop dx ; 转换结束in al,dx ;读取数据mov [bx],al ; 存入缓冲区inc bxinc dxloop start1 ; 转向下一个模拟通

Page 62: Ch.8  模拟量的输入输出

进一步应考虑的问题 多个模拟通道时,程序怎样编写? ADC 位数大于 8 位应怎样处理? 用 8255 时程序应怎样编写?

以上三个问题留作思考题

Page 63: Ch.8  模拟量的输入输出

作业

P364 8.4, 8.10, 8.11, 8.14