外设要求:简单、数据变化缓慢。
外设被认为始终处于就绪状态。始终准备好数据或者始终准备好接收数据。
IN AL,数据端口
数据端口的地址通过CPU的地址总线送到地址译码器进行译码,同时该指令进行的是数据的输入。
∴
R
D
‾
\overline{RD}
RD一定是低电平
该指令访问的是I/O端口
∴M/
I
O
‾
\overline{IO}
IO也会输出低电平
通过这3个控制信号就会使得IO端口中的三态缓冲器被选通。
从而外设的数据就可以通过三态缓冲器送到数据总线从而送到内部的AL寄存器中。
OUT 数据端口,AL
使用该指令时,数据端口的地址会通过地址总线到IO接口中的地址译码器经过译码,产生一个高电平信号。
而且OUT指令也是访问IO端口的
∴M/
I
O
‾
\overline{IO}
IO会输出低电平
又∵该指令是进行数据的输出写操作
∴
W
R
‾
\overline{WR}
WR为低电平
有了这三个控制信号
就可使得输出的锁存器,片选段为低电平。
那么CPU通过数据总线送出的数据通过锁存器之后,送到外设去。
无条件程序控制方式
外设采用的是一种按键
IN AL,INPORT
指该指令把INPORT的端口地址进行地址译码之后产生
C
S
‾
\overline{CS}
CS的低电平。
而且该指令会让
R
D
‾
\overline{RD}
RD、M/
I
O
‾
\overline{IO}
IO为低电平。
由此就可以给74LS244一个选通信号
读入的数据就是8个按键的状态信息
。
这个按键按下与否的判断:
先看K0:
①当K0按下时,A1这个引脚送入的信号送入D0端。
②当K0按键松开的时候,D0=1(高电平)
而D0引脚的信号会通过数据总线送到AL中,得到的是AL的D0的这个值。
∴TEST AL,01H
JNZ K1
如果不为0,则D0=1,那么说明我们的按键没有按下,就跳到K1去判断第2个按键的指令。
如果为0,则D0=0,那么说明我们的按键按下,处理K0的程序。
程序查询方式
特点:利用查询方式进行数据输入输出的过程中,CPU将大量时间耗费在读取和检测外设状态上,真正用于传送数据的时间很少,大大降低了CPU的效率。
查询式输入:
在输入装置
输入数据时,首先把数据送到了IO端口的锁存器。
然后给到锁存器一个选通信号,同时这个选通信号也送到了D触发器
D触发器输出端为高电平,是我们的状态信息。这个状态信息并没有通过缓冲器送出去。
只有CPU执行IN AL,状态端口
,这条指令的时候,会把状态端口的地址送到地址译码器,而且会把M/
I
O
‾
\overline{IO}
IO和
R
D
‾
\overline{RD}
RD引脚分别给入低电平,这时候选通了缓冲器,缓冲器才把刚才形成的状态信息通过数据总线送到AL寄存器中。
假设缓冲器输出的信号,连入到数据总线上的第D0位
∴AL的D0位,就是输入装置的状态
当我们判断D0位等于高电平(也就是外设没有输入数据的时候)再使用IN AL,数据端口
这条指令把数据输入到AL寄存器中,同时还给到D触发器上的清0端(R)使得Q端的数据变成0,也就是把状态进行复位。
程序查询方式:对IO端口的要求
至少要有2个端口
①一个是状态端口
②一个是数据端口
查询式输入程序段:
在查询输入的过程中,读入的数据是8位或16位,而读入的状态位是1位,
设状态口的地址
为PORT_S1
,
输入数据口的地址
为PORT_IN
,
传送数据的总字节数
为COUNT_1
,
则查询式输入数据的程序段为:
MOV BX,0 ;初始化指针,存放查询得到的数据的存储区的偏移地址
MOV CX,COUNT_1 ;字节数
READ_S1:
IN AL,PORT_S1 ;输入状态信息到AL中
TEST AL,01H ;测试数据是否准备好
JZ READ_S1 ;为0,没有准备好,循环检测
IN AL,PORT_IN ;已准备好,进入数据的读写状态
MOV [BX],AL ;存到内存缓冲区中
INC BX ;修改地址指针
LOOP READ_SI ;未传送完,继续传送
CPU被动、而外设主动的IO操作方式,较大地提高了CPU的工作效率,并使系统具有了实时处理功能
。
特点:避免了CPU反复低效率的查询,适用于CPU任务繁忙、而数据传送不太频繁的系统
中。缺点
是硬件电路和处理过程都比较复杂。
中断传送方式的接口电路:
输入设备
输入数据的时候
首先将数据送到锁存器,并且给入选通信号,该选通信号将数据锁存到锁存器的输出端。并且使D触发器的输出端Q输出高电平。
如果CPU允许中断,通过与门就向CPU发出中断请求信号,那么CPU通过
I
N
T
A
‾
\overline{INTA}
INTA引脚回复应答,并且在第2个
I
N
T
A
‾
\overline{INTA}
INTA的低电平周期内外设把中断向量号送到数据总线上,CPU根据中断向量查找到该中断的中断服务程序。
在中断服务程序中,CPU使用IN指令,将锁存器的输入数据读入到数据总线中。
DMA是一种不需要CPU干预
也不需要软件介入
的高速数据传送方式。在外设与内存之间成批传送数据时,完全在DMA控制器
(DMAC)控制下完成外设与内存的数据传送,而不必CPU的干预。
DMA通过HOLD引脚向CPU提出使用总线的请求,CPU在收到这个信号时,通过HLDA引脚回复应答信号,这时候DMA控制器获取到了3种线,使得CPU和3种线之间的状态重现一个高阻状态。接下来在DMA控制下,完成了IO外设和MEM存储器之间的直接访问。