本文记录在学习<<微型计算机接口技术及应用>>课程过程中的笔记. 由于硬件课程与编程课程相比,往往比较缺乏实践机会,因此需要多做一点笔记. 在微机系统中,微处理器的强大功能必须通过外部设备才能实现,而外设与微处理器之间的信息交换及通信又是靠接口实现的, 所以, 微机应用系统的研究和微机系统的产品的开发,从硬件角度来讲,就是接口技术的演技和开发. 微机的应用随着外设的不断更新早已深入各个领域.

概述

接口

设备接口(Interface)是指I/O设备与本地总线之间的 连接电路 . 是CPU与外设进行信息交换的中转站. 是CPU与外设之间信息交换的桥梁, 接口与CPU之间通过系统总线连接起来.

为什么要设立接口

  1. 微机的总线与I/O设备不兼容,在逻辑定义,时序等方面都不一致
  2. CPU与I/O设备速度不匹配,CPU速度快,而I/O设备速度慢
  3. 如果让全部I/O设备交由CPU处理,会占用过多的CPU时间
  4. 如果让I/O设备交由CPU处理,则会导致I/O设备依赖CPU结构,不利于I/O设备发展

接口的三个重要部分

  1. 命令口
  2. 状态口
  3. 数据口

其中状态口是一个输入端口(对于CPU而言),通过数据总线与CPU交换信息.

接口的功能

  1. 执行CPU指令
  2. 返回外设状态
  3. 数据缓存/锁定
  4. 信号转换
  5. 设备选择
  6. 数据宽度与数据格式的转换

接口电路的一般结构

接口电路的一般结构

从硬件角度看有三个主要的模块

  1. 基本逻辑电路(三大寄存器)
  2. 端口地址译码电路(设备选择)
  3. 供选电路(功能选择)

从软件角度看,由于各个被控对象存在差异,因此没有统一的模式,但一个完整的设备接口程序大约包括如下一些程序

  1. 初始化程序段落
  2. 传送方式处理程序段落
  3. 主控程序段
  4. 程序终止与此退出程序段
  5. 辅助程序段

CPU与接口交换数据方式

  1. 程序控制方式
    1. 无条件传送方式(又称同步传送方式)
      • 由控制程序直接向端口写入数据
      • 优点: 所需的硬件和软件都很少, 且硬件接口电路简单
      • 缺点: 这种传送方式必须在已知且确信外设已准备就绪的情况下才能使用, 否则出错
    2. 条件传送方式(查询传送方式)
      • CPU在执行一个输入/输出操作前, 必须对外设的状态进行测试, 当外设准备好才能传送, 否则CPU等待并查询外设的状态, 直至外设准备好
      • 优点: 传送数据前, CPU先检测接口的状态, 保证数据传送的正确率高
      • 缺点: CPU的效率很低, 且CPU与外设不能并行工作
  2. 中断方式
    • 外设作好传送准备后, 主动向CPU请求中断, CPU响应这一请求, 暂停正在运行的程序, 转入用来进行数据传送的中断服务子程序, 在完成中断服务了程序后, 自动返回原来运行的程序
    • 优点: 提高了CPU的利用效率
    • 缺点: 需要保存大量环境参数
  3. 直接存储器存取(DMA)方式
    • 在DMA控制器的控制下, 完成由外设与存储器之间的数据传送 CPU不干预传送过程, 整个传送过程由硬件来完成而不需要软件介入
    • 优点: 具有非常高的传送速率
    • 缺点: 硬件电路复杂

I/O地址译码技术

I/O端口

端口(port): I/O接口电路中能够被 CPU直接访问 的寄存器. CPU可以通过这些端口发送命令,读取状态和传送数据.
端口地址 = 芯片地址(高位地址) + 片内地址

端口地址编制方式

  1. 统一编址(存储器映射方式)
    • 从存储空间中划出一部分空间分配给I/O设备,把I/O接口中的端口视为存储器的一部分一样进行访问.
    • 优点: 不需要额外的I/O指令,各种内存指令可以直接使用,简化指令系统
    • 缺点: 降低存储器容量,指令执行效率不如专门的I/O指令
  2. 独立编制
    • 内存地址空间和I/O地址空间相互独立,使用专门的I/O指令
    • 优点: 不占据存储空间,执行速度快,程序可读性好
    • 缺点: 指令功能弱,仅仅能进行数据传输,不能进行逻辑运算

PC系列微机端口分配

  • 拥有1024个端口
  • 地址空间为000 ~ 3FFH
  • 有效的译码地址为 A0 ~ A9,这10跟地址线
  • 在有效范围内,使用 单字节端口地址 的是 芯片 中的端口,使用 双字节端口地址 的是 接口卡 中的端口

端口指令

  • 格式 IN AL, 60H / IN AL, DX / OUT DX, AL / OUT 61H, AL
  • 对于端口号在0-255之间的端口, 可以直接访问
  • 对于端口号在236-65535之间的端口, 端口地址需要放在dx寄存器中
  • 访问8bit端口时, 数据只能存入AL, 访问16bit端口时, 只能使用AX

更多关于端口的汇编指令可以阅读汇编语言笔记的端口和外中断章节

串I/O指令

  • 串指令有INSB,INSWINSD
  • 即分别从8bit,16bit,32bit的端口取出相应大小的数据到存储器
  • dx指定I/O端口,DI指定存储器偏移地址(默认段寄存器为ES),CX指定传输字节数
  • 以下代码演示使用串指令将数据从301端口取出15个字节到从ES:1001H开始的内存位置
    1
    2
    3
    4
    5
    MOV DX, 301H
    MOV DI, 1001H
    MOV CX, 0FH
    CLD
    REP INSB

C语言中端口读写

  • 使用 unsigned char inportb(int addr) 读取数据
  • 使用 void outportb(int addr,unsigned char data) 写入数据
  • 这些函数本质是调用INOUT指令

I/O译码电路

  • 高位地址信号与控制信号组合,通过译码电路产生片选信号
  • 地位地址不参加译码,直接连接到I/O芯片
  • 参与译码的控制信号有AEN, \( \overline{IOR} \), \( \overline{IOW} \)
  • AEN为1时表示DMA方式, 为0时表示CPU控制方式

芯片控制电路规则

  1. 是否可读写
    • 如果可读可写,则两个读写控制信号都不参加译码
  2. 片内地址
    • 片内地址决定每个接口的端口数目,例如需要32个端口,则片内地址有5位
  3. 片间寻址
    • 根据地址范围确定不参加译码的高位数量,再减去低位的片内地址即可

定时计数技术

可编程的计数器/定时电路

  • 其计数与计时功能由程序决定,且不占用CPU时间,常见的芯片有8254
  • 采用减一计数方式,更便于终止条件判定(判定条件始终为检查是否为零)

可编程的计数器/定时电路工作原理

  1. 通过控制命令,将初值写入初值寄存器
  2. 从初值开始,在GATE信号的控制下,每出现一次CLK信号,计数值减一
  3. 计数达到零,从OUT端输出信号

注意:GATE无效时,即使出现CLK信号,也不会减一

82C54主要特点

  • 具有三个独立的16bit计数器(#0~#2通道)
  • 每个通道有6种工作模式
  • 可以按照二进制或十进制计数
  • 如果初值设为0,则可以实现从可显示最大值+1的计数范围

指令字格式

  • 指令长度为1字节
  • 第一个字段2bit,表示计数器,0010分别表示计数器03,11无效
  • 第二个字段2bit,表示读写方式
    • 00表示锁存
    • 01 表示只读写低字节
    • 10 表示只读写高字节
    • 11 表示先读写低字节,在读写高字节
  • 第三个字段3bit,表示工作方式,二进制000101表示工作方式05
  • 最后一个字段1bit,表示数制,0表示二进制,1表示十进制(BCD)

例如00110001b表示0号计数器先读写低字节,在读写高字节,在方式0以十进制方式工作

指令中的选择信号和片内寻址

在82C54的指令字中也提供了选择哪一个计数器的方法,同时在芯片中也有用于寻址的A0和A1. 实际上由于指令都是发送到控制芯片的, 因此在控制字中才需要指定哪一个芯片,而取出数据的时候,就可以根据A0和A1直接获得数据. 即在发出命令的时候A0和A1始终等于11b,而读取和写入数据的时候,A0和A1取值为00b~`10b`

1
2
3
4
5
6
7
8
# 端口地址为60H~63H, 选择1#, 工作方式2, 计数初值为5533H, BCD码制其初始化程序段为: 

MOV AL,01110101B ;写入控制命令字
OUT 63H,AL
MOV AL,33H ;写入计数初值低字节
OUT 61H,AL
MOV AL,55H ;写入计数初值高字节
OUT 61H,AL

计数方式

方式0(计数结束中断方式)

  • 写入工作方式后OUT会设置为低电平
  • 写入初值后就立即启动一次新的计数
  • 从设置初值的下一个时钟下降沿 开始 计数,即初始值也会维持一个周期
  • 达到计数以后,OUT从低电平跳变到高电平,可用于中断控制
  • GATE为低电平时计数暂停

方式1(可重复编程单脉冲)

  • 写入工作方式后OUT设为高电平
  • 写入初值后,GATE产生一次由低到高的跳变(正跳变)后开始计数
  • 从跳变后的下一个时钟下降沿开始计数
  • 开始计数时OUT变为低电平,计数结束后OUT变为高电平
  • 由于OUT开始工作和结束工作后都是高电平,而计数时为低电平,因此可以视为输出了一个长度为n的负脉冲
  • GATE信号可以重复触发,触发后从初值开始计数
  • 在计数过程中写入新的初值,在GATE信号再次触发后才生效

方式2(周期性负脉冲输出,分频器)

  • 写入工作方式后OUT设为高电压
  • 写入计数方式后,下一个时钟下降沿开始计数
  • 计数到1变为低电平,计数到0时恢复高电平,即产生一个时钟周期的负脉冲
  • 计数到0时,也等于变为设置初值,开始下一轮计数, 从而每个设定事件周期内产生一次负脉冲
  • 写入计数初值后,GATE信号为高电平时,为软起动,立即开始计数. GATE信号为低电平时,为硬启动,GATE正跳变后开始计数
  • 计数过程中写入初值,则从下一轮开始以新的初值计数

方式3(方波发生器)

  • 方式3与方式2基本一致
  • 一个计数周期中,高低电平之间基本一致
  • 可以视为频率降低的的方波信号
  • 当计数周期为奇数时,前(N+1)/2周期为高电平, 后(N-1)/2个计数周期为低电平

各种方式的区别

各模式对比

各模式波形对比

各模式区别

计数初始值计算方法

已知 \( f_{CLK} \) 和 \( f_{OUT} \) ,则计数初值 \( n = \frac{f_{CLK}}{f_{OUT}} \)
已知 \( T_{CLK} \) , 定时时间为t, 则 \( n = \frac{t}{T_{CLK}} \)

并行接口

并行接口特点

  1. 通过多根信号线同时传送多位数据
  2. 传送时一般不需要特定的数据传送格式
  3. 并行接口多用于传送距离短, 数据量大, 速度高的实时传输场合;(例如: 微机与并行接口打印机、磁盘驱动器)
  4. 但并行接口布线成本高, 线路间互相干扰, 时钟同步问题, 因此并行传输技术发展受限

8255概述

  • 有三个输入输出端口: 端口A, 端口B, 端口C
  • 每个端口可编程设定为输入端口或输出端口, 并且有不同的工作模式
  • 端口C可以作为独立的端口使用,但常常是配合A和B,为这两个端口提供联络信号

8255A结构图如下所示:

8255结构图

8255A工作方式

  • 8255A有3种工作方式: 方式0, 方式1和方式2
  • A端口: 3种方式中的任一种;
  • B端口: 方式0和方式1;
  • C瑞口: 通常作为控制信号使用, 配合A端口和B端口的工作

指令字格式

指令字格式

指令字格式

端口C控制字格式

端口C控制字

8255A工作方式

方式0 无条件传送

  • 2个8bit端口和2个4bit端口,都可以进行输入输出
  • 输出可以被锁存,输入无法锁存
  • 常用于连接简单外设,适用无条件传送和查询方式
  • 单向I/O, 一次初始化只能指定端口为输入或者输出
  • 系统没有指定C口的格式, 用户可以自定义
  • 端口信号线之间无固定的时序关系, 由用户根据数据传送的要求决定输入输出的操作过程, 不需要任何选通信号

以下代码演示从A端口读入数据并输出到B端口过程

1
2
3
4
5
6
7
8
9
MOV DX,203H   ;初始化
MOV AL,98H
OUT DX,AL

MOV DX,200H ;in
IN AL,DX

MOV DX,201H ;out
OUT DX,AL

方式1 应答发式传送(查询、中断)

  • 分成A,B两组,每组包括一个8位的数据端口和1个4位的控制/数据端口
  • 8位的数据端口既可以作为输入也可以作输出
  • 4位的控制/数据端口用于传送8位数据端口的控制和状态信息
  • 输入和输出都可以被锁存
  • PC3~PC5分配给A口, PC0~PC2给B口, PC6, PC7可作为简单的输入/输出线使用

方式1时, 按照以下的步骤进行数据输入
方式1输入过程

输入过程用到的结构如图所示
方式1输入结构图

其中各信号含义如下:

  • \( \overline{STB} \) : 选通信号, 表示外设已经准备好数据
  • IBF : 输入缓冲器满信号, 表示A口已经接收数据
  • INTQ: 中断请求信号, 通过此信号向CPU发出中断请求
  • INTE: 中断允许信号, 该信号是内部信号, 通过C口按位置位字进行设置

C端口状态字定义如下所示:
8255状态字

在代码中, 首先需要向INTE(Interrupt Enable)写入1表示允许中断, 写入方式参考端口C的置为复位指令字格式. 后续通过INTR(Interrupt Request)判断是否产生了中断, 示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ccd  segment
assume cs:ccd
; 送方式命令字
BG: MOV DX,203H
MOV AL,0B0H ;10110000B
OUT DX,AL
MOV AL,9H ;00001001B
; C口 使INTEA=1
OUT DX,AL
; 输入C口数据
AG: MOV DX,202H
IN AL,DX
; 循环查询, 直到INTRA=1
TEST AL,8
JZ AG
; 从A口输入
MOV DX,200H
IN AL,DX
...
ccd end
END

方式1的输出结构如下所示:
方式1输出结构图

方式1的输出过程与输入过程基本类似,但C端口指令字有所不同.

中断技术

中断响应的一般过程

中断响应一般执行以下的过程

  1. 中断请求
  2. 中断识别和判优
  3. 中断响应
  4. 中断处理
  5. 中断返回

其中从中断响应到中断返回涉及的具体过程可以参看汇编语言笔记中断处理程序设计相关章节

在外设方面, 中断请求信号分为可屏蔽中断请求INTR和不可屏蔽中断NMI.

中断识别

  • 在更古老的CPU中, 使用软件查询法来获得中断信息. 在软件查询法中, 通过编写程序轮流查询各种外部设别是否存在中断请求.
  • 现代的CPU使用中断矢量法, 由中断源提供的中断类型号来确定中断源

中断判优原则

  1. 优先级法则: 异常 > 软件中断 > 非屏蔽中断 > 外部可屏蔽中断
  2. 先来先响应

8259A结构

8259A结构

  • 中断请求寄存器IRR: 反应那些中断请求发生了
  • 中断屏蔽寄存器IMR: 决定那些中断请求被屏蔽
  • 正在响应寄存器ISR: 显示那些中断正在被服务

上述三个寄存器都是按位使用,每一位都对应芯片上的一个引脚.

中断过程

  1. IRQ0~IRQ7有中断请求, 8259A的IRR相应位置1
  2. IRR与IMR相应位进行比较, 封锁或发送中断请求给PR
  3. PR分析后, 把当前最高优先级的中断请求信号通过INT发送给CPU
  4. 若IF=1, CPU执行完当前指令后,连续发出两个 \( \overline{INTA} \) 信号
  5. 收到第一个 \( \overline{INTA} \) 信号后, 8259A的ISR和IRR对应位分别置1清0
  6. 收到第二个 \( \overline{INTA} \) 信号后, 8259A把中断类型号送上数据总线
  7. CPU将收到的中断类型号乘以4, 到中断向量表中获取中断向量, 转入相应中断服务子程序进行中断处理

8259A的工作方式

中断触发方式

  1. 电平触发方式: IRi端出现高电平作为中断请求
  2. 边沿触发方式: IRi端出现上升沿作为中断请求
  3. 中断查询方式: 不使用INT信号, 直接由软件查询中断状态

电平触发方式如果保持时间较长, 则可能被CPU触发两次, 但使用边沿触发方式则不存在这一问题.

中断屏蔽方式

  1. 普通屏蔽方式: 即设置IMR的相关位
  2. 特殊屏蔽方式: 中断服务程序中设置IMR的位,使ISR相应位复位

在特殊屏蔽模式下, 对IMR的某一位置位会导致ISR相应位被重置, 因此这样既屏蔽了本级中断又开放了低级中断

优先级排队方式

  1. 普通全嵌套方式: IR0优先级最高, IR7优先级最低
  2. 特殊全嵌套方式: 本级中断请求可以中断同一级的中断
  3. 循环优先级方式
    1. 优先权普通循环方式: IR0最高,IR7最低, IR0相应后变为最低, 其他的都升高一级
    2. 优先权特殊循环方式: 用户指定最低级(例如IR5),则后一位是最高级(如IR6),之后按顺序优先级递减

在普通全嵌套模式下, 在从片发出的不同优先级的中断信号, 在主片看来都是相同等级的请求. 因此主片必须使用特殊全嵌套方式, 使得同一级的中断请求能够中断同一级的中断.

中断处理方式

  1. 自动结束方式: ISR中的位在相应的时机(第二个INTA信号结束)由硬件自动复位
  2. 常规结束命令字: 通过指令使ISR中最高级复位
  3. 指定结束命令: 指定某一个ISR位复位

注意:

  1. 自动结束方式时, 中断还未完全处理结束, 若此时又发送中断,则会产生错误, 因此此方式仅支持没有中断嵌套, 且使用单片的情况.
  2. 常规结束命令只适合全嵌套方式下(固定优先级)

控制命令字

一共有4个控制命令字, 分别用ICW1~ICW4表示, 其中ICW1和ICW2是必须设定的, ICW3和ICW4根据情况可选的设置. ICW1写入A0为0的偶数地址,其余命令字写入A0为1的奇数地址. 各控制字主要含义如下:

  1. ICW1: 设置触发方式, 是否有级联片,以及是否有ICW4
  2. ICW2: 设置中断高5位的值, 例如设置为08H,则中断号为08H~0FH
  3. ICW3: 说明主片的哪一个引脚接了从片, 或从片对应主片的哪一个引脚
  4. ICW4: 设置嵌套方式,缓存方式, 是主片还是从片,中断结束方式和处理器类型

操作命令字

一共有3个命令字, 分别使用OCW1~OCW2表示, 在工作期间可以任意时刻以任意顺序写入操作命令字.

  1. OCW1: 屏蔽命令字, 相应的设置IMR
  2. OCW2: 设置优先级方式和初始最低优先级等
  3. OCW3: 中断屏蔽方式和后续读取的状态字含义

模数数模转换接口

模拟接口

A/D : Analog to Digital
D/A : Digital to Analog

数模转换器主要技术指标

  • 分辨率: 使用数字量比特位数衡量
  • 精度: 实际输出值与理论值的差距
  • 建立时间

数模转换器DAC0932特点

  • 数字输入端双重缓存, 可使用双缓冲, 单缓冲和直通数字输入
  • 分辨率为8bit
  • 满足TTL电平规范的逻辑输输入

控制逻辑

DAC0932结构图

  • 内部有两个数据缓冲器, 分别由两组控制信号控制
  • 输出量的值由DAC寄存器控制, 输入寄存器可以接收不同的值,从而便于多路复用
  • ILE,CS与WR1有效时LE1端才有效, 此使该寄存器输出随输入变化
  • 当XFER与WR2有效时,LE2端有效,此时寄存器输出随输入变换
  • 使用Iout1进行输出, 且Iout1与Iout2之和为一个定值(可用于校验)

DAC0932工作方式

双缓冲方式

输入数据先存放在输入寄存器中, 而输出的模拟值由存放在DAC寄存器内的数据决定. 当把数据由输入寄存器转存到DAC寄存器以后,输入寄存器就可以接受新数据而不影响模拟输出值. 可以在转换的时候采集下一个数据, 可实现多通道同步转换输出

单缓冲方式

DAC寄存器始终处于有效状态,只需要向数据寄存器进行一次写入操作就开始转换,适合不需要多片D/A同时输出的场景

1
2
MOV	DX, 200H    ;设DAC0832的地址为200H
OUT DX, AL ;AL内数据送DAC转换

直通方式

输入数据寄存器和DAC寄存器始终有效, 输出随输出的变化随时转换

ADC0809工作方式

ADC0809结构图

IN0IN7: 8路模拟量输入(互不相关,任意时刻接入其中的一个)
ADDA
ADDC: 3-8选择器输入,决定选中的模拟量输入
ALE:地址锁存允许, 正跳变时锁定地址选择器输入
START信号: 启动信号, 上升沿使片内所有的寄存器清零,下降沿启动A/D转换
EOC: 转换结束, 转换开始时输出低电平,转换结束后输出高电平
OE: 输出允许,高电平时,锁存缓冲器打开,数据被发送给CPU

输出方法

  1. 延时等待法: 软件延时足够长的时间, 不使用EOC信号,效率低
  2. 中断法: 把EOC信号作为中断请求信号,在中断服务程序中读入转换结果
  3. 查询法: 软件查询EOC信号状态

应用举例

1
2
3
4
5
MOV  AL, 03H    ;送输入通道号3
OUT 84H, AL ;同时发出启动信号START
CALL DELAY150 ;等待转换结束, 延时150μS
IN AL, 84H ;转换结束, 读入数据
HLT

串行接口

调制解调器(MODEM)

  • 调制器(Modulator): 把数字信号转化为模拟信号发送到通信链路上
  • 解调器(Demodulator): 把通信链路上收到的模拟信号转化为数字信号
  • MODEM是数据通信设备(DCE), 计算机等是数据终端设备(DTC)

串行通信的数据传输方向

可以分为单工, 半双工和全双工

串行数据传输速率

收发时钟频率 = 波特率因子 X 波特率

异步通信与同步通信

  • 异步通信: 以字符为单位发送数据, 各字符之间随机出现(异步),适合数据量小,数据不连续发送的场景
  • 同步通信:以数据块为单位发送数据, 各字符之间同步,字符内也同步, 适合数据量大,批量传输数据的场景

外同步与自同步

  • 外同步: 发送端发送数据前先发送同步时钟信号, 接收端用这一同步信号锁定自己的时钟频率
  • 自同步: 发送的数据中包含同步信息(例如曼切斯特码)

8251结构

8251结构

8251可以分为5个部分

(1) 面向CPU的信号线
大部分信号线和其他芯片的含义一样
C/D 信号线, 为1时访问命令或状态寄存器,为0时访问数据寄存器

(2)状态信号(供CPU查询或向CPU申请中断)
TxRDY(Transmitter Ready):发送器准备好, 高电平有效. 通知CPU可以向8251A发送数据.
RxRDY(Receiver Ready):接收器准备好, 高电平有效. 通知CPU读取数据.
TxE(Tmnsmitter Empty):发送器空, 高电平有效. 指示发送器中的数据已发送出去, 已经变空.
SYNDET(Synchronous Detection)/BD(Break Detection):双功能引脚. 这个引脚在同步方式时, 作同步字符检出信号, 为双向线.

(3)时钟信号(包括发送器时钟、接收器时钟以及内部的工作时钟信号CLK)
TXC*(Transmitter Clock):发送器时钟, 由外部(波特率时钟发生器)提供. 由它控制8251A发送数据的速率. 在异步方式下TXC*的频率可以等于波特率, 也可以是波特率的16倍或64倍. 在同步方式下TXC*的频率与数据速率相同.
RXC*(Receiver Clock):接收器时钟, 由外部(波特率时钟发生器)提供. 其频率的选择和TXC*相同. 实际应用中, 把RXC*和TXC*连接在一起, 使用同一个时钟源—波特率时钟发生器.

(4)面向调制器的接口信号
8251A提供了4个与MODEM相连的控制信号和数据发送以及数据接收信号线.
DTR*:数据终端准备好, 是输出信号, 低电平有效. 它由工作命令字的D1置“1”变为有效, 用以表示8251A准备就绪.
DSR*:数据装置准备好, 是输入信号, 低电平有效. 用以表示调制器已准备好. CPU通过读状态寄存器的D7位检侧这个信号.
RTS*:请求发送, 是输出信号, 低电平有效. 用于通知MODEM,8251A要求发送. 它由工作命令字的D5置“1”来使其有效.
CTS*:清除传送(即允许传送), 是输入信号, 低电平有效. 是MODEM对8251A的信号的响应, 当其有效时8251A方可发送数据.

DMA控制器

DMA的功能

(1)能接受CPU的编程, 以便进行功能设定
(2)能接收I/O接口的DMA请求, 并向CPU发出总线请求信号, 请求总线控制权
(3)CPU响应总线请求之后, DMAC能接管总线的控制, 进入DMA传送过程
(4)能实现有效的寻址, 即能输出地址信息并在数据传送过程中自动修改地址指针
(5)能向存储器和I/O接口发出相应的读/写控制信号
(6)能控制传送数据的字节数, 判定DMA传送是否结束
(7)DMA结束时, 能发出DMA结束信号, 释放总线, 恢复CPU对总线的控制

人机接口

键盘接口的分类

  1. 编码键盘: 这种键盘内部能自动检测被按下的键, 并提供与被按键对应的键码
  2. 非编码键盘: 这种键盘只简单地提供键盘的行列矩阵,而按键的识别和键值的确定、输入等工作通过软件完成
    • 线性键盘: 每一个按键均有一条输入线送到计算机的接口
    • 矩阵键盘: 按键按行和列排列

按键扫描方法

键盘电路

(1)扫描法
依次查询键盘矩阵的每一行线, 然后读取列数据确定按键是否在本行, 具体方法如下:
首先使PA0=0, 然后读取PB端口.
若PB=0FFH则表示行0没有按键按下, 再使PA1=0再读取PB判断行2有无按键按下, 依次扫描全部的行线.
当PB读取的数据不为0FFH, 则表示该扫描行有按键按下, 则再确定相应的按键序号.

(2)行列交换法(行列行反转法)
使CPU通过A口向各行线上全部送低电平, 然后从B口读入列线的值.
如果某按键按下, 则必定会使某一列线值为0. 然后, 交换A口B口的输入输出方向, 并将刚才读到的列线值从列线所接的并口输出.
再读取行线上的输入值, 在闭合键所在的行线上的值必定为0. 这样, 当一个按键被按下时, 必定可以读取一对唯一的行值和列值.

最后更新: 2024年04月24日 15:50

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2018/03/09/%E5%BE%AE%E5%9E%8B%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%8E%A5%E5%8F%A3%E7%AC%94%E8%AE%B0/