10 I/O接口芯片
10.1 为什么需要接口
为什么
- CPU和外设速度不匹配
- CPU和外设信号电平不匹配(CPU是TTL,即0为低5为高,外设各有不同)
- 信号格式不匹配(CPU是8b,16b等并行数据,外设不一定)
- 时序不匹配
接口电路的解决方法
- 数据缓冲:锁存器,缓冲器等
- 加入电平转换电路
- AD/DA转换器
- 以握手联络信号(Ready)保证同步
端口分类:数据端口;状态端口;命令端口
I/O端口的寻址方式
存储器映象寻址:将每一个I/O端口看作一个存储单元,所有的访问内存的指令都能直接访问端口
优点:不用专门的I/O指令
缺点:占用了大量存储单元的地址空间
I/O单独编址方式
优点:程序更加明确;不占用内存空间;指令短,译码电路简单
缺点:
IN,OUT的功能不如访存指令强;CPU需要提供M/IO信号8086/8088都是这个方式
CPU与外设之间的数据传送方式
程序控制方式(软件)
分为无条件(同步)传送和有条件(查询式)传送
前者用于简单外设的操作;后者需要先握手
传输完一个字符,CPU持续发送请求,直到外设准备完;CPU不能干别的事
中断方式(软件)
只有当输入设备的数据准备好了(READY),或数据缓冲器已空时,才会发送中断
传输完一个字符,CPU发送请求并回到原来干的事,直到外设发送中断,继续传输
DMA方式(硬件),Direct Memory Access
- DMA临时接管CPU的地址、数据和控制总线,实现批量的数据传送
- CPU可以继续干别的事
10.2 两种通信方式
并行通信:一次性直接传输
优点:速度快
缺点:需要的线很多,远距离不现实
串行通信:在单根线上按顺序传送一段数据
微机和远程终端进行数据交换都用这个方式
10.3 可编程并行接口芯片8255A
8255A并行接口芯片

含有3个独立的8bit并行In/Out端口,其中PA,PB是8bit端口,PC可以拆分为两个4bit端口
基本操作

其中控制字寄存器是每个IO设备都有的,决定工作模式的寄存器
RESET让系统复位,控制寄存器清0,各端口工作于输入模式
与CPU的连接方式
在8bit系统中,A1A0地址线与芯片的A1A0连接。若基地址是60H,A、B、C和控制口的端口分别是60H,61H,62H,63H
在16bit系统中,A0地址线用来选取奇偶位,故使用A2A1地址线,注意计算端口时A0位也要计算,相邻端口相隔2H
控制字的设置
在进行初始化时必须先输入
根据标志位的不同有两个状态:


注意到只有PA有方式2,PC只能工作在方式0,但是设置D7=0可以任意输出PC的引脚为1/0
三种方式:基本I/O,选通工作,双向传送
例:检查8个开关,要求不断检测开闭状态,当开端断开时对应的LED灯点亮
解:使用8086CPU,8255A,74LS138提供全译码
设置PA用于读取,PB用于输出,都工作在方式0,8086是16bit系统,AD2D1接入A1A0
那么PA对应于1111 0000B,PB对应于1111 0010B,PC对应于1111 0100B,控制字对应于1111 0110B
接下来为全译码选择合适的信号,74LS138有3个门,3个选择信号,\(\mathsf{M/\overline{IO}}\)占一个\(\mathsf{\overline{G2A}}\)
由于16bit的芯片,故一定要指明高低字节,A0一定作为一个选择信号,剩下的选两个不变的就行,这里选择A4A3A0作为选择信号,始终为100B=4D,因此\(\mathsf{\overline{Y4}}\)连接到\(\mathsf{\overline{CE}}\),剩下的就是门
硬件电路如下图:

还需要软件,一开始需要设置控制字,观察每个bit对应的信息
mov dx, 0F6H ;指向控制字
mov al, 10010000B
out dx, al ;写入
然后检测开关状态
watch:
mov dx, 0F0H ;指向PA
in al, dx ;读取状态
mov dx, 0F2H ;指向PB
out dx, al ;写入状态
call delay ;为了人看清楚需要延迟亮灯
jmp watch ;持续检测
10.4 串行通信
数据传输方向
- 单工:单向通信,A只能发送,B只能接受;广播
- 半双工:双向通信,但只有一根传输线,同一时间只能单工;对讲机
- 全双工:两个通路,可以同时收发;电话
基本工作方式
异步方式
数据规格:起始位1b;数据位5-8b,D0在先;奇偶校验位1b(可选);停止位1/1.5/2b
传输效率低
同步方式
数据规格:1/2b同步字符(单/双同步)/外同步无同步字符,5-8b数据,2b校验字符
接受方利用同步字符,将周期与发送方同步,直接接受后面的数据段
效率高很多,但是错误率也高很多
波特率:每秒传输的数据的位数,异步远低于同步
调制解调
串行接口不适合远距离传送,可以用标准电话线传送
首先要调制为音频信号,然后解调
根据调制的不同分为调频,调幅,调相,多路载波等
10.4 可编程串行接口芯片8251A
8251A接口芯片
是通用同步/异步数据收发器(USART)
编程流程
看ppt上的编程流程
向控制口写入复位字
写入方式字,确定工作方式
若是同步,则写入1/2个同步字符,后面写入命令字
若是异步,则直接写入命令字
要是想改变方式,需要重复1-3
在工作中可以随时使用IN读取状态字,检查错误
方式字的定义如下

其中异步方式的x1, x16, x64表示的是波特率系数,这是一个人为定义的概念,没有实际意义
实际传输过程中的\(收发波特率=\frac{收发时钟频率}{波特率系数}\)
初始化前需要先复位,复位字为0100 0000B = 40H,在写入控制字,然后再写入命令字0001 0101B,具体看ppt