微型计算机技术
description
Transcript of 微型计算机技术
微型计算机技术教 学 指 导(六)
太原广播电视大学 郭建勇
第 6 章 常用可编程外围接口芯片 内容提要:本章主要介绍微处理器常用的外围接口
芯片,定时器 8253 ,并行的外围接口芯片 8255 和串行的通讯接口芯片 8251A 。介绍每种芯片的结构框图,各个部件的功能和用途,以及它们的使用方式。
学习目标:通过学习这些接口芯片,要求掌握不同外围接口芯片在使用时的工作方式。熟练掌握它们在微机接口中的运用环境和使用时的方式控制,以及不同芯片的编程命令字的设置。进一步了解每种芯片的基本的编程步骤及各种方式命令字的使用。
6.1 定时器/计数器 8253 的结构与编程 在微机及一些控制系统中,经常要用到定时信号。如系统的日
历时钟,动态存储器刷新。对外部执行机构控制时也需要定时中断、定时检测、定时查询等。
定时的方法主要是两种: 软件定时:利用指令的执行时间设计循环程序,使 CPU 执行延
迟子程 序的时间就是定时时间。缺点:执行延迟时, CPU 一直被占用,降低了 CPU 的效率。
硬件定时:用计数器 / 定时器作为主要硬件,在软件简单指令的控制下产生精确的时间延迟。突出优点为计数时不占用 CPU 时间,如利用定时器 / 计数器产生中断信号,可建立多作业环境,
故提 高了 CPU 效率。
1. 计数:• 对事件的个数进行计数。
正计数:关心记录事件的次数。 倒计数:关心预先设定事件次数发生完的时刻。
• 可由硬件计数器实现,事件作为计数器的时钟,此时事件的出现频率不一定一成不变。
2. 定时:•取得给定的时间间隔。
–延时:求锝某事件发生后间隔一定时间的时刻。–时标:求得给定时间间隔的连续脉冲。
•可由硬件计数器来实现,一定频率的信号作为计数器的时钟,如果只计数到就终止,即为延时。如果连续不断的计数即可输出时标。
可编程计数器 / 定时器的用途 计数功能
作为计数个数到中断信号。 记录外部特定时间发生的个数。
定时功能 作为周期性定时中断信号。
用于分时性操作系统。 用作系统时钟基准。
作为一个可编程波特率发生器。用于异步串行通讯。作为 I/O 设备输出定时信号。实现外设与 CPU 的同步。实现节约 CPU 的时间延时。作为音源。
6 . 1 . 18253 功能及结构框图 1 . 8253 的主要功能 (1) 每片上有 3 个独立的 16 位的计数器通道。 (2) 对于每个计数器,都可以单独作为定时器或计数器使用,
并且都可以按照二进制或十进制来计数。 (3) 每个通道都有 6 种工作方式,都可以通过程序设置或改变。 (4) 每个计数器的速率可高达 2MH2 。最高的计数时钟频率为
2 . 6MHz 。 (5) 所有的输入、输出都是 TTL 电平,便于与外围接口电路相
连接。 (6) 单一的 +5V 电源
2 . 8253 的结构框图
CLOCK0D7 ~D0
计数器 0
计数器 1
计数器 2
GATE0OUT0
数据总线缓冲器
读 / 写逻辑
控制寄存器
A1A0
RDWR
四大部分:数据总线缓冲器、读写控制逻辑、控制字寄存器以及三个独立的 16 位的计数器通道。这三个计数器分别是计数器0 通道、计数器 1 通道和计数器 2 通道。
(1) 数据总线缓冲器: 8 位的双向三态缓冲器。用于暂存数据,使用在以下几个方面:
①CPU 在初始化编程时,向 8253 写入控制字。 ②CPU 向某一通道写计数初值。 ③CPU 从某一通道读计数初值。 (2) 读/写控制逻辑电路:接受输入的 RD 、 WR 、 CS 、 A1 、 A0
等信号组合产生出对 8253 要执行的操作,见操作表。 (3) 控制字寄存器:只能写入,不能读出。 8 初始化编程时,写
入控制字决定通道的工作方式。 (4)3 个计数器:分别为 0 、 1 和 2 ,是 3 个独立的计数/定时
通道,都可按不同的方式工作。每个计数器内部都包含一个 16位的预置初始值寄存器。一个可预置数减法计数器和一个锁存器。
信号名 引 脚 信号方向 功 能 定 义 D7—D0 1—8 双向 8 位 三态的数据线 CLK0 9 输入 计数器 0 的时钟输入 OUT0 10 输出
计数器 0 的输出 GATE0 11 输入 计数器 0 的门控输入 CLK1 15 输入
计数器 1 的时钟输入 OUT1 13 输出 计数器 1 的输出 GATE2 14 输入 计数器 1 的门控输入
CLK2 18 输入 计数器 2 的时钟输入 OUT2 17 输出 计数器 2 的输出 GATE2 16 输入 计数器 2 的门控输入, CS 21 输入 片选信号,
RD 22 输入 读信号,低电平有效。 CS=0 , RD=0 时, 读取某个计数器当前的计数值。 WR 23 输入 写信号,低电平有效。 CS=0 、 WR=0 时, 写入控制字或计数器置初值。 A1 , A0 20 , 19 输入 A1 , A0 的组合对 3 个计数 和控制器寄存 器进行寻址。
6 . 1 . 38253 编程命令字和工作方式 1 .初始化编程的原则 ’ 8253 的控制字寄存器和 3 个计数器分别具有独立的编程地址,由控制字的内容确定使用的是哪个寄存器以及执行什么操作。因此 8253 在初始化编程时并没有严格的顺序规定,但是在编程时,必须遵守两条原则:
① 在对某个计数器设置韧始值之前,必须先写入控制字。 ② 在设计初始值时,要符合在控制字中规定的格式。 作定时器时初值的确定:当计数器装入初值后,在 GATE 端由低变高时,由 CLK脉冲触发开始,自动计数,当汁数变到 0 时,由OUT端发定时时间到信号。计数器的计数初值 n( 时间常数 )与定时时间 t及时钟周期 TCK之间的关系是 :
n=t
TCK
2 . 8253 的初始化编程 (1) 设置控制命令字:用来选择计数器,设置工作方式和计数格式。
D7D6 位 (SC1 , SC0) :用于选择计数器,根据这 2 位的编码来确定使用的是哪一个计数器。
D5D4(RW1 , RW0) :用于确定读/写的格式。 D3~ D1 位 (M2 , M1 , M0) :这三位用来指定计数器的工作
方式, 8253 的计数器共有 6 种工作方式。 D0 位 (BCD) :用来选择计数的类型,确定计数器是采用二进
制计数还是采用二~十进制计数。 (2) 设置初始值命令。 (3) 锁存命令:读计数器的值时必须先用锁存命令将当前计数
值在输出锁存器中锁定。否则,计数器的数值有可能正处在改变过程中。这样输入可能得到一个不确定的结果。
D7SC1
D6SC0
D5RW1
D4RW0
D3M2
D2M1
D1M0
D0BCD
00: 计数器0 01: 计数器
1 10: 计数器 2
11 :无定义
00 :锁存计数值 000 :方式 0 01 :读 /写低八位 001 :方式 1 10 :读 /写高八位 ×10 :方式 2 11 :先读 /写低八位 ×11 :方式 3 后读 /写高八位 100 :方式 4 101 :方式 5 8253 控制字的格式
00 :计数器 001 :计数器 110 :计数器 211 :无定义
0 :二进制1 : BCD码
6.1.4 8253 工作方式与工作时序 8253 有 6 种工作方式,对它们的操作都遵守以下 3条基本原则: (1)当控制字写入 8253 时,所有的控制逻辑电路自动复位,这
时输出端OUT 进入初始态。 (2)当初始值写入计数器以后,要经过一个时钟周期,减法计
数器才开始工作,时钟脉冲的下降沿使计数器进行减 1 计数。计数器的最大初始值是 0 ,用二进制计数时 0 相当于 216 ,用 BCD码时, 0 相当于 104 。
(3) 对于一般情况下,在时钟脉冲 CLK的上升沿时,采样门控信号。对门控信号 (GATE) 的触发方式是有具体规定的:
门控信号为电平触发的有:方式 0 ,方式 4 。 门控信号为上升沿触发的有:方式 1 ,方式 5 。 门控信号可为电平触发也可为上升沿触发的有:方式 2 ,方式
3 。 计数方式的有:方式 0 ,方式 1 ,方式 4 ,方式 5 定时方式的有:方式 2 ,方式 3 。
8253门控信号( GATE )的控制功能 方式 信号状态 低电平或负跳变 正跳变 高电平 0 禁止记数 —— 允许记数 1 —— 1. 初始化,启动记数 —— 2. 下一个脉冲输出变低 2 1.禁止记数 初始化,启动记数 允许记数 2. 输出变高 3 1.禁止记数 初始化,启动记数 允许记数 2. 输出变高 4 禁止记数 —— 允许记数 5 —— 初始化,启动记数 ——
1 .方式 0( 计数结束产生中断的计数器 ) 写入方式控制字后,输出端OUT 为低电平;写入计数常数后,开始计数。计数器减为 0之前,输出端OUT维持低电平。当计数值为 0 时,输出端OUT才变为高电平,向 CPU发出中断请求,直到 CPU 写入新的控制字或者写入新的计数值为止。
WRCW
n=4
CLK
GATE
OUT 14 3 2
方式 0 可由门控信号控制暂停, GATE为低电平时,计数器
暂停, GATE信号变高后,就接着计数。
WR
CLK
GATE
OUT
CW n=3
3 2 2 1
2 .方式 1( 可重复编程的单脉冲 )
设定工作方式和写入计数值后, OUT 输出高电平, GATE(触发信号 ) 变为高电平后, OUT 变为低电平,开始计数。当计数器减到 0 时, OUT才输出高电平。输出低电平期间,写入新计数值,不会影响原记数过程。只有第一次计数完, GATE 再来一个正跳变时才使用新的计数值计数
WR
CLK
GATE
OUT
CW n=3
3 2 1
记数结束开始记数 开始记数
n=5
5
若在第一次计数末完成之前, GATE又产生正跳变(即下一个脉冲信号又到来 ) 时,则从新的 GATE的上升沿以后,开始重新计数, OUT端输出的低电平保持不变, 2次的计数过程合在一起,因此使输出的负脉冲宽度加宽了
3 2 1 3 2 1
WRCW n=3
CLK
GATE
OUT
3 .方式 2 ( 分频器 )
写入方式 2 的控制字后, OUT 变高,设 GATE为高先到,计数器对 CLK计数,设计数初值为 N。当计数器计到 (N一 1) 个CLK信号时, OUT 输出变低,计数器的值为 l。最后一个 CLK信号输入后,计数器减到 0 , OUT回到高,计数器又自动从初值开始计数。因此OUT端在每 N个 CLK信号中输出一个宽度等于 CLK信号周期的负脉冲。
负脉冲的周期 =计数值 N×时钟 CLK的周期 T 。
WR
CLK
GATE
OUT
CW n=3
记数结束 重新记数
3 2 1 3 2 1
重新记数
计数过程中要求门控脉冲 GAT 置保持为高,当 GATE 为低电平时,则计数被中止暂停,在 GATE 再变高后,计数器又被置入初值,重新计数。
方式 2 输出负脉冲的周期为 CLK周期的 N倍,
频率是 1/N。称为分频器,可以用来给自动控制中的实时检测,实时控制提供时钟信号。
WR
CLK
GATE
OUT
CW n=3
3 22 2 3 2 1
重新记数
4 .方式 3( 方波发生器 )
采用方式 3 工作时,计数器输出为方波信号( GATE始终为高电平) 。当计数值为偶数时,在前N/ 2 计数期间, OUT 输出高电平,而后N/ 2 个计数期间, OUT 输出为低电平,对称方波。
4 2 4 2 4 2 4 2
CW n=4WR
CLK
GATE
OUT
记数值为 N奇数时的波形
当计数值为奇数时,在前( N+1 )/ 2 计数期间, OUT 输出高电平,而后( N-1 )/ 2 个计数期间, OUT 输出为低电平。
4 2 0 4 2 4 2 0
CW n=5WR
CLK
GATE
OUT
高电平宽度比低电平宽度大一个时钟周期的近似方波。实际上由于时钟周期很小,几乎没什么差别。
方式 3 计数时要求 GATE为高电平,当GATE为低电平时,停止计数。若OUT 为低电平, GATE变为低电平时, OUT 立即变高,计数器将重新装入初始值,重新计数。
4 2 4 2 4 2 4 2
CW n=4WR
CLK
GATE
OUT
2 2
5 .方式 4(软件触发选通 )
当方式 4 的控制字写入 8253后,计数器输出 OUT 为高电平。在写入计数初值后,而且 GATE为高电平时,开始计数,计数到0后输出一个时钟周期的低电平脉冲。门控信号 GATE = 1 时允许计数, GATE = 0禁止计数。
3 2 1 0
CW n=3WR
CLK
GATE
OUT
软件触发选通体现在当GATE为高电平时,写入计数初值后开始计数。
6 .方式 5[ 硬件触发选通 )
当写入方式 5 的控制字及计数常数后,输出 OUT 为高电平。
只有在门控信号 GATE 上升沿到来时才开始作减 1 计数,计数到达 0 时输出一个时钟周期宽度的负脉冲。
3 2 1 0 3
CW n=4WR
CLK
GATE
OUT
硬件触发选通: GATE 信号一般由硬件产生。
计数器一旦开始计数以后,将不受 GATE 信号变成低电平的影响,但如果 GATE 信号又产生了正跳变的话,则不论计数是否完成,又将给计数器置人初值,重新开始新一轮计数。
3 2 3 2 1 0
CW n=3WR
CLK
GATE
OUT 新计数
6.1.5 8253 初始化编程 要使用 8253 首先要对它进行初始化编程,编程时主要是写
入每个计数器的控制字和计数初值,初始化的步骤是: (1) 写入控制字:选择计数器和规定计数器的工作模式。 (2) 写入计数初值。若规定只写低 8位,高 8位自动置 0 。若规定写 16位,则先写低 8位,后写高 8位。
例:设置计数器 0 ,工作在方式 3 ,按二进制计数,计数值 200 。
计数器 0 先写低 8位,后写高 8位 方式 3 二进制计数 程序段如下:MOV AL, 36H ;控制字送 AL MOV DX, CRLP ;控制口地址送DX OUT DX, AL ;控制字送控制寄存器
0 0 1 1 011036H
控制字
设控制口地址为 CRLP 。
CPU 在读取任一通道的随机计数值时,需将当前的计数值锁存。实现锁存的方法有 2种:
(1) 利用 GATE 信号的变化使计数过程暂停。 (2)向 8253 输出一个通道控制字(D5D4= 00) ,命令 8253
计数器中的锁存器锁存。 其程序如下: MOV AL, 00H ; O 号通道, D5D4= 00 锁存命令。 MOV DX, CRLP ;控制口地址送DX OUT DX, AL ;控制字送控制口 IN AL, PRT0 ;读计数器 0 的低 8位 当前计数值 XCHG AL, AH ;低 8位当前计数值暂存 AH IN AL, PRT0 ;读高位当前计数值 XCHG AL, AH ;利用交换指令使计数值的低 8位送 AL, 高 8位送 AH
设 PRT0 为计数器 0 的口地址。
6.1.6 8253 编程应用举例 在一个实际的数据采集系统中,要求 5s钟采一个数,现场的主
时钟的振荡频率为 2. 5MHz。 分析:选择工作方式 3(方波发生器),连续工作对 2. 5M
的脉冲分频。 时钟周期 Tck= l/ 2. 5×106 计数初值 n=T/Tck=5÷(l / 2. 5×106 )=1.25×107 一个计数器最多的分频次数是 65536 ,是不够用的。采用两级
计数器,用计数器 0 的输出 OUT0 作为计数器 1 的输入 CLK1 。 计数器 0 的计数值为 50000; C350H计数器 1 的 250;FAH。
则有: 总的计数值 =50000×250=1.25 ×107 计数器 0 :方式 3(方波发生器)控制宇 36H 计数器 1 :方式 2(分频器)控制字 54H 设:控制口地址: CRPT; 0 号计数器: PRT0; 1 号计数器:
PRT1
实现上述过程的程序如下: MOV AL , 36H MOV DX, CRPT OUT DX, AL ; 0 号计数器方式 3 MOV AL , 50H MOV DX, PRT0 OUT DX, AL ;计数值低 8 位 MOV AL , C3H OUT DX, AL ;计数值高 8 位 MOV AL , 54H MOV DX, CRPT OUT DX, AL ; 1 号计数器方式 2 MOV AL , FAH MOV DX, PRT1 OUT DX, AL ;计数值低 8 位
8253
CLK0
GATE0
OUT0
CLK1
GATE0
OUT0
2.5MHZ
+5V
+5V
5S脉冲
6.2 并行外围接口 8255A 的结构与编程 6.2.1 并行通信的简单原理 中央处理器 (CPU)和外部设备进行数据传输,都采用接口电路和 CPU相连。
接口方式:串行通信接口和并行通信接口。 状态端口:状态信息表示外设当前所处的工作状态。 接口: 数据端口:数据信息进行数据传输。 地址端口:控制信息控制外设接口的工作方式等。 典型的并行接口:有一个控制寄存器, CPU 对外设的操作命
令都寄存在控制寄存器中。一个状态寄存器,主要是用来提供外设的各种状态位,以供 CPU 来查询。另外在并行接口中还设置了输入缓冲寄存器和输出缓冲寄存器,缓冲器的作用是用来暂存数据。主要是用来匹配 CPU和外设的数据处理速度的。
控制寄存器
状态寄存器
输入缓冲寄存器
输出缓冲寄存器
输入设备
输出设备
地址译码器 CS
A0
A1
数据总线
准备好输出准备好输入
中断请求复位RD
WR
地址总线M/IO
输入数据
输入数据准备好输入回答
输出数据
输出数据准备好
输出回答
并行接口原理结构图
CP
U
数据输入: ( 1)外设先使状态线“输入数据准备好”为高电平(有效); ( 2)数据接收到输入缓冲寄存器中; ( 3)把“输入回答”信号置成高电平(有效),并发给外设; (4)外设接到回答信号后,将撤消“输入数据准备好”的信号。 ( 5)当接口收到数据后,会在状态寄存器中设置“准备好输
入”状态位,以便 CPU 对其进行查询或中断输入。 数据输出: ( 1)当外设从接口接收到一个数据后,接口的输出缓冲寄存器“空”,使状态寄存器“输出数据准备好”状态位为高电平有效;
( 2) CPU 将输出数据送到接口的输出缓冲寄存器; ( 3)接口向外设发送一个启动信号,启动外设接收数据; (4)外设接收到数据后,向接口回送一个“输出回答”信号; ( 5)接口电路收到该信号后,自动将接口状态寄存器中的“准
备好输出”状态位重新置为高电平“ l”。
6.2.2 8255A 结构框图及功能部件说明 8255A 是为 Intel 公司的微处理机配套的通用可编程并行接口芯片,可编程的 I/ O引脚有 24条,分为 2组,每组 12条,并有三种工作方式。
芯片的主要技术特性是: ①输入、输出电平与 TTL电平完全兼容; ②改善了时序特性; ③直接位的置 1/置 0 功能,便于实现控制性接口
使用; ④单一的 +5V电源。 8255A 的内部结构:
端口A( 8)
端口 C上半部( 4)
端口 C下半部( 4)
端口B( 8)B组
控制
A组控制
数据总线
缓冲器
读 / 写控制逻辑
DB
RDWRA0A1
REST
CS
8位内部
数据总线
PA7-PA0
PC7-PC4
PC3-PC0
PB7-PB0
CPU接口内部逻辑 外设接口
8253A内部结构
1.三个独立的数据端口 ①A端口: A端口对应一个 8位的数据输入锁存器和一个 8位
的数据输出锁存和缓冲器。用于双向的数据传输,有锁存功能。 ②B端口和 C端口:这两个端口分别是由一个 8位的数据输入缓冲器和一个 8位的数据输出锁存和缓冲器组成。输出有锁存功能;输入无锁存。
2 。 A组控制电路和B组控制电路 A组控制电路控制 A端口和 C端口的高 4 位 (PC4一 PC7) 。 B组控制电路控制 B端口和 C端口的低 4 位 (PC0 一 PC3) 。 控制电路的作用是:接收 CPU 输出的方式控制命令字;接收
来自读/写控制逻辑电路的读/写命令;决定 A组和B组的工作方式和读/写操作。
3.读写控制逻辑电路 完成内部三个数据端口的译码工作,由 CPU 的地址总线 Al 、
AO , 8255A 的片选信号 CS和 RD、WR信号组合后产生控制命令,并将产生的控制命令传送给 A组和B组的控制电路,从而完成对数据信息的传输控制。
8255A 的控制信号与执行的操作之间的对应表 CS RD WR A1A0 执行的操作 0 0 1 00 读 A端口 (A端口数据→数据总线 ) 0 1 0 00 写 A端口 (A端口←数据总线数据 ) 0 0 1 01 读 B端口 (B端口数据→数据总线 ) 0 1 0 01 写 B端口 (B端口←数据总线数据 ) 0 0 1 10 读 C端口 (C端口数据→数据总线 ) 0 1 0 10 写 C端口 (C端口←数据总线数据 ) 0 1 0 11 当 D7= l时,对 8255A 写入控制字 当 D7= O 时,对 C端口置位/复位 0 0 1 11 非法的信号组合 0 1 1 ** 数据线D7~D0 进入高阻状态 1 * * ** 未选择
6.2.3 8255A引脚信号定义 8255A 是 40条引脚双列直插式芯片。引脚按连接功能分为 2组。 1.与 CPU相连的引脚 RESET :复位信号,高电平有效。复位后把 8255A内部的所
有寄存器都清“ 0”,并将三个数据端口自动设置为输入端口。 CS:片选信号,低电平有效。只有当芯片被选中才能进行读、
写操作。 RD:读信号,低电平有效。 WR:写信号,低电乎有效。 A1A0 :端口译码信号。 00选中 A端口; 01选中 B端口; 10选中 C端口; 11选中控制端口。 D7~D0 :双向 8位三态数据线,与系统的数据总线相连接。 2.和外设端相连的引脚 PA7~ PA0 : A端口的输入/输出引脚; PB7~ PB0 : B端口的输入/输出引脚; PC7~ PC0 : C端口的输入/输出引脚;
6.2.4 8255A 的控制字 8255A 的控制字:方式选择控制字和端口 C 置 1/置 0 控制宇
1. 1.方式选择控制字
方式选择控制字 标识位总为 1
D7 D6 D5 D4 D3 D2 D1 D0
0 0 :方式 00 1 :方式 11﹡:方式 2
PA口 1 :输入0 :输出
PC7~ PC4
1 :输入0 :输出
A 组 控 制
0 :方式 01 :方式 1
PB口 1 :输入0 :输出
PC3~ PC0
1 :输入0 :输出
B 组 控 制
如果要求 8255A 的 A端口作输入, B端口和 C端口作输出, A组工作在方式 0 , B组工作在方式 l。
94H 标志位 A 方式 0 B方式 1 A口输入 B口输出 C口输出 C口输出 相应的程序段: MOV AL,94H ;方式选择控制字送 AL。 MOV DX, Portctr ;控制口地址 Portctr 送 DX OUT DX, AL ;方式选择控制字输出给 8255 入的 ;控制端口,完成方式选择
1 0 0 1 0 1 0 0 控制字为 94H
Portctr为控制口的地址
2.端口 C 置 1/置 0 控制字 8255A 在和 CPU传输数据的过程中,经常将 C端口的某几位作为控制位或状态位来使用,配合 A端口或B端口的工作。
初始化时, C端口置 l /置 0 控制字可以单独设置到 C端口的某一位为 0或某一位为 1 ,控制字的 D7位为“ 0”是 C端口置 l /置 0 控制字中的标识位。
D6~D4位可为任意值,不影响操作。 D3~D1位用来决定对 C端口 8位中的哪一位进行操作。 Do位用来决定对所选择的位是置 l 还是置 0 。
C端口位选择 C端口置位 000 : PC0 001 : PC1 置 1/ 置 0选择 标识位 010 : PC2 011 : PC3 0 :置 0 总为 0 100 : PC4 101 : PC5 1 :置 1 110 : PC6 111 : PC7
D7 D6 D5 D4 D3 D2 D1 D0
任意值 一般为 0
例如:要将 C端口的 PC3 置 0 , PC7置 l,可用下列程序段实现。
06H 0FH
MOV AL , 06H ; PC3 置 0 控制字送 AL
MOX DX , PortCtr ; 控制口地址 PortCtr送 DX OUT DX , AL ;对 PC3 完成置 0 操作 MOV AL , 0FH ; PC7 置 1 控制字送 AL
OUT DX , AL ;对 PC7完成置 1 操作
0 0 0 0 0 1 1 0
PC3置0
0 0 0 0 1 1 1 1
PC7置 1
6.2.5 8255A 的工作方式 8255A 有 3种工作方式:方式 0 ,方式 l 和方式 2 。 A端口: 3种方式中的任一种; B端口:方式 0和方式 1; C瑞口:通常作为控制信号使用,配合 A端口和B端口的工作。
1. 方式 0 :基本的输入输出方式 方式 0 的基本定义如下: 2 个 8位的端口和 2 个 4位的端口。都可以作为输入或输出。输出可以被锁存。输入不能锁存。
输入时序对各信号的要求是: ①地址信号要领先于 RD信号。 RD信号有效到数据稳定的最长时间为 250ns ;
②读信号有效到数据稳定的时间内,应由输入设备解决数据锁存问题。
RD
输入数据 数据有效
数据有效
CS、 A1、 A
0
D7~ D0
tRR
tIR tHR
tAR
tRD
tRA
tDF
方式 0 输入时序
输出时序对各信号的要求是: ①地址信号必须在写信号WR之前有效,且维持到WR撤消
后的 20ns以后。 ②写脉冲WR的宽度最小要求是 400ns。 ③数据必须在写信号之前 100ns时间出现在数据总线上;写
信号撤消后,数据的最小保持时间是 30ns。
WR tWW
数据有效
方式 0 输出时序
CS、 A1、A0
数据有效D7~ D0
输出数据
2.方式 1 :选通的输入/输出方式 在这种方式下,当 A端口和B端口进行输入输出时,必须利
用 C端口提供的选通和应答信号。 方式 1 的基本定义如下:分成 2组 (A组和B组 ) 。每组包含
一个 8位的数据端口和 1 个 4 位的控制/数据端口。 8位的数据端口既可以作为输入也可以作输出,输入和输出都
可以被锁存。 4 位的控制/数据端口用于传送 8位数据端口的控制和状态信息。
(1)选通的输入方式 选通输入方式 : 规定是 PC3~ PC5 分配给 A端口, PC0~ PC
2 分配给 B端口。 C端口剩下的 2位 PC6 , PC7可’作为简单的输入/输出线使用,控制字的 D3位为 l时输入;D3位为 0 时输出。
A组工作于方式 1 输入的控制字 B组工作于方式 1 输入的控制字
1 0 1 1 1/0 ××× 1 × × 1×× 1 ×
方式1 端口 A 输入
PC7、 PC
61 输入, 0 输出
方式 1端口 B 输入
INTEA
INTEB
PC4
PC5
PC3
PC6、 PC
7
PA7~PA0
RDI/O
INTRA
IBFA
STBA
8
PC2
PC1
PC0
PB7~ PB0 8
STBB
IBFB
INTRB
RD
方式 1 输入时 C端口对 A、 B端口的控制
①外设数据送到 数据线上时,发出 选通输入信号 STB (≥ 500ns )锁存 数据到输入寄存器。 STB信号变低后 (≤ 300ns )使 输入缓冲器满信号 IBF变为高电平。 ②STB结束后,最 多经过 300ns时间向 CPU 发出中断请求信号( INTR变高)。 ③CPU 响应中断后发出读信号 RD,将数据读入到 CPU 中,读信号有效
( 低电平 ) 后,最多经过 400ns时间就清除中断请求,使中断请求信号变低。 ④当读信号结束后,才使输入缓冲器满信号 IBF变低,通知外设可以输入新
的数据。
STB
IBF
INTR
RD
从外设来的输入数据
① ②
③
④
方式 1选通输入时序
方式 l 选通输入方式时,各控制信号的意义如下: STB:选通输入信号,低电平有效。 A组方式控制字中对应 PC4 ;B组方式控制字中对应 PC2 。宽度最小是 500ns。 IBF:输入缓冲器满信号,高电平有效。 A组方式控制字中对应 PC5;B组方式控制字中对应 PC1 。 STB变低后 300ns时间内变有效的高电平。在 RD信号撤消后的 300ns时间内 IBF信号才撤消。保证数据传输的可靠性。
INTR:中断请求信号,高电平有效, A组方式控制字中对应PC3;B组方式控制字中对应 PC0 。 STB信号撤销后最多 300ns时间内, IBF信号变为高电平有效。
INTE :中断允许信号、高电平有效。 INTE 的状态是用软件通过由 C端口置 1/置 0 控制字来控制的。
(2)选通的输出方式 方式 1 在选通输出情况下对应的控制信号: PC3 , PC6 , PC7分配给 A端口; PC2 , PC1 , PC 0 分配给 B端口。 PC4, PC5 可作为简单的输入/输出线使用,当控制字的D3位为 1 时 PC4, PC5 作输入;当控制字的 D3位为 0 时 PC4,PC5 作输出。
1 0 1 0 1/0 × × × 1 × × × × ×01
方式 1 端口 A 输出 方式 1 端口 B 输出
INTEA INTEBPC6
PC7
PC2
PC1
PC3 PC0
PA7~ PA0 PB7~PB0
WR WRPC4~ PC5
ACKA ACKB
OBFA OBFB
INTRA INTRB
8255A 方式 1 输出时序 8255A工作在方式 1 输出选通方式一般是采用 中断方式。 CPU 响应中断以后, 向 8255A 输出数据,写 信号WR出现;经过 850ns 写信号WR撤消,其上升 沿一方面撤消中断请求 信号 INTR①,另一方面使 OBF信号变为有效的低电平②,通知外设可以接收数据。 当外设收到数据后,便发出一个 ACK信号,同时使 OBF变为无效③,表示
数据已经取走,当前缓冲器空。 ACK信号结束时使 INTR信号变为有效的高电平④,向 CPU 发出中断请求信 号,从而开始新的数据输出过程。 OBF:输出缓冲器满信号,低电平有效。 INTR:中断请求信号,高电平有效。 ACK:数据接收应答信号,低电平有效。 INTE :中断允许信号,高电平有效。
WR
OBF
INTR
ACK
送外设的数据 数据有效
①
②
③ ④
3.方式 2 :带选通的双向传输方式 双向的传输方式:可以向外设发送数据;又可以接收从外设发
来的数据 方式 2 的基本定义如下:只能适用于 A端口。一个 8位的双向端口 (A端口 )和 1 个 5位的控制端口 (C端口 ) 。
1 1 × × ×
端口 A方式 2
端口B方式设定
PC2~PC01 输入, 0 输出
PC3
PC7
PC6
PC4
PC5INTE2
INTE1
PC3~ PC0
INTRA
PA7~ PA0
OBFA
ACKA
STBA
IBFA
3 I/O
WR
RD
方式 2 时各控制信号: STB:选通信号,低电平有效。
IBF:输入缓冲器满信号,高电平有效。OBF:输出缓冲器满信号,低电平有效。 INTR:中断请求信号,高电平有效。
ACK:数据接收应答信号,低电平有效。 INTEI :输出中断允许信号。
6.2.5 8255A 编程应用举例 例:采用查询方式传送数据, A端口作为 8位数据的输出口,工作在方
式 1 ,输出方式。 C端口作为状态口和控制口使用,打印机有 3 个控制状态信号线。 BUSY表示打印机是否为“忙”状态,高电平有效。 STB选通信号,低电平有效。 ACK是打印机对主机的应答信号,当打印机接收完字符后发出该信号。
当 STB信号有效时将 BUSY信号置为高电平, ACK有效使 BUSY置为低电平.图中的单稳定用来展宽脉冲,以满足打印机对 STB信号要求的时间宽度。
D7~ D0 PA7~PA0
REST PC4
RD PC6
WR ( ACK)CS PC7
A0
A1 8255A
D7~D0
BUSY
ACK
DATASTB单稳
数据总线
复位
IOR
IOW
地址译码
AEN
地址总线
查询方式接线图打印机( OB
F)
A端口地址用 PRA表示, C端口地址用 PRC表示,控制口地址用 PORC表示。输出 500 个字符程序段如下:
MOV AL , 08AH ; A端口方式 1 输出, PC4 输入 MOV DX , PORC ;控制口地址送 DX OUT DX , AL ;输出控制字到控制口 MOV CX , 500 ;传送字符数 500 个 MOV DI , BUF ;送字符缓冲区首地址 LOP1 : MOV AL , [DI] ;从字符缓冲区取字符 MOV DX , PRA ; A端口地址送 DX
OUT DX , AL ;从 A端口输出—个字符 MOV DX , PRC ; C端口地址送 DX
NEXT : IN AL , DX ;从 C端口渎入打印机状态 TEST AL , 10H ;测试 BUSY 信号 JNZ NEXT ;如果打印机忙,继续测试,等待 INC DI ;数据缓冲区地址加 1
LOOP LOP1 ;继续输出下一个字符
中断方式传送数据电路的连接图
CFU 控制 PC4产生选通脉冲, PC4作输出用,这里 OBF没有用。 PC3 作为中断请求 INTR,由 ACK信号上升沿产生,使用 IRQ3 ,中断向量 OBH。
D7~ D0
ACK
DATASTB
打印机
D7~ D0
REST PC6
PA7~PA0
RD
( ACK)
WRPC4
CS
PC3
( INTR)
A0
A1
地址译码
地址总线
数据总线
复位
IOR
IOW
INTR 去 CPU
8255A
MOV AL , 0A0H MOV DX , PROC OUT DX , AL MOV AL , 09H ;置 PC4= 1 ,令 DATASTB= 1选通无效 CLI ;关中断 MOV AH , 35H MOV AL , OBH INT 21H PUSH ES PUSH BX PUSH DS MOV DX , OFFSET INTSERV MOV AX , SEG INTSERV MOV DS , AX MOV AL , 0BH MOV AH , 25H INT 21H
取中断号 0BH的中断向量。
保存 0BH 的中断向量。
INTSERV 是中断服务程序的入口地址OFFSET INSERV ;取偏移量,
SEG INSERV ;取段基值,通过功能号 25H 的 DOS 功能调用设置
中断号 0BH 的中断矢量。
1 0 1 0 0 0 0 0 0AH
标志位 方式 1 输出 PC4 输出
A端口方式 1输出方式,PC4 作输出
0 0 0 0 1 0 0 1 09H
PC4 置 0标志位
POP DS MOV AL , 0DH MOV DX , PROC OUT DX , AL STI ;开中断
CLI POP DX ;将开始压线的 ES、 BX的内容弹入 DS、 DX
中 POP DS MOV AL , 0BH MOV AH , 25H INT 21H ;恢复 0BH原中断向量 STI
0 0 0 0 1 1 0 1 0DH
标志位 PC6置 1
使 PC6=1INTE 为 1允许中断
C口置 1/0
中断服务程序 INSERV : PUSHAD ;寄存器压栈 MOV AL , CL ;打印字符送 AL MOV DX , PORTA OUT DX , AL ;打印字符送 A端口 MOV AL , 00H MOV DX , PORTCTR OUT DX , AL ;置 PC4=0 产生选通信号, ;使 DATASTB为低电平 INC AL OUT DX , AL ;使 PC4= 1 ,撤消选通信号 MOV DX , 20H OUT DX , 20H ;发 EOI 命令 POPAD IRET
6. 3 串行通信接口 8251A 的结构与编程 6.3.1 串行通信的基本概念与术语 串行通信:是一位一位地进行数据传输。串行通信具有传输线少,成本低等
优点,适合远距离传送。缺点是速度慢,若并行传送n位数据需时间 T ,则串行传送的时间最少为 nT 。
扩展寄存器
状态寄存器
数据输入寄存器
输出缓冲寄存器
串入并出
并入串出
CS
C/D
接收时钟
发送时钟
串行数据入
串行数据出
地址译码
控制
数据总线RXRDY
TXRDY复位RD
WR
M/IO
地址总线
串行通信接口
CPU
串行接口部件的典型结构 :由控制寄存器、状态寄存器、数据输入寄存器和数据输出寄存器组成
输入 :串行数据经过串行输入并行输出电路转换成并行数据; 输出:并行数据经过并行输入串行输出电路转换成串行数据。
1.串行通信中使用的术语 (1) 发送时钟和接收时钟。二进制数据序列在传输线上是以数
字信号形式出现,即高电平表示二进制数 1 ,低电平表示二进制数 0 。而且每一位持续的时间是固定的,在发送时是发送时钟作为数据位的划分界限,在接收时是以接收时钟作为数据位的检测。
并行输入串行输出
串行输入并行输出
8位、 16位、
32位或更多
来自 CPU
1位输出 1位输入
8位、 16位、
32位或更多
送往 CPU
串行、并行,输入、输出示意图
发送时钟:并行的数据序列送移位寄存器,由发送时钟触发进行移位输出,数据位的时间间隔由钟周期来划分。
接收时钟:接收时钟作为移位寄存器的触发脉冲将串行数据逐位打入移位寄存器,转换成并行数据。
2 .DTE和DCE 数据终端设备(DTE) :是对属于用户所有联网设备和工作站
的统称。 DCE 是对网络设备的统称,该设备为用户设备提供人网的连接点。自动呼叫/应答设备,调制解调和其他一些中间设备均属DCE 。
信道:是传输信息所经过的路径,是连接 2 个 DTE 的线路。它包括传输介质和有关的中间设备。
DTE数据终端设备
DTE数据终端设备
DCE DCE
信道
2. 串行通信中的工作方式 全双工:相互通信的双方都可以同时进行发送信号和接收信号。
(手机的工作方式即是全双工方式。) 半双工:在某一个时刻,只能进行发送,或只能进行接收。发送和接收不能同时进行,这种传输方式称为半双工。(常见的步话机就是半双工方式。 )
单工方式:通信的一端为发送器.另—端为接收器,即形成单向连接。数据按照一个固定的方向传送(也称广播方式)。
发送器接收器
发送器接收器
发送器接收器
发送器接收器
全双工方式 半双工方式
发送器 接收器单工方式
A站点 B站点 A站点 B站点
A站点 B站点
3.同步通信和异步通信方式 同步通信 :由一个统一的时钟控制发送方和接收方,若干字符组成一个信息组。开始为 1—2 个同步字符 ( 常称为帧头 ) ,后面跟着的是 5~ 8位的字符数据。
同步传输时,要求必须连续传送字符,每个字符的位数要相同,中间不允许有间隔;若没有字符时,也要发送专用的“空闲”字符或者是同步字符。
同步字符 同步字符 字符 字符 字符
同步通信字符格式
异步通信:字符是一帧一帧的传送,每—帧字符的传送靠起始位来同步。
异步通信字符格式: 一位起始位“ 0”(低电平); 5~ 8位的数据位; 1位奇偶校验位(也可能没有);以及 1、 1.5、 2位的停止位“ 1”(高电平)。
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/00 1 1 1 1
1/0 1/0
起始位
7位数据代码
低位
奇偶校验
高位停止停止
空闲位 下一个字符
0
停止位
停止位或空闲位的
下降沿指出下一
个字符的开始。异步通信字符格式
4 .通信中必须遵循的规定 (1) 字符格式的规定。
(2)比特率、波特率 比特率:每秒传输的二进制数的位数 bit(位 /s)。 波特率= 1 /二进制位的持续时间 发送时钟与波特率的关系是: (n可以是 1 , 16 , 32 , 64) 。 n为波特率因子,是传输一位
二进制数时所用的时钟周期数。
时钟频率=n×波特率
同步: 1~ 2 个同步字符,后面跟着的是 5~ 8 位的字符数据。
异步:一位起始位“ 0”,5~ 8位的数据位, 1位奇偶校验位, 1、 1.5、 2位
的停止位“ 1” 。
5.信号的调制与解调 采用调制解调器 (modem) 利用电话线来实现远距离的信息传
输。 调制器:把数字信号转换为模拟信号。 解调器:把模拟信号转换为数字信号。
调制解调器 (modom) 是完成调制和解调的功能。 发送时:调制器把数字信号转换为模拟信号(图中是调频信号 即频率高的信号代表 1 ,频率低的信号代表 0)。 接收时:解调器把模拟信号转换为数字信号。
计算机 MODEM MODEM 计算机
1 01 01 1 0 1 0 1 0 1 1 0
1 0 1 0
模拟信号
6.3.2 8251A 结构框图及功能部件说明 1. 8251A芯片基本性能 8251A 是可编程的串行通信接口芯片,它的基本性能如下: (1) 可工作在同步方式(波特率为 0 ~ 64k ),也可工作在
异步方式(波特率为 0 ~ 19.2k)。 (2) 同步方式时,每个字符可定义为 5 ~ 8位。两种方法实现
同步,由内部自功检测同步字符或由外部给出同步信号。允许同步方式下增加奇/偶校验位进行校验。
(3) 在异步方式下,每个字符可定义为 5 ~ 8位,用 1位作奇偶校验。时钟速率可用软件定义为波特率的 l, 16或 64倍。另外, 8251A 在异步方式下能自动为每个被输出的数据增加 1个起始位,并能根据软件编程为每个输出数据设置 1位, 1. 5佐或 2位停止位。
(4) 能进行出错检测,带有奇偶,溢出和帧错误等检测电路。用户可通过输入状态寄存器的内容进行查询。
8251A 的内部结构框图
数据总线缓冲器、 读/写控制逻辑(见表) 发送缓冲器、 发送控制器、 8251A 的基本组成 接收缓冲器、 接收控制器、 调制/解调控制逻辑、 同步字符寄存器 控制各种操作的方式寄存器
CS RD WR C/D 执行的操作 0 0 1 0 CPU 由 8251A 输入数据 0 1 0 0 CPU向 8251A 输出数据 0 0 1 1 CPU 读取 8251A 的状态
0 1 0 1 CPU向 8251A 写入控制命令
6.3.3 8251A引脚信号定义 1. 8251A 与 CPU 的接口信号 (1)双向的数据信号线D7~D0 。 (2)片选信号 CS,低电平有效。 (3) 读/写控制信号: 读信号 RD :低电平有效。 写信号WR :低电平有效。 控制/数据信号 C/D : 高电平:系统处理的是控制信息或状态信息; 低电平:写入的是数据。 复位信号 RESET :高电平有效。 主时钟信号 CLK:用于芯片内部的定时
(4) 与发送有关的联络信号。 发送器准备好信号 TXRDY(输入):高电平有效。 TxRDY=输出缓冲器空 · CTS · TSEN 发送器空信号 TxEMPTY:高电平有效。 发送时钟信号 TXC :控制 8251A 发送器发送字符的速度。 (5) 与接收有关的联络信号 接收器准备好信号 RxRDY(输出):高电平有效。 同步检测/断缺检测信号 SYNDET/BRKDET( 输入/输出 ) :
高电平有效。 外同步方式时, SYNDET 作为输入端。当外部检测到同步字符
以后,输入一个高电平信号,表示已达到同步。 异步方式下 BRKDET 实现断缺检测功能,当连续收到 8 个 0
信号时,表示当前处于数据断缺状态。 接收器时钟信号 RXC :控制 8251A接收字符的速度。
2. 8251A 与外部装置之间的接口信号 连接的信号可分为数据信号和收发联络信号 2类。 (1) 数据信号 TxD( 输出 ) :发送数据信号端。 RxD( 输入 ) :接收数据信号端。 (2) 发送数据时的联结信号 RTS( 输出 ) :请求发送信号,低电平有效。该信号有效时,表示 CPU请求通过 8251A向调制解调器发送数据。
CTS( 输人 ) :发送允许信号,低电平有效。该信号有效时, 8251A 才能执行发送操作。
(3)接收数据时的联络信号 DTR( 输出 ) :数据终端准备好信号,低电平有效。 CPU 可以通
过 8251A从调制解调器接收数据。 DSR( 输入 ) :数据装置准备好信号,低电平有效。
RS-232C收发器 异
步调制解调器
时钟源
地址译码
AEN
地址总线
D7~ D0
IOR
IOW
A0
D7~D0RD
WR
C/D
TXD
RXD
DTR
DSR
CTS
RTS
TXC
RXC
BB
BA
AB
CD
CC
CB
CA
8251A
8251A 异步通信方式
RS-232C收发器 异
步调制解调器
地址译码
AEN
地址总线
D7~ D0
IOR
IOW
A0
D7~D0RD
WR
C/D
TXD
RXD
DTR
DSR
CTS
RTS
TXC
RXC
BB
BA
AB
CD
CC
CB
CA
8251A
8251A 同步通信方式
DB
6.3.5 8251A 的方式字、命令字的设定 1.方式寄存器 方式寄存器是在初始化时,用来写入方式选择字的。 同步方式:最低 2位为“ 00”; 异步方式:最低 2位不全是 0 。 2.控制寄存器 写入了方式选择字后,接着要写入的是命令字,由命令字来规
定 8251A 的工作状态,才能启动串行通信开始工作或置位。 控制寄存器的格式 3.状态寄存器 状态寄存器是反映 8251A内部工作状态的寄存器,只能读出,
不能写入, CPU 可用 IN指令来读取状态寄存器的内容。 状态寄存器格式
D0
0D7
SCSD6
ESDD5
EPD4
PEN
D3
L2
D2
L1
D1
0
同步字符数0 : 2 个字符 1 : 1 个
字符
同步方式0 :内同步, SYNDET 为输出1 :外同步, SYNDET 为输入
检验类型 检验设置 0 :奇校验 0 :无校验1 :偶校验 1 :有校验
数据位数00 : 5位 01 : 6位10 : 7位 11 : 8位
全 0 为同步方式否则为异步方式
8251A 同步方式的方式字
要求外同步通信接口,数据位 8位, 2 个同步字符,偶校验,其方式选择字应为十六进制的 7CH(01111100B= 7CH) 。
D7
S2
D6
S1
D1
B2
D2
L1
D3
L2
D4
PEND5
EP
D0
B1
8251A 异步方式的方式字
停止位个数00 :无定义 01 : 1 个 10 : 1 个半 11 : 2 个
检验类型0 :奇校验1 :偶校验
校验设置0 :无校验1 :有校验
数据位数00 : 5位 ; 01 : 6位10 : 7位 ; 11 : 8位
波特率因子00 :同步模式 01 :波特率因子为 1
10 :波特率因子为 1611 :波特率因子为 64
8251A芯片作为异步通信,波特率为 64,字符长度 8位,奇校验, 2 个停止位的方式选择字应为 0DFH
(11011111B= 0DFH) 。
D0
TXEND7
EHD6
IRD5
RTSD4
ERD3
SBRK
D2
RXEND1
DTR
置“ 1” 为搜索同步字符置“ 1” 后
8251A内部复位
清除错误标志置“ 1” 后清
PE、 OE、 FE
数据终端就绪置“ 1” 后 DT
R 输出 0
8251A扩展寄存器格式
请求发送置“ 1” 后RTS 输出
0
送终止符置“ 1” 后TXD 输出 0
1 :接收允许0 :屏蔽
1 :发送允许0 :屏蔽
8251A 的状态寄存器
D7
DSRD6
S/BDETD5
FED4
OE
D1
RXRDYD3
PE
D2
TXEMPD0
TXRDY
后映同步方式 SYNDE/异步方式 BRKDET状态
帧格式出错标志,
出错为“ 1”
溢出出错标志,出错为“ 1” 。
奇偶校验出错标志
出错为“ 1”
发送器空为“ 1”
接收器就绪为
“1”
发送器就绪为“ 1”
数据设备就绪后为“ 1”
6.3.6 8251A 编程应用举例 8251A 初始化编程 1.同步方式下的初始化 要求 2 个同步字符,外同步, 奇校验,每个字符 8位,方式选 择字应是: 01011100B= 5CH。 工作状态要求:出错标志复位。 启动发送器和接收器,控制字 应是: 10010111B= B7H。第一 个同步字符为 A5H,第二个同步 字符为 27H(2 个同步字符也可是 相同的)。
系统复位
输入方式指令
异步方式?
输入第一个同步字符
一个同步字符?
输入第二个同步字符
输入命令指令
内部复位?
传送数据
完成?N
Y
Y
Y
N
N
Y
初始化时,先用内部复位命令将 40H送人 8251A奇地址,复位后重新写入奇地址(设 PortE 为控制寄存器的奇地址。)
MOV AL , 40H OUT PortE , AL MOV AL , 5CH OUT PortE , AL MOV AL , 0A5H OUT PortE , AL MOV AL , 0E7H OUT PortE , AL MOX AL , 0B7H OUT PortE , AL
40H 写入奇地址PortE ,使 8251A复位。
设置方式选择字
写入第一个同步字符
写入第二个同步字符
设置控制源,启动发送器和接收器
2.异步方式下的初始化 例如: 要求异步方式下,波特率因子 16 , 8位数据, l位停止位,方式选择字应是 0101110B= 5DH。在异步方式下输入 50 个字符,采用查询状态字的方法,在程序中需对状态寄存器的 RxRDY位进行测试,查询 8251A 是否已经从外设接收了一个字符,如果收到, Dl 位 RxRDY变为有效的“ 1”。 CPU 用输入指令从偶地址口取回数据送入内存缓冲区中,当 CPU 读取字符后, RxRDY自动复位,变为“ 0”。除检测 RxRDY位以外,还要检测 D3位 (PE) , D4位 (OE) , D5位 (FE) 是否出错,如果出错后转错误处理程序,工作状态的要求同上边的同步方式相同。
MOV AL , 40H
OUT PORTE , AL ;复位 8251A
MOV AL , 5DH
OUT PORTE , AL ;写入异步方式选择字 MOV AL , 37H
OUT PORTE , AL ;控制字写入 MOV DI , 0
MOV CX , 32H ;传送字符个数 INPUT : IN AL , PORTE ;读取状态字 TEST AL , 02H ;测试状态字第二位 RXRDY
JZ INPUT ;未收到字符,重新读取 IN AL , PORTO ; RXRDY 有效,读数据 LEA DX , BUFFER ;缓冲区首址送 DX
MOV [DX+DI] , AL ;字符送入缓冲区 INC DI
IN AL , PORTE ;再度状态字 TEST AL , 38H ;测试有无三种错误 JNZ ERROR ;有错转错误处理 LOOP INPUT ;无错,不够 50 个字符,转 INPUT JMP EXIT ;够 50 个字符,转结束。 ERROR : EXIT :