7.1 并行输入 /输出接口
7.2 串行通信接口
7.3 定时器接口
7.4 模拟通道接口第 7章 微机接口技术返回主目录第 7 章微机接口技术是微型计算机应用的重要部分 。 为了实现人机交互和各种形式的输入和输出,在不同的微机系统中,人们使用了多种多样的 I/O设备 。 这些设备和装置,在工作原理,
驱动方式,信息格式以及工作速度方面彼此差别很大;在处理数据时,其速度也比 CPU慢得多,所以它们不可能与 CPU直接相连,必须通过作为接口的中间电路再与微机系统相连 。 因此,
微机接口设计就是根据接口芯片厂家提供的芯片功能,引脚,
时序和使用说明,将接口芯片通过一定的方式与 CPU和外部设备连接起来,并进行相关的程序设计 。
7.1 并行输入 /输出接口
7.1.1并行输入 /
并行输入 /输出就是把一个字符的几个位同时进行传输 。
它具有传输速度快,效率高的优点 。 并行通讯所用的电缆较多,
不适合长距离传输 。 所以,并行通讯总是用在数据传输率要求较高,而传输的距离较短的场合 。
实现并行输入 /输出的接口就是并行接口 。 通常,一个并行接口可设计为输出接口,如连接一台打印机 。 也可设计为输入接口,如连接键盘 。 还可设计成双向通讯接口,既作为输入接口又作为输出接口,如连接像磁盘驱动器这样的需双向通路的设备 。
图 7 - 1 是典型的并行接口和外设连接的示意图 。 从图中可以看到,并行接口左边是与 CPU连接的总线,右边用一个通道和输入设备相连,另一个通道和输出设备相连,输入和输出都有独立的信号交换联络控制线 。 在并行接口内部用控制寄存器来寄存 CPU对它的控制命令,用状态寄存器来提供各种工作状态供 CPU查询,此外,还有供输出和输入数据用的输出数据锁存器和输入数据缓冲器 。
并行接口的工作原理如下:
在输入过程中,当外设把数据送到数据输入线上时,通过,数据输入准备好,状态线通知接口取数 。 接口在把数据锁存到输入缓冲器的同时,把数据输入回答线置,1”,用来通知外设,接口的数据输入缓冲器,满,,禁止外设再送数据 。
图 7 – 1 并行接口与外设连接示意控制寄存器输入缓冲寄存器输出缓冲寄存器状态寄存器数据总线读出信号写入信号复位准备好中断请求地址译码
C P U
输入设备数据输入准备好数据输入回答数据输入输出设备数据输出数据输出准备好数据输出回答并且把内部状态寄存器中,输入准备好,状态位置,1”,
以便 CPU对其进行查询或向 CPU申请中断 。 在 CPU读取接口中的数据后,接口将自动清除,输入准备好,状态位和,数据输入回答,信号,以便外设输入下一个数据 。
在输出过程中,当数据输出缓冲器,空闲,时,接口中
,输出准备好,状态位置,1”。 在接收到 CPU的数据后,,输出准备好,状态位复位 。 数据通过输出线送到外设,同时,由
,数据输出准备好,信号线通知外设取数据 。 当外设接收一个数据时,回送一个,数据输出回答,信号,通知接口准备下一次输出数据 。 接口将撤消,数据输出准备好,信号并再一次置
,输出准备好,状态位为,1”,以便 CPU输出下一个数据 。
7.1.2 可编程并行输入 /输出接口 8255A
8255A是 Intel公司生产的一种可编程并行输入 /输出接口芯片 。 它的通用性强,可以方便地和微机连接,用来扩展输入 /输出口 。 8255A有 3个 8位并行端口,根据不同的初始化编程,可以分别定义为输入或输出方式,以完成 CPU与外设的数据传送 。
1,8255A
8255A的内部结构如图 7 - 2 所示 。 它由并行 I/O端口,控制电路,数据总线缓冲器和读 /写控制逻辑等几个部分组成 。
(1) 并行 I/O端口 A,B,C。
A,B,C口都是 8位的,可以选择作为输入或输出,但在结构和功能上有所不同 。 A口含有一个 8位数据输出锁存 /缓冲器和一个 8位数据输入锁存器 。 B口含有一个 8位数据输入 /输出锁存 /缓冲器和一个 8位的数据输入缓冲器 ( 不锁存 ) 。 C口含有一个 8位数据输出缓冲器和一个 8位数据输入缓冲器 ( 不锁存 ) 。
当数据传送不需要联络信号时,这三个端口都可以用作输入或输出口 。 当 A口,B口工作在需要联络信号输入,输出方式时,
C口可以分别为 A口和 B口提供状态和控制信息 。
(2) A组和 B组控制电路 。
8255A的三个端口在使用时分为 A,B组 。 A组包括 A口 8位和 C口的高 4位,B组包括 B口 8位和 C口的低 4位 。 两组的控制电路中有控制寄存器,根据写入的控制字决定两组的工作方式,
也可以对 C口的每一位置,1”或清,0”。
(3) 数据总线缓冲器 。
数据总线缓冲器是三态双向 8位缓冲器,是 8255A与 CPU数据总线的接口 。 数据的输入 /输出,控制字和状态信息的传送,
都是通过这个缓冲器进行的 。
由于 8255A的数据总线是三态的,所以 D0~D7可以直接与
CPU的数据总线相连 。
(4) 读 /写控制逻辑 。
8255A的读 /写控制逻辑的作用是从 CPU的地址和控制总线上接收有关信号,转变成各种控制命令送到数据缓冲器以及 A
组,B组控制电路,从而管理三个端口,控制寄存器和数据总线之间的传送操作 。
2,8255A
8255A采用 40脚双列直插式封装,引脚如图 7 - 3 所示 。
下面分别介绍各个引脚的功能 。
D0~D7,双向三态数据总线 。
RESET:复位信号,输入 。 当 RESET端得到高电平后,
8255A复位 。 复位状态是控制寄存器被清零,所有端口 ( A、
B,C口 ) 被置为输入方式 。
,片选信号,输入 。 当 为低电平时,该芯片被选中 。
,读信号,输入 。 当 为低电平时,允许 CPU从
8255A读取数据或状态信息 。
cs cs
RD RD
图 7-3 8255A引脚
1
5
20
PA
3
PA
2
PA
1
PA
0
RD
CS
G N D
A
1
A
0
PC
7
PC
6
PB
0
PB
1
10
15
40
21
PA
4
PA
5
PA
6
PA
7
WR
R E S E T
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
30
25
35
PC
5
PC
4
PC
0
PC
1
PC
2
PC
3
PB
2
PB
3
PB
4
PB
5
PB
6
PB
7
V
CC
2
3
4
6
7
8
9
11
12
13
14
16
17
18
19 22
23
24
26
27
28
29
31
32
33
34
36
37
38
39
8 2 5 5 A
:写信号,输入 。 当 为低电平时,允许 CPU将控制字或数据写入 8255A。
A1,A0:端口选择信号,输入 。 8255A中有端口 A,B、
C,还有一个控制寄存器,共 4个端口,根据从 A1,A0输入的地址信号来寻址,如表 7 - 1 所示 。
A1,A0与信号一起,用来确定 8255A的操作状态,如表 7
- 2 所示 。
PA0~PA7,A口数据线,双向 。
PB0~PB7,B口数据线,双向 。
PC0~PC7,C口数据线,双向 。 当 8255A工作于方式 0时,
PC0~PC7分成 两组并行 I/O 数据线,每组 4位 。 当 8255A工作于方式 1或方式 2时,PC0~PC7为 A口,B口提供联络和中断信号,这时每根线的功能有新的定义 。
WR RD
3,8255A
8255A有三种工作方式,方式 0是基本输入 /输出方式;方式
1是选通输入 /输出方式;方式 2是双向传送方式 。 8255A各端口的工作方式由写入 8255A控制口的工作方式控制字来确定 。 工作方式控制字的格式如图 7 - 4 所示 。 在工作方式控制字中,
D7位是工作方式控制字的标志,置,1”为有效; D3~D6确定 A
组的工作方式; D0~D2确定 B组的工作方式 。
8255A还有一个位控制字,用来设置 C口某位的状态而不影响其它位 。 位控字也写入 8255A的控制口 。 位控字的格式如图 7 - 5 所示,D7=0是位控字的标志 。
图 7 –4 8255A工作方式控制字格式
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
B 组
C 口低半字节,1 — 输入,0 — 输出
B 口,1 — 输入,0 — 输出方式选择,0 — 方式 0,1 — 方式 1
A 组
C 口高半字节,1 — 输入,0 — 输出
A 口,1 — 输入,0 — 输出方式选择:
方式控制字标志,1 — 有效
0 0 — 方式 0
0 0 — 方式 1
1 — 方式 2
图 7 – 5 8255A位控字格式
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
位控,1 — 置 位,0 — 复位状 态 选中位
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
PC
0
PC
1
PC
2
PC
3
PC
4
PC
5
PC
6
PC
7
位控字标志,0 — 有 效无效
4,8255A
(1) 工作方式 0。
方式 0是基本的输入 /输出方式 。 在这种方式下,三个端口都可以由程序规定为输入或输出方式,但不能既作为输入又作为输出,也没有提供固定的联络信号 。 C口分为两个 4位 ——
高 4位和低 4位,可以分别设置为输入或输出方式 。 各端口在输出方式下有锁存功能,输入不锁存 。 8255A工作方式 0的功能如图 7 - 6 所示 。
当以工作方式 0输入时,外设先将数据送到 8255A的某个端口,CPU执行一条输入指令,有效,将该端口的数据送入 CPU。 当以工作方式 0输出时,CPU执行一条输出指令,
有效,将数据送到 8255A的某个端口,然后由外设取走 。
工作方式 0适合于数据的无条件传送,也可以人为指定某些位作为状态信息线,进行查询式传送 。
RD
WR
图 7 – 6 8255A工作方式 0的功能
8
P A
0
~ PA
7
A 口
4
A 组
C 口
P C
4
~ PC
7
4
P C
0
~ PC
3
B 组
B 口
8
P B
0
~ PB
7
8
DB
RD
WR
(2) 工作方式 1。
方式 1是选通输入 /输出方式 。 这种方式下,A口,B口作为数据的输入或输出口,输入和输出都具有锁存功能; C口的某些位相应地被定义为 A口,B口的状态和控制信号线 。
在以方式 1输入和输出情况下,C口各位的定义如表 7 -
3 所示。若 A口和 B口都工作于方式 1,则 C口有 6位固定作为 A
口,B口的状态和控制信号,剩下 2位可由程序指定为输入和输出。 若 A口,B口中一个工作于方式 1,另一个工作于方式
0,则 C口有 3位固定作为 A口或 B口的状态和控制信号,其余 5
位可由程序指定为输入或输出。
① 方式 1输入 。
8255A工作于方式 1输入情况下的功能如图 7 - 7 所示。
图 7 – 7 8255A工作于方式 1输入的功能
A 口
PA
0
~ PA
7
PC
4
PC
5
PC
3
I N T E A
PC
6
RD
I N T R A
I / O
I B F A
S TB A PC
2
PC
1
PC
0
&
I N T E B
RD
I N T R B
I B F B
S TB B
2
8
输入数据
&
PC
7
8
DB
B 口
8
DB
8
输入数据PB
0
~ PB
7
在方式 1输入情况下,C口被定义的状态和控制信号有
,IBF和 INTR,其含义如下:
,选通信号,低电平有效,由外设提供 。 当有效时,外设把数据送入 8255A的 A口或 B口 。
IBF:输入缓冲器满,高电平有效,由 8255A输出给外设 。
当该信号有效时表明外设已将数据送到 A口或 B口的输入缓冲器 。
IBF由 置位,的上升沿使它复位 。 IBF可作为 8255A与外设的联络信号 。 当 IBF=0时,允许外设向 8255A传送一个数据;
当 IBF=1时,表示外设送来的数据还未被 CPU取走,这时禁止外设向 8255A传送数据 。 IBF也可作为 CPU的查询信号,当 IBF=1
时,告诉 CPU应该从 8255A的端口读取数据 。
STB STB
STB RD
STB
INTR:中断请求信号,高电平有效,由 8255A发出 。 在程序设置的中断允许信号 INTE=1的条件下,当 =1和
IBF=1时,INTR被置为 1,的上升沿使它复位 。
INTE是端口内部的中断允许信号,是内部中断允许触发器的状态,由 C口的位控字来设置 。 若位控字使 PC4=1,则 A
口的中断允许信号 INTEA=1;若位控字 PC2=1,则 B口的中断允许信号 INTB=1。 这一点对于 PC4和 PC2,
功能并无影响 。
8255A =0的控制下,将 A口或 B口的数据送入输入锁存器,然后输出 IBF=1给外设 。 外设在 IBF=1作用下停止数据传送,置 =1。 这时若已有 INTE=1,则使 INTR=1,向
CPU发出中断请求 。
STB
RD
STBA
STBB
STB
STB
时序如图 7-8所示
S TB
I B F
I N T R
RD
外部输入数据
7-8 8255A工作方式 1输入的时序有效,在其下降沿 INTR被复位,在其上升沿
IBF被复位 。 至此完成一个数据从外设经 到 CPU的选通输入 。
② 方式 1输出 。 8255A工作于方式 1输出情况下的功能如图 7 - 9 所示 。 C口被定义的状态和控制信号有,
和 INTR,其含义如下,
,输出缓冲器满,低电平有效,由 8255A输出给外设 。 当该信号有效时,表示 CPU已把要输出的数据输出到 A
口或 B口的输出缓冲器中,告诉外设可以把数据取走 。
RD
RD
OBF ACK
OBF
图 7- 9 8255A工作于方式 1输出的功能
A 口
PA
0
~ PA
7
PC
7
PC
6
PC
3
I N T E A
PC
4
WR
I N T R A
I / O
A C K A
O B F A PC
2
PC
1
PC
0
&
I N T E B
WR2
8
输出数据
&
PC
5
8
DB
B 口
8
DB PB
0
~ PB
7
I N T R B
O B F B
A C K B
8
输出数据由 CPU 上升沿为低电平,将外设发来的 ACK上升沿置为高电平 。
,响应信号,低电平有效 。 当外设将 8255A的 A口或 B
口数据取走后,向 8255A发出一个负脉冲信号 。
INTR:中断请求信号,高电平有效,由 8255A发出 。 在程序设置的中断允许信号 INTE=1的条件下,当 =1
=1时,INTR被置为 1,的上升沿使它复位 。
在方式 1 输 出情 况 下,若所 设 位 控字 使 PC6=1,则
INTEA=1;若位控字使 PC2=1,则 INTEB=1。
OBF ACK
WR
ACK
WR
8255A工作于方式 1输出的时序如图 7 - 10 所示 。 现结合时序图说明 8255A选通输出的工作情况 。 在采用中断控制方式时,输出过程是从 CPU响应中断开始的 。 在中断服务程序中,CPU执行输出指令,发出 信号,输出数据到 8255A
的 A口或 B口 。 的上升沿使 INTR变为无效 。 同时 8255A向外设发出 =0的信号,告诉外设可以接收数据 。 外设从
8255A取走数据后,发出 =0信号,其下降沿使 =1。
当 变为高电平时,因同时有 INTE=1和 =1,故将
INTR置为 1,向 CPU发出中断请求,开始进入输入下一个数据的操作过程 。
WR
WR
OBF
ACK OBF
ACK OBF
图 7 – 10 8255A工作于方式 1输出的时序
WR
O B F
I N T R
A C K
输出口 数据输出
③ 方式 1的状态字 。
在方式 1的情况下,执行一条读 C口的指令,就可以得到一个状态字,用来检查外设或 8255A的工作状态,从而控制程序的进程 。 状态字如图 7 - 11 所示 。
需要说明的是:在读 C口状态时,对于输入情况下的 PC4和
PC2,输出情况下的 PC6和 PC2,所读得的状态不是该引脚上或响应信号,而是由位控字确定的该位的状态,即中断允许信号 INTE。
(3) 工作方式 2。
方式 2是一种双向传送方式,既能输入,又能输出,只适用于 A口 。 数据的输入和输出都能锁存 。 这时 C口为 A口提供 5
位联络信号,B口可以工作于方式 0或方式 1。 8255A工作于方式 2的功能如图 7 - 12 所示 。
STB ACK
图 7-11 8255A工作于方式 1的状态字
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
A 组状态输入 I B F BI N T E B I N T R B
B 组状态
I / O I B F A I N T E A I N T R AI / O
O B F A I / O I / O I N T R AI N T E A O B F BI N T E B I N T R B输出
C 口图 7 – 12 8255A工作于方式 2的功能
PA
0
~ PA
7
PC
7
I B F A
O B F A
PC
3
≥1
I N T E 1
S TB A
A C K A
8
I N T R A
数据
I N T E 2
&
&
PC
6
PC
4
PC
5
PC
0
~ PC
2
3
I / O
WR
RD
8
DB
在方式 2中,C口为 A口提供的联络信号如表 7 - 4 所示。
引脚 PC7 PC6 PC5 PC4 PC3
信号 IBFA INTR
OBFA ACKA STBA
构成双向方式下输出的联络信号 。 的功能与方式 1时的相同 。 的功能与方式 1有所不同 。 在方式 2的情况下,
外设收到 8255A =0信号后,=0去打通 A口的输出缓冲器,使数据放到 A口的外部数据线上,否则输出缓冲器的输出端处于高阻状态 。 所以在双向方式下如果没有外设的 有效信号,就不能输出数据 。
OBFA
ACKA
ACKAOBFA
ACKA
IBFA和 构成双向方式下输入的联络信号,其功能与方式 1的相同 。 INTRA是双向方式下输出和输入合用的中断请求信号 。 INTE1=1( 由位控字设定
PC6=1) 的条件下,当 =1 和 =1 时,INTRA有效 。 在输入中断允许触发器 INTE2=1( 由位控字设定 PC4=1)
的条件下,当 IBFA=1和 =1时,INTRA有效 。 8255A工作于方式 2的状态字如图 7 - 13 所示 。
当 A口工作于方式 2时,允许中断,此时若 B口工作于方式
1,则也允许中断 。 这时就有三个中断源 ( A口的输入和输出,
B口 ),两个中断请求信号 ( INTRA,INTRB) 。 CPU在响应
8255A 的中断请求时,先要查询 PC3 ( INTRA ) 和 PC0
( INTRB),以判断中断源是 A口还是 B口 。
STBA
OBFA ACKA
STBA
图 7 – 13 8255A工作于方式 2的状态字
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
A 组状态方式 0
输入/ 输出
B 组状态
O B F A I B F A I N T E 2 I N T R AI N T E 1
C 口
O B F BI N T E B I N T R B
I / OI / O I / O
I B F BI N T E B I N T R B 方式 1 输入方式 1 输出当 A口工作于方式 2时,允许中断,此时若 B口工作于方式 1,则也允许中断 。 这时就有三个中断源 ( A口的输入和输出,B口 ),两个中断请求信号 ( INTRA,INTRB) 。 CPU
在响应 8255A的中断请求时,先要查询 PC3( INTRA) 和 PC0
( INTRB),以判断中断源是 A口还是 B口 。 如果中断源是 A
口,还要进一步查询 PC5( IBFA) 和 PC7( ),以确定是输入中断还是输出中断 。
8255A的工作方式 2是 A口方式 1输出和方式 1输入两种操作的组合,所以方式 2的工作过程也同上述工作方式 1的输出和输入过程 。
OBFA
5,8255A在 IBM PC/XT上的应用
IBM PC/XT使用一片 8255A管理键盘,控制扬声器和输入系统配置开关 DIP的状态 。 其连接图如图 7 - 14 所示 。 当有效时,A9A8A7A6A5=00011,所以这片 8255A的 I/O
地址范围为 60H~7FH,常用的地址范围为 60H~63H。 端口 A、
B和 C的地址分别为 60H,61H和 62H,63H为控制字寄存器地址 。 XT机中,8255A工作在基本输入 /输出方式 。 口 A在加电自检时为输出,输出当前检测部件的标志信号;其在正常工作时为输入,用来读取键盘扫描码 。
图 7- 14 PC/XT与 8255的接口电路
PA
0
~ PA
7
键盘
PB
7
允许/ 清除键盘
PB
6
控制键盘时钟为低
PB
5
E N A I / O C K
PB
4
E N A R A M P C K
PB
3
PB
2
K B D D A T A
PB
1
S P K D A T A
PB
0
T I M 2 G A T E S P K
PC
7
P C K
PC
6
I / O C H C K
PC
5
T / C 2 O U T
PC
4
S P K
PC
3
PC
2
PC
1
PC
0
8 2 5 5 A
RDI O R
WRI O W
A
0
A
0
A
1
A
1
R E S E TR E S E T
CSP P I C S
D
0
~ D
7
D
0
~ D
7
S W ( D I P )
1
2
3
4
+ 5V
7 4 L S 2 4 4
5
6
7
8
7 4 0 7
1G
+ 5V
1
1
1
11
口 B工作于输出方式,用于对键盘串并转换,RAM和 I/O
通道检验以及扬声器等的启动和控制 。 口 C为输入方式,高 4
位为状态测试位,低 4位用来读取系统板上系统配置开关 DIP的状态 。
现在我们以 ROM-BIOS初始化部分读系统配置开关的一段程序来说明 8255A的编程应用 。 系统配置开关的 8位信号分两组由 PC0~PC3读入,如图 7 - 14 所示 。 在 CPU要读取 DIP状态时,先从端口 B输出 PB3=0,这时三态缓冲器 74LS244控制信号有效,把出现在其输入端的 DIP开关低 4位信号 SW-1~SW-4送到
PC0~PC3上 。 输出信号 PB3还通过反相器送到集电极开路同相门电路 7407的四个输入端 。 这时同相门电路输出的是高电平,
由于它是集电极开路的,所以不影响外界电路的状态 。 这样
CPU读取的只是 DIP开关的低 4位状态 。
当读取 DIP开关的高 4位状态 SW-5~SW-8时,CPU设置
PB3=1,表示禁止 74LS244输出,使 DIP低 4位不能通过它送到口 C。 PB3通过反相器输出低电平送到 7407的输入端,使它的四个输出端都为低电平 。 高 4位 DIP开关某位接通时,送出低电平;断开时,送出高电平 。 这时 CPU可以读出 DIP开关高 4
位的状态 。
6,8255在 IBM PC/AT上的应用在 IBM PC/XT机上使用 8255的端口 A和 PB2,PB6及 PB7进行键盘管理; PC0~PC3和 PB3进行系统配置的读取; PB0,PB1
和 PC4,PC5配合 8253计数器 2控制扬声器; PB4,PB5和 PB6、
PB7进行奇偶校验的控制 。
比较图 7 - 14 和图 7 - 15 可知,端口地址 61H的低 2位 PB0、
PB1在 XT和 AT机的作用一样,都是数据线低 2位 D0,D1; XT
机的 PB4,PB5两位则移到 AT机的 D2,D3数据线; AT机 61H端口地址高 4位只能读入,其中高 3位与 XT机的 62H端口地址高 3
位作用一样,D4位则用于刷新信号的检测 。
图 7 – 15 PC/AT的并行接口电路
A L S 1 7 5
E N A R A M P C K
C L R Q
1
D
1
D
2
D
3
D
4
Q
2
Q
3
Q
3
Q
4
C L K Q
4
A L S 2 4 4
Y
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
6 1 H,I O W
R E S E T
A
1G 2G
6 1 H,I O R
P C K
I / O C H C K
T / C 2 O U T
R E F D E T
E N A I / O C K
S P K D A T A
T I M 2 G A T E S P K
7.2
7.2.1
1,概述微型计算机与一些常用的外部设备 (如电传打字机,CRT
终端等 )之间的数据交换,往往需要采用串行通讯方式 。 在远程计算机通讯中,串行通讯更是一种不可缺少的通讯方式 。
,只占用一条传输线,它可由两种方式来实现:一种是将 8位通道中的一位依靠软件来实现串行数据传送;另一种是通过专用的通讯接口,
将并行数据转换为串行数据 。
在并行通讯中,数据有多少位就要有多少传输线,而串行通讯只需要一条传输线,所以串行通讯可以节省传输线 。 在数据位数较多,传输距离较长的情况下,这个优点更为突出 。
例如,将微型计算机的信息传送到远方的终端,或者传送到大型计算中心,则常用通讯线路 (电话线 )进行传送 。 这种串行传送可以大大减少传输线,从而降低成本,是它的传送速度没有并行通讯快 。
随着大规模集成电路技术的发展,通用的可编程的同步 /
异步接口芯片种类越来越多 。 常用的 有 Intel 的 8251A,
Motorola的 ACIA,Zilog的 SIO等 。
2.
串行通讯可分为异步通讯和同步通讯两种方式 。
(1) 异步通讯 。 在异步通讯中,CPU与外部设备之间有两项规定:
① 字符格式 。
字符格式即字符的编码形式及规定 。 如规定每个串行字符由四个部分组成,1个起始位,5~ 8个数据位,1个奇偶校验位以及 1~ 2个停止位 。
图 7 - 16 示出了这种串行字符编码格式 。 起始位后面,
紧跟着要传送字符的最低位,每个字符的结束,是一个高电平的停止位 。 起始位至停止位构成一帧 。
相邻两个字符之间的间隔可以是任意长度的,以便使它有能力处理实时的串行数据 。 两个相邻字符之间的位叫空闲位 。 而下一个字符的开始,必然以高电平变成低电平的起始位的下降沿作为标志 。 图 7 - 16 示出小于最高数据传送率的格式 。
其最高数据传送率的格式,即为在相邻字符之间除去空闲位的格式 。
图 7 – 16 异步串行通信格式
1 0 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1
低位 高位
1 1 1
起始位 数据位 校验位 停止位字符
1 0 0 / 1 0 / 1
空闲位字符
② 波特率 (Boud Rate)。 波特率是指每秒传输字符的位数 。
假如数据传送速率是 120字符 /秒,而每一个字符格式规定包含 10 个数据位 (起始位,停止位和 8个数据位 ),则这时传送的波特率为:
10× 120= 1200(位 /秒 )= 1200(波特 )
每个数据位的传送时间 Td为波特率的倒数:
Td = 1/1200= 0.000 833 s= 0.833 ms
波特率是指传送代码的速率,这与传送数据的速率有所区别 。 因为每个数据只占 8位,所以,数据的传送速率为 8× 120
= 960(波特 )
异步通讯的传送速率一般为 50~ 9600波特,常用于计算机到 CRT终端和字符打印机之间的通讯等 。
(2) 同步传送 。
在异步传送中,每一个字符都用起始位和停止位作为字符开始和结束的标志,占用了一些时间,因此在数据块传送时,
为了提高速度,就要设法去掉这些标志,而采用同步传送 。 此时,在数据块开始处,要用同步字符来指明,如图 7 - 17 所示 。
同步字符通常由用户自己设定,可用一个 (或相同两个 )8位二进制码作同步字符 。
同步传送速度高于异步传送速度,但它要求由时钟来实现发送端及接收端之间的同步,所以,硬件电路比较复杂 。 通常用于计算机之间的通讯,或计算机到 CRT等外设之间的通讯 。
3,串行通讯中的基本技术
(1) 数据传送方向 。
在串行通讯中,数据通常在两个站 (如 A和 B)之间进行双向传送 。 这种传送根据需要又分为单工,半双工和全双工传送 。
① 单工传送 。 单工传送方式是指在通讯时,只能由一方发送数据,一方接收数据的通讯方式,如图 7 - 18(a)所示 。
② 半双工传送 。
半双工传送方式是指在通讯时,双方都能接收或发送,但不能同时接收和发送的通讯方式 。 在这种传送方式中,通讯双方只能轮流地进行发送和接收,即 A站发,B站接收;或 B站发送,A站接收 。 如图 7 - 18( b) 所示 。
图 7-18
(a) 单工; (b) 半双工; (c)全双工发送器 接收器
A B
单工通信
( a )
发送器 发送器
A B
半双工通信接收器 接收器
( b )
发送器 接收器
A B
全双工通信接收器 发送器
( c )
③ 全双工传送 。 全双工传送方式是指可以同时在两个站之间进行发送和接收的通讯方式 。
全双工需要两条传输线 。 图 7 - 18(c)表示了这种传送方式 。
(2) 信号的调制和解调 。
调制解调器 (Modem)是计算机在远程通讯中必须采用的一种辅助的外部设备 。
计算机通讯是一种数字信号的通讯,数字信号通讯要求传送的频带是很宽的,而计算机在远程通讯时,通常通过电话线传送,电话线不可能有这样宽的频带 。 如果用数字信号直接通讯,那么经过电话线传送,信号便会产生畸变 。
因此,在发送端,必须采用调制器把数字信号转换为模拟信号;而在接收端,又必须用解调器检测从发送端送来的模拟信号,再把它转换成为数字信号 。 由此可知:调制解调器在发送端相当于 D/A转换器,而在接收端则相当于 A/D
转换器 。
7.2.2可编程串行通信接口 8251A
1,8251A的特点和内部结构
Intel 8251A是可编程的串行通信接口芯片,它的主要特点如下:
① 可用于串行异步通信,也可用于串行同步通信 。
② 对于异步通信,可设定停止位为 1位,1位半或 2位,
数据位可在 54位之间选择 。
③ 对于同步通信,可设为单同步,双同步或者外同步,
同步字符可由用户自己设定 。
④ 异步通信的时钟频率可设为波特率的 1倍,16倍或 64倍 。
⑤ 可以设定奇偶校验的方式,也可以不校验 。 校验位的插入,检出及检错都由芯片本身完成 。
⑥ 在异步通信时,波特率的可选范围为 0~ 19.2千波特;
在同步通信时,波特率的可选范围为 0~ 64千波特 。
⑦ 提供与外部设备特别是调制解调器的联络信号,便于直接和通信线路相连接 。
⑧ 接收,发送数据分别有各自的缓冲器,可以进行全双工通信 。
图 7 - 19 给出了 8251A的结构框图 。 它共由五个部件构成,
对外有 28条引脚 。
8251A各组成模块的功能及有关引脚如下:
图 7 –19 8251A的结构框图
D
7
~ D
0
发送/ 命令缓冲器状态缓冲器接收缓冲器读/ 写控制逻辑
R E S E T
C / D
C L K
RD
WR
CS
调制解调器控制
D TR
D S R
R T S
C T S
发送器及发送控制
T X D
T X R D Y
T X E
T X C
接收器及接收控制
R X D
R X R D Y
S Y N D E T
R X C
(1) I/ O缓冲器 。
这是三态双向的缓冲器,引脚 D0~ D7是 8251A和 CPU接口的三态双向数据总线,用于向 CPU传递命令,数据或状态信息 。
与 CPU互相交换的数据和控制字就存放在这个区域,共有三个缓冲器 。
① 接收缓冲器:串行口收到的数据变成并行字符后,存放在这里,以供 CPU读取 。
② 发送/命令缓冲器:这是一个分时使用的双功能缓冲器,
CPU送来的并行数据存放在这里,准备由串行口向外发送 。 另外,CPU送来的命令字也存放在这里,以指挥串行接口的工作 。
由于命令一输入就马上执行,不必长期存放,所以不会影响存放发送数据 。
③ 状态缓冲器:存放 8251A内部的工作状态,供 CPU查询 。
(2) 读/写控制逻辑 。
本模块功能是接收 CPU的控制信号,控制数据传送方向 。
(3) 接收器及接收控制 。
接收器的功能是从 RXD引脚接收串行数据,按指定的方式装配成并行数据 。
(4) 发送器及发送控制 。
这个模块的功能是从 CPU接收并行数据,自动地加上适当的成帧信号后转换成串行数据从 TXD引脚发送出去 。
(5) 调制解调控制器 。
该模块提供和调制解调器的联络信号 。
2,8251A的外部引脚
8251A是一个采用 NMOS工艺制造的 28脚双列直插式封装的组件,其外部引脚如图 7 - 20 所示 。
(1) 与 CPU接口的引脚 。
D7~ D0,数据线 。
CLK,时钟信号输入线,用于产生 8251A内部时序 。
CLK的周期为 0.42~ 1.35 μs。
CLK的频率至少应是接收,发送时钟的 30倍 ( 对同步方式 ) 或 4.5倍 ( 对异步方式 ) 。
RESET:复位信号输入线,高电平有效 。 复位后 8251A
处于空闲状态直至被初始化编程 。
图 7 – 20 8251A的外部引脚
D
2
V
CC
R E S E T
D
3
R X D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
G N D
D
4
D
5
D
6
D
7
T X C
WR
CS
C / D
RD
R X R D Y
8 2 5 1 A
28
27
26
25
24
23
22
21
20
19
18
17
16
15
D
1
D
0
R X C
D T R
R T S
D S R
C L K
T X D
T X E M P T
C T S
S Y N D E T / B D
T X R D Y
,片选信号输入线,低电平有效 。 仅当 为低电平时,CPU才能对 8251A操作 。
,信息类型信号输入线 。 为 0时传输的是数据,为 1时传输的是控制字或状态信息 。
,读选通信号输入线,低电平有效 。
,写选通信号输入线,低电平有效 。
CPU对 8251A的读写控制如表 7 - 5 所示。
CSCS
/CD
RD
WR
RXRDY,接收准备好状态输入线,高电平有效 。 当接收器接到一个字符并准备送给 CPU时,RXRDY为 1;当字符被 CPU读取后 RXRDY恢复为 0。 RXRDY可作为 8251A向 CPU
申请接收中断的请求源 。
SYNDET/BD:同步状态输出线或者外同步信号输入线 。
此线仅对同步方式有意义 。
TXRDY:发送准备好状态输出线,高电平有效 。 当发送寄存器空闲且允许发送 ( 脚电平为低,命令字中
TXEN位为 1) 时,TXRDY为高电平 。 当 CPU给 8251A写入一个字符后 TXRDY恢复为低电平 。 TXRDY可作为 8251A向 CPU
申请发送中断的请求源 。
CTS
TXEMPT:发送缓冲器空闲状态输出线 。 高电平有效,
TXEMPT=1,表示发送缓冲器中没有要发送的字符,当 CPU
将要发送的数据写入 8251A后,TXEMPT自动复位 。
(2) 与外设或调制解调器接口的引脚 。
RXD:串行数据输入线,高电平表示数字 1,低电平表示数字 0。
,接收器时钟输入线 。 它控制接收器接收字符的速率,在上升沿采集串行数据输入线 。 的频率应等于波特率
( 同步方式 ) 或等于波特率的 1倍,16倍或 64倍 ( 异步方式 ) 。
TXD:发送数据输出线 。 CPU并行输入给 8251A的数据从这个引脚串行发送出去 。
,发送器时钟输入线,在 的下降沿数据由 8251A
移位输出 。 对 频率的要求同 。
RXC
RXC
TXC TXC
TXC RXC
,发送器时钟输入线,在 的下降沿数据由
8251A移位输出 。 对 。
,数据终端准备好状态输出线,低电平有效 。 当
8251A命令字位 D1为 1时,有效,用于向调制解调器表示数据终端已准备好 。
,数据设备准备好状态输入线,低电平有效 。 当调制解调器准备好时,有效,用于向 8251A表示 Modem( 或
DCE) 已准备就绪 。 CPU可通过读取状态寄存器的 D7位检测该信号 。
TXC
TXC
TXC RXC
DTR
DTR
DSR
DSR
,请求发送信号输出线,低电平有效 。 当 8251A命令字位 D5为 1时,有效,请求调制解调器作好发送准备
( 建立载波 ) 。
,清除发送 ( 允许传送 ) 信号输入线,低电平有效 。 当调制解调器作好送数准备时,有效,作为对
8251A 信号的响应 。
如果 8251A不使用调制解调器而直接和外界通讯,一般应将,脚接地 。
接收器的工作过程:在异步方式中,当接收器接收到有效的起始位后,便接收数据位,奇偶校验位和停止位 。 然后将数据送入寄存器,此时 RXRDY输出高电平,表示已收到一字符,CPU可以来读取 。
RTS
RTS
CTS
CTS
RTS
DSR CTS
在同步方式中,若程序设定 8251A为外同步接收,则
SYNDET/BD脚用于输入外同步信号,SYNDET/BD脚上的电平正跳变启动接收数据 。 若程序设定 8251A内同步接收,则
8251A先搜索同步字 ( 同步字事先由程序装在同步字符寄存器中 ) 。 每当 RXD线上收到一位信息就移入接收寄存器并和同步字符寄存器内容比较,若不等则再收一位再比较,直到两者相等 。 此时 SYNDET/BD输出高电平,表示己搜索到同步字,接下来便把接收到的数据逐个地装入接收数据寄存器 。
发送器的工作过程,在异步方式中,发送器在数据前加上起始位,并根据程序的设定在数据后加上校验位和停止位,然后作为一帧信息从 TXD脚逐位发送数据 。
在同步方式中,发送器先送同步字符,然后逐位地发送数据 。 若 CPU没有及时把数据写入发送缓冲器,则 8251A用同步字符填充,直至 CPU写入新的数据 。
3,8251A的控制字寄存器和状态字寄存器
8251A内除具有可读可写的数据寄存器外,还具有只可写的控制字寄存器和只可读的状态寄存器,CPU对它们的操作如表 7 - 5 所示 。
(1) 控制字寄存器 。
控制字寄存器寄存方式控制字和命令控制字 。
① 方式控制字 。
方式控制字确定 8251A的通讯方式 ( 同步/异步 ),校验方式 ( 奇校验,偶校验,不校验 ),数据位数 ( 5,6,7或 8位 )
及波特率参数等 。 方式控制字的格式如图 7 - 21所示 。 它应在复位后写入,且只需写入一次 。
② 命令控制字 。
命令控制字使 8251A处于规定的状态以准备发送或接收数据 。 命令控制字的格式如图 7 - 22 所示 。 它应在写入方式控制字后写入,用于控制 8251A的工作,可以多次写入 。
图 7-21 方式控制字的格式
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
方式及波特率
00,同步* 1
01,异步* 1
10,异步* 16
11,异步* 64
数据位数
00,5
01,6
10,7
11,8
校验方式
*0,不校验
01,奇校验
11,偶校验
0 0,无效
0 1,1 位停止位
1 0,1 位半
1 1,2 位
* 0,内同步
0 1,双 同步字
1 1,单同步字同步方式
Y N
图 7 – 22 命令控制字的格式
EN IR R T S S B R K R X E D T R T X E NER
进入搜索方式
1,进行 S Y N C 搜索内部复位
1,8 2 5 1 A 复位请求发送
1,迫使 R TS 输出 0
出错复位
1,复位 错误标志发送允许
1,允许 0,禁止数据终端准备好
1,迫使 D T R 输出 0
接收允许
1,允许 0,禁止发送断点字符
1,迫使 T XD 为 0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
方式控制字和命令控制字本身无特征标志,也没有独立的端口地址,8251A是根据写入先后次序来区分这两者的:先写入者为方式控制字,后写入者为命令控制字 。 所以 CPU在对
8251A初始化编程时必须按一定的先后顺序写入方式控制字和命令控制字 。
(2) 状态寄存器 。 状态寄存器存放 8251A的状态信息,供
CPU查询,状态字各位的意义如图 7 - 23 所示 。
DSR,数据设备准备好标志 。 其状态同 脚 。
SYNDET,同步标志 。
FE:异步通讯帧出错标志 。 为 1表示未检测到字符末尾的有效停止位,但 FE错并不禁止 8251A工作 。 FE标志由命令控制字中的 ER位清除 。
DSR
图 7 – 23 状态字格式
D S R S Y N D E T FE T X E R X R D Y T X R D YOE
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
PE
同引脚定义奇偶错溢出错帧出错
OE,溢出标志 。 接收器内的字符尚未被 CPU读走时又有新的字符装入,则 OE置 1,此时原来的字符丢失,但并不禁止
8251A工作,OE标志由命令控制字中的 ER位清除 。
PE:奇偶错标志 。 奇偶错时 PE置 1,但此时并不禁止
8251A工作,PE标志由命令控制字中的 ER位清除 。
TXE,发送缓冲器空标志 。 其状态同 TXE脚 。
RXRDY,接收准备好标志 。 其状态同 RXRDY脚 。
TXRDY,发送准备好标志 。 含义同 TXRDY引脚 。 只要发送缓冲器空,就置位该位 。 而引脚 TXRDY除发送缓冲器空外,还要满足 TXE=1,CTS=0才置位 。
4,8251A的初始化编程像所有的可编程器件一样,8251A在使用前也要进行初始化 。 初始化在 8251A处于复位状态时开始 。 其过程为:首先输入方式控制字,以决定通信方式,数据位数,校验方式等若是同步通信方式则紧接着输入一个或两个同步字符,若是异步方式则这一步可省略,最后送入命令控制字,就可以开始发送或接收数据了 。 初始化过程的信息全部写入控制端口特征是 C/ =1,即地址线 A0=1的地址 。
由于各个控制字没有特征位,所以写入的顺序不能出错,
否则就会张冠李戴,达不到初始化的目的 。 8251A的初始化流程图如图 7 - 24 所示 。
D
① 异步工作方式,波特率系数为 64( 即数据传送速率是时钟频率的 1/ 64),采用偶校验,总字符长度为 10( 1位起始位,
8位数据,1位停止位 ) 。
② 允许接收和发送,使错误位全部复位 。
③ 查询 8251A状态字,当接收准备就绪时,则从 8251A输入数据,否则等待 。
初始化程序:
MOV DX,301H ; 8251A
MOV AL,01111111B ;
OUT DX,AL ;
MOV AL,00010101B ;
OUT DX,AL ;
WAIT,IN AL,DX ;
AND AL,02H ; 检查 RXRDY=1?
JZ WAIT ; RXRDY≠1,接收未准备就绪,
IN AL,DX
5,8251A应用举例当 8251A与 CPU连接时,至少要占用两个端口地址,即控制端口 ( C/ =1) 和数据端口 ( C/ =0) 。
在使用 8251A时需要一个外部时钟源提供,和
CLK信号 。 由波特率以及时钟频率与波特率的倍率决定 。 CLK则在 ( ) 频率的基础上增高若干倍 。
D D
RXC TXC
RXC TXC
RXC TXC
8251A与 CPU通常采用查询或中断方式交换数据 。 若采用中断方式,两个状态信号 TXRDY和 RXRDY通过一个非门接到 CPU的外中断输入 。,,RESET都是同名端相连 。
在编程时,对 8251A初始化,输入命令字后就可进行数据传送 。 在得到中断申请后,通过调用状态字来检测是接收申请 ( RXRDY=1) 还是发送申请 ( TXRDY=1),然后转至相应的程序模块 。
例 用 8251A为 8086CPU与 CRT终端设计一串行通信接口 。
假设 8251A控制端口地址为 301H,数据端口地址为 300H。
① 异步方式传送,数据格式为 1位停止位,8位数据位,
奇校验;
RD WR
② 波特率因子为 16
③ CPU用查询方式将显示缓冲区的字符,GOOD”送 CRT
显示 。 显示缓冲区在数据段,首地址为 2000H。
解,① 硬件连接 。
8086CPU与 CRT终端接口连接如图 7 - 25 所示 。 当地址锁存信号 ALE有效时,将 CPU送来的地址锁存,地址译码器对输入地址 A1~ A9进行译码,其输出接到 8251A的片选端 。 地址 A0
用于选择 8251A的数据端口或控制端口 。 波特率发生器按规定给 8251A提供发送和接收时钟 。 电平变换电路将 8251A送出的
TTL电平变成 RS-232C电平以便和 CRT连接 。
图 7 –25 8086CPU与 CRT终端接口
8 0 8 6
AD
0
~ AD
15
地址锁存器地址译码器
A
0
A L E
WR
RD
C L K
8 2 5 1 A
D
0
~ D
7
CS
C / D
WR
R
C L K
T X D
R X D
1 4 8 8
1 4 8 9
CRT
终端
G N D
D S R
C T S
T X C
R X C
波特率发生器
D
0
~ D
7
② 软件设计 。
DATA SEGMENT
DISBUF DB 47H,4FH,4FH,44H,ODH,0AH ;
GOOD字符的 ASCII
COUNTDB$-DISBUF
DATA ENDS
MAIN MOV DX,301H ; 8215A
MOV AL,01011110B ; 工作方式选择字
OUT DX,AL
MOV AL,00110011B ;
OUT DX,AL
MOV BX,OFFSET DISBUF ; 显示缓冲区首址
MOV CX,COUNT
WAIT:MOV DX,301H
IN AL,DX
TEST AL,80H
JZ WAIT
MOV DX,300H
MOV AL,ES:
OUT DX,AL
INC BX
DEC CX
JNZ WAIT
HLT
7.3 定 时 器 接 口
7.3.1定时 /
在微机系统中,常常需要为 CPU和外部设备提供时间基准以实现定时或延时控制 。 如定时中断,定时检测,定时扫描等,
或对外部事件进行计数并将计数结果提供给 CPU。
实现定时或延时控制有三种方法:软件定时,不可编程硬件定时器,可编程硬件定时器 。 软件定时让 CPU执行一段程序段,由于执行每条指令都需要时间,因此执行一个程序段就需要一定的时间,通过改变指令执行的循环次数就可以控制定时时间 。 这种软件定时方式计时不够准确,尤其是当 CPU内部有多个并行处理时更为明显 。
同时,由于它占用了 CPU,因而降低了 CPU的利用率 。
不可编程的硬件定时器采用中小规模器件 ( 如 NE555),外接定时元件 ——电阻和电容 。 这种方式实现的定时电路简单,通过改变电阻和电容可使定时在一定范围内变化 。 但是,这种定时电路在连接好硬件后,定时值就不易用软件来控制和改变,由此产生了可编程的硬件定时器电路 。 所谓可编程的硬件定时器电路就是其工作方式,定时值和定时范围可以很方便地由软件来确定和改变 。
通常,一个可编程定时 /计数器的主要用途有:
① 以均匀分布的时间间隔中断分时操作系统,以便切换程序 。
② 向 I/O设备输出精确的定时信号,该信号的周期由程序控制 。
③ 用作可编程波特率或速率发生器 。
④ 检测外部事件发生的频率或周期 。
⑤ 统计外部事件处理过程中某一事件发生的次数 。
⑥ 在定时或计数达到编程规定的值之后,产生输出信号,
向 CPU申请中断。
7.3.2可编程定时 /计数器 8253
8253是 Intel公司生产的可编程计数 /定时器芯片 。 8253的操作对所在系统没有特殊要求,其通用性强,适用于各种微处理器组成的系统 。 它有 3个独立的 16位减 1计数器,每个计数器有
6种工作方式,能进行二进制或二 -十进制计数或定时操作,计数速率可达 2 MHz,所有的输入 /输出都与 TTL电平兼容 。
1,8253
8253的结构框图如图 7 - 26 所示 。 它由数据总线缓冲器,
读 /写逻辑,控制字寄存器以及三个计数器 ( 0,1,2) 组成 。
图 7- 26 8253的结构框图数据总线缓冲器读写控制逻辑控制字寄存器
RD
WR
A
0
A
1
CS
D
0
~ D
7
计数器 0
计数器 2
C L K
0
G A T E
0
O U T
0
C L K
1
G A T E
1
O U T
1
C L K
2
G A T E
2
O U T
2
计数器 1
(1) 数据总线缓冲器 。
数据总线缓冲器是 8253与 CPU数据总线连接的 8位双向三态缓冲器 。 CPU用输入 /输出指令对 8253进行读 /写操作的所有信息都是通过这 8条总线传送的 。 这些信息包括,CPU在初始化编程时写入 8253的控制字,CPU向 8253某一计数器写入的计数初值,CPU从 8253某一计数读取的计数值 。
(2) 读 /写逻辑 。
读 /写逻辑是 8253内部操作的控制部分 。 当片选信号有效,
即 =0时,读 /写逻辑才能工作 。 该控制逻辑根据读 /写命令及送来的地址信息,决定三个计数器和控制字寄存器中哪一个工作,并控制内部总线上数据传送的方向 。
CS
(3) 控制字寄存器 。
在 8253初始化编程时,由 CPU向控制字寄存器写入控制字,以决定每个计数器的工作方式 。 此寄存器只能写入而不能读出 。
(4) 计数器 0,1,2。
计数器 0,1,2是 3 个 16位减 1计数器,它们互相独立,
内部结构和功能相同 。 每个计数器有 3根信号线,它们是时钟输入 CLK,门控输入 GATE和输出 OUT。 计数器从 CLK端接收时钟脉冲或事件计数脉冲,—
十进制从预置的初值开始进行减 1计数 。 当计数值减到零时,
从 OUT端送出一个信号 。 计数器在开始计数和计数过程中,
受到门控信号 GATE的控制 。
在开始计数之前,必须由 CPU用输出指令预置计数器的初值 。 在计数过程中,CPU可以随时用指令读取计数器的当前值 。
2,8253
253的引脚如图 7 - 27 所示。 8253与 CPU的连接如图 7 -
28 所示。计数器 0,1,2和控制字寄存器的低 2位地址由 A1、
A0确定,A1,A0的值依次为 00~ 11。 8253的 4 个端口的操作情况如表 7 - 6 所示。
前面已经讲过 8253的计数器 0,1,2各有 3个引脚 。 不同计数器的相同定义的引脚,其功能也是相同的 。
CLK:计数脉冲输入端 。 计数器对该引脚的输入脉冲进行计数 。 如果 CLK信号是周期精确的时钟脉冲,则具有定时作用 。 8253规定 CLK端的输入脉冲周期不能小于 380 ns。
GATE:门控输入端 。 这是控制计数器工作的一个外部信号 。 当 GATE为低电平时,禁止计数器工作;当 GATE为高电平时,允许计数器工作 。 GATE信号从计数开始到计数过程中都起作用 。
OUT,输出信号端 。 当计数器计数到零时,在 OUT引脚上输出一个信号,该信号的波形取决于工作方式 。
3,8253
在 8253工作之前,必须对它进行初始化编程,也就是向
8253的控制字寄存器写入一个控制字和向计数器赋计数初值 。
控制字的功能是:选择计数器,确定对计数器的读 /写格式,选择计数器的工作方式以及确定计数的数制 。 8253控制字的格式如图 7 - 29 所示 。
图 7- 29 8253控制字的格式
SC
1
SC
0
RW
1
M
2
M
1
BCDRW
0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
M
0
0 0,选通道 0
0 1,选通道 1
1 0,选通道 2
1 1,无效
0,二进制计数
1,B C D 码计数
0 0 0,方式 0
0 0 1,方式 1
1 0,方式 2
1 1,方式 3
1 0 0,方式 4
1 0 1,方式 5
0 0,计数器锁存
0 1,只读/ 写计数器低字节
1 0,只读/ 写计数器高字节
1 1,先读/ 写计数器低字节,
后读/ 写高字节
SC1,SC0:计数器选择位 。 这两位表示这个控制字是对哪一个计数器设置的 。
00——计数器 0; 01——计数器 1; 10——计数器 2; 11——非法选择 。
RW1,RW0:数据读 /写格式选择位 。 CPU在对计数器写入初值和读取它们的当前值时,有几种不同的格式,由这两位来决定 。 00——将计数器当前值锁存于输出锁存器中,以便读出;
01——只读 /写计数器的低 8位,写入时高 8位自动设置为 0; 10—
—只读 /写计数器的高 8位,写入时低 8位自动设置为 0; 11——对
16位计数器进行两次读 /写操作,低字节在前,高字节在后,
两次操作的地址相同 。
M2,M1,M0:计数器工作方式选择位 。 8253的每个计数通道有 6种不同的工作,工作方式由这 3位决定 。 000——方式 0;
001——方式 1; 010——方式 2; 011——方式 3; 100——方式 4; 101—
—方式 5。
BCD:数制选择 。 8253的每个计数器有两种数制二进制和二 —十进制,由这一位决定选择哪一种 。 BCD=0表示采用二进制计数,写入的初值范围为 0000H~ FFFFH,其中 0000H是最大值,代表 65 536; BCD=1表示采用二 —十进制计数,写入的初值范围为 0000~ 9999,其中 0000是最大值,代表 10 000。
4,8253
(1) 方式 0——计数结束时产生中断。
当写入方式 0控制字 CW后,计数器输出端 OUT立即变成低电平 。 当写入计数初值 N后,若 GATE为高电平,计数器开始计数 。 在计数过程中,OUT端一直维持为低,直到计数 0( 结束 )
时,OUT端变为高,向 CPU发出中断请求 。
8253用作计数时,一般都工作在方式 0。 方式 0的特点是:
① 计数器只计一遍数 。 当计数到 0时,并不恢复计数初值,
不开始重新计数,输出端 OUT由低变高且一直保持为高 。 只有当写入一个新的计数初值后,OUT才变低,开始新的计数 。
② 在计数 过程中 可改变 计数值 。 如果计 数器为 8 位
( RW1RW0=01),在写入新的 8位计数值后,计数器将按新的计数值重新开始计数 。 如果计数器为 16位 ( RW1RW0=11),
在写入第一个字节后,计数器停止计数,在写入第二个字节后,
计数器按照新的数值开始计数 。
③ 在计数过程中,可由门控信号 GATE控制暂停 。 当
GATE=0时,计数器暂停计数;当 GATE变为 1后,就接着计数 。
④ 方式 0的 OUT信号在计数到 0时由低变高,可作为中断请求信号 。 但由于在 8253内部没有中断控制电路,因此在多中断源系统中需外接中断优先权排队电路和中断向量产生电路 。
(2) 方式 1——可程控的单脉冲 。
在设定工作方式 1和写入计数初值后,OUT输出高电平,
此时并不开始计数 。 当门控信号 GATE变为高电平时,启动计数,OUT输出变低 。 在整个计数过程中,OUT都维持为低,
直到计数到 0时,输出变为高 。 因此,输出为一单脉冲,其低电平维持时间由装入的计数初值来决定 。
方式 1的特点是:
① 当计数到 0后,计数器可再次由外部启动,按原计数初值重新开始计数,输出单脉冲,而不需要再次送一个计数初值 。
② 在计数过程中,外部可发出门控脉冲,进行再触发 。 这时不管原来计数到何值,计数器将重新开始计数,输出端仍保持低电平 。
③ 在计数过程中改变计数初值不影响本次计数过程 。 若门控信号再次被触发,则计数器才按新的计数值计数 。
比较方式 0和方式 1,有以下几点不同:
① 方式 0设置计数初值后立即计数; 方式 1设置计数初值后不立即计数,直到有外部触发信号后才开始计数 。
② 方式 0在计数过程中能用门控信号暂停计数; 方式 1在计数过程中若有门控脉冲时不停止计数,而是使计数过程重新开始 。
③ 方式 0在计数过程中改变计数初值时,原计数停止,
立即按新的计数初值开始计数;方式 1在计数过程中当改变计数初值时,现行计数不受影响,新计数初值在下次启动计数后才起作用 。
④ 方式 0在一次计数结束后,必须重新设置计数初值才能再次计数,即计数初值只能使用一次,方式 1的计数初值在一次计数过程完成后继续有效 。
(3) 方式 2——分频器 。
在这种方式下,CPU输出控制字后,计数器输出端为高电平 。 当写入计数初值后,计数器立即对 CLK端的输入脉冲计数 。
在计数过程中输出端始终保持为高,直到计数器减为 1
时,输出变低 。 经过一个 CLK周期,输出恢复为高,同时按照原计数初值重新开始计数 。 如果计数值为 N,则在 CLK端每输入 N个脉冲后,就输出一个脉冲 。 因此,这种方式可以作为分频器或用于产生实时时钟中断 。
方式 2的特点是:
① 不用重新设置计数初值,计数器能够连续工作,输出固定频率的脉冲 。
② 计数过程可由门控信号 GATE控制 。 当 GATE为 0时,
暂停计数 。 当 GATE变为 1后,下一个 CLK脉冲使计数器恢复初值,重新开始计数 。
③ 在计数过程中可以改变计数初值,这对正在进行的计数过程没有影响 。 但当计数到 1时输出变低,过一个 CLK周期输出又变高,计数器将按新的计数值计数 。 所以对方式 2改变计数初值时,在下一次计数有效 。
(4) 方式 3——方波发生器 。
在方式 3时,当 CPU设置控制字后,输出为高电平 。 在写入计数初值后就开始计数,输出保持为高 。 当计数到一半计数初值时,输出变为低,直至计数到 0,输出又变为高,重新开始计数 。
方式 3与方式 2的输出都是周期性的,它们的主要区别是:
方式 3在计数过程中的输出有一半时间为高电平,另一半时间为低电平 。
所以,若计数值为 N,则方式 3的输出为周期 =( N× CLK
周期 ) 的方波 。 方式 3的特点是:
① 当计数初值 N为偶数时,输出端的高低电平持续时间相等,各为 N/2个 CLK脉冲周期;当计数初值 N为奇数时,输出端的高电平持续时间比低电平持续时间多一个脉冲周期,即高电平持续 ( N+1) /2个脉冲周期 。 低电平持续 ( N-1) /2个脉冲周期 。 例如 N=5,则输出高电平持续 3个脉冲周期,低电平持续 2个脉冲周期 。
② GATE=1,允许计数; GATE=0,停止计数 。 如果在
OUT为低电平期间 GATE=0,OUT将立即变高 。 当 GATE变高以后,在下一个 CLK脉冲来到时,计数器将重新装入初始值,
开始计数 。 在这种情况下通过门控信号使计数器实现同步,
称为硬件同步 。
③ 如果 GATE信号一直为高电平,在写入控制字和计数值后,将在下一个 CLK脉冲来到时装入计数初值并开始计数,这种情况称为软件同步 。
④ 在计数期间写入一个新的计数初值,如果在输出信号半周结束之前没有收到 GATE脉冲,则要到现行输出半周结束后才按新的计数初值开始计数 。 如果在写入新计数初值之后在现行输出半周结束之前收到 GATE脉冲,计数器将在下一个 CLK脉冲来到时立即装入新的计数初值并开始计数 。
(5) 方式 4——软件触发的选通信号发生器 。
在这种方式下,当写入控制字后,输出端 OUT变为高电平,
以此作为初始电平。
当写入计数初值后开始计数,称为软件触发 。 当计数到
0后,输出变低,经过一个 CLK周期,输出又变高,计数器停止计数 。 这种方式计数也是一次性的,只有在输入新的计数值后,才开始新的计数过程 。 若设置的计数初值为 N,则是在写入了计数初值后经过 ( N+1) 个 CLK脉冲,才输出一个负脉冲 。 一般将此负脉冲作为选通信号 。
方式 4 的特点是:
① 当 GATE=1时,允许计数;当 GATE=0时,禁止计数 。
所以,要做到软件触发,GATE应保持为 1。
② 在计数过程中,若改变计数初值,则按新的计数初值开始计数 。 这称为软件再触发 。
(6) 方式 5——硬件触发的选通信号发生器 。
在这种方式下,当写入控制字后,输出端出现高电平作为初始电平 。 在写入计数初值后,计数器并不立即开始计数,
而是要由门控脉冲的上升沿来启动计数,这称为硬件触发 。
当计数到 0时,输出变低,又经过一个 CLK脉,输出恢复为高 。
这样在输出端得到一个负脉冲选通信号 。 计数器停止计数后要等到下次门控脉冲触发,才能再进行计数 。
方式 5的特点是:
① 若设置计数初值为 N,则在门控脉冲触发后,经过
( N+1) /2个 CLK脉冲,才输出一个负脉冲 。
② 在计数过程中,若 GATE端又出现一个脉冲进行触发,
则使计数器重新开始计数,但对输出状态没有影响 。
③ 若在计数过程中改变计数值,只要没有门控信号的触发,
就不影响本次计数过程 。 当计数到 0后,若有新的门控信号的触发,则按新的计数初值计数 。
方式 5和方式 4都产生选通脉冲 。 这两种方式的区别在于:
方式 4每次要靠软件设置计数初值后才能计数 ( 软件触发 ),
方式 5的计数初值只需设置一次,但是每次计数要靠门控信号的触发 ( 硬件触发 ) ;方式 4软件更改计数初值后立即起作用,
方式 5软件更改计数初值后要有新的门控信号的触发才能起作用 。
5,8253的读 /
8253的写操作包括写控制字和写计数初值两项内容 。 具体要求是:
① 各计数器的控制字都写到同一地址单元,而各计数初值写到各自的地址单元中。
② 对于每个计数器,必须先写控制字,后写计数初值 。
因为后者的格式是由前者决定的 。
③ 写入的计数初值必须符合控制字决定的格式 。 16位数据应先写低 8位,再写高 8位 。
当给多于一个的计数器写入控制字和计数初值时,其顺序有一定的灵活性,只要遵循上述要求即可 。
8253的读操作所得到的是当前计数值,通常用于实时检测,实时显示和数据处理 。 在进行读操作时需要注意以下几点:
① 读操作是通过访问对应于各计数器的地址单元来实现的 。
② 每个计数器的读操作必须按照控制字确定的格式 。 如果是 16位计数,读操作要进行两次,先读低 8位,后读高 8位 。
③ 当计数器为 16位时,为了避免在两次读出过程中计数值的变化,要求先将计数值锁存 。 锁存计数值的常用方法是使用计数器锁存命令:控制字的 D7D6两位为所要锁存的计数值,
D5D4两位置为 00。 8253的每个计数器都有一个输出锁存器
( 16位 ),平时它的值跟随计数值而变化 。 当向计数器写入锁存命令后,现行计数值被锁存 ( 计数器仍能继续计数 ) 。 这样
CPU读取的就是锁存器中的值 。 当 CPU读取了计数值或对计数器重新编程以后,锁存状态被解除,输出锁存器的值又随计数值变化 。
6,8254
Intel 8254与 8253兼容,是 8253的改进型,因此它的操作方式以及引脚与 8253完全相同 。 它的改进主要反映在两个方面,一是 8254的计数频率很高,可达 10 MHz;一是 8254多了一条读回命令,这条命令可以令三个通道的计数值和状态锁存,如图 7 - 30 所示 。 相应地,8254每个通道都有一个状态字可由读回命令将其锁存,然后由 CPU读取 。 状态字反映了这个通道的工作方式及输出引脚的高低等信息,如图 7 - 31
所示 。
读回命令是写入控制口的 。 其 D5位为 0,表示锁存所选择的计数器的计数值; 其 D4位为 0,表示锁存所选择的计数器的状态 。 若 D3D2D1的某位为 0,则选择对应的计数器 。
图 7- 30 8254读回命令字
1 1 计数值锁存
D 7 D 5 D 3 D 2 D 1 D 0D 6
状态锁存
D 4
计数器 2 计数器 1 计数器 0 0
图 7-31 5254的计数器状态字无效计数值
D
7
D
3
D
0
D
6
读写格式
D
5
工作方式 数制输出
D
4
D
2
D
1
D7位是该计数器输出端 OUT的状态,OUT为高电平,则
D7=1。 D6位反映了预置寄存器中的计数值是否写入了减 1计数器,当向计数器通道写入控制字和计数值后,D6=1;只有当预置寄存器中的计数值写入减 1计数器时,才使 D6=0,因此在状态字 D6=1时,读取计数值是无意义的 。
在读回命令中允许同时使 D5和 D4位为 0,即计数值和状态字都要读回 。 但两者都要用同一个计数器端口,输入顺序是区别两者的方法 。 此时,第一次输入指令读入的一定是状态字; 接着的一条或二条输入指令将读入计数值 。
7,8253/8254在 PC
IBM PC/XT使用了一片 Intel 8253。 3个计数通道分别用于日时钟计时,DRAM刷新定时和控制扬声器发声 。 图 7 - 32 为连接图 。 IBM PC/AT使用与 8253兼容的 Intel 8254,在 AT机的连接使用与 XT机一样 。
根据 XT机 I/O地址译码电路可知,当 A9A8A7A6A5=00010
时,定时 /计数器片选信号 T/ 有效,所以 8253的 I/O地址范围为 040~05FH。 由片上 A1A0连接方法可知,计数器 0,计数器 1和计数器 2的计数通道地址分别为 40H,41H和 42H,而方式控制字的端口地址为 43H。 其他端口地址为重叠地址,一般不使用 。
CCS
图 7-32 IBM PC/XT与 8253连接图
RDI O R
WRI O W
A
0
A
0
A
1
A
1
CST / C C S
D
0
~ D
7
D
0
~ D
7
C L K
0
C L K
1
C L K
2
÷2
P C L K
G A T E
0
G A T E
1
G A T E
2
+ 5V
PB
0
O U T
0
I R Q
0
8 2 5 3
O U T
1
C L K
D Q
+ 5V
S
D R Q
0
R
D A C K 0 B R D
O U T
2
PB
1
PB
0
,PB
1
来自 8 2 5 5 A
接至扬声器驱动器
&
接至 D M A 驱动器个计数器通道时钟输入 CLK均从时钟发生器 PCLK端经二分频得到,频率为 1.19 318 MHz,周期为 838 ns。
下面介绍 8253的 3个通道在 XT机的作用 。
(1) 计数器 0。
门控 GATE0接 +5 V为常启状态 。 OUT0输出接 8259A的
IRQ0,用作 XT中日时钟的中断请求信号 。 设定时 /计数器 0为方式 3,计数值写入 0,产生最大的计数初值 65 536,因此输出信号频率为 1.193 18 MHz÷ 655 36=18.206 Hz,即每秒产生
18.2次中断,或者说每隔 55 ms申请一次日时钟中断 。 其程序
MOV AL,36H ; 设定计数器 0为工作方式 3,采用二进制计数,; 以先低后高字节顺序写入低 8位数值
OUT 43H,AL ; 写入控制字
MOV AL,0 ;
OUT 40H,AL ; 写入低字节计数值
OUT 40H,AL ; 写入高字节计数值
(2) 计数器 1。
门控 GATE1接 +5 V为常启状态 。 OUT1输出从低电平变为高电平使触发器置 1,Q端输出一正电位信号,作为内存刷新的
DMA请求信号 DRQ0,DMA传送结束 ( 一次刷新 ),由 DMA响应信号 DACK0BRD将触发器复位 。
DRAM每个单元要求在 2ms内必须被刷新一次 。 实际芯片每次刷新操作完成 512个单元的刷新,故经 128次刷新操作就能将全部芯片的 64 KB刷新一遍 。 由此可以算出每隔 2 ms÷ 128=15.6 μs
进行一次刷新操作,将能保证每个单元在 2 ms内实现一遍刷新 。
这样将计数器置为方式 2,计数初值为 18,每隔 18× 0.838
μs=15.084 μs产生一次 DMA请求,满足刷新要求 。 其程序如下:
MOV AL,54H 设定计数器 1为工作方式 2,采用二进制,
只写入低 8
OUT 43H,AL ;
MOV AL,18 ; 计数值为 18
OUT 41H,AL ;
(3) 计数器 2。
微型计算机系统中,计数器通道 2的输出加到扬声器上,
控制它发声,作为机器的报警信号或伴音信号 。 门控 GATE2接并行接口 PB0位,用它控制通道 2的计数过程 。 PB0受 I/O端口地址 61H的 D0位控制,在 XT机中是并行接口电路 8255的 PB0位 。
输出 OUT2经过一个与门,这个与门受 PB1位控制 。 PB1受 I/O端口地址 61H的 D1位控制,在 XT机中是 8255的 PB1位 。 所以,扬声器可由 PB0或 PB1分别控制发声 。 如果由 PB1控制发声,此时计数器 2不工作,因此 OUT2为高电平,将由 PB1产生一个振荡信号控制扬声器发声 。 但是,由于它会受系统中断的影响,使用不甚方便 。
如果由 PB0控制发声,由 PB0通过 GATE2控制计数器 2的计数过程,输出 OUT2信号将产生扬声器的声音音调 。
例如,在 ROM-BIOS中有一个声响子程序 BEEP,它将计数器 2编程为方式 3,作为方波发生器输出约 1kHz的方波,经滤波驱动后推动扬声器发声 。
BEEP PROC
MOV AL,10110110 ;设计数器 2为方式 3,采用二进制
OUT 43H,AL ;按先低后高顺序写入 16位计数值
MOV AX,0533H ; 初值为 0533H=1331,1.19318
MHz÷ 1331=896 Hz
OUT 42H,AL ; 写入低 8
MOV AL,AH
OUT 42H,AL ; 写入高 8
IN AL,61H ; 读 8255的 B
MOV AH,AL ; 存于 AH
OR AL,03H ; 使 PB1和 PB0位均为 1
OUT 61H,AL ;
SUB CX,CX
G7,LOOP G7 ;
DEC B1 ; B1
JNZ G7 ; B1=6为长声,B1=1为短声
MOV AL,AH
OUT 61H,AL ; 恢复 8255的 B口值,停止发声
RET
BEEP ENDP ; 返回
7.4 模拟通道接口
7.4.1
在微机检测和控制系统中,许多被测量的往往是模拟量 。 它们经过预处理 ( 放大,I/V转换等 ) 之后,在进入计算机之前必须经过 A/D转换变成数字量 。 而在微机内部,对检测数据进行加工处理之后输出的是数字量,这就需要通过 D/A转换接口将数字量转换为相应形式的模拟量 。
7.4.2 D/A转换接口
1,D/A
D/A转换的基本原理是用电阻解码网络,将 N位数字量逐位转换成模拟量并求和,从而实现将 N位数字量转化为模拟量 。 图 7 - 33 所示为微机系统中的 D/A转换环节 。 对于一个 8位 D/A转换器来说,假设输出为单极性模拟量电压,满量程值为 5 V,在理论上其数字量与模拟量之间的对应关系如表
7 - 7 所示 。
VOUT= 满量程电压值 2N× D
式中,N是 D/A转换器的位数,D是数字量换算到十进制的数值,满量程电压值 /2N是 1LSB所对应的模拟量电压,即分辨率 。
图 7 – 33 微机系统中的 D/A转换环节微机 D / A 转换器
N
数字量模拟量
VOUT=
式中,N是 D/A转换器的位数,D是数字量换算到十进制的数值,满量程电压值 /2N是 1LSB所对应的模拟量电压,即分辨率 。
由于数字量不是连续的,其转换后的模拟量自然就不是连续的 。 同时由于计算机每次输出数据和 D/A转换器进行转换需要一定的时间,因此实际上 D/A转换器输出的模拟量随时间的变化曲线不是连续的,而呈阶梯状 如图 7 - 34 所示 。 图中时间坐标的最小分度 ΔT是相邻的两次输出数据的时间间隔,
模拟量坐标的最小分度是 1 LSB。 但如果 D/A转换器的分辨率较高,ΔT很短,那么这条曲线的台阶就很密,基本上就是连续的 。
D?NN A N 量程值 2
图 7- 34 D/A转换输出的模拟量曲线
0
t
T
A
2,D/A转换器的主要性能指标
(1) 分辨率 。
分辨率是当输入数字量发生单位数码变化 ( 即 1LSB) 时,
所对应的输出模拟量的变化量,即等于模拟量输出的满量程值的 ( N为数字量位数 ) 。 分辨率也可以用相对值 ( 1/2N)
百分率表示 。 在实际应用中,又常用数字量的位数来表示分辨率 。
(2) 转换精度 。
转换精度是指一个实际的 D/A转换器与理想的 D/A转换器相比较的转换误差 。 理想的 D/A转换器特性如图 7 - 35 所示 。
精度反映 D/A转换的总误差 。 其主要误差有失调误差,增益误差,非线性误差和微分非线性误差 。
1
2N
图 7 – 35 理想的 D/A转换特性
0 0 0
模拟量
0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 11 1 0
数字量
③ 非线性误差 。
非线性误差是实际转换特性曲线与理想转换特性曲线之间的最大偏差 。 一般要求此误差不大于 ± LSB。 D/A转换器的失调和增益调整一般不能完全消除非线性误差,但可以使之显著减小 。
④ 微分非线性误差 。
微分非线性误差是指任意两个相邻数码所对应的模拟量间隔与理想值之间的偏差 。
(3) 建立时间 。
当 D/A转换器的输入数据发生变化后,输出模拟量达到稳定数值,即进入规定的精度范围内所需要的时间 。
(4) 温度系数 。
D/A转换器的各项性能指标一般在环境温度为 25℃ 下测定 。
环境温度的变化会对 D/A转换精度产生影响,这一影响分别用失调温度系数,增益温度系数和微分非线性温度系数来表示 。
这些系数的含义是当环境温度变化 1℃ 时该项误差的相对变化率,单位是 × 10-6/℃ 。
3,常用的 D/A
D/A转换器的类型很多 。 从输入电路来说,一般的 D/A转换器都带有输入寄存器,与微机能直接连接;有的具有两极锁存器,使工作方式更加灵活 。 输入数据一般为并行数据,也有串行数据 。 并行输入的数据有 8位,10位,12位等 。 从输出信号来说,D/A转换器的直接输出是电流量,若片内有输出放大器,则能输出电压量,并能实现单极性或双极性电压输出 。
D/A转换器的转换速度较快,一般其电流建立时间为 1 μs。
有些 D/A转换器具有其它功能,如能输出多路模拟量,输出工业控制用的标准电流信号 。
典型的 D/A 转换器如 8 位通用型 DAC0832,12 位的
DAC1208,电压输出型的 AD558和多路输出型 AD7528。
DAC0832是 8位分辨率的 D/A转换集成芯片 。 它具有与微机连接简单,转换控制方便,价格低廉等特点,微机系统中得到广泛的应用 。
(1) 结构和引脚 。
DAC0832的结构框图如图 7 - 36 所示,它由 8位输入锁存器,8位 DAC寄存器,8位 DAC转换器及转换控制电路构成 。
封装为 20脚双列直插式 。
各引脚功能如下:
图 7 – 36 DAC0832的结构框图
8 位输入寄存器
4 ~ 7
3
V
RE F
I
O U T 2
I
O U T 1
R
FB
&
19
1
2
I LE
DI
3
~ DI
0
输入数据
CS
WR
1
LE
2
8
12
8 位
D / A
转换器
LE
1
13 ~ 16
DI
7
~ DI
4
&
&
WR
2
X F E R
18
17
11
9
A G N D
20
10
V
CC
D G N D
R
FB
8 位
D A C
寄存器
DI0~DI7,8位数据输入端 。
ILE,输入寄存器允许信号,输入,高电平有效 。
:片选信号,输入,低电平有效 。
:输入寄存器写信号,输入,低电平有效 。 由 ILE、
,的逻辑组合产生输入寄存器控制信号 。 当为低电平时,输入寄存器内容随数据线变化,
正跳变将输入数据锁存 。
,数据传送信号,输入,低电平有效 。
,DAC寄存器的写信号,输入,低电平有效 。 由
,组成 DAC 。 的正跳变将输入数据锁存到 DAC寄存器 。
CS?
WR?
CS? WR? 1LE
1LE1
LE
XFER
2WR
XFER
2WR
2LE 2LE
VREF,基准电源输入端 。
RFB,反馈信号输入端 。
IOUT1:电流输出 1端 。 当输入数据为全 0时,IOUT1等于
0;当输入数据为全 1时,IOUT1等于最大值 。
IOUT2:电流输出 2端,IOUT1+IOUT2=常数 。
VCC:电源输入端 。
AGND,模拟地 。
DGND,数字地 。
D/A转换器没有形式上的启动信号 。 实际上后一级寄存器的控制信号就是 D/A转换器的启动信号 。 另外,它也没有转换结束信号 。 D/A转换的过程很快,一般还不到一条指令的执行时间 。
(2) 工作方式 。
DAC0832内部有两个寄存器,能实现三种工作方式,双缓冲,缓冲和直通方式 。
双缓冲工作方式是指两个寄存器分别受到控制 。 当 ILE、
和 信号均有效时,8位数字量被写入输入寄存器,
此时并不进行 D/A转换 。 和 信号均有效时,原来存在输入寄存器中的数据被写入 DAC寄存器,并进入 D/A转换器后进行 D/A转换 。 在一次转换完成后到下一次转换开始之前,由于寄存器的锁存作用,8位 D/A转换器的输入数据保持恒定,因此 D/A转换的输出也保持恒定 。 在双缓冲工作方式下,
利用输入寄存器暂存数据,给使用带来方便,可以实现多路数字量的同步转换输出 。
CS
1WR
2WR XFEF
单缓冲工作方式是指只有一个寄存器受到控制 。 这时将另一个寄存器的有关控制信号预先设置成有效,使之开通;
或者将两个寄存器的控制信号连在一起,两个寄存器作为一个来使用 。
直通工作方式是指两个寄存器的有关控制信号都预先置为有效,两个寄存器都开通 。 只要数字量送到数据输入端,就立即进入 D/A转换器进行转换 。 这种方式应用较少 。
(3) 电压输出电路的连接 。
DAC0832以电流形式输出转换结果,得到电压形式需外加 I/V转换的电路,常采用运算放大器 。 图 7 - 38 是 DAC0832
的电压输出电路 。
图 7 – 38 DAC0832
(a) 单极性输出; (b) 双极性输出
D A C 0 8 3 2
( a )
R
FB
I
O U T 1
I
O U T 2
V
OUT
R
P1
-
+
D A C 0 8 3 2
V
RE F
R
FB
I
O U T 1
I
O U T 2
-
+
R
P1
+ 5V
V
OUT
1
R
2
= R
R
0
R
2
= 2 R
-
+
-
+
R
3
= 2 R
V
OUT
( b )
+
-
-
+
对于单极性输出电路,输出电压的格式为
VOUT=-
式中 D为输入数字量的十进制值 。 因为转换结果 IOUT1接运算放大器的反相端,所以式中有一个负号 。 若 VREF=+5V,
D=0~255( 00H~FFH) 时,VOUT=-( 0~4.98) V。
通过调整运算放大器的调零电位器,可以对 D/A芯片进行零点补偿 。 通过调节外接于反馈回路的电位器 RP1,可以调整满量程 。
对于双极性输出电路,输出电压的表达式为:
REFV
D?
256
VOUT =
若 VREF=+5 V,当 D=0时,VOUT1=0,VOUT=-5 V;当
D=128( 80H) 时,VOUT1= -2.5 V,VOUT=0;当 D=255( FFH)
时,VOUT1=-4.98 V,VOUT=4.96。 这一转换关系由表 7 - 8 示出 。
(4) 主要性能指标 。
· 分辨率为 8位 。
· 输出电流稳定时间为 1 μs。
·非线性误差为 0.20%FSR。
R E FV
D
1 2 8
1 2 8
· 温度系数为 2× 10-6 /℃ 。
· 工作方式为双缓冲,单缓冲和直通方式 。
· 逻辑输入与 TTL电平兼容 。
· 功耗为 20 mW。
· 电源 5~15 V。
(5) DAC芯片与微机的连接 。
DAC芯片作为一个输出设备接口电路,与主机的连接比较简单,主要是处理好数据总线的连接 。
① 主机位数等于或大于 DAC芯片位数的连接 。
对于 DAC来说,当待转换的数字量加到其数据输入端时,
在模拟输出端随之建立相应的电流或电压 。 随着输入数据的变化,输出电流或电压也随之变化 。
待转换的数字量通常来自微处理机数据总线 。 由于微处理机要进行各种信息的加工处理,它输出的任何数据都只在输出指令 OUT执行的极短时间内出现在数据总线上,所以主机与 DAC之间必须接入数据锁存器 。
锁存器把主机输给 DAC的数据锁存起来,在模拟输出端建立相应的电流或电压,直到输入新的数据 。 锁存器的控制信号,则来自微处理机的输出控制信号和地址译码器产生的端口地址信号,如图 7 - 39所示 。
对于没有锁存器的 DAC芯片,如 AD7520,AD7521、
DAC0808等,必须外接锁存器 。
图 7 –39 不带锁存器的 DAC连接图
L S 2 7 3
C L K
D
0
~ D
7
D A C
-
+
A
V
OUT
译码
AB
I O W
&
锁存器可以是常用的数字集成电路,如 74LS273/ 274;
也可以是可编程并行接口芯片,如 Intel 8255,Z80 PIO等 。 对于带有锁存器的 DAC芯片,如 DAC0832,DAC1210等,则无需外接锁存器,可以直接与数据总线连接 。 有时,为了增加使用的灵活性,带有锁存器的 DAC芯片也可以外接另一级锁存器 。
DAC0832工作在直通方式时是一个不带锁存功能的 DAC芯片,
而工作在缓冲方式时才带有一级或两级锁存器,如图 7 - 40 为
DAC0832在单缓冲工作方式下的一种连接电路图 。
7 – 40 DAC0832单缓冲接口电路
V
R E F
CS I
O U T 1
I
O U T 2
-
+
A
- 5V
V
CC
+ 5V
I L E
译码
AB
WR
1
I O W
DI
0
~ DI
7
D
0
~ D
7
V
OUT
D A C 0 8 3 2
WR
2
X F E R
D G N D A G N D
R
fb
对应于图 7 - 39 和图 7 - 40,下面的程序段在执行时,可以实现一次 D/A转换 。 程序中假设要转换的数据存于 BUF单元 。
MOV AL,BUF ;
MOV DX,
OUT DX,AL ; 输出,进行 D/A
② 主机位数小于 DAC芯片位数的连接 。
当要求 DAC有更高的分辨率时,常要用 10,12甚至 16位的 DAC芯片 。 如果仍采用 8位主机,则被转换的数据必须分几次送出 。 同时,就需要多个锁存器来锁存分几次送来的完整的数字量 。 例如,当 DAC芯片为 12位时,就需要采用如图 7 -
41 所示的电路 。
图 7- 41 2
4 位锁存器
8 位锁存器
4 位锁存器
8 位锁存器
12 位
D A C
D
0
~ D
7
第 1 级高 4 位锁存控制第 1 级低 8 位锁存控制第 2 级 1 2 位锁存控制模拟输出
8 位锁存器
4 位锁存器
8 位锁存器
12 位
D A C
D
0
~ D
7
第 1 级低 8 位锁存控制第 2 级 1 2 位锁存控制模拟输出
( a ) ( b )
图 7 - 41( a) 采用了两级锁存器,每一级用了两个锁存器 。
一个完整的 12位数据,微处理机要分两次送出,先送低字节
( 8位 ),再送高字节 ( 4位 ) 。 送完数据后,微处理机还要再进行一次输出操作 ( 但输出的数据无用 ),来进行第二级锁存,
将 12位数据同时送给 DAC进行转换 。 之所以采用第二级锁存将
12位数据同时送 DAC,是为了避免当低 8位输入后,高 4位还未来得及输入时,模拟输出端出现短暂的错误输出 。
图 7 - 41( b) 采用了较简单的两级锁存器,可以省掉一个
4位锁存器及有关的译码器,并使输出数据的过程由三次输出操作减为两次 。
DAC1210是 12位 D/A转换器芯片,其电流建立时间为 1 μs,
单电源 VCC为 5~15 V,参考电压 VREF最大为 ± 25 V。 数字输入端与 TTL电平兼容,如图 7 -42( a) 为其方框图 。
由图 7 - 42 可以看出,DAC1210的逻辑结构与 DAC0832
相似 。 我们只讨论它与 8位数据总线的连接问题,其它不再赘述 。 DAC1210的 12位数据输入寄存器由一个 8位寄存器和一个 4
位寄存器组成,与图 7 - 40( a) 所示相同 。 两个寄存器的输入允许控制都要求,为低电平,但 8位寄存器的数据输入还要求 B1/ 端为高电平 。 所以当 DAC1210与 8位数据总线相接时,必须先使 B1/ 为高,送出高 8位数据;然后使
B1/ 为低送出低 4位数据,同时保护先送出的高 8位数据 。
CS 1WR
2B
2B
2B
图 7 – 42 DAC1210及其应用输入寄存器
( 8 位)
V
CC
10
V
R E F
I
O U T 2
I
O U T 1
R
fb
输入寄存器
( 4 位)
5
4
20
19
18
17
16
15
DI
4
DI
5
DI
6
DI
7
DI
8
DI
9
DI
10
DI
11
9
8
7
6
DI
0
DI
1
DI
2
DI
3
23
B
1
/B
2
CS
WR
1
WR
2
X F E R
1
2
22
21
D A C
寄存器
( 12 位)
D / A
转换器
( 12 位)
11
13
14
3
A G N D
D A C 1 2 1 0
24
12
D G N D
V
R E F
I
O U T 1
I
O U T 2
-
+
A
- 5V
V
CC
+ 5V
DI
4
~ DI
7
2 2 0 h
D
0
~ D
3
V
o u t
D A C 1 2 1 0
X F E R
D G N D
DI
8
~ DI
11
D
4
~ D
7
DI
0
~ DI
3
WR
1
CS
WR
2
I O W
B
1
/B
2
2 2 1 h
地址译码
2 2 2 h
A
0
A G N D
R
fb
( a )
( b )
&
&
&
1
≥1
A
0
~ A
9
如图 7 - 41( b) 为 DAC1210与 IBM PC标准总线的连接电路图 。 DAC占用的端口地址为 0220H~ 0222H。 为使两次数据输入端口的地址先偶 ( 220H) 后奇 ( 221H),与编程习惯一致,可以 A0地址线经一反相器接至 B1/ 端 。 若 BX寄存器中低 12位为待转换的数字量,如下程序段可完成一次转换输出:
MOV DX,220H
MOV C1,4 ; BX中低 12
SHL BX,CL
MOV A1,BH ; BH中为高 8
OUT DX,AL ; 送出高 8位
2B
INC DX
MOV A1,BL ; BL中为低 4
OUT DX,AL ; 送出低 4
INC DX
7,4.3A/D转换接口
1,A/D转换的基本知识转换的功能是把模拟量电压转换为 N位数字量电压 。 图
7 - 43 所示为 A/D转换器的工作情况,其中图 7 - 43( b) 是相对应的输入和输出 。
对于这一转换过程,作以下几点说明:
① 输入 A/D转换器的模拟量电压是连续的 。 由于 A/D转换器完成一次转换需要一定的时间,A/D转换只能间断性地进行,因此输出的数字量电压是不连续的,称为离散量 。 在图 7-43( b) 中,A/D转换所得的结果是一个个孤立的点 。 每个点的纵坐标代表某个数字量,其值与采样时刻的模拟量相对应 。 如果在相邻两次采样时刻之间,A/D转换输出的数字量保持前一时刻的值,那么 A/D转换的输出就是一条阶梯形的曲线 。
图 7 - 43A/D
(a) A/D 转换器 ; (b) 输入和输出时间时间采样周期
0
数字量模拟量
0
A / D 转换器模拟量 数字量
( N 位)
( a )
( b )
② 相邻两次采样的间隔时间称为采样周期 。 为了使输出量能充分反映输入量的变化情况,采样周期要根据输入量变化的快慢来决定 。 而一次 A/D转换所需要的时间显然必须小于采样周期 。
③ 假设输入的模拟量为 0~4.99 V时,输出的数字量为
001~111( 二进制数 ),那么输出与输入的对应关系如表 7 - 9
所示 。
④ 将模拟量表示为相应的数字量,称为量化 。 数字量的最低位即最小有效位 1 LSB( LSB,Least Significant Bit),
与此相对应的模拟电压称为一个量化单位,如果模拟电压小于此值,不能转换为相应的数字量 。 LSB表示 A/D转换器的分辨能力 。 对于上述转换关系来说,1 LSB=0.71 V。
2,A/D
(1) 分辨率 。
习惯上以输出的二进制位数或 BCD码位数表示分辨率 。
如一个输出为 8位二进制数的 A/D 转换器,称其分辨率为 8位 。
也可以用对应于 1 LSB的输入模拟电压来表示分辨率 。 分辨率还可以用百分数来表示,例如 8位 A/D转换器的分辨率百分数为 ( 1/256) × 100%=0.39%。
(2) 量化误差 。
A/D转换是用数字量对模拟量进行量化 。 由于存在最小量化单位,在转换中就会出现误差,仍以上述 0~4.99 V 转换为二进制数 000~111的 A/D 转换器为例,模拟量 1.42 V对应于数字量 010;而 ( 1.42 V- LSB) ~ (1.42 V+ LSB)也都对应于 010,这样就带来了转换误差 。2
1 21
这一误差称为量化误差 。 理想 A/D
± LSB,如图 7 -44 所示 。
(3) 转换精度 。
转换精度是指一个实际的 A/D转换器与理想的 A/D转换器相比的转换误差 。 绝对精度一般以 LSB为单位给出 。 相对精度则是绝对精度与满量程的比值 。 不同厂家生产的 A/D转换器的转换精度指标的表达方式可能不同 。 有的给出综合误差指标,有的给出分项误差指标 。 通常误差指标有失调误差
( 零点误差 ),增益误差 ( 满量程误差 ),非线性误差和微分非线性误差 。 下面分别介绍这些误差 。
2
1
图 7 – 44 理想的 A/D转换曲线模拟量( V )
0 1 2 3 4 5
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1,4 2
21
L
S
B
2
1
L S B
数字量
① 失调误差 。
失调误差也称为零点误差,这是指当输入模拟量从 0逐渐增长使输出数字量从 0……0跳至 0……1时,输入模拟量实际数值与理想的模拟量数值 ( 即 1 LSB的对应值 ) 之差 。 这反映了
A/D转换器零点的偏差 。 一定温度下的失调误差可以通过电路调整来消除 。
② 增益误差 。
当输出数字量达到满量程时,所对应的输入模拟量与理想的模拟量数值之差,称为增益误差或满量程误差,计算此项误差时应将失调误差除去 。 一定温度下的增益误差也可以通过电路调整来消除 。
③ 非线性误差 。
非线性误差是指实际转换特性与理想转换特性之间的最大偏差,它可能出现在转换曲线的某处 。 此项误差不包括量化误差,失调误差和增益误差 。 它不能通过电路调整来消除 。
④ 微分非线性误差 。
在 A/D转换曲线上,实际台阶幅度与理想台阶幅度 ( 即理论上的 1 LSB) 之差,称为微分非线性误差 。 如果此误差超过 1
LSB,就会出现丢失某个数字码的现象 。
在上述几项误差中,如果失调误差和增益误差能得到完全补偿,那么只需考虑后两项非线性误差 。 需要指出的是精度所对应的误差指标中未包括量化误差,因此实际的总误差还要把量化误差考虑在内 。 总误差 E总与分项误差 Ei之间的关系如下
E总 =
(4) 转换时间 。
转换时间是指 A/D转换器完成一次转换所需要的时间 。
其倒数为转换速率 。
(5) 温度系数 。
温度系数表示 A/D转换器受环境温度影响的程度 。 一般用环境温度变化 1℃ 所产生的相对转换误差来表示,以 × 10-6/℃
为单位 。
3,常用的 A/D
A/D转换器的种类很多 。 按转换原理分类,有逐次逼近式,
双积分式,并行式等 。 双积分转换精度高,转换时间长,大约需要几百毫秒 。
2iE
并行式转换速度最高,能达到 2G次,即转换时间仅 50 ns,
但价格昂贵,产品的分辨率不高 。 逐次逼近式兼顾了转换速度和转换精度,是应用广泛的 A/D转换器 。 逐次逼近式的种类很多,分辨率从 8位到 16位,转换时间从 100μs到几微秒,精度有不同等级,有的转换器内部还常有多路模拟开关 。
常用的几种 A/D转换器,8位通用型 ADC0808/0809,12位的 AD574A和双积分型 5G14433。
ADC0808/0809是 8通道,8位逐次逼近式 A/D转换器,美国
NS公司产品 。 其性能指标一般,价格低廉,便于与微机连接,
因而应用十分广泛 。
(1) 结构和转换原理 。 图 7 - 45 所示为 ADC0808/0809的结构框图 。 ADC0808/0809由三部分组成,8路模拟量选通开关,
8位 A/D转换器和三态输出数据锁存器 。
图 7- 45 ADC0808/0809的结构框图逻辑控制和定时电路逐次逼近寄存器
S A R
2 5 6 R 电阻分压器电压比较器树状模拟开、关阵译码器
A
B
C
地址锁存有效
A L E
8 路模拟量选通开关
S TA R T
三态输出数据锁存器
G N D
转换结束
E O C
IN
0
IN
1
IN
2
IN
3
IN
4
IN
5
IN
6
IN
7
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
V
R E F
( + )
8
路模拟信号输入
A
8 位 A / D 转换器通道地址锁存与译码
3 位地址码输入
V
R E F
( - )V
CC
输出有效控制
OE
( L S B )
8 位数据输出
( M S B )
启动
C L O C K
时钟
ADC0808/0809允许 8路模拟信号输入,由 8路模拟开关选通其中一路信号,模拟开关受通道地址锁存和译码电路的控制 。 当地址锁存信号 ALE有效时,3位地址 CBA进入地址锁存器,经译码后使 8路模拟开关选通某一路信号 。
8位 A/D转换器为逐次逼近式,由 256R电阻分压器,树状模拟开关 ( 这两部分组成一个 D/A变换器 ),电压比较器,
逐次逼近寄存器,逻辑控制和定时电路组成 。 其基本工作原理是采用对分搜索方法逐次比较,找出最逼近于输入模拟量的数字量 。 电阻分压器需外接正负基准电源 VREF( +) 和
VREF( -) 。 CLOCK端外接时钟信号 。 A/D转换器的启动由
START信号控制 。 转换结束时控制电路将数字量送入三态输出锁存器锁存,并产生转换结束信号 EOC。
三态门输出锁存器用来保存 A/D转换结果,当输出允许信号 OE有效时,打开三态门,输出 A/D转换结果 。 因输出有三态门,便于与微机总线连接 。
(2) 引脚功能 。
图 7 - 46 为 ADC0808/ 0809的引脚图 。 各引脚功能说明如下:
IN0~IN7,8路模拟输入端 。
ALE:地址锁存器允许信号输入端 。 当它为高电平时,
地址信号进入地址锁存器中 。
CLOCK:外部时钟输入端 。 时钟频率典型值为 640 kHz,
允许范围为 10~1280 kHz。 时钟频率降低时,A/ D转换速度也降低 。
图 7-46 ADC0808/0809的引脚图
1
OE
C L O C K
IN
2
2
3
4
5
6
7
8
9
10
IN
7
R E F ( + )
19
20
21
22
23
24
IN
1
11
12
13
14 15
16
17
18
25
26
27
28
A D C
0 8 0 8 / 0 8 0 9
S T A R T
D
1
IN
0
A D D C
A L E
D
7
IN
3
D
4
D
0
IN
4
IN
5
IN
6
E O C
D
3
V
CC
G N D
D
2
R E F ( - )
D
5
D
6
A D D B
A D D A
CLOCK:外部时钟输入端 。 时钟频率典型值为 640 kHz,
允许范围为 10~1280 kHz。 时钟频率降低时,A/ D转换速度也降低 。
START,A/ D转换信号输入端 。 有效信号为一正脉冲 。
在脉冲上升沿,A/ D转换器内部寄存器均被清零,在其下降沿开始 A/ D转换 。
EOC,A/ D转换结束信号 。 在 START信号上升沿之后 0
到 ( 2 μs+ 8个时钟周期 ) 时间内,EOC变为低电平 。 当 A/ D
转换结束后,EOC立即输出一正阶跃信号,可用来作为 A/ D
转换结束的查询信号或中断请求信号 。
OE,输出允许信号 。 当 OE输入高电平信号时,三态输出锁存器将 A/ D转换结果输出 。
D0~D7:数字量输出端 。 D0为最低有效位 ( LSB),D7为最高有效位 ( MSB) 。
REF( +),REF( -),正负基准电压输入端 。 基准电压的中心值为 (,其偏差值不应超过 ± 0.1 V。 正负基准电压的典型值分别为 +5 V和 0
V。 VCC,GND:电源电压输入端 。
(3) 工作时序 。
ADC0808/0809的工作时序如图 7 - 47 所示 。 从图中可以看出各信号的时序关系,进一步理解上面所讲的转换过程中的信号功能 。 完成一次转换所需要的时间为 66~73个时钟周期 。
2
)( )()( REFREF VV
2
CCV
图 7 – 47 ADC0808/0809的工作时序地址
A L E
稳定模拟输入 稳定
S TA R T
E O C
OE
输出
(4) ADC0808/0809的主要性能指标 。
· 分辨率为 8位 。
· 总的非调整误差,0808为 ± LSB,0809为 ± 1 LSB。
· 转换时间为 100 μs( 时钟频率为 640 Hz) 。
· 具有锁存控制功能的 8路模拟开关,能对 8路模拟电压信号进行转换 。
· 输出电平与 TTL电平兼容 。
· 单电源 +5 V供电 。 基准电压由外部提供,典型值为 +5 V。
此时允许模拟量输入范围为 0~5 V。 功耗为 10 mW。
ADC0808/0809的数字量输出值 D( 换算到十进制 ) 与模拟量输入值 VIN之间的关系如下:
2
1
)()(
)(
REFREF
REFIN
VV
VVD
通常 VREF( +) =0 V,所以
2 5 6
)(
REF
IN
V
VD
当 VREF ( + ) =5V,相应于 VIN=0~4.98 V,D=0~255
( 00H~FFH) 。 这里由于数字量的满量程值是 255,而不是
256,因此相应地输入电压的满量程值也比 5 V少 1 LSB。
上述为单极性输入情况 。 对于只允许单极性输入的 A/D转换器,也可以转换为双极性模拟电压,但需要在输入电路上加一正的偏置电压 VOFFSET,如图 7 - 48 所示 。
图 7 - 48
(a) 输入电压为 -5~5 V; (b) 输入电压为 -10~10 V
- 5 ~+ 5V
V
IN
V
IN
R
R
V
O F F S E T
( a )
- 10 ~+ 1 0 V
V
IN
V
IN
2 R
R
V
O F F S E T
( b )
2 R
′ ′
图中 R可以取几十千欧,VOFFSET可以取 +5 V。 改成双极性输入后,用偏移码表示转换结果,见表 7 - 10。 双极性输入与单极性输入相比,输出范围不变,而输入范围增加,因而转换灵敏度下降 。
与 ADC0808/0809同属 ADC0800系列的还有 ADC0816/0817,
其通道数增至 16,封装为 40引脚,其它性能与 ADC0808/0809基本相同 。 ADC0800~0805系列为单通道 8位转换器,除了通道数以外,其它性能与 ADC0808/0809相似 。
(5) ADC芯片与 CPU接口 。
通常使用的 ADC一般都具有下列引脚:数据输出,启动转换,转换结束,时钟和参考电平等 。 ADC与主机的连接就是处理这些引脚的连接问题 。
① 数据输出线的连接 。
模拟信号经 A/ D转换,向主机送出数字量 。 所以,ADC
芯片就相当于给主机提供数据的输入设备 。
能够向主机提供数据的外设很多,它们的数据线都要连接到主机的数据总线上 。 为了防止总线冲突,任何时刻只能有一个设备发送信息 。 因此,这些能够发送数据的外设的数据输出端必须通过三态缓冲器连接到数据总线上 。 由于有些外设的数据不断变化,如 A/D转换的结果,随模拟信号变化而变化,所以,为了能够稳定输出,还必须在三态缓冲器之前加上锁存器,保持数据不变 。 为此,大多数向系统数据总线发送数据的设备都设置了锁存器和三态缓冲器,简称三态锁存缓冲器或三态锁存器 。
根据 ADC芯片的数字输出端是否带有三态锁存缓冲器,
与主机的连接可有两种方式 。 一种是直接相连,主要用于输出带有三态锁存缓冲器的 ADC芯片,如 ADC0809,AD574等;
第二种是用三态锁存器,如 74LS373/374,或通用并行接口芯片,如 Intel 8255,Z80 PIO,它适用于不带三态锁存缓冲器的
ADC芯片 。 但很多情况下,为了增加 I/O的接口功能,那些带有三态锁存缓冲器的芯片也常采用第二种方式 。
此外,随着位数的不同,ADC与微处理机数据总线的连接方式也不同 。 对于 8位 ADC,其数字输出端可与 8位微处理机数据总线相连,然后用一条输入指令一次读出结果 。 但对于 8
位以上的 ADC,与 8位微处理机连接就不那么简单了,此时必须增加读取控制逻辑,把 8位以上的数据分两次或多次读取 。
② A/D转换的启动信号 。 当一个 ADC在开始转换时,必须加一个启动信号 。 芯片不同,要求的启动信号也不同,一般分脉冲启动信号和电平控制信号 。
脉冲信号启动转换的 ADC,只要在启动引脚加一个脉冲即可,如 ADC0809,AD574。 通常都是采用外设输出信号和地址译码器的端口地址信号经逻辑电路进行控制 。
电平信号启动转换是在启动引脚上加一个所要求的电平 。
电平加上之后,A/D转换开始,而且在转换过程中,必须保持这一电平,否则,将停止转换 。 在这种启动方式中,CPU送出的控制信号必须通过寄存器保持一段时间 。
软件上通常是在要求启动 A/D转换的时刻,用一个输出指令产生启动信号,这就是编程启动 。 此外,也可以利用定时器产生信号,这样可以方便地实现定时启动,适合于固定延迟时间的巡回检测等应用场合 。
③ 转换结束信号的处理方式 。
当 A/D转换结束,ADC输出一个转换结束信号,通知主机,A/ D转换已经结束,可以读取结果 。 主机检查判断 A/
D转换是否结束的方法主要有四种:
· 中断方式 。 这种方式下,把结束信号作为中断请求信号接到主机的中断请求线上 。 当转换结束时,向 CPU申请中断,
CPU响应中断后,在中断服务程序中读取数据 。 这种方式下
ADC与 CPU同时工作,适用于实时性较强或参数较多的数据采集系统 。
· 查询方式 。 这种方式下,把结束信号作为状态信号经三态缓冲器送到主机系统数据总线的某一位上 。 主机在启动转换后开始查询是否转换结束,一旦查到结束信号,便读取数据 。
这种方式的程序设计比较简单,实时性较强,是比较常用的一种方法 。
· 延时方式 。 这种方式下,不使用转换结束信号 。 主机启动 A/ D转换后,延时一段略大于 A/ D转换的时间,即可读取数据 。 延时通常可以采用软件延时程序,也可以用硬件完成延时 。 采用软件延时方式,无需硬件连线,但要占用主机大量时间 。
延时方式多用于主机处理任务较少的系统中 。
· DMA方式 。 这种方式下,把结束信号作为 DMA请求信号 。 转换结束,即启动 DMA传送,通过 DMA控制器直接将数据送入内存缓冲区 。 这种方式特别适合要求高速采集大量数据的情况 。
④ 时钟的提供 。
时钟是决定 A/ D转换速度的基准,整个转换过程都是在时钟作用下完成的 。 时钟信号的提供有两种 。 一种是由外部提供,它可用单独的振荡电路产生,更多的则用主机时钟分频得到;另一种是由芯片内部提供,一般用启动信号启动内部时钟电路,只在转换过程中才起作用 。
⑤ 参考电压的接法 。
ADC中参考电压常有两个,VREF( +) 和 VREF( -) 。 根据模拟输入量的极性不同,它们的接法亦不同 。 当模拟信号为单极性时,VREF( -) 接地,VREF( +) 接正极电源 。 当模拟信号为双极性时,VREF( +) 和 VREF( -) 分别接参考电源的正,负极性端 。
当然也可以把双极性信号转换为单极性信号再接入 ADC。
参考电压的提供方法有两种 。 一种是外电源供给,这个外电源可以是系统的供电电源 。 在精度要求较高时则单独连接精密稳压的电源 。 常用的情况是将系统电源经进一步稳压后 接到参考电压端 。 另一种情况是 ADC芯片内部设置有稳压电路,
只需提供芯片电源,而不用单独供给参考电压,这种情况常见于 10位以上 ADC。
7.2 串行通信接口
7.3 定时器接口
7.4 模拟通道接口第 7章 微机接口技术返回主目录第 7 章微机接口技术是微型计算机应用的重要部分 。 为了实现人机交互和各种形式的输入和输出,在不同的微机系统中,人们使用了多种多样的 I/O设备 。 这些设备和装置,在工作原理,
驱动方式,信息格式以及工作速度方面彼此差别很大;在处理数据时,其速度也比 CPU慢得多,所以它们不可能与 CPU直接相连,必须通过作为接口的中间电路再与微机系统相连 。 因此,
微机接口设计就是根据接口芯片厂家提供的芯片功能,引脚,
时序和使用说明,将接口芯片通过一定的方式与 CPU和外部设备连接起来,并进行相关的程序设计 。
7.1 并行输入 /输出接口
7.1.1并行输入 /
并行输入 /输出就是把一个字符的几个位同时进行传输 。
它具有传输速度快,效率高的优点 。 并行通讯所用的电缆较多,
不适合长距离传输 。 所以,并行通讯总是用在数据传输率要求较高,而传输的距离较短的场合 。
实现并行输入 /输出的接口就是并行接口 。 通常,一个并行接口可设计为输出接口,如连接一台打印机 。 也可设计为输入接口,如连接键盘 。 还可设计成双向通讯接口,既作为输入接口又作为输出接口,如连接像磁盘驱动器这样的需双向通路的设备 。
图 7 - 1 是典型的并行接口和外设连接的示意图 。 从图中可以看到,并行接口左边是与 CPU连接的总线,右边用一个通道和输入设备相连,另一个通道和输出设备相连,输入和输出都有独立的信号交换联络控制线 。 在并行接口内部用控制寄存器来寄存 CPU对它的控制命令,用状态寄存器来提供各种工作状态供 CPU查询,此外,还有供输出和输入数据用的输出数据锁存器和输入数据缓冲器 。
并行接口的工作原理如下:
在输入过程中,当外设把数据送到数据输入线上时,通过,数据输入准备好,状态线通知接口取数 。 接口在把数据锁存到输入缓冲器的同时,把数据输入回答线置,1”,用来通知外设,接口的数据输入缓冲器,满,,禁止外设再送数据 。
图 7 – 1 并行接口与外设连接示意控制寄存器输入缓冲寄存器输出缓冲寄存器状态寄存器数据总线读出信号写入信号复位准备好中断请求地址译码
C P U
输入设备数据输入准备好数据输入回答数据输入输出设备数据输出数据输出准备好数据输出回答并且把内部状态寄存器中,输入准备好,状态位置,1”,
以便 CPU对其进行查询或向 CPU申请中断 。 在 CPU读取接口中的数据后,接口将自动清除,输入准备好,状态位和,数据输入回答,信号,以便外设输入下一个数据 。
在输出过程中,当数据输出缓冲器,空闲,时,接口中
,输出准备好,状态位置,1”。 在接收到 CPU的数据后,,输出准备好,状态位复位 。 数据通过输出线送到外设,同时,由
,数据输出准备好,信号线通知外设取数据 。 当外设接收一个数据时,回送一个,数据输出回答,信号,通知接口准备下一次输出数据 。 接口将撤消,数据输出准备好,信号并再一次置
,输出准备好,状态位为,1”,以便 CPU输出下一个数据 。
7.1.2 可编程并行输入 /输出接口 8255A
8255A是 Intel公司生产的一种可编程并行输入 /输出接口芯片 。 它的通用性强,可以方便地和微机连接,用来扩展输入 /输出口 。 8255A有 3个 8位并行端口,根据不同的初始化编程,可以分别定义为输入或输出方式,以完成 CPU与外设的数据传送 。
1,8255A
8255A的内部结构如图 7 - 2 所示 。 它由并行 I/O端口,控制电路,数据总线缓冲器和读 /写控制逻辑等几个部分组成 。
(1) 并行 I/O端口 A,B,C。
A,B,C口都是 8位的,可以选择作为输入或输出,但在结构和功能上有所不同 。 A口含有一个 8位数据输出锁存 /缓冲器和一个 8位数据输入锁存器 。 B口含有一个 8位数据输入 /输出锁存 /缓冲器和一个 8位的数据输入缓冲器 ( 不锁存 ) 。 C口含有一个 8位数据输出缓冲器和一个 8位数据输入缓冲器 ( 不锁存 ) 。
当数据传送不需要联络信号时,这三个端口都可以用作输入或输出口 。 当 A口,B口工作在需要联络信号输入,输出方式时,
C口可以分别为 A口和 B口提供状态和控制信息 。
(2) A组和 B组控制电路 。
8255A的三个端口在使用时分为 A,B组 。 A组包括 A口 8位和 C口的高 4位,B组包括 B口 8位和 C口的低 4位 。 两组的控制电路中有控制寄存器,根据写入的控制字决定两组的工作方式,
也可以对 C口的每一位置,1”或清,0”。
(3) 数据总线缓冲器 。
数据总线缓冲器是三态双向 8位缓冲器,是 8255A与 CPU数据总线的接口 。 数据的输入 /输出,控制字和状态信息的传送,
都是通过这个缓冲器进行的 。
由于 8255A的数据总线是三态的,所以 D0~D7可以直接与
CPU的数据总线相连 。
(4) 读 /写控制逻辑 。
8255A的读 /写控制逻辑的作用是从 CPU的地址和控制总线上接收有关信号,转变成各种控制命令送到数据缓冲器以及 A
组,B组控制电路,从而管理三个端口,控制寄存器和数据总线之间的传送操作 。
2,8255A
8255A采用 40脚双列直插式封装,引脚如图 7 - 3 所示 。
下面分别介绍各个引脚的功能 。
D0~D7,双向三态数据总线 。
RESET:复位信号,输入 。 当 RESET端得到高电平后,
8255A复位 。 复位状态是控制寄存器被清零,所有端口 ( A、
B,C口 ) 被置为输入方式 。
,片选信号,输入 。 当 为低电平时,该芯片被选中 。
,读信号,输入 。 当 为低电平时,允许 CPU从
8255A读取数据或状态信息 。
cs cs
RD RD
图 7-3 8255A引脚
1
5
20
PA
3
PA
2
PA
1
PA
0
RD
CS
G N D
A
1
A
0
PC
7
PC
6
PB
0
PB
1
10
15
40
21
PA
4
PA
5
PA
6
PA
7
WR
R E S E T
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
30
25
35
PC
5
PC
4
PC
0
PC
1
PC
2
PC
3
PB
2
PB
3
PB
4
PB
5
PB
6
PB
7
V
CC
2
3
4
6
7
8
9
11
12
13
14
16
17
18
19 22
23
24
26
27
28
29
31
32
33
34
36
37
38
39
8 2 5 5 A
:写信号,输入 。 当 为低电平时,允许 CPU将控制字或数据写入 8255A。
A1,A0:端口选择信号,输入 。 8255A中有端口 A,B、
C,还有一个控制寄存器,共 4个端口,根据从 A1,A0输入的地址信号来寻址,如表 7 - 1 所示 。
A1,A0与信号一起,用来确定 8255A的操作状态,如表 7
- 2 所示 。
PA0~PA7,A口数据线,双向 。
PB0~PB7,B口数据线,双向 。
PC0~PC7,C口数据线,双向 。 当 8255A工作于方式 0时,
PC0~PC7分成 两组并行 I/O 数据线,每组 4位 。 当 8255A工作于方式 1或方式 2时,PC0~PC7为 A口,B口提供联络和中断信号,这时每根线的功能有新的定义 。
WR RD
3,8255A
8255A有三种工作方式,方式 0是基本输入 /输出方式;方式
1是选通输入 /输出方式;方式 2是双向传送方式 。 8255A各端口的工作方式由写入 8255A控制口的工作方式控制字来确定 。 工作方式控制字的格式如图 7 - 4 所示 。 在工作方式控制字中,
D7位是工作方式控制字的标志,置,1”为有效; D3~D6确定 A
组的工作方式; D0~D2确定 B组的工作方式 。
8255A还有一个位控制字,用来设置 C口某位的状态而不影响其它位 。 位控字也写入 8255A的控制口 。 位控字的格式如图 7 - 5 所示,D7=0是位控字的标志 。
图 7 –4 8255A工作方式控制字格式
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
B 组
C 口低半字节,1 — 输入,0 — 输出
B 口,1 — 输入,0 — 输出方式选择,0 — 方式 0,1 — 方式 1
A 组
C 口高半字节,1 — 输入,0 — 输出
A 口,1 — 输入,0 — 输出方式选择:
方式控制字标志,1 — 有效
0 0 — 方式 0
0 0 — 方式 1
1 — 方式 2
图 7 – 5 8255A位控字格式
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
位控,1 — 置 位,0 — 复位状 态 选中位
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
PC
0
PC
1
PC
2
PC
3
PC
4
PC
5
PC
6
PC
7
位控字标志,0 — 有 效无效
4,8255A
(1) 工作方式 0。
方式 0是基本的输入 /输出方式 。 在这种方式下,三个端口都可以由程序规定为输入或输出方式,但不能既作为输入又作为输出,也没有提供固定的联络信号 。 C口分为两个 4位 ——
高 4位和低 4位,可以分别设置为输入或输出方式 。 各端口在输出方式下有锁存功能,输入不锁存 。 8255A工作方式 0的功能如图 7 - 6 所示 。
当以工作方式 0输入时,外设先将数据送到 8255A的某个端口,CPU执行一条输入指令,有效,将该端口的数据送入 CPU。 当以工作方式 0输出时,CPU执行一条输出指令,
有效,将数据送到 8255A的某个端口,然后由外设取走 。
工作方式 0适合于数据的无条件传送,也可以人为指定某些位作为状态信息线,进行查询式传送 。
RD
WR
图 7 – 6 8255A工作方式 0的功能
8
P A
0
~ PA
7
A 口
4
A 组
C 口
P C
4
~ PC
7
4
P C
0
~ PC
3
B 组
B 口
8
P B
0
~ PB
7
8
DB
RD
WR
(2) 工作方式 1。
方式 1是选通输入 /输出方式 。 这种方式下,A口,B口作为数据的输入或输出口,输入和输出都具有锁存功能; C口的某些位相应地被定义为 A口,B口的状态和控制信号线 。
在以方式 1输入和输出情况下,C口各位的定义如表 7 -
3 所示。若 A口和 B口都工作于方式 1,则 C口有 6位固定作为 A
口,B口的状态和控制信号,剩下 2位可由程序指定为输入和输出。 若 A口,B口中一个工作于方式 1,另一个工作于方式
0,则 C口有 3位固定作为 A口或 B口的状态和控制信号,其余 5
位可由程序指定为输入或输出。
① 方式 1输入 。
8255A工作于方式 1输入情况下的功能如图 7 - 7 所示。
图 7 – 7 8255A工作于方式 1输入的功能
A 口
PA
0
~ PA
7
PC
4
PC
5
PC
3
I N T E A
PC
6
RD
I N T R A
I / O
I B F A
S TB A PC
2
PC
1
PC
0
&
I N T E B
RD
I N T R B
I B F B
S TB B
2
8
输入数据
&
PC
7
8
DB
B 口
8
DB
8
输入数据PB
0
~ PB
7
在方式 1输入情况下,C口被定义的状态和控制信号有
,IBF和 INTR,其含义如下:
,选通信号,低电平有效,由外设提供 。 当有效时,外设把数据送入 8255A的 A口或 B口 。
IBF:输入缓冲器满,高电平有效,由 8255A输出给外设 。
当该信号有效时表明外设已将数据送到 A口或 B口的输入缓冲器 。
IBF由 置位,的上升沿使它复位 。 IBF可作为 8255A与外设的联络信号 。 当 IBF=0时,允许外设向 8255A传送一个数据;
当 IBF=1时,表示外设送来的数据还未被 CPU取走,这时禁止外设向 8255A传送数据 。 IBF也可作为 CPU的查询信号,当 IBF=1
时,告诉 CPU应该从 8255A的端口读取数据 。
STB STB
STB RD
STB
INTR:中断请求信号,高电平有效,由 8255A发出 。 在程序设置的中断允许信号 INTE=1的条件下,当 =1和
IBF=1时,INTR被置为 1,的上升沿使它复位 。
INTE是端口内部的中断允许信号,是内部中断允许触发器的状态,由 C口的位控字来设置 。 若位控字使 PC4=1,则 A
口的中断允许信号 INTEA=1;若位控字 PC2=1,则 B口的中断允许信号 INTB=1。 这一点对于 PC4和 PC2,
功能并无影响 。
8255A =0的控制下,将 A口或 B口的数据送入输入锁存器,然后输出 IBF=1给外设 。 外设在 IBF=1作用下停止数据传送,置 =1。 这时若已有 INTE=1,则使 INTR=1,向
CPU发出中断请求 。
STB
RD
STBA
STBB
STB
STB
时序如图 7-8所示
S TB
I B F
I N T R
RD
外部输入数据
7-8 8255A工作方式 1输入的时序有效,在其下降沿 INTR被复位,在其上升沿
IBF被复位 。 至此完成一个数据从外设经 到 CPU的选通输入 。
② 方式 1输出 。 8255A工作于方式 1输出情况下的功能如图 7 - 9 所示 。 C口被定义的状态和控制信号有,
和 INTR,其含义如下,
,输出缓冲器满,低电平有效,由 8255A输出给外设 。 当该信号有效时,表示 CPU已把要输出的数据输出到 A
口或 B口的输出缓冲器中,告诉外设可以把数据取走 。
RD
RD
OBF ACK
OBF
图 7- 9 8255A工作于方式 1输出的功能
A 口
PA
0
~ PA
7
PC
7
PC
6
PC
3
I N T E A
PC
4
WR
I N T R A
I / O
A C K A
O B F A PC
2
PC
1
PC
0
&
I N T E B
WR2
8
输出数据
&
PC
5
8
DB
B 口
8
DB PB
0
~ PB
7
I N T R B
O B F B
A C K B
8
输出数据由 CPU 上升沿为低电平,将外设发来的 ACK上升沿置为高电平 。
,响应信号,低电平有效 。 当外设将 8255A的 A口或 B
口数据取走后,向 8255A发出一个负脉冲信号 。
INTR:中断请求信号,高电平有效,由 8255A发出 。 在程序设置的中断允许信号 INTE=1的条件下,当 =1
=1时,INTR被置为 1,的上升沿使它复位 。
在方式 1 输 出情 况 下,若所 设 位 控字 使 PC6=1,则
INTEA=1;若位控字使 PC2=1,则 INTEB=1。
OBF ACK
WR
ACK
WR
8255A工作于方式 1输出的时序如图 7 - 10 所示 。 现结合时序图说明 8255A选通输出的工作情况 。 在采用中断控制方式时,输出过程是从 CPU响应中断开始的 。 在中断服务程序中,CPU执行输出指令,发出 信号,输出数据到 8255A
的 A口或 B口 。 的上升沿使 INTR变为无效 。 同时 8255A向外设发出 =0的信号,告诉外设可以接收数据 。 外设从
8255A取走数据后,发出 =0信号,其下降沿使 =1。
当 变为高电平时,因同时有 INTE=1和 =1,故将
INTR置为 1,向 CPU发出中断请求,开始进入输入下一个数据的操作过程 。
WR
WR
OBF
ACK OBF
ACK OBF
图 7 – 10 8255A工作于方式 1输出的时序
WR
O B F
I N T R
A C K
输出口 数据输出
③ 方式 1的状态字 。
在方式 1的情况下,执行一条读 C口的指令,就可以得到一个状态字,用来检查外设或 8255A的工作状态,从而控制程序的进程 。 状态字如图 7 - 11 所示 。
需要说明的是:在读 C口状态时,对于输入情况下的 PC4和
PC2,输出情况下的 PC6和 PC2,所读得的状态不是该引脚上或响应信号,而是由位控字确定的该位的状态,即中断允许信号 INTE。
(3) 工作方式 2。
方式 2是一种双向传送方式,既能输入,又能输出,只适用于 A口 。 数据的输入和输出都能锁存 。 这时 C口为 A口提供 5
位联络信号,B口可以工作于方式 0或方式 1。 8255A工作于方式 2的功能如图 7 - 12 所示 。
STB ACK
图 7-11 8255A工作于方式 1的状态字
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
A 组状态输入 I B F BI N T E B I N T R B
B 组状态
I / O I B F A I N T E A I N T R AI / O
O B F A I / O I / O I N T R AI N T E A O B F BI N T E B I N T R B输出
C 口图 7 – 12 8255A工作于方式 2的功能
PA
0
~ PA
7
PC
7
I B F A
O B F A
PC
3
≥1
I N T E 1
S TB A
A C K A
8
I N T R A
数据
I N T E 2
&
&
PC
6
PC
4
PC
5
PC
0
~ PC
2
3
I / O
WR
RD
8
DB
在方式 2中,C口为 A口提供的联络信号如表 7 - 4 所示。
引脚 PC7 PC6 PC5 PC4 PC3
信号 IBFA INTR
OBFA ACKA STBA
构成双向方式下输出的联络信号 。 的功能与方式 1时的相同 。 的功能与方式 1有所不同 。 在方式 2的情况下,
外设收到 8255A =0信号后,=0去打通 A口的输出缓冲器,使数据放到 A口的外部数据线上,否则输出缓冲器的输出端处于高阻状态 。 所以在双向方式下如果没有外设的 有效信号,就不能输出数据 。
OBFA
ACKA
ACKAOBFA
ACKA
IBFA和 构成双向方式下输入的联络信号,其功能与方式 1的相同 。 INTRA是双向方式下输出和输入合用的中断请求信号 。 INTE1=1( 由位控字设定
PC6=1) 的条件下,当 =1 和 =1 时,INTRA有效 。 在输入中断允许触发器 INTE2=1( 由位控字设定 PC4=1)
的条件下,当 IBFA=1和 =1时,INTRA有效 。 8255A工作于方式 2的状态字如图 7 - 13 所示 。
当 A口工作于方式 2时,允许中断,此时若 B口工作于方式
1,则也允许中断 。 这时就有三个中断源 ( A口的输入和输出,
B口 ),两个中断请求信号 ( INTRA,INTRB) 。 CPU在响应
8255A 的中断请求时,先要查询 PC3 ( INTRA ) 和 PC0
( INTRB),以判断中断源是 A口还是 B口 。
STBA
OBFA ACKA
STBA
图 7 – 13 8255A工作于方式 2的状态字
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
A 组状态方式 0
输入/ 输出
B 组状态
O B F A I B F A I N T E 2 I N T R AI N T E 1
C 口
O B F BI N T E B I N T R B
I / OI / O I / O
I B F BI N T E B I N T R B 方式 1 输入方式 1 输出当 A口工作于方式 2时,允许中断,此时若 B口工作于方式 1,则也允许中断 。 这时就有三个中断源 ( A口的输入和输出,B口 ),两个中断请求信号 ( INTRA,INTRB) 。 CPU
在响应 8255A的中断请求时,先要查询 PC3( INTRA) 和 PC0
( INTRB),以判断中断源是 A口还是 B口 。 如果中断源是 A
口,还要进一步查询 PC5( IBFA) 和 PC7( ),以确定是输入中断还是输出中断 。
8255A的工作方式 2是 A口方式 1输出和方式 1输入两种操作的组合,所以方式 2的工作过程也同上述工作方式 1的输出和输入过程 。
OBFA
5,8255A在 IBM PC/XT上的应用
IBM PC/XT使用一片 8255A管理键盘,控制扬声器和输入系统配置开关 DIP的状态 。 其连接图如图 7 - 14 所示 。 当有效时,A9A8A7A6A5=00011,所以这片 8255A的 I/O
地址范围为 60H~7FH,常用的地址范围为 60H~63H。 端口 A、
B和 C的地址分别为 60H,61H和 62H,63H为控制字寄存器地址 。 XT机中,8255A工作在基本输入 /输出方式 。 口 A在加电自检时为输出,输出当前检测部件的标志信号;其在正常工作时为输入,用来读取键盘扫描码 。
图 7- 14 PC/XT与 8255的接口电路
PA
0
~ PA
7
键盘
PB
7
允许/ 清除键盘
PB
6
控制键盘时钟为低
PB
5
E N A I / O C K
PB
4
E N A R A M P C K
PB
3
PB
2
K B D D A T A
PB
1
S P K D A T A
PB
0
T I M 2 G A T E S P K
PC
7
P C K
PC
6
I / O C H C K
PC
5
T / C 2 O U T
PC
4
S P K
PC
3
PC
2
PC
1
PC
0
8 2 5 5 A
RDI O R
WRI O W
A
0
A
0
A
1
A
1
R E S E TR E S E T
CSP P I C S
D
0
~ D
7
D
0
~ D
7
S W ( D I P )
1
2
3
4
+ 5V
7 4 L S 2 4 4
5
6
7
8
7 4 0 7
1G
+ 5V
1
1
1
11
口 B工作于输出方式,用于对键盘串并转换,RAM和 I/O
通道检验以及扬声器等的启动和控制 。 口 C为输入方式,高 4
位为状态测试位,低 4位用来读取系统板上系统配置开关 DIP的状态 。
现在我们以 ROM-BIOS初始化部分读系统配置开关的一段程序来说明 8255A的编程应用 。 系统配置开关的 8位信号分两组由 PC0~PC3读入,如图 7 - 14 所示 。 在 CPU要读取 DIP状态时,先从端口 B输出 PB3=0,这时三态缓冲器 74LS244控制信号有效,把出现在其输入端的 DIP开关低 4位信号 SW-1~SW-4送到
PC0~PC3上 。 输出信号 PB3还通过反相器送到集电极开路同相门电路 7407的四个输入端 。 这时同相门电路输出的是高电平,
由于它是集电极开路的,所以不影响外界电路的状态 。 这样
CPU读取的只是 DIP开关的低 4位状态 。
当读取 DIP开关的高 4位状态 SW-5~SW-8时,CPU设置
PB3=1,表示禁止 74LS244输出,使 DIP低 4位不能通过它送到口 C。 PB3通过反相器输出低电平送到 7407的输入端,使它的四个输出端都为低电平 。 高 4位 DIP开关某位接通时,送出低电平;断开时,送出高电平 。 这时 CPU可以读出 DIP开关高 4
位的状态 。
6,8255在 IBM PC/AT上的应用在 IBM PC/XT机上使用 8255的端口 A和 PB2,PB6及 PB7进行键盘管理; PC0~PC3和 PB3进行系统配置的读取; PB0,PB1
和 PC4,PC5配合 8253计数器 2控制扬声器; PB4,PB5和 PB6、
PB7进行奇偶校验的控制 。
比较图 7 - 14 和图 7 - 15 可知,端口地址 61H的低 2位 PB0、
PB1在 XT和 AT机的作用一样,都是数据线低 2位 D0,D1; XT
机的 PB4,PB5两位则移到 AT机的 D2,D3数据线; AT机 61H端口地址高 4位只能读入,其中高 3位与 XT机的 62H端口地址高 3
位作用一样,D4位则用于刷新信号的检测 。
图 7 – 15 PC/AT的并行接口电路
A L S 1 7 5
E N A R A M P C K
C L R Q
1
D
1
D
2
D
3
D
4
Q
2
Q
3
Q
3
Q
4
C L K Q
4
A L S 2 4 4
Y
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
6 1 H,I O W
R E S E T
A
1G 2G
6 1 H,I O R
P C K
I / O C H C K
T / C 2 O U T
R E F D E T
E N A I / O C K
S P K D A T A
T I M 2 G A T E S P K
7.2
7.2.1
1,概述微型计算机与一些常用的外部设备 (如电传打字机,CRT
终端等 )之间的数据交换,往往需要采用串行通讯方式 。 在远程计算机通讯中,串行通讯更是一种不可缺少的通讯方式 。
,只占用一条传输线,它可由两种方式来实现:一种是将 8位通道中的一位依靠软件来实现串行数据传送;另一种是通过专用的通讯接口,
将并行数据转换为串行数据 。
在并行通讯中,数据有多少位就要有多少传输线,而串行通讯只需要一条传输线,所以串行通讯可以节省传输线 。 在数据位数较多,传输距离较长的情况下,这个优点更为突出 。
例如,将微型计算机的信息传送到远方的终端,或者传送到大型计算中心,则常用通讯线路 (电话线 )进行传送 。 这种串行传送可以大大减少传输线,从而降低成本,是它的传送速度没有并行通讯快 。
随着大规模集成电路技术的发展,通用的可编程的同步 /
异步接口芯片种类越来越多 。 常用的 有 Intel 的 8251A,
Motorola的 ACIA,Zilog的 SIO等 。
2.
串行通讯可分为异步通讯和同步通讯两种方式 。
(1) 异步通讯 。 在异步通讯中,CPU与外部设备之间有两项规定:
① 字符格式 。
字符格式即字符的编码形式及规定 。 如规定每个串行字符由四个部分组成,1个起始位,5~ 8个数据位,1个奇偶校验位以及 1~ 2个停止位 。
图 7 - 16 示出了这种串行字符编码格式 。 起始位后面,
紧跟着要传送字符的最低位,每个字符的结束,是一个高电平的停止位 。 起始位至停止位构成一帧 。
相邻两个字符之间的间隔可以是任意长度的,以便使它有能力处理实时的串行数据 。 两个相邻字符之间的位叫空闲位 。 而下一个字符的开始,必然以高电平变成低电平的起始位的下降沿作为标志 。 图 7 - 16 示出小于最高数据传送率的格式 。
其最高数据传送率的格式,即为在相邻字符之间除去空闲位的格式 。
图 7 – 16 异步串行通信格式
1 0 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1
低位 高位
1 1 1
起始位 数据位 校验位 停止位字符
1 0 0 / 1 0 / 1
空闲位字符
② 波特率 (Boud Rate)。 波特率是指每秒传输字符的位数 。
假如数据传送速率是 120字符 /秒,而每一个字符格式规定包含 10 个数据位 (起始位,停止位和 8个数据位 ),则这时传送的波特率为:
10× 120= 1200(位 /秒 )= 1200(波特 )
每个数据位的传送时间 Td为波特率的倒数:
Td = 1/1200= 0.000 833 s= 0.833 ms
波特率是指传送代码的速率,这与传送数据的速率有所区别 。 因为每个数据只占 8位,所以,数据的传送速率为 8× 120
= 960(波特 )
异步通讯的传送速率一般为 50~ 9600波特,常用于计算机到 CRT终端和字符打印机之间的通讯等 。
(2) 同步传送 。
在异步传送中,每一个字符都用起始位和停止位作为字符开始和结束的标志,占用了一些时间,因此在数据块传送时,
为了提高速度,就要设法去掉这些标志,而采用同步传送 。 此时,在数据块开始处,要用同步字符来指明,如图 7 - 17 所示 。
同步字符通常由用户自己设定,可用一个 (或相同两个 )8位二进制码作同步字符 。
同步传送速度高于异步传送速度,但它要求由时钟来实现发送端及接收端之间的同步,所以,硬件电路比较复杂 。 通常用于计算机之间的通讯,或计算机到 CRT等外设之间的通讯 。
3,串行通讯中的基本技术
(1) 数据传送方向 。
在串行通讯中,数据通常在两个站 (如 A和 B)之间进行双向传送 。 这种传送根据需要又分为单工,半双工和全双工传送 。
① 单工传送 。 单工传送方式是指在通讯时,只能由一方发送数据,一方接收数据的通讯方式,如图 7 - 18(a)所示 。
② 半双工传送 。
半双工传送方式是指在通讯时,双方都能接收或发送,但不能同时接收和发送的通讯方式 。 在这种传送方式中,通讯双方只能轮流地进行发送和接收,即 A站发,B站接收;或 B站发送,A站接收 。 如图 7 - 18( b) 所示 。
图 7-18
(a) 单工; (b) 半双工; (c)全双工发送器 接收器
A B
单工通信
( a )
发送器 发送器
A B
半双工通信接收器 接收器
( b )
发送器 接收器
A B
全双工通信接收器 发送器
( c )
③ 全双工传送 。 全双工传送方式是指可以同时在两个站之间进行发送和接收的通讯方式 。
全双工需要两条传输线 。 图 7 - 18(c)表示了这种传送方式 。
(2) 信号的调制和解调 。
调制解调器 (Modem)是计算机在远程通讯中必须采用的一种辅助的外部设备 。
计算机通讯是一种数字信号的通讯,数字信号通讯要求传送的频带是很宽的,而计算机在远程通讯时,通常通过电话线传送,电话线不可能有这样宽的频带 。 如果用数字信号直接通讯,那么经过电话线传送,信号便会产生畸变 。
因此,在发送端,必须采用调制器把数字信号转换为模拟信号;而在接收端,又必须用解调器检测从发送端送来的模拟信号,再把它转换成为数字信号 。 由此可知:调制解调器在发送端相当于 D/A转换器,而在接收端则相当于 A/D
转换器 。
7.2.2可编程串行通信接口 8251A
1,8251A的特点和内部结构
Intel 8251A是可编程的串行通信接口芯片,它的主要特点如下:
① 可用于串行异步通信,也可用于串行同步通信 。
② 对于异步通信,可设定停止位为 1位,1位半或 2位,
数据位可在 54位之间选择 。
③ 对于同步通信,可设为单同步,双同步或者外同步,
同步字符可由用户自己设定 。
④ 异步通信的时钟频率可设为波特率的 1倍,16倍或 64倍 。
⑤ 可以设定奇偶校验的方式,也可以不校验 。 校验位的插入,检出及检错都由芯片本身完成 。
⑥ 在异步通信时,波特率的可选范围为 0~ 19.2千波特;
在同步通信时,波特率的可选范围为 0~ 64千波特 。
⑦ 提供与外部设备特别是调制解调器的联络信号,便于直接和通信线路相连接 。
⑧ 接收,发送数据分别有各自的缓冲器,可以进行全双工通信 。
图 7 - 19 给出了 8251A的结构框图 。 它共由五个部件构成,
对外有 28条引脚 。
8251A各组成模块的功能及有关引脚如下:
图 7 –19 8251A的结构框图
D
7
~ D
0
发送/ 命令缓冲器状态缓冲器接收缓冲器读/ 写控制逻辑
R E S E T
C / D
C L K
RD
WR
CS
调制解调器控制
D TR
D S R
R T S
C T S
发送器及发送控制
T X D
T X R D Y
T X E
T X C
接收器及接收控制
R X D
R X R D Y
S Y N D E T
R X C
(1) I/ O缓冲器 。
这是三态双向的缓冲器,引脚 D0~ D7是 8251A和 CPU接口的三态双向数据总线,用于向 CPU传递命令,数据或状态信息 。
与 CPU互相交换的数据和控制字就存放在这个区域,共有三个缓冲器 。
① 接收缓冲器:串行口收到的数据变成并行字符后,存放在这里,以供 CPU读取 。
② 发送/命令缓冲器:这是一个分时使用的双功能缓冲器,
CPU送来的并行数据存放在这里,准备由串行口向外发送 。 另外,CPU送来的命令字也存放在这里,以指挥串行接口的工作 。
由于命令一输入就马上执行,不必长期存放,所以不会影响存放发送数据 。
③ 状态缓冲器:存放 8251A内部的工作状态,供 CPU查询 。
(2) 读/写控制逻辑 。
本模块功能是接收 CPU的控制信号,控制数据传送方向 。
(3) 接收器及接收控制 。
接收器的功能是从 RXD引脚接收串行数据,按指定的方式装配成并行数据 。
(4) 发送器及发送控制 。
这个模块的功能是从 CPU接收并行数据,自动地加上适当的成帧信号后转换成串行数据从 TXD引脚发送出去 。
(5) 调制解调控制器 。
该模块提供和调制解调器的联络信号 。
2,8251A的外部引脚
8251A是一个采用 NMOS工艺制造的 28脚双列直插式封装的组件,其外部引脚如图 7 - 20 所示 。
(1) 与 CPU接口的引脚 。
D7~ D0,数据线 。
CLK,时钟信号输入线,用于产生 8251A内部时序 。
CLK的周期为 0.42~ 1.35 μs。
CLK的频率至少应是接收,发送时钟的 30倍 ( 对同步方式 ) 或 4.5倍 ( 对异步方式 ) 。
RESET:复位信号输入线,高电平有效 。 复位后 8251A
处于空闲状态直至被初始化编程 。
图 7 – 20 8251A的外部引脚
D
2
V
CC
R E S E T
D
3
R X D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
G N D
D
4
D
5
D
6
D
7
T X C
WR
CS
C / D
RD
R X R D Y
8 2 5 1 A
28
27
26
25
24
23
22
21
20
19
18
17
16
15
D
1
D
0
R X C
D T R
R T S
D S R
C L K
T X D
T X E M P T
C T S
S Y N D E T / B D
T X R D Y
,片选信号输入线,低电平有效 。 仅当 为低电平时,CPU才能对 8251A操作 。
,信息类型信号输入线 。 为 0时传输的是数据,为 1时传输的是控制字或状态信息 。
,读选通信号输入线,低电平有效 。
,写选通信号输入线,低电平有效 。
CPU对 8251A的读写控制如表 7 - 5 所示。
CSCS
/CD
RD
WR
RXRDY,接收准备好状态输入线,高电平有效 。 当接收器接到一个字符并准备送给 CPU时,RXRDY为 1;当字符被 CPU读取后 RXRDY恢复为 0。 RXRDY可作为 8251A向 CPU
申请接收中断的请求源 。
SYNDET/BD:同步状态输出线或者外同步信号输入线 。
此线仅对同步方式有意义 。
TXRDY:发送准备好状态输出线,高电平有效 。 当发送寄存器空闲且允许发送 ( 脚电平为低,命令字中
TXEN位为 1) 时,TXRDY为高电平 。 当 CPU给 8251A写入一个字符后 TXRDY恢复为低电平 。 TXRDY可作为 8251A向 CPU
申请发送中断的请求源 。
CTS
TXEMPT:发送缓冲器空闲状态输出线 。 高电平有效,
TXEMPT=1,表示发送缓冲器中没有要发送的字符,当 CPU
将要发送的数据写入 8251A后,TXEMPT自动复位 。
(2) 与外设或调制解调器接口的引脚 。
RXD:串行数据输入线,高电平表示数字 1,低电平表示数字 0。
,接收器时钟输入线 。 它控制接收器接收字符的速率,在上升沿采集串行数据输入线 。 的频率应等于波特率
( 同步方式 ) 或等于波特率的 1倍,16倍或 64倍 ( 异步方式 ) 。
TXD:发送数据输出线 。 CPU并行输入给 8251A的数据从这个引脚串行发送出去 。
,发送器时钟输入线,在 的下降沿数据由 8251A
移位输出 。 对 频率的要求同 。
RXC
RXC
TXC TXC
TXC RXC
,发送器时钟输入线,在 的下降沿数据由
8251A移位输出 。 对 。
,数据终端准备好状态输出线,低电平有效 。 当
8251A命令字位 D1为 1时,有效,用于向调制解调器表示数据终端已准备好 。
,数据设备准备好状态输入线,低电平有效 。 当调制解调器准备好时,有效,用于向 8251A表示 Modem( 或
DCE) 已准备就绪 。 CPU可通过读取状态寄存器的 D7位检测该信号 。
TXC
TXC
TXC RXC
DTR
DTR
DSR
DSR
,请求发送信号输出线,低电平有效 。 当 8251A命令字位 D5为 1时,有效,请求调制解调器作好发送准备
( 建立载波 ) 。
,清除发送 ( 允许传送 ) 信号输入线,低电平有效 。 当调制解调器作好送数准备时,有效,作为对
8251A 信号的响应 。
如果 8251A不使用调制解调器而直接和外界通讯,一般应将,脚接地 。
接收器的工作过程:在异步方式中,当接收器接收到有效的起始位后,便接收数据位,奇偶校验位和停止位 。 然后将数据送入寄存器,此时 RXRDY输出高电平,表示已收到一字符,CPU可以来读取 。
RTS
RTS
CTS
CTS
RTS
DSR CTS
在同步方式中,若程序设定 8251A为外同步接收,则
SYNDET/BD脚用于输入外同步信号,SYNDET/BD脚上的电平正跳变启动接收数据 。 若程序设定 8251A内同步接收,则
8251A先搜索同步字 ( 同步字事先由程序装在同步字符寄存器中 ) 。 每当 RXD线上收到一位信息就移入接收寄存器并和同步字符寄存器内容比较,若不等则再收一位再比较,直到两者相等 。 此时 SYNDET/BD输出高电平,表示己搜索到同步字,接下来便把接收到的数据逐个地装入接收数据寄存器 。
发送器的工作过程,在异步方式中,发送器在数据前加上起始位,并根据程序的设定在数据后加上校验位和停止位,然后作为一帧信息从 TXD脚逐位发送数据 。
在同步方式中,发送器先送同步字符,然后逐位地发送数据 。 若 CPU没有及时把数据写入发送缓冲器,则 8251A用同步字符填充,直至 CPU写入新的数据 。
3,8251A的控制字寄存器和状态字寄存器
8251A内除具有可读可写的数据寄存器外,还具有只可写的控制字寄存器和只可读的状态寄存器,CPU对它们的操作如表 7 - 5 所示 。
(1) 控制字寄存器 。
控制字寄存器寄存方式控制字和命令控制字 。
① 方式控制字 。
方式控制字确定 8251A的通讯方式 ( 同步/异步 ),校验方式 ( 奇校验,偶校验,不校验 ),数据位数 ( 5,6,7或 8位 )
及波特率参数等 。 方式控制字的格式如图 7 - 21所示 。 它应在复位后写入,且只需写入一次 。
② 命令控制字 。
命令控制字使 8251A处于规定的状态以准备发送或接收数据 。 命令控制字的格式如图 7 - 22 所示 。 它应在写入方式控制字后写入,用于控制 8251A的工作,可以多次写入 。
图 7-21 方式控制字的格式
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
方式及波特率
00,同步* 1
01,异步* 1
10,异步* 16
11,异步* 64
数据位数
00,5
01,6
10,7
11,8
校验方式
*0,不校验
01,奇校验
11,偶校验
0 0,无效
0 1,1 位停止位
1 0,1 位半
1 1,2 位
* 0,内同步
0 1,双 同步字
1 1,单同步字同步方式
Y N
图 7 – 22 命令控制字的格式
EN IR R T S S B R K R X E D T R T X E NER
进入搜索方式
1,进行 S Y N C 搜索内部复位
1,8 2 5 1 A 复位请求发送
1,迫使 R TS 输出 0
出错复位
1,复位 错误标志发送允许
1,允许 0,禁止数据终端准备好
1,迫使 D T R 输出 0
接收允许
1,允许 0,禁止发送断点字符
1,迫使 T XD 为 0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
方式控制字和命令控制字本身无特征标志,也没有独立的端口地址,8251A是根据写入先后次序来区分这两者的:先写入者为方式控制字,后写入者为命令控制字 。 所以 CPU在对
8251A初始化编程时必须按一定的先后顺序写入方式控制字和命令控制字 。
(2) 状态寄存器 。 状态寄存器存放 8251A的状态信息,供
CPU查询,状态字各位的意义如图 7 - 23 所示 。
DSR,数据设备准备好标志 。 其状态同 脚 。
SYNDET,同步标志 。
FE:异步通讯帧出错标志 。 为 1表示未检测到字符末尾的有效停止位,但 FE错并不禁止 8251A工作 。 FE标志由命令控制字中的 ER位清除 。
DSR
图 7 – 23 状态字格式
D S R S Y N D E T FE T X E R X R D Y T X R D YOE
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
PE
同引脚定义奇偶错溢出错帧出错
OE,溢出标志 。 接收器内的字符尚未被 CPU读走时又有新的字符装入,则 OE置 1,此时原来的字符丢失,但并不禁止
8251A工作,OE标志由命令控制字中的 ER位清除 。
PE:奇偶错标志 。 奇偶错时 PE置 1,但此时并不禁止
8251A工作,PE标志由命令控制字中的 ER位清除 。
TXE,发送缓冲器空标志 。 其状态同 TXE脚 。
RXRDY,接收准备好标志 。 其状态同 RXRDY脚 。
TXRDY,发送准备好标志 。 含义同 TXRDY引脚 。 只要发送缓冲器空,就置位该位 。 而引脚 TXRDY除发送缓冲器空外,还要满足 TXE=1,CTS=0才置位 。
4,8251A的初始化编程像所有的可编程器件一样,8251A在使用前也要进行初始化 。 初始化在 8251A处于复位状态时开始 。 其过程为:首先输入方式控制字,以决定通信方式,数据位数,校验方式等若是同步通信方式则紧接着输入一个或两个同步字符,若是异步方式则这一步可省略,最后送入命令控制字,就可以开始发送或接收数据了 。 初始化过程的信息全部写入控制端口特征是 C/ =1,即地址线 A0=1的地址 。
由于各个控制字没有特征位,所以写入的顺序不能出错,
否则就会张冠李戴,达不到初始化的目的 。 8251A的初始化流程图如图 7 - 24 所示 。
D
① 异步工作方式,波特率系数为 64( 即数据传送速率是时钟频率的 1/ 64),采用偶校验,总字符长度为 10( 1位起始位,
8位数据,1位停止位 ) 。
② 允许接收和发送,使错误位全部复位 。
③ 查询 8251A状态字,当接收准备就绪时,则从 8251A输入数据,否则等待 。
初始化程序:
MOV DX,301H ; 8251A
MOV AL,01111111B ;
OUT DX,AL ;
MOV AL,00010101B ;
OUT DX,AL ;
WAIT,IN AL,DX ;
AND AL,02H ; 检查 RXRDY=1?
JZ WAIT ; RXRDY≠1,接收未准备就绪,
IN AL,DX
5,8251A应用举例当 8251A与 CPU连接时,至少要占用两个端口地址,即控制端口 ( C/ =1) 和数据端口 ( C/ =0) 。
在使用 8251A时需要一个外部时钟源提供,和
CLK信号 。 由波特率以及时钟频率与波特率的倍率决定 。 CLK则在 ( ) 频率的基础上增高若干倍 。
D D
RXC TXC
RXC TXC
RXC TXC
8251A与 CPU通常采用查询或中断方式交换数据 。 若采用中断方式,两个状态信号 TXRDY和 RXRDY通过一个非门接到 CPU的外中断输入 。,,RESET都是同名端相连 。
在编程时,对 8251A初始化,输入命令字后就可进行数据传送 。 在得到中断申请后,通过调用状态字来检测是接收申请 ( RXRDY=1) 还是发送申请 ( TXRDY=1),然后转至相应的程序模块 。
例 用 8251A为 8086CPU与 CRT终端设计一串行通信接口 。
假设 8251A控制端口地址为 301H,数据端口地址为 300H。
① 异步方式传送,数据格式为 1位停止位,8位数据位,
奇校验;
RD WR
② 波特率因子为 16
③ CPU用查询方式将显示缓冲区的字符,GOOD”送 CRT
显示 。 显示缓冲区在数据段,首地址为 2000H。
解,① 硬件连接 。
8086CPU与 CRT终端接口连接如图 7 - 25 所示 。 当地址锁存信号 ALE有效时,将 CPU送来的地址锁存,地址译码器对输入地址 A1~ A9进行译码,其输出接到 8251A的片选端 。 地址 A0
用于选择 8251A的数据端口或控制端口 。 波特率发生器按规定给 8251A提供发送和接收时钟 。 电平变换电路将 8251A送出的
TTL电平变成 RS-232C电平以便和 CRT连接 。
图 7 –25 8086CPU与 CRT终端接口
8 0 8 6
AD
0
~ AD
15
地址锁存器地址译码器
A
0
A L E
WR
RD
C L K
8 2 5 1 A
D
0
~ D
7
CS
C / D
WR
R
C L K
T X D
R X D
1 4 8 8
1 4 8 9
CRT
终端
G N D
D S R
C T S
T X C
R X C
波特率发生器
D
0
~ D
7
② 软件设计 。
DATA SEGMENT
DISBUF DB 47H,4FH,4FH,44H,ODH,0AH ;
GOOD字符的 ASCII
COUNTDB$-DISBUF
DATA ENDS
MAIN MOV DX,301H ; 8215A
MOV AL,01011110B ; 工作方式选择字
OUT DX,AL
MOV AL,00110011B ;
OUT DX,AL
MOV BX,OFFSET DISBUF ; 显示缓冲区首址
MOV CX,COUNT
WAIT:MOV DX,301H
IN AL,DX
TEST AL,80H
JZ WAIT
MOV DX,300H
MOV AL,ES:
OUT DX,AL
INC BX
DEC CX
JNZ WAIT
HLT
7.3 定 时 器 接 口
7.3.1定时 /
在微机系统中,常常需要为 CPU和外部设备提供时间基准以实现定时或延时控制 。 如定时中断,定时检测,定时扫描等,
或对外部事件进行计数并将计数结果提供给 CPU。
实现定时或延时控制有三种方法:软件定时,不可编程硬件定时器,可编程硬件定时器 。 软件定时让 CPU执行一段程序段,由于执行每条指令都需要时间,因此执行一个程序段就需要一定的时间,通过改变指令执行的循环次数就可以控制定时时间 。 这种软件定时方式计时不够准确,尤其是当 CPU内部有多个并行处理时更为明显 。
同时,由于它占用了 CPU,因而降低了 CPU的利用率 。
不可编程的硬件定时器采用中小规模器件 ( 如 NE555),外接定时元件 ——电阻和电容 。 这种方式实现的定时电路简单,通过改变电阻和电容可使定时在一定范围内变化 。 但是,这种定时电路在连接好硬件后,定时值就不易用软件来控制和改变,由此产生了可编程的硬件定时器电路 。 所谓可编程的硬件定时器电路就是其工作方式,定时值和定时范围可以很方便地由软件来确定和改变 。
通常,一个可编程定时 /计数器的主要用途有:
① 以均匀分布的时间间隔中断分时操作系统,以便切换程序 。
② 向 I/O设备输出精确的定时信号,该信号的周期由程序控制 。
③ 用作可编程波特率或速率发生器 。
④ 检测外部事件发生的频率或周期 。
⑤ 统计外部事件处理过程中某一事件发生的次数 。
⑥ 在定时或计数达到编程规定的值之后,产生输出信号,
向 CPU申请中断。
7.3.2可编程定时 /计数器 8253
8253是 Intel公司生产的可编程计数 /定时器芯片 。 8253的操作对所在系统没有特殊要求,其通用性强,适用于各种微处理器组成的系统 。 它有 3个独立的 16位减 1计数器,每个计数器有
6种工作方式,能进行二进制或二 -十进制计数或定时操作,计数速率可达 2 MHz,所有的输入 /输出都与 TTL电平兼容 。
1,8253
8253的结构框图如图 7 - 26 所示 。 它由数据总线缓冲器,
读 /写逻辑,控制字寄存器以及三个计数器 ( 0,1,2) 组成 。
图 7- 26 8253的结构框图数据总线缓冲器读写控制逻辑控制字寄存器
RD
WR
A
0
A
1
CS
D
0
~ D
7
计数器 0
计数器 2
C L K
0
G A T E
0
O U T
0
C L K
1
G A T E
1
O U T
1
C L K
2
G A T E
2
O U T
2
计数器 1
(1) 数据总线缓冲器 。
数据总线缓冲器是 8253与 CPU数据总线连接的 8位双向三态缓冲器 。 CPU用输入 /输出指令对 8253进行读 /写操作的所有信息都是通过这 8条总线传送的 。 这些信息包括,CPU在初始化编程时写入 8253的控制字,CPU向 8253某一计数器写入的计数初值,CPU从 8253某一计数读取的计数值 。
(2) 读 /写逻辑 。
读 /写逻辑是 8253内部操作的控制部分 。 当片选信号有效,
即 =0时,读 /写逻辑才能工作 。 该控制逻辑根据读 /写命令及送来的地址信息,决定三个计数器和控制字寄存器中哪一个工作,并控制内部总线上数据传送的方向 。
CS
(3) 控制字寄存器 。
在 8253初始化编程时,由 CPU向控制字寄存器写入控制字,以决定每个计数器的工作方式 。 此寄存器只能写入而不能读出 。
(4) 计数器 0,1,2。
计数器 0,1,2是 3 个 16位减 1计数器,它们互相独立,
内部结构和功能相同 。 每个计数器有 3根信号线,它们是时钟输入 CLK,门控输入 GATE和输出 OUT。 计数器从 CLK端接收时钟脉冲或事件计数脉冲,—
十进制从预置的初值开始进行减 1计数 。 当计数值减到零时,
从 OUT端送出一个信号 。 计数器在开始计数和计数过程中,
受到门控信号 GATE的控制 。
在开始计数之前,必须由 CPU用输出指令预置计数器的初值 。 在计数过程中,CPU可以随时用指令读取计数器的当前值 。
2,8253
253的引脚如图 7 - 27 所示。 8253与 CPU的连接如图 7 -
28 所示。计数器 0,1,2和控制字寄存器的低 2位地址由 A1、
A0确定,A1,A0的值依次为 00~ 11。 8253的 4 个端口的操作情况如表 7 - 6 所示。
前面已经讲过 8253的计数器 0,1,2各有 3个引脚 。 不同计数器的相同定义的引脚,其功能也是相同的 。
CLK:计数脉冲输入端 。 计数器对该引脚的输入脉冲进行计数 。 如果 CLK信号是周期精确的时钟脉冲,则具有定时作用 。 8253规定 CLK端的输入脉冲周期不能小于 380 ns。
GATE:门控输入端 。 这是控制计数器工作的一个外部信号 。 当 GATE为低电平时,禁止计数器工作;当 GATE为高电平时,允许计数器工作 。 GATE信号从计数开始到计数过程中都起作用 。
OUT,输出信号端 。 当计数器计数到零时,在 OUT引脚上输出一个信号,该信号的波形取决于工作方式 。
3,8253
在 8253工作之前,必须对它进行初始化编程,也就是向
8253的控制字寄存器写入一个控制字和向计数器赋计数初值 。
控制字的功能是:选择计数器,确定对计数器的读 /写格式,选择计数器的工作方式以及确定计数的数制 。 8253控制字的格式如图 7 - 29 所示 。
图 7- 29 8253控制字的格式
SC
1
SC
0
RW
1
M
2
M
1
BCDRW
0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
M
0
0 0,选通道 0
0 1,选通道 1
1 0,选通道 2
1 1,无效
0,二进制计数
1,B C D 码计数
0 0 0,方式 0
0 0 1,方式 1
1 0,方式 2
1 1,方式 3
1 0 0,方式 4
1 0 1,方式 5
0 0,计数器锁存
0 1,只读/ 写计数器低字节
1 0,只读/ 写计数器高字节
1 1,先读/ 写计数器低字节,
后读/ 写高字节
SC1,SC0:计数器选择位 。 这两位表示这个控制字是对哪一个计数器设置的 。
00——计数器 0; 01——计数器 1; 10——计数器 2; 11——非法选择 。
RW1,RW0:数据读 /写格式选择位 。 CPU在对计数器写入初值和读取它们的当前值时,有几种不同的格式,由这两位来决定 。 00——将计数器当前值锁存于输出锁存器中,以便读出;
01——只读 /写计数器的低 8位,写入时高 8位自动设置为 0; 10—
—只读 /写计数器的高 8位,写入时低 8位自动设置为 0; 11——对
16位计数器进行两次读 /写操作,低字节在前,高字节在后,
两次操作的地址相同 。
M2,M1,M0:计数器工作方式选择位 。 8253的每个计数通道有 6种不同的工作,工作方式由这 3位决定 。 000——方式 0;
001——方式 1; 010——方式 2; 011——方式 3; 100——方式 4; 101—
—方式 5。
BCD:数制选择 。 8253的每个计数器有两种数制二进制和二 —十进制,由这一位决定选择哪一种 。 BCD=0表示采用二进制计数,写入的初值范围为 0000H~ FFFFH,其中 0000H是最大值,代表 65 536; BCD=1表示采用二 —十进制计数,写入的初值范围为 0000~ 9999,其中 0000是最大值,代表 10 000。
4,8253
(1) 方式 0——计数结束时产生中断。
当写入方式 0控制字 CW后,计数器输出端 OUT立即变成低电平 。 当写入计数初值 N后,若 GATE为高电平,计数器开始计数 。 在计数过程中,OUT端一直维持为低,直到计数 0( 结束 )
时,OUT端变为高,向 CPU发出中断请求 。
8253用作计数时,一般都工作在方式 0。 方式 0的特点是:
① 计数器只计一遍数 。 当计数到 0时,并不恢复计数初值,
不开始重新计数,输出端 OUT由低变高且一直保持为高 。 只有当写入一个新的计数初值后,OUT才变低,开始新的计数 。
② 在计数 过程中 可改变 计数值 。 如果计 数器为 8 位
( RW1RW0=01),在写入新的 8位计数值后,计数器将按新的计数值重新开始计数 。 如果计数器为 16位 ( RW1RW0=11),
在写入第一个字节后,计数器停止计数,在写入第二个字节后,
计数器按照新的数值开始计数 。
③ 在计数过程中,可由门控信号 GATE控制暂停 。 当
GATE=0时,计数器暂停计数;当 GATE变为 1后,就接着计数 。
④ 方式 0的 OUT信号在计数到 0时由低变高,可作为中断请求信号 。 但由于在 8253内部没有中断控制电路,因此在多中断源系统中需外接中断优先权排队电路和中断向量产生电路 。
(2) 方式 1——可程控的单脉冲 。
在设定工作方式 1和写入计数初值后,OUT输出高电平,
此时并不开始计数 。 当门控信号 GATE变为高电平时,启动计数,OUT输出变低 。 在整个计数过程中,OUT都维持为低,
直到计数到 0时,输出变为高 。 因此,输出为一单脉冲,其低电平维持时间由装入的计数初值来决定 。
方式 1的特点是:
① 当计数到 0后,计数器可再次由外部启动,按原计数初值重新开始计数,输出单脉冲,而不需要再次送一个计数初值 。
② 在计数过程中,外部可发出门控脉冲,进行再触发 。 这时不管原来计数到何值,计数器将重新开始计数,输出端仍保持低电平 。
③ 在计数过程中改变计数初值不影响本次计数过程 。 若门控信号再次被触发,则计数器才按新的计数值计数 。
比较方式 0和方式 1,有以下几点不同:
① 方式 0设置计数初值后立即计数; 方式 1设置计数初值后不立即计数,直到有外部触发信号后才开始计数 。
② 方式 0在计数过程中能用门控信号暂停计数; 方式 1在计数过程中若有门控脉冲时不停止计数,而是使计数过程重新开始 。
③ 方式 0在计数过程中改变计数初值时,原计数停止,
立即按新的计数初值开始计数;方式 1在计数过程中当改变计数初值时,现行计数不受影响,新计数初值在下次启动计数后才起作用 。
④ 方式 0在一次计数结束后,必须重新设置计数初值才能再次计数,即计数初值只能使用一次,方式 1的计数初值在一次计数过程完成后继续有效 。
(3) 方式 2——分频器 。
在这种方式下,CPU输出控制字后,计数器输出端为高电平 。 当写入计数初值后,计数器立即对 CLK端的输入脉冲计数 。
在计数过程中输出端始终保持为高,直到计数器减为 1
时,输出变低 。 经过一个 CLK周期,输出恢复为高,同时按照原计数初值重新开始计数 。 如果计数值为 N,则在 CLK端每输入 N个脉冲后,就输出一个脉冲 。 因此,这种方式可以作为分频器或用于产生实时时钟中断 。
方式 2的特点是:
① 不用重新设置计数初值,计数器能够连续工作,输出固定频率的脉冲 。
② 计数过程可由门控信号 GATE控制 。 当 GATE为 0时,
暂停计数 。 当 GATE变为 1后,下一个 CLK脉冲使计数器恢复初值,重新开始计数 。
③ 在计数过程中可以改变计数初值,这对正在进行的计数过程没有影响 。 但当计数到 1时输出变低,过一个 CLK周期输出又变高,计数器将按新的计数值计数 。 所以对方式 2改变计数初值时,在下一次计数有效 。
(4) 方式 3——方波发生器 。
在方式 3时,当 CPU设置控制字后,输出为高电平 。 在写入计数初值后就开始计数,输出保持为高 。 当计数到一半计数初值时,输出变为低,直至计数到 0,输出又变为高,重新开始计数 。
方式 3与方式 2的输出都是周期性的,它们的主要区别是:
方式 3在计数过程中的输出有一半时间为高电平,另一半时间为低电平 。
所以,若计数值为 N,则方式 3的输出为周期 =( N× CLK
周期 ) 的方波 。 方式 3的特点是:
① 当计数初值 N为偶数时,输出端的高低电平持续时间相等,各为 N/2个 CLK脉冲周期;当计数初值 N为奇数时,输出端的高电平持续时间比低电平持续时间多一个脉冲周期,即高电平持续 ( N+1) /2个脉冲周期 。 低电平持续 ( N-1) /2个脉冲周期 。 例如 N=5,则输出高电平持续 3个脉冲周期,低电平持续 2个脉冲周期 。
② GATE=1,允许计数; GATE=0,停止计数 。 如果在
OUT为低电平期间 GATE=0,OUT将立即变高 。 当 GATE变高以后,在下一个 CLK脉冲来到时,计数器将重新装入初始值,
开始计数 。 在这种情况下通过门控信号使计数器实现同步,
称为硬件同步 。
③ 如果 GATE信号一直为高电平,在写入控制字和计数值后,将在下一个 CLK脉冲来到时装入计数初值并开始计数,这种情况称为软件同步 。
④ 在计数期间写入一个新的计数初值,如果在输出信号半周结束之前没有收到 GATE脉冲,则要到现行输出半周结束后才按新的计数初值开始计数 。 如果在写入新计数初值之后在现行输出半周结束之前收到 GATE脉冲,计数器将在下一个 CLK脉冲来到时立即装入新的计数初值并开始计数 。
(5) 方式 4——软件触发的选通信号发生器 。
在这种方式下,当写入控制字后,输出端 OUT变为高电平,
以此作为初始电平。
当写入计数初值后开始计数,称为软件触发 。 当计数到
0后,输出变低,经过一个 CLK周期,输出又变高,计数器停止计数 。 这种方式计数也是一次性的,只有在输入新的计数值后,才开始新的计数过程 。 若设置的计数初值为 N,则是在写入了计数初值后经过 ( N+1) 个 CLK脉冲,才输出一个负脉冲 。 一般将此负脉冲作为选通信号 。
方式 4 的特点是:
① 当 GATE=1时,允许计数;当 GATE=0时,禁止计数 。
所以,要做到软件触发,GATE应保持为 1。
② 在计数过程中,若改变计数初值,则按新的计数初值开始计数 。 这称为软件再触发 。
(6) 方式 5——硬件触发的选通信号发生器 。
在这种方式下,当写入控制字后,输出端出现高电平作为初始电平 。 在写入计数初值后,计数器并不立即开始计数,
而是要由门控脉冲的上升沿来启动计数,这称为硬件触发 。
当计数到 0时,输出变低,又经过一个 CLK脉,输出恢复为高 。
这样在输出端得到一个负脉冲选通信号 。 计数器停止计数后要等到下次门控脉冲触发,才能再进行计数 。
方式 5的特点是:
① 若设置计数初值为 N,则在门控脉冲触发后,经过
( N+1) /2个 CLK脉冲,才输出一个负脉冲 。
② 在计数过程中,若 GATE端又出现一个脉冲进行触发,
则使计数器重新开始计数,但对输出状态没有影响 。
③ 若在计数过程中改变计数值,只要没有门控信号的触发,
就不影响本次计数过程 。 当计数到 0后,若有新的门控信号的触发,则按新的计数初值计数 。
方式 5和方式 4都产生选通脉冲 。 这两种方式的区别在于:
方式 4每次要靠软件设置计数初值后才能计数 ( 软件触发 ),
方式 5的计数初值只需设置一次,但是每次计数要靠门控信号的触发 ( 硬件触发 ) ;方式 4软件更改计数初值后立即起作用,
方式 5软件更改计数初值后要有新的门控信号的触发才能起作用 。
5,8253的读 /
8253的写操作包括写控制字和写计数初值两项内容 。 具体要求是:
① 各计数器的控制字都写到同一地址单元,而各计数初值写到各自的地址单元中。
② 对于每个计数器,必须先写控制字,后写计数初值 。
因为后者的格式是由前者决定的 。
③ 写入的计数初值必须符合控制字决定的格式 。 16位数据应先写低 8位,再写高 8位 。
当给多于一个的计数器写入控制字和计数初值时,其顺序有一定的灵活性,只要遵循上述要求即可 。
8253的读操作所得到的是当前计数值,通常用于实时检测,实时显示和数据处理 。 在进行读操作时需要注意以下几点:
① 读操作是通过访问对应于各计数器的地址单元来实现的 。
② 每个计数器的读操作必须按照控制字确定的格式 。 如果是 16位计数,读操作要进行两次,先读低 8位,后读高 8位 。
③ 当计数器为 16位时,为了避免在两次读出过程中计数值的变化,要求先将计数值锁存 。 锁存计数值的常用方法是使用计数器锁存命令:控制字的 D7D6两位为所要锁存的计数值,
D5D4两位置为 00。 8253的每个计数器都有一个输出锁存器
( 16位 ),平时它的值跟随计数值而变化 。 当向计数器写入锁存命令后,现行计数值被锁存 ( 计数器仍能继续计数 ) 。 这样
CPU读取的就是锁存器中的值 。 当 CPU读取了计数值或对计数器重新编程以后,锁存状态被解除,输出锁存器的值又随计数值变化 。
6,8254
Intel 8254与 8253兼容,是 8253的改进型,因此它的操作方式以及引脚与 8253完全相同 。 它的改进主要反映在两个方面,一是 8254的计数频率很高,可达 10 MHz;一是 8254多了一条读回命令,这条命令可以令三个通道的计数值和状态锁存,如图 7 - 30 所示 。 相应地,8254每个通道都有一个状态字可由读回命令将其锁存,然后由 CPU读取 。 状态字反映了这个通道的工作方式及输出引脚的高低等信息,如图 7 - 31
所示 。
读回命令是写入控制口的 。 其 D5位为 0,表示锁存所选择的计数器的计数值; 其 D4位为 0,表示锁存所选择的计数器的状态 。 若 D3D2D1的某位为 0,则选择对应的计数器 。
图 7- 30 8254读回命令字
1 1 计数值锁存
D 7 D 5 D 3 D 2 D 1 D 0D 6
状态锁存
D 4
计数器 2 计数器 1 计数器 0 0
图 7-31 5254的计数器状态字无效计数值
D
7
D
3
D
0
D
6
读写格式
D
5
工作方式 数制输出
D
4
D
2
D
1
D7位是该计数器输出端 OUT的状态,OUT为高电平,则
D7=1。 D6位反映了预置寄存器中的计数值是否写入了减 1计数器,当向计数器通道写入控制字和计数值后,D6=1;只有当预置寄存器中的计数值写入减 1计数器时,才使 D6=0,因此在状态字 D6=1时,读取计数值是无意义的 。
在读回命令中允许同时使 D5和 D4位为 0,即计数值和状态字都要读回 。 但两者都要用同一个计数器端口,输入顺序是区别两者的方法 。 此时,第一次输入指令读入的一定是状态字; 接着的一条或二条输入指令将读入计数值 。
7,8253/8254在 PC
IBM PC/XT使用了一片 Intel 8253。 3个计数通道分别用于日时钟计时,DRAM刷新定时和控制扬声器发声 。 图 7 - 32 为连接图 。 IBM PC/AT使用与 8253兼容的 Intel 8254,在 AT机的连接使用与 XT机一样 。
根据 XT机 I/O地址译码电路可知,当 A9A8A7A6A5=00010
时,定时 /计数器片选信号 T/ 有效,所以 8253的 I/O地址范围为 040~05FH。 由片上 A1A0连接方法可知,计数器 0,计数器 1和计数器 2的计数通道地址分别为 40H,41H和 42H,而方式控制字的端口地址为 43H。 其他端口地址为重叠地址,一般不使用 。
CCS
图 7-32 IBM PC/XT与 8253连接图
RDI O R
WRI O W
A
0
A
0
A
1
A
1
CST / C C S
D
0
~ D
7
D
0
~ D
7
C L K
0
C L K
1
C L K
2
÷2
P C L K
G A T E
0
G A T E
1
G A T E
2
+ 5V
PB
0
O U T
0
I R Q
0
8 2 5 3
O U T
1
C L K
D Q
+ 5V
S
D R Q
0
R
D A C K 0 B R D
O U T
2
PB
1
PB
0
,PB
1
来自 8 2 5 5 A
接至扬声器驱动器
&
接至 D M A 驱动器个计数器通道时钟输入 CLK均从时钟发生器 PCLK端经二分频得到,频率为 1.19 318 MHz,周期为 838 ns。
下面介绍 8253的 3个通道在 XT机的作用 。
(1) 计数器 0。
门控 GATE0接 +5 V为常启状态 。 OUT0输出接 8259A的
IRQ0,用作 XT中日时钟的中断请求信号 。 设定时 /计数器 0为方式 3,计数值写入 0,产生最大的计数初值 65 536,因此输出信号频率为 1.193 18 MHz÷ 655 36=18.206 Hz,即每秒产生
18.2次中断,或者说每隔 55 ms申请一次日时钟中断 。 其程序
MOV AL,36H ; 设定计数器 0为工作方式 3,采用二进制计数,; 以先低后高字节顺序写入低 8位数值
OUT 43H,AL ; 写入控制字
MOV AL,0 ;
OUT 40H,AL ; 写入低字节计数值
OUT 40H,AL ; 写入高字节计数值
(2) 计数器 1。
门控 GATE1接 +5 V为常启状态 。 OUT1输出从低电平变为高电平使触发器置 1,Q端输出一正电位信号,作为内存刷新的
DMA请求信号 DRQ0,DMA传送结束 ( 一次刷新 ),由 DMA响应信号 DACK0BRD将触发器复位 。
DRAM每个单元要求在 2ms内必须被刷新一次 。 实际芯片每次刷新操作完成 512个单元的刷新,故经 128次刷新操作就能将全部芯片的 64 KB刷新一遍 。 由此可以算出每隔 2 ms÷ 128=15.6 μs
进行一次刷新操作,将能保证每个单元在 2 ms内实现一遍刷新 。
这样将计数器置为方式 2,计数初值为 18,每隔 18× 0.838
μs=15.084 μs产生一次 DMA请求,满足刷新要求 。 其程序如下:
MOV AL,54H 设定计数器 1为工作方式 2,采用二进制,
只写入低 8
OUT 43H,AL ;
MOV AL,18 ; 计数值为 18
OUT 41H,AL ;
(3) 计数器 2。
微型计算机系统中,计数器通道 2的输出加到扬声器上,
控制它发声,作为机器的报警信号或伴音信号 。 门控 GATE2接并行接口 PB0位,用它控制通道 2的计数过程 。 PB0受 I/O端口地址 61H的 D0位控制,在 XT机中是并行接口电路 8255的 PB0位 。
输出 OUT2经过一个与门,这个与门受 PB1位控制 。 PB1受 I/O端口地址 61H的 D1位控制,在 XT机中是 8255的 PB1位 。 所以,扬声器可由 PB0或 PB1分别控制发声 。 如果由 PB1控制发声,此时计数器 2不工作,因此 OUT2为高电平,将由 PB1产生一个振荡信号控制扬声器发声 。 但是,由于它会受系统中断的影响,使用不甚方便 。
如果由 PB0控制发声,由 PB0通过 GATE2控制计数器 2的计数过程,输出 OUT2信号将产生扬声器的声音音调 。
例如,在 ROM-BIOS中有一个声响子程序 BEEP,它将计数器 2编程为方式 3,作为方波发生器输出约 1kHz的方波,经滤波驱动后推动扬声器发声 。
BEEP PROC
MOV AL,10110110 ;设计数器 2为方式 3,采用二进制
OUT 43H,AL ;按先低后高顺序写入 16位计数值
MOV AX,0533H ; 初值为 0533H=1331,1.19318
MHz÷ 1331=896 Hz
OUT 42H,AL ; 写入低 8
MOV AL,AH
OUT 42H,AL ; 写入高 8
IN AL,61H ; 读 8255的 B
MOV AH,AL ; 存于 AH
OR AL,03H ; 使 PB1和 PB0位均为 1
OUT 61H,AL ;
SUB CX,CX
G7,LOOP G7 ;
DEC B1 ; B1
JNZ G7 ; B1=6为长声,B1=1为短声
MOV AL,AH
OUT 61H,AL ; 恢复 8255的 B口值,停止发声
RET
BEEP ENDP ; 返回
7.4 模拟通道接口
7.4.1
在微机检测和控制系统中,许多被测量的往往是模拟量 。 它们经过预处理 ( 放大,I/V转换等 ) 之后,在进入计算机之前必须经过 A/D转换变成数字量 。 而在微机内部,对检测数据进行加工处理之后输出的是数字量,这就需要通过 D/A转换接口将数字量转换为相应形式的模拟量 。
7.4.2 D/A转换接口
1,D/A
D/A转换的基本原理是用电阻解码网络,将 N位数字量逐位转换成模拟量并求和,从而实现将 N位数字量转化为模拟量 。 图 7 - 33 所示为微机系统中的 D/A转换环节 。 对于一个 8位 D/A转换器来说,假设输出为单极性模拟量电压,满量程值为 5 V,在理论上其数字量与模拟量之间的对应关系如表
7 - 7 所示 。
VOUT= 满量程电压值 2N× D
式中,N是 D/A转换器的位数,D是数字量换算到十进制的数值,满量程电压值 /2N是 1LSB所对应的模拟量电压,即分辨率 。
图 7 – 33 微机系统中的 D/A转换环节微机 D / A 转换器
N
数字量模拟量
VOUT=
式中,N是 D/A转换器的位数,D是数字量换算到十进制的数值,满量程电压值 /2N是 1LSB所对应的模拟量电压,即分辨率 。
由于数字量不是连续的,其转换后的模拟量自然就不是连续的 。 同时由于计算机每次输出数据和 D/A转换器进行转换需要一定的时间,因此实际上 D/A转换器输出的模拟量随时间的变化曲线不是连续的,而呈阶梯状 如图 7 - 34 所示 。 图中时间坐标的最小分度 ΔT是相邻的两次输出数据的时间间隔,
模拟量坐标的最小分度是 1 LSB。 但如果 D/A转换器的分辨率较高,ΔT很短,那么这条曲线的台阶就很密,基本上就是连续的 。
D?NN A N 量程值 2
图 7- 34 D/A转换输出的模拟量曲线
0
t
T
A
2,D/A转换器的主要性能指标
(1) 分辨率 。
分辨率是当输入数字量发生单位数码变化 ( 即 1LSB) 时,
所对应的输出模拟量的变化量,即等于模拟量输出的满量程值的 ( N为数字量位数 ) 。 分辨率也可以用相对值 ( 1/2N)
百分率表示 。 在实际应用中,又常用数字量的位数来表示分辨率 。
(2) 转换精度 。
转换精度是指一个实际的 D/A转换器与理想的 D/A转换器相比较的转换误差 。 理想的 D/A转换器特性如图 7 - 35 所示 。
精度反映 D/A转换的总误差 。 其主要误差有失调误差,增益误差,非线性误差和微分非线性误差 。
1
2N
图 7 – 35 理想的 D/A转换特性
0 0 0
模拟量
0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 11 1 0
数字量
③ 非线性误差 。
非线性误差是实际转换特性曲线与理想转换特性曲线之间的最大偏差 。 一般要求此误差不大于 ± LSB。 D/A转换器的失调和增益调整一般不能完全消除非线性误差,但可以使之显著减小 。
④ 微分非线性误差 。
微分非线性误差是指任意两个相邻数码所对应的模拟量间隔与理想值之间的偏差 。
(3) 建立时间 。
当 D/A转换器的输入数据发生变化后,输出模拟量达到稳定数值,即进入规定的精度范围内所需要的时间 。
(4) 温度系数 。
D/A转换器的各项性能指标一般在环境温度为 25℃ 下测定 。
环境温度的变化会对 D/A转换精度产生影响,这一影响分别用失调温度系数,增益温度系数和微分非线性温度系数来表示 。
这些系数的含义是当环境温度变化 1℃ 时该项误差的相对变化率,单位是 × 10-6/℃ 。
3,常用的 D/A
D/A转换器的类型很多 。 从输入电路来说,一般的 D/A转换器都带有输入寄存器,与微机能直接连接;有的具有两极锁存器,使工作方式更加灵活 。 输入数据一般为并行数据,也有串行数据 。 并行输入的数据有 8位,10位,12位等 。 从输出信号来说,D/A转换器的直接输出是电流量,若片内有输出放大器,则能输出电压量,并能实现单极性或双极性电压输出 。
D/A转换器的转换速度较快,一般其电流建立时间为 1 μs。
有些 D/A转换器具有其它功能,如能输出多路模拟量,输出工业控制用的标准电流信号 。
典型的 D/A 转换器如 8 位通用型 DAC0832,12 位的
DAC1208,电压输出型的 AD558和多路输出型 AD7528。
DAC0832是 8位分辨率的 D/A转换集成芯片 。 它具有与微机连接简单,转换控制方便,价格低廉等特点,微机系统中得到广泛的应用 。
(1) 结构和引脚 。
DAC0832的结构框图如图 7 - 36 所示,它由 8位输入锁存器,8位 DAC寄存器,8位 DAC转换器及转换控制电路构成 。
封装为 20脚双列直插式 。
各引脚功能如下:
图 7 – 36 DAC0832的结构框图
8 位输入寄存器
4 ~ 7
3
V
RE F
I
O U T 2
I
O U T 1
R
FB
&
19
1
2
I LE
DI
3
~ DI
0
输入数据
CS
WR
1
LE
2
8
12
8 位
D / A
转换器
LE
1
13 ~ 16
DI
7
~ DI
4
&
&
WR
2
X F E R
18
17
11
9
A G N D
20
10
V
CC
D G N D
R
FB
8 位
D A C
寄存器
DI0~DI7,8位数据输入端 。
ILE,输入寄存器允许信号,输入,高电平有效 。
:片选信号,输入,低电平有效 。
:输入寄存器写信号,输入,低电平有效 。 由 ILE、
,的逻辑组合产生输入寄存器控制信号 。 当为低电平时,输入寄存器内容随数据线变化,
正跳变将输入数据锁存 。
,数据传送信号,输入,低电平有效 。
,DAC寄存器的写信号,输入,低电平有效 。 由
,组成 DAC 。 的正跳变将输入数据锁存到 DAC寄存器 。
CS?
WR?
CS? WR? 1LE
1LE1
LE
XFER
2WR
XFER
2WR
2LE 2LE
VREF,基准电源输入端 。
RFB,反馈信号输入端 。
IOUT1:电流输出 1端 。 当输入数据为全 0时,IOUT1等于
0;当输入数据为全 1时,IOUT1等于最大值 。
IOUT2:电流输出 2端,IOUT1+IOUT2=常数 。
VCC:电源输入端 。
AGND,模拟地 。
DGND,数字地 。
D/A转换器没有形式上的启动信号 。 实际上后一级寄存器的控制信号就是 D/A转换器的启动信号 。 另外,它也没有转换结束信号 。 D/A转换的过程很快,一般还不到一条指令的执行时间 。
(2) 工作方式 。
DAC0832内部有两个寄存器,能实现三种工作方式,双缓冲,缓冲和直通方式 。
双缓冲工作方式是指两个寄存器分别受到控制 。 当 ILE、
和 信号均有效时,8位数字量被写入输入寄存器,
此时并不进行 D/A转换 。 和 信号均有效时,原来存在输入寄存器中的数据被写入 DAC寄存器,并进入 D/A转换器后进行 D/A转换 。 在一次转换完成后到下一次转换开始之前,由于寄存器的锁存作用,8位 D/A转换器的输入数据保持恒定,因此 D/A转换的输出也保持恒定 。 在双缓冲工作方式下,
利用输入寄存器暂存数据,给使用带来方便,可以实现多路数字量的同步转换输出 。
CS
1WR
2WR XFEF
单缓冲工作方式是指只有一个寄存器受到控制 。 这时将另一个寄存器的有关控制信号预先设置成有效,使之开通;
或者将两个寄存器的控制信号连在一起,两个寄存器作为一个来使用 。
直通工作方式是指两个寄存器的有关控制信号都预先置为有效,两个寄存器都开通 。 只要数字量送到数据输入端,就立即进入 D/A转换器进行转换 。 这种方式应用较少 。
(3) 电压输出电路的连接 。
DAC0832以电流形式输出转换结果,得到电压形式需外加 I/V转换的电路,常采用运算放大器 。 图 7 - 38 是 DAC0832
的电压输出电路 。
图 7 – 38 DAC0832
(a) 单极性输出; (b) 双极性输出
D A C 0 8 3 2
( a )
R
FB
I
O U T 1
I
O U T 2
V
OUT
R
P1
-
+
D A C 0 8 3 2
V
RE F
R
FB
I
O U T 1
I
O U T 2
-
+
R
P1
+ 5V
V
OUT
1
R
2
= R
R
0
R
2
= 2 R
-
+
-
+
R
3
= 2 R
V
OUT
( b )
+
-
-
+
对于单极性输出电路,输出电压的格式为
VOUT=-
式中 D为输入数字量的十进制值 。 因为转换结果 IOUT1接运算放大器的反相端,所以式中有一个负号 。 若 VREF=+5V,
D=0~255( 00H~FFH) 时,VOUT=-( 0~4.98) V。
通过调整运算放大器的调零电位器,可以对 D/A芯片进行零点补偿 。 通过调节外接于反馈回路的电位器 RP1,可以调整满量程 。
对于双极性输出电路,输出电压的表达式为:
REFV
D?
256
VOUT =
若 VREF=+5 V,当 D=0时,VOUT1=0,VOUT=-5 V;当
D=128( 80H) 时,VOUT1= -2.5 V,VOUT=0;当 D=255( FFH)
时,VOUT1=-4.98 V,VOUT=4.96。 这一转换关系由表 7 - 8 示出 。
(4) 主要性能指标 。
· 分辨率为 8位 。
· 输出电流稳定时间为 1 μs。
·非线性误差为 0.20%FSR。
R E FV
D
1 2 8
1 2 8
· 温度系数为 2× 10-6 /℃ 。
· 工作方式为双缓冲,单缓冲和直通方式 。
· 逻辑输入与 TTL电平兼容 。
· 功耗为 20 mW。
· 电源 5~15 V。
(5) DAC芯片与微机的连接 。
DAC芯片作为一个输出设备接口电路,与主机的连接比较简单,主要是处理好数据总线的连接 。
① 主机位数等于或大于 DAC芯片位数的连接 。
对于 DAC来说,当待转换的数字量加到其数据输入端时,
在模拟输出端随之建立相应的电流或电压 。 随着输入数据的变化,输出电流或电压也随之变化 。
待转换的数字量通常来自微处理机数据总线 。 由于微处理机要进行各种信息的加工处理,它输出的任何数据都只在输出指令 OUT执行的极短时间内出现在数据总线上,所以主机与 DAC之间必须接入数据锁存器 。
锁存器把主机输给 DAC的数据锁存起来,在模拟输出端建立相应的电流或电压,直到输入新的数据 。 锁存器的控制信号,则来自微处理机的输出控制信号和地址译码器产生的端口地址信号,如图 7 - 39所示 。
对于没有锁存器的 DAC芯片,如 AD7520,AD7521、
DAC0808等,必须外接锁存器 。
图 7 –39 不带锁存器的 DAC连接图
L S 2 7 3
C L K
D
0
~ D
7
D A C
-
+
A
V
OUT
译码
AB
I O W
&
锁存器可以是常用的数字集成电路,如 74LS273/ 274;
也可以是可编程并行接口芯片,如 Intel 8255,Z80 PIO等 。 对于带有锁存器的 DAC芯片,如 DAC0832,DAC1210等,则无需外接锁存器,可以直接与数据总线连接 。 有时,为了增加使用的灵活性,带有锁存器的 DAC芯片也可以外接另一级锁存器 。
DAC0832工作在直通方式时是一个不带锁存功能的 DAC芯片,
而工作在缓冲方式时才带有一级或两级锁存器,如图 7 - 40 为
DAC0832在单缓冲工作方式下的一种连接电路图 。
7 – 40 DAC0832单缓冲接口电路
V
R E F
CS I
O U T 1
I
O U T 2
-
+
A
- 5V
V
CC
+ 5V
I L E
译码
AB
WR
1
I O W
DI
0
~ DI
7
D
0
~ D
7
V
OUT
D A C 0 8 3 2
WR
2
X F E R
D G N D A G N D
R
fb
对应于图 7 - 39 和图 7 - 40,下面的程序段在执行时,可以实现一次 D/A转换 。 程序中假设要转换的数据存于 BUF单元 。
MOV AL,BUF ;
MOV DX,
OUT DX,AL ; 输出,进行 D/A
② 主机位数小于 DAC芯片位数的连接 。
当要求 DAC有更高的分辨率时,常要用 10,12甚至 16位的 DAC芯片 。 如果仍采用 8位主机,则被转换的数据必须分几次送出 。 同时,就需要多个锁存器来锁存分几次送来的完整的数字量 。 例如,当 DAC芯片为 12位时,就需要采用如图 7 -
41 所示的电路 。
图 7- 41 2
4 位锁存器
8 位锁存器
4 位锁存器
8 位锁存器
12 位
D A C
D
0
~ D
7
第 1 级高 4 位锁存控制第 1 级低 8 位锁存控制第 2 级 1 2 位锁存控制模拟输出
8 位锁存器
4 位锁存器
8 位锁存器
12 位
D A C
D
0
~ D
7
第 1 级低 8 位锁存控制第 2 级 1 2 位锁存控制模拟输出
( a ) ( b )
图 7 - 41( a) 采用了两级锁存器,每一级用了两个锁存器 。
一个完整的 12位数据,微处理机要分两次送出,先送低字节
( 8位 ),再送高字节 ( 4位 ) 。 送完数据后,微处理机还要再进行一次输出操作 ( 但输出的数据无用 ),来进行第二级锁存,
将 12位数据同时送给 DAC进行转换 。 之所以采用第二级锁存将
12位数据同时送 DAC,是为了避免当低 8位输入后,高 4位还未来得及输入时,模拟输出端出现短暂的错误输出 。
图 7 - 41( b) 采用了较简单的两级锁存器,可以省掉一个
4位锁存器及有关的译码器,并使输出数据的过程由三次输出操作减为两次 。
DAC1210是 12位 D/A转换器芯片,其电流建立时间为 1 μs,
单电源 VCC为 5~15 V,参考电压 VREF最大为 ± 25 V。 数字输入端与 TTL电平兼容,如图 7 -42( a) 为其方框图 。
由图 7 - 42 可以看出,DAC1210的逻辑结构与 DAC0832
相似 。 我们只讨论它与 8位数据总线的连接问题,其它不再赘述 。 DAC1210的 12位数据输入寄存器由一个 8位寄存器和一个 4
位寄存器组成,与图 7 - 40( a) 所示相同 。 两个寄存器的输入允许控制都要求,为低电平,但 8位寄存器的数据输入还要求 B1/ 端为高电平 。 所以当 DAC1210与 8位数据总线相接时,必须先使 B1/ 为高,送出高 8位数据;然后使
B1/ 为低送出低 4位数据,同时保护先送出的高 8位数据 。
CS 1WR
2B
2B
2B
图 7 – 42 DAC1210及其应用输入寄存器
( 8 位)
V
CC
10
V
R E F
I
O U T 2
I
O U T 1
R
fb
输入寄存器
( 4 位)
5
4
20
19
18
17
16
15
DI
4
DI
5
DI
6
DI
7
DI
8
DI
9
DI
10
DI
11
9
8
7
6
DI
0
DI
1
DI
2
DI
3
23
B
1
/B
2
CS
WR
1
WR
2
X F E R
1
2
22
21
D A C
寄存器
( 12 位)
D / A
转换器
( 12 位)
11
13
14
3
A G N D
D A C 1 2 1 0
24
12
D G N D
V
R E F
I
O U T 1
I
O U T 2
-
+
A
- 5V
V
CC
+ 5V
DI
4
~ DI
7
2 2 0 h
D
0
~ D
3
V
o u t
D A C 1 2 1 0
X F E R
D G N D
DI
8
~ DI
11
D
4
~ D
7
DI
0
~ DI
3
WR
1
CS
WR
2
I O W
B
1
/B
2
2 2 1 h
地址译码
2 2 2 h
A
0
A G N D
R
fb
( a )
( b )
&
&
&
1
≥1
A
0
~ A
9
如图 7 - 41( b) 为 DAC1210与 IBM PC标准总线的连接电路图 。 DAC占用的端口地址为 0220H~ 0222H。 为使两次数据输入端口的地址先偶 ( 220H) 后奇 ( 221H),与编程习惯一致,可以 A0地址线经一反相器接至 B1/ 端 。 若 BX寄存器中低 12位为待转换的数字量,如下程序段可完成一次转换输出:
MOV DX,220H
MOV C1,4 ; BX中低 12
SHL BX,CL
MOV A1,BH ; BH中为高 8
OUT DX,AL ; 送出高 8位
2B
INC DX
MOV A1,BL ; BL中为低 4
OUT DX,AL ; 送出低 4
INC DX
7,4.3A/D转换接口
1,A/D转换的基本知识转换的功能是把模拟量电压转换为 N位数字量电压 。 图
7 - 43 所示为 A/D转换器的工作情况,其中图 7 - 43( b) 是相对应的输入和输出 。
对于这一转换过程,作以下几点说明:
① 输入 A/D转换器的模拟量电压是连续的 。 由于 A/D转换器完成一次转换需要一定的时间,A/D转换只能间断性地进行,因此输出的数字量电压是不连续的,称为离散量 。 在图 7-43( b) 中,A/D转换所得的结果是一个个孤立的点 。 每个点的纵坐标代表某个数字量,其值与采样时刻的模拟量相对应 。 如果在相邻两次采样时刻之间,A/D转换输出的数字量保持前一时刻的值,那么 A/D转换的输出就是一条阶梯形的曲线 。
图 7 - 43A/D
(a) A/D 转换器 ; (b) 输入和输出时间时间采样周期
0
数字量模拟量
0
A / D 转换器模拟量 数字量
( N 位)
( a )
( b )
② 相邻两次采样的间隔时间称为采样周期 。 为了使输出量能充分反映输入量的变化情况,采样周期要根据输入量变化的快慢来决定 。 而一次 A/D转换所需要的时间显然必须小于采样周期 。
③ 假设输入的模拟量为 0~4.99 V时,输出的数字量为
001~111( 二进制数 ),那么输出与输入的对应关系如表 7 - 9
所示 。
④ 将模拟量表示为相应的数字量,称为量化 。 数字量的最低位即最小有效位 1 LSB( LSB,Least Significant Bit),
与此相对应的模拟电压称为一个量化单位,如果模拟电压小于此值,不能转换为相应的数字量 。 LSB表示 A/D转换器的分辨能力 。 对于上述转换关系来说,1 LSB=0.71 V。
2,A/D
(1) 分辨率 。
习惯上以输出的二进制位数或 BCD码位数表示分辨率 。
如一个输出为 8位二进制数的 A/D 转换器,称其分辨率为 8位 。
也可以用对应于 1 LSB的输入模拟电压来表示分辨率 。 分辨率还可以用百分数来表示,例如 8位 A/D转换器的分辨率百分数为 ( 1/256) × 100%=0.39%。
(2) 量化误差 。
A/D转换是用数字量对模拟量进行量化 。 由于存在最小量化单位,在转换中就会出现误差,仍以上述 0~4.99 V 转换为二进制数 000~111的 A/D 转换器为例,模拟量 1.42 V对应于数字量 010;而 ( 1.42 V- LSB) ~ (1.42 V+ LSB)也都对应于 010,这样就带来了转换误差 。2
1 21
这一误差称为量化误差 。 理想 A/D
± LSB,如图 7 -44 所示 。
(3) 转换精度 。
转换精度是指一个实际的 A/D转换器与理想的 A/D转换器相比的转换误差 。 绝对精度一般以 LSB为单位给出 。 相对精度则是绝对精度与满量程的比值 。 不同厂家生产的 A/D转换器的转换精度指标的表达方式可能不同 。 有的给出综合误差指标,有的给出分项误差指标 。 通常误差指标有失调误差
( 零点误差 ),增益误差 ( 满量程误差 ),非线性误差和微分非线性误差 。 下面分别介绍这些误差 。
2
1
图 7 – 44 理想的 A/D转换曲线模拟量( V )
0 1 2 3 4 5
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1,4 2
21
L
S
B
2
1
L S B
数字量
① 失调误差 。
失调误差也称为零点误差,这是指当输入模拟量从 0逐渐增长使输出数字量从 0……0跳至 0……1时,输入模拟量实际数值与理想的模拟量数值 ( 即 1 LSB的对应值 ) 之差 。 这反映了
A/D转换器零点的偏差 。 一定温度下的失调误差可以通过电路调整来消除 。
② 增益误差 。
当输出数字量达到满量程时,所对应的输入模拟量与理想的模拟量数值之差,称为增益误差或满量程误差,计算此项误差时应将失调误差除去 。 一定温度下的增益误差也可以通过电路调整来消除 。
③ 非线性误差 。
非线性误差是指实际转换特性与理想转换特性之间的最大偏差,它可能出现在转换曲线的某处 。 此项误差不包括量化误差,失调误差和增益误差 。 它不能通过电路调整来消除 。
④ 微分非线性误差 。
在 A/D转换曲线上,实际台阶幅度与理想台阶幅度 ( 即理论上的 1 LSB) 之差,称为微分非线性误差 。 如果此误差超过 1
LSB,就会出现丢失某个数字码的现象 。
在上述几项误差中,如果失调误差和增益误差能得到完全补偿,那么只需考虑后两项非线性误差 。 需要指出的是精度所对应的误差指标中未包括量化误差,因此实际的总误差还要把量化误差考虑在内 。 总误差 E总与分项误差 Ei之间的关系如下
E总 =
(4) 转换时间 。
转换时间是指 A/D转换器完成一次转换所需要的时间 。
其倒数为转换速率 。
(5) 温度系数 。
温度系数表示 A/D转换器受环境温度影响的程度 。 一般用环境温度变化 1℃ 所产生的相对转换误差来表示,以 × 10-6/℃
为单位 。
3,常用的 A/D
A/D转换器的种类很多 。 按转换原理分类,有逐次逼近式,
双积分式,并行式等 。 双积分转换精度高,转换时间长,大约需要几百毫秒 。
2iE
并行式转换速度最高,能达到 2G次,即转换时间仅 50 ns,
但价格昂贵,产品的分辨率不高 。 逐次逼近式兼顾了转换速度和转换精度,是应用广泛的 A/D转换器 。 逐次逼近式的种类很多,分辨率从 8位到 16位,转换时间从 100μs到几微秒,精度有不同等级,有的转换器内部还常有多路模拟开关 。
常用的几种 A/D转换器,8位通用型 ADC0808/0809,12位的 AD574A和双积分型 5G14433。
ADC0808/0809是 8通道,8位逐次逼近式 A/D转换器,美国
NS公司产品 。 其性能指标一般,价格低廉,便于与微机连接,
因而应用十分广泛 。
(1) 结构和转换原理 。 图 7 - 45 所示为 ADC0808/0809的结构框图 。 ADC0808/0809由三部分组成,8路模拟量选通开关,
8位 A/D转换器和三态输出数据锁存器 。
图 7- 45 ADC0808/0809的结构框图逻辑控制和定时电路逐次逼近寄存器
S A R
2 5 6 R 电阻分压器电压比较器树状模拟开、关阵译码器
A
B
C
地址锁存有效
A L E
8 路模拟量选通开关
S TA R T
三态输出数据锁存器
G N D
转换结束
E O C
IN
0
IN
1
IN
2
IN
3
IN
4
IN
5
IN
6
IN
7
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
V
R E F
( + )
8
路模拟信号输入
A
8 位 A / D 转换器通道地址锁存与译码
3 位地址码输入
V
R E F
( - )V
CC
输出有效控制
OE
( L S B )
8 位数据输出
( M S B )
启动
C L O C K
时钟
ADC0808/0809允许 8路模拟信号输入,由 8路模拟开关选通其中一路信号,模拟开关受通道地址锁存和译码电路的控制 。 当地址锁存信号 ALE有效时,3位地址 CBA进入地址锁存器,经译码后使 8路模拟开关选通某一路信号 。
8位 A/D转换器为逐次逼近式,由 256R电阻分压器,树状模拟开关 ( 这两部分组成一个 D/A变换器 ),电压比较器,
逐次逼近寄存器,逻辑控制和定时电路组成 。 其基本工作原理是采用对分搜索方法逐次比较,找出最逼近于输入模拟量的数字量 。 电阻分压器需外接正负基准电源 VREF( +) 和
VREF( -) 。 CLOCK端外接时钟信号 。 A/D转换器的启动由
START信号控制 。 转换结束时控制电路将数字量送入三态输出锁存器锁存,并产生转换结束信号 EOC。
三态门输出锁存器用来保存 A/D转换结果,当输出允许信号 OE有效时,打开三态门,输出 A/D转换结果 。 因输出有三态门,便于与微机总线连接 。
(2) 引脚功能 。
图 7 - 46 为 ADC0808/ 0809的引脚图 。 各引脚功能说明如下:
IN0~IN7,8路模拟输入端 。
ALE:地址锁存器允许信号输入端 。 当它为高电平时,
地址信号进入地址锁存器中 。
CLOCK:外部时钟输入端 。 时钟频率典型值为 640 kHz,
允许范围为 10~1280 kHz。 时钟频率降低时,A/ D转换速度也降低 。
图 7-46 ADC0808/0809的引脚图
1
OE
C L O C K
IN
2
2
3
4
5
6
7
8
9
10
IN
7
R E F ( + )
19
20
21
22
23
24
IN
1
11
12
13
14 15
16
17
18
25
26
27
28
A D C
0 8 0 8 / 0 8 0 9
S T A R T
D
1
IN
0
A D D C
A L E
D
7
IN
3
D
4
D
0
IN
4
IN
5
IN
6
E O C
D
3
V
CC
G N D
D
2
R E F ( - )
D
5
D
6
A D D B
A D D A
CLOCK:外部时钟输入端 。 时钟频率典型值为 640 kHz,
允许范围为 10~1280 kHz。 时钟频率降低时,A/ D转换速度也降低 。
START,A/ D转换信号输入端 。 有效信号为一正脉冲 。
在脉冲上升沿,A/ D转换器内部寄存器均被清零,在其下降沿开始 A/ D转换 。
EOC,A/ D转换结束信号 。 在 START信号上升沿之后 0
到 ( 2 μs+ 8个时钟周期 ) 时间内,EOC变为低电平 。 当 A/ D
转换结束后,EOC立即输出一正阶跃信号,可用来作为 A/ D
转换结束的查询信号或中断请求信号 。
OE,输出允许信号 。 当 OE输入高电平信号时,三态输出锁存器将 A/ D转换结果输出 。
D0~D7:数字量输出端 。 D0为最低有效位 ( LSB),D7为最高有效位 ( MSB) 。
REF( +),REF( -),正负基准电压输入端 。 基准电压的中心值为 (,其偏差值不应超过 ± 0.1 V。 正负基准电压的典型值分别为 +5 V和 0
V。 VCC,GND:电源电压输入端 。
(3) 工作时序 。
ADC0808/0809的工作时序如图 7 - 47 所示 。 从图中可以看出各信号的时序关系,进一步理解上面所讲的转换过程中的信号功能 。 完成一次转换所需要的时间为 66~73个时钟周期 。
2
)( )()( REFREF VV
2
CCV
图 7 – 47 ADC0808/0809的工作时序地址
A L E
稳定模拟输入 稳定
S TA R T
E O C
OE
输出
(4) ADC0808/0809的主要性能指标 。
· 分辨率为 8位 。
· 总的非调整误差,0808为 ± LSB,0809为 ± 1 LSB。
· 转换时间为 100 μs( 时钟频率为 640 Hz) 。
· 具有锁存控制功能的 8路模拟开关,能对 8路模拟电压信号进行转换 。
· 输出电平与 TTL电平兼容 。
· 单电源 +5 V供电 。 基准电压由外部提供,典型值为 +5 V。
此时允许模拟量输入范围为 0~5 V。 功耗为 10 mW。
ADC0808/0809的数字量输出值 D( 换算到十进制 ) 与模拟量输入值 VIN之间的关系如下:
2
1
)()(
)(
REFREF
REFIN
VV
VVD
通常 VREF( +) =0 V,所以
2 5 6
)(
REF
IN
V
VD
当 VREF ( + ) =5V,相应于 VIN=0~4.98 V,D=0~255
( 00H~FFH) 。 这里由于数字量的满量程值是 255,而不是
256,因此相应地输入电压的满量程值也比 5 V少 1 LSB。
上述为单极性输入情况 。 对于只允许单极性输入的 A/D转换器,也可以转换为双极性模拟电压,但需要在输入电路上加一正的偏置电压 VOFFSET,如图 7 - 48 所示 。
图 7 - 48
(a) 输入电压为 -5~5 V; (b) 输入电压为 -10~10 V
- 5 ~+ 5V
V
IN
V
IN
R
R
V
O F F S E T
( a )
- 10 ~+ 1 0 V
V
IN
V
IN
2 R
R
V
O F F S E T
( b )
2 R
′ ′
图中 R可以取几十千欧,VOFFSET可以取 +5 V。 改成双极性输入后,用偏移码表示转换结果,见表 7 - 10。 双极性输入与单极性输入相比,输出范围不变,而输入范围增加,因而转换灵敏度下降 。
与 ADC0808/0809同属 ADC0800系列的还有 ADC0816/0817,
其通道数增至 16,封装为 40引脚,其它性能与 ADC0808/0809基本相同 。 ADC0800~0805系列为单通道 8位转换器,除了通道数以外,其它性能与 ADC0808/0809相似 。
(5) ADC芯片与 CPU接口 。
通常使用的 ADC一般都具有下列引脚:数据输出,启动转换,转换结束,时钟和参考电平等 。 ADC与主机的连接就是处理这些引脚的连接问题 。
① 数据输出线的连接 。
模拟信号经 A/ D转换,向主机送出数字量 。 所以,ADC
芯片就相当于给主机提供数据的输入设备 。
能够向主机提供数据的外设很多,它们的数据线都要连接到主机的数据总线上 。 为了防止总线冲突,任何时刻只能有一个设备发送信息 。 因此,这些能够发送数据的外设的数据输出端必须通过三态缓冲器连接到数据总线上 。 由于有些外设的数据不断变化,如 A/D转换的结果,随模拟信号变化而变化,所以,为了能够稳定输出,还必须在三态缓冲器之前加上锁存器,保持数据不变 。 为此,大多数向系统数据总线发送数据的设备都设置了锁存器和三态缓冲器,简称三态锁存缓冲器或三态锁存器 。
根据 ADC芯片的数字输出端是否带有三态锁存缓冲器,
与主机的连接可有两种方式 。 一种是直接相连,主要用于输出带有三态锁存缓冲器的 ADC芯片,如 ADC0809,AD574等;
第二种是用三态锁存器,如 74LS373/374,或通用并行接口芯片,如 Intel 8255,Z80 PIO,它适用于不带三态锁存缓冲器的
ADC芯片 。 但很多情况下,为了增加 I/O的接口功能,那些带有三态锁存缓冲器的芯片也常采用第二种方式 。
此外,随着位数的不同,ADC与微处理机数据总线的连接方式也不同 。 对于 8位 ADC,其数字输出端可与 8位微处理机数据总线相连,然后用一条输入指令一次读出结果 。 但对于 8
位以上的 ADC,与 8位微处理机连接就不那么简单了,此时必须增加读取控制逻辑,把 8位以上的数据分两次或多次读取 。
② A/D转换的启动信号 。 当一个 ADC在开始转换时,必须加一个启动信号 。 芯片不同,要求的启动信号也不同,一般分脉冲启动信号和电平控制信号 。
脉冲信号启动转换的 ADC,只要在启动引脚加一个脉冲即可,如 ADC0809,AD574。 通常都是采用外设输出信号和地址译码器的端口地址信号经逻辑电路进行控制 。
电平信号启动转换是在启动引脚上加一个所要求的电平 。
电平加上之后,A/D转换开始,而且在转换过程中,必须保持这一电平,否则,将停止转换 。 在这种启动方式中,CPU送出的控制信号必须通过寄存器保持一段时间 。
软件上通常是在要求启动 A/D转换的时刻,用一个输出指令产生启动信号,这就是编程启动 。 此外,也可以利用定时器产生信号,这样可以方便地实现定时启动,适合于固定延迟时间的巡回检测等应用场合 。
③ 转换结束信号的处理方式 。
当 A/D转换结束,ADC输出一个转换结束信号,通知主机,A/ D转换已经结束,可以读取结果 。 主机检查判断 A/
D转换是否结束的方法主要有四种:
· 中断方式 。 这种方式下,把结束信号作为中断请求信号接到主机的中断请求线上 。 当转换结束时,向 CPU申请中断,
CPU响应中断后,在中断服务程序中读取数据 。 这种方式下
ADC与 CPU同时工作,适用于实时性较强或参数较多的数据采集系统 。
· 查询方式 。 这种方式下,把结束信号作为状态信号经三态缓冲器送到主机系统数据总线的某一位上 。 主机在启动转换后开始查询是否转换结束,一旦查到结束信号,便读取数据 。
这种方式的程序设计比较简单,实时性较强,是比较常用的一种方法 。
· 延时方式 。 这种方式下,不使用转换结束信号 。 主机启动 A/ D转换后,延时一段略大于 A/ D转换的时间,即可读取数据 。 延时通常可以采用软件延时程序,也可以用硬件完成延时 。 采用软件延时方式,无需硬件连线,但要占用主机大量时间 。
延时方式多用于主机处理任务较少的系统中 。
· DMA方式 。 这种方式下,把结束信号作为 DMA请求信号 。 转换结束,即启动 DMA传送,通过 DMA控制器直接将数据送入内存缓冲区 。 这种方式特别适合要求高速采集大量数据的情况 。
④ 时钟的提供 。
时钟是决定 A/ D转换速度的基准,整个转换过程都是在时钟作用下完成的 。 时钟信号的提供有两种 。 一种是由外部提供,它可用单独的振荡电路产生,更多的则用主机时钟分频得到;另一种是由芯片内部提供,一般用启动信号启动内部时钟电路,只在转换过程中才起作用 。
⑤ 参考电压的接法 。
ADC中参考电压常有两个,VREF( +) 和 VREF( -) 。 根据模拟输入量的极性不同,它们的接法亦不同 。 当模拟信号为单极性时,VREF( -) 接地,VREF( +) 接正极电源 。 当模拟信号为双极性时,VREF( +) 和 VREF( -) 分别接参考电源的正,负极性端 。
当然也可以把双极性信号转换为单极性信号再接入 ADC。
参考电压的提供方法有两种 。 一种是外电源供给,这个外电源可以是系统的供电电源 。 在精度要求较高时则单独连接精密稳压的电源 。 常用的情况是将系统电源经进一步稳压后 接到参考电压端 。 另一种情况是 ADC芯片内部设置有稳压电路,
只需提供芯片电源,而不用单独供给参考电压,这种情况常见于 10位以上 ADC。