610 likes | 812 Views
第八章 并行接口芯片. 教学重点 8255A 的功能 8255A 的内部结构、引脚 8255 的工作方式和编程 8255 的应用. 并行数据传输方式. 并行传输以计算机的字长为传输单位(通常是 8 位、 16 位或 32 位),一次传送 1 个字长的数据 并行传输 微机系统中最基本的信息交换方法 例如:系统板上各部件之间,接口电路板上各部件之间 适合于外部设备与微机之间进行近距离、大量和快速的信息交换 例如:微机与并行接口打印机、磁盘驱动器. 第一节 可编程的输入输出接口 8255A. 8255A 是具有多种功能的可编程并行接口电路芯片, 40 个引脚。
E N D
第八章 并行接口芯片 • 教学重点 • 8255A的功能 • 8255A的内部结构、引脚 • 8255的工作方式和编程 • 8255的应用
并行数据传输方式 • 并行传输以计算机的字长为传输单位(通常是8位、16位或32位),一次传送1个字长的数据 • 并行传输微机系统中最基本的信息交换方法 • 例如:系统板上各部件之间,接口电路板上各部件之间 • 适合于外部设备与微机之间进行近距离、大量和快速的信息交换 • 例如:微机与并行接口打印机、磁盘驱动器
第一节 可编程的输入输出接口8255A • 8255A是具有多种功能的可编程并行接口电路芯片,40个引脚。 • 一、8255A的结构 • 8255有3个8位的数据端口(A/B/C),共24个I/O引脚,各端口共有3种输入输出工作方式 • 基本输入/输出(A/B/C口) • 选通输入或选通输出(A/B口) • 双向选通(A口)
一、8255A的内部结构和引脚 A组 端口A A组 控制 PA0~PA7 A口 A组 端口C 上部 数据 总线 缓冲器 PC4~PC7 CH口 内部数据线 D0~D7 B组 端口B B组 控制 PB0~PB7 B口 RD WR A0 A1 CS RESET 读写 控制 逻辑 B组 端口C 下部 内部控制线 PC0~PC3 CL口
1. 连接外设的数据端口 • 端口A:PA0-PA7,8位端口,支持工作方式0、1、2 • 端口B:PB0-PB7,8位端口,支持工作方式0、1 • 端口C:PC0-PC7,拆分为两个4位端口,仅支持工作方式0 • 端口A:PA0-PA7 (A组控制) • 常作数据端口使用,功能最强大 • 端口B:PB0-PB7 (B组控制) • 常作数据端口使用 • 端口C:PC4-PC7 (A组控制), PC0-PC3 (B组控制) • 可作数据、状态或控制端口使用 • 可拆分成两个4位端口分别输入或输出 • 每位可独立进行输出控制(位控制) • 使用最灵活,较难掌握
二、 8255A的工作方式 P343 图8-2 • 方式0:基本输入输出方式(不带联络) • 适用于无条件传送和查询方式的接口电路 • 方式1:选通输入输出方式(带输入联络或输出联络) • 适用于查询和中断方式的接口电路 • 方式2:双向选通方式(同时带输入联络和输出联络) • 适用于可双向传送数据的外设 • 适用于查询和中断方式的接口电路
CPU 8255 外设 内总线 外总线 方式0的输入时序(数据来自外设) RD 输入端口 外设提供数据 CS、A1A0 D0~D7 数据 请体会这里8255A的数据缓冲作用
CPU 8255 外设 内总线 外总线 方式0的输出时序(数据来自CPU) WR 输出端口 数据 CS、A1A0 D0~D7 CPU数据 8255A对CPU输出的数据进行锁存
方式1输入引脚:端口A 外设数据 PA7~PA0 数据选通信号 表示外设已经准备好数据 PC4 INTEA STBA PC5 IBFA 输入缓冲器满信号 表示A口已经接收数据 PC3 INTRA 中断请求信号 请求CPU接收数据 中断允许触发器 征用C口3引脚和1个控制位
方式1输入引脚:端口B 外设数据 PB7~PB0 数据选通信号 表示外设已经准备好数据 PC2 INTEB STBB PC1 IBFB 输入缓冲器满信号 表示B口已经接收数据 PC0 INTRB 中断请求信号 请求CPU接收数据 中断允许触发器 征用C口3引脚和1个控制位
方式1 输入 联络信号 • STB——选通信号,低电平有效 • 由外设提供的输入信号,当其有效时,将输入设备送来的数据锁存至8255A的输入锁存器 • IBF——输入缓冲器满信号,高电平有效 • 8255A输出的联络信号。当其有效时,表示数据已锁存在输入锁存器 • INTR——中断请求信号,高电平有效 • 8255A输出的信号,可用于向CPU提出中断请求,要求CPU读取外设数据
方式1 输入 时序 STB IBF INTR RD 输入端口 外设数据 数据 D0~D7 STB和IBF是外设和8255A间的一对应答联络信号,为的是可靠地输入数据
方式1中断控制 • 8255A的中断由中断允许触发器INTE控制 • 置位允许中断,复位禁止中断 • 对INTE的操作通过写入端口C的对应位实现,INTE触发器对应端口C的位是作应答联络信号的输入信号的哪一位,只要对那一位置位/复位就可以控制INTE触发器 • 选通输入方式下 • 端口A的INTEA对应PC4 • 端口B的INTEB对应PC2
方式1输出引脚:端口A 输出数据 PA7~PA0 外设响应信号 表示外设已经接收到数据 PC6 INTEA ACKA PC7 OBFA 输出缓冲器满信号 表示CPU已经输出了数据 PC3 INTRA 中断请求信号 请求CPU再次输出数据 中断允许触发器 通过位控PC6设置INTEA 征用C口3引脚和1个控制位
方式1输出引脚:端口B 输出数据 PB7~PB0 外设响应信号 表示外设已经接收到数据 PC2 INTEB ACKB PC1 OBFB 输出缓冲器满信号 表示CPU已经输出了数据 PC0 INTRB 中断请求信号 请求CPU再次输出数据 中断允许触发器 通过位控PC2设置INTEB 征用C口3引脚和1个控制位
方式1输出联络信号 • OBF——输出缓冲器满信号,低电平有效 • 8255A输出给外设的一个控制信号,当其有效时,表示CPU已将输出数据锁存在8255A指定的端口,外设可以来取 • ACK——响应信号,低电平有效 • 外设提供的响应信号,通知8255A其端口数据已被外设接收 • INTR——中断请求信号,高有效 • 当输出设备已接受数据后,8255A输出此信号向CPU提出中断请求,要求CPU继续提供数据 端口A的INTEA对应PC6端口B的INTEB对应PC2
WR OBF INTR ACK 数据 输出端口 D0~D7 CPU数据 -OBF和-ACK是外设和8255A间的一对应答联络信号,为的是可靠地输出数据 CPU 8255 外设 内总线 外总线 方式1 输出 时序
方式2 双向选通方式 • 方式2将方式1的选通输入与选通输出功能组合成一个双向数据端口,可以发送数据和接收数据 • 只有端口A可以工作于方式2,需要利用端口C的5个信号线,其作用与方式1相同 • 方式2的数据输入过程与方式1的输入方式一样 • 方式2的数据输出过程与方式1的输出方式有一点不同:数据输出时8255A不是在OBF有效时向外设输出数据,而是在外设提供响应信号ACK有效时才送出数据
方式2 双向选通引脚 中断允许触发器 (控制中断输出) 通过位控PC6设置INTE1 PA7~PA0 数据 PC6 输出联络 INTE1 ACKA 中断允许触发器 (控制中断输出) 通过位控PC4设置INTE2 PC7 -OBFA PC4 STBA INTE2 输入联络 PC5 输入中断和输出中断 通过或门输出INTRA信号 IBFA PC3 INTRA 征用C口5引脚和2个控制位
方式2 双向选通时序 WR OBF INTR ACK STB IBF RD 输出数据 输入数据 PA0~PA7 输入数据 输出数据 D0~D7 该例中:CPU先输出数据,再读取外设输入的数据
三、 8255A的编程 • 初始化编程:只写 1 个方式控制字到控制口 • 控制口I/O地址:A1A0=11 • 工作过程中:通过数据端口对外设数据进行读写 • 数据口A、B和C的I/O地址,分别为:00、01、10 • IBM PC/XT机上,数据口A/B/C和控制口的I/O地址分别为:60H、61H、62H和63H
1. 向控制口写方式字——控制字格式 A组控制 B组控制 25h 表示:A口方式1输出,CH口输出,B口方式1输入,CL口输入。
1. 向控制口写方式字——示例 • 要求: • A口:方式1输入 • CH口:输出 • CL口:输入 • B口:方式0输出 • 方式控制字:10110001 B或B1H • 初始化的程序段: mov dx,0fffeh ;假设控制端口为FFFEH mov al,0b1h ;方式控制字 out dx,al ;送到控制端口
2. 读写数据端口(A口/B口/C口) • 初始化编程后: • 当数据端口作为输入接口时,CPU执行输入IN指令, CPU将从输入设备得到外设数据 • 当数据端口作为输出接口时, CPU执行输出OUT指令,将把CPU的数据送给输出设备 • 8255A具有锁存输出数据的能力 • 对设置为输出的端口同样可以输入(读) • 此时不是读取外设数据,而是读取的是前次CPU输出给外设的数据(锁存在锁存器中)
2. 读写数据端口:示例 • 利用8255A的输出锁存能力,可实现对某一位的输出控制 • 对输出端口B的PB7位置位的程序段: mov dx,0fffah ;B端口假设为FFFAH in al,dx ;读出B端口原输出内容 or al,80h ;使PB7=1 out dx,al ;输出新的内容
3. 涉及C口的操作——归纳1 • 在控制上,C口上半部(CH)和A口被编为A组,C口下半部(CL)和B口被编为B组。即它被拆分成两个4位端口分别进行控制: • 两个4位端口均只能工作于方式0(指未被征用的引脚) • 但可分别选择输入或者输出 • C口具有唯一的地址,可按8位方式进行读/写,此时: • 设置为输出的引脚可读可写(输出锁存器) • 设置为输入的引脚可读(引脚)、写操作无意义 • 在选通方式下,对被征用的引脚可读(分别映射到中断允许位、输入/输出缓冲器状态位、中断请求状态位)。 • C口还可通过位控字进行按位的写(只写C口1位): • 对设置为输出的引脚可写(输出锁存器) • 在选通方式下,对被征用的输入引脚可写(映射到中断允许位)
3. 涉及C口的操作——归纳2 • 当A和B口工作在方式1或方式2时,C口的部分引脚或全部引脚将被征用: • A口方式1将征用C口3个引脚: • 输出:PC6/PC7(输出联络) , PC3(中断) • 输入:PC4/PC5(输入联络) , PC3(中断) • B口方式1将征用C口3个引脚: • 输出: PC2/PC1(输出联络),PC0(中断 ) • 输入: PC2/PC1(输入联络),PC0(中断 ) • A口方式2将征用5个引脚: • PC4/PC5(输入联络),PC6/PC7(输出联络 ),PC3(中断) • C口未被征用的引脚仍将工作在方式0,但必须成组进行设置,即CH或CL中的引脚必须同为输入或同为输出。
3. 涉及C口的操作——归纳3 • 对C口的数据输出有两种办法 • 向C口直接写字节数据——该数据将被写进C端口的输出锁存器中,并从设置为输出的引脚输出,但对设置为输入的引脚无效。 • 向控制口写位控字——使C口设置为输出的某个引脚输出1或0。 • 在选通方式下向控制口写位控字——还可置位或复位8255内部的中断允许触发器。在选通方式下,该触发器已被映射在C口被征用的某个输入引脚上。
向控制口写入位控字 • 位控字用于控制C口的输出引脚( CH/CL口工作于基本方式)或内部的中断允许位(A/B口工作于选通方式), • 位控字应写入8255的控制口,例如: mov al,0dh out 控制口,al • 当CH工作在非选通输出方式时,令PC6引脚输出1; • 当A口工作在选通输出或双向选通输出方式时,将相应的中断允许位INTEA或INTE1置1(开中断)。 0dh
3. 涉及C口的操作——归纳4 • 读取C口数据有两种情况: • 针对未被A和B端口征用的引脚: • 将从定义为输入的位读到引脚上的输入信息 • 将从定义为输出的位读到前次输出锁存的信息 • 针对已被A和B端口征用作为联络线的引脚: • 将读到反映8255A工作状态的状态字,其中包括: • 数据缓冲器的状态(-OBFx 或 IBFx) • 中断允许的状态(INTEx) • 中断请求的状态( INTRx)
从端口C读到状态字 A组控制 B组控制
10.2 8255A的应用 • 作为通用的并行接口电路芯片,825A具有广泛的应用,如: • 应用在IBM PC/XT微机上 • 应用于打印机接口电路 • 用于连接简易键盘 • 用于驱动LED数码管 • 等等
第二节 8255A在IBM PC/XT上的应用 • 工作在基本输入/输出方式0 • 端口A为方式0输入,用来读取键盘扫描码 • 端口B工作于方式0输出,例如控制扬声器等 • 端口C为方式0输入,读取系统状态和配置 • 系统的初始化编程: mov al,1 0011001 b ;方式控制字99H out 63h,al
打印机接口的信号与时序 • 主机把数据送给引脚DATA0~DATA7 • 同时送出数据选通信号STROBE • 打印期间,打印机在BUSY信号线上发出忙信号 • 打印机处理好输入的数据时 • 撤消忙信号 • 同时又送出一个响应信号ACK
以打印机为例说明8255应用 • 打印机接口的信号与时序 DATA0~7 (入) STROBE(入) 一般用于查询 打印机忙 BUSY(出) 一般用于选通 ACK(出) 打印机响应
用8255A方式0与打印机接口 8255A 打印机 DATA0~7 PA0~PA7 PC7 STROBE BUSY PC2
8255A的初始化 mov dx,0fffeh ;控制口地址:FFFEH mov al,1 0000 001B ;方式控制字:91H out dx,al ;A口方式0 输出, CH输出、 CL输入 mov al,0 000 111 1B ;位控字,令PC7=1,即-STROBE无效 out dx,al 例10.1
打印子程序:查询 printc proc push ax push dx prn: mov dx,0fffch ;读取端口C in al,dx ;查询打印机状态 and al,04h ;测试PC2(BUSY) jnz prn ;为1,打印机忙,则循环等待 例10.1
打印子程序:输出 mov dx,0fff8h ;为0,打印机不忙,则输出数据 mov al,ah out dx,al ;将打印数据从端口A输出 例10.1
打印子程序:打印 mov dx,0fffeh ;从PC7送出控制负脉冲 mov al,0 000 111 0B ;置-STROBE=0(有效) out dx,al nop ;产生一定宽度的负脉冲 nop mov al,0 000 111 1B ;置-STROBE =1(无效) out dx,al ;打印机-STROBE端输入负脉冲 例10.1
打印子程序:返回 pop dx pop ax ret printc endp 例10.1
10.2.3 用8255A方式1与打印机接口 打印机 8255A DATA0~7 PA0~PA7 -ACK PC6 ACK -OBF 1 4 LS123 单稳 电路 PC7 STROBE PC3 2 14 3 +5V INTR 15 1000pf 2K 调整-STROBE负脉冲的宽度
8255A方式1与打印机接口时序配合 PA0~PA7 (DATA0~7) OBF STROBE ACK 打印机在方式1工作时的时序
8255A的初始化 mov dx,0fffeh mov al,0a0h ;方式字1 0100 000 out dx,al mov al,0ch ;位控字,令INTEA(PC6)为0,禁止中断 out dx,al …… mov cx,counter ;打印字节数送CX mov bx,offset buffer ;取字符串首地址 call prints ;调用打印子程序 例10.2
打印子程序:输出 prints proc push ax ;保护寄存器 push dx print1: mov al,[bx] ;取一个数据 mov dx,0fff8h out dx,al ;从端口A输出 例10.2
打印子程序:查询 mov dx,0fffch print2: in al,dx test al,80h ;检测PC7,即-OBFA状态 jz print2 ;为0,说明打印机方面未响应, ;继续检测 例10.2
打印子程序:返回 inc bx ;为1时打印机已接收数据 loop print1 ;准备输出下一个数据 pop dx ;打印结束,恢复寄存器 pop ax ret ;返回 prints endp 例10.2
10.2.4 双机并行通信接口 甲方(发送) 方式1 输出 乙方(接收) 方式0 输入 CPU 查询引脚输入 有效时,读数据 并输出应答信号 PA0~PA7 PA0~PA7 CPU查询 中断请求标志, 亦可查询 输出缓冲器状态 PC4 OBF PC7 ACK PC6 PC0 8255A 8255A 两机均采用查询方式工作