第六章 输入 / 输出方式与接口芯片
第一节 输入 / 输出方式
第二节 中断及中断控制器 8259A
第三节 DMA及 DMA控制器 8237A
第四节 可编程定时 / 计数器 8254及其应用 第五节 可编程并行 I/O 接口芯片 8255A 及其应用 第六节 串行通讯及可编程串行接口芯片 16550
第七节 多功能接口芯片 82380
第一节 输入 / 输出方式 一、 I/O接口
第一节 输入 / 输出方式 一、 I/O接口
(1)I/O接口的分类
并行 I/O接口和串行 I/O接口 可编程接口和不可编程接口 专用接口和通用接口
(2)I/O接口的基本结构
主要包含有数据端口、状态端口和控制端口
(3)I/O端口的寻址方式
在一个微机系统中既有存储单元地址又有 I/O端口地址,根据两者地址的不同安排可分为以下两种寻址方式。
a. 存储器统一编址
在这种方式中,把 I/O端口作为存储器的一个单元来对待,即每个端口占用一个存储单元地址。此时,对 I/O端口操作可以使用全部的存储器指令,而不必另设专门的 I/O指令。由于该方式是将 I/O地址映射到了存储器地址空间,所以也称为存储器映像方式。
CPU
译码
存储器
外设
WE
D
RD
A
b. I/O 端口独立编址 在这种方式下, I/O端口与存储器各自独立编址,这样存储器地址和 I/O端口地址可以重叠。此时, CPU利用专门的 I/O指令来操作 I/O端口以防混淆。
二、 CPU与外设之间的数据传送方式
在 CPU与外设之间进行数据传送的方式有:无条件传送、查询传送、中断控制、直接存储器存取( Direct
Memory Access 简称 DMA)传送方式和 I/O处理机方式。(1) 无条件传送方式
适用于随时都是准备就绪的简单外设。接口电路中仅需数据端口。
(2) 查询方式 适用于 CPU与慢速的外设间的数据传送。
读外设状态
准备好?Y
数据输入 / 输出
N
查询式接口电路一般有:数据端口、状态端口、控制端口。
(3) 中断控制方式 适用对象同程序查询方式
该方式下,微机与外设并行工作,外设有请求时,微机对其进行服务,否则不对该外设进行任何操作。这样可大大提高 CPU的利用率。
(4)直接存储器存取( DMA)传送方式 在主存与外设间建立直接数据通道,进行数据传送。有传送过程不需 CPU干预,速度快的特点。其传送过程受专用硬件 DMAC控制。
(5)I/O 处理机传送方式 该方式中, I/O处理机用自己专门的指令和程序,负责输入输出。此时主 CPU将只负责“数据处理”工作。
第二节 中断及中断控制器8259A
一、中断的基本概念什么是中断 在 CPU正常运行程序时,由于内部或外部某个非预料事件
的发生,使 CPU 暂停正在运行的程序,而转去执行处理引起中断事件的程序,然后再返回被中断了的程序,继续执行。这个过程就是中断。
中断服务程序 1
中断服务程序 2
非预料事件 1
非预料事件 2
CPU 执行流程
中断源与中断向量表
中断源 能够引发 CPU 中断的信息源 , 称为中断源。 80X86 微机系统中最多允许有 256种中断源,其中中断源类型编号为 0 ~ 255。 按中断源的性质可以把中断分为内中断和外中断两类。
不可屏蔽中断 (2)
8086 CPU 中断逻辑
INT n指令
INT 3断点
除法出错(0)
单步中断(1)
8259A
可屏蔽中断请求INTO
溢出(4)
NMI
INTR
中断名 中断号 指令 说明除法错中断 0 DIV/IDIV 除数为 0 或商过大单步 1 任何指令NMI 2 INT2 NMI
断点 3 INT3
溢出 4 INTO 在 OF=1 时执行INTO
数组边界检查 5 BOUND
IRQ0~7 8~FH 主 8259A
BIOS 调用 10H~1FH
BOS 功能调用 20H~3FH
IRQ8~15 70~77H 从 8259A
中断源与中断号分配
中断向量表 在实模式下,中断向量表就是中断服务程序入口地址。
中断向量表的设置 当 CPU响应中断时,将从中断向量表中读取中断向量送给 CS和 IP ,转去执行中断服务程序。因此,用户必须将中断服务程序的入口地址填入系统的中断向量表中,填入的方法有两种。
① 用程序设置中断向量表 、、、CLI
MOV AX, 0; 中断向量表段地址是 0
MOV ES, AX
MOV DI, 4*32H
LEA AX, INTSUB
CLD
STOSW ;AX 中的偏移量存入ES:DI
MOV AX, SEG INTSUB
STOSW ;AX 中的段地址存入ES:DI
、、、、、、
INTH :
假设中断类型号为 32H ,中断服务程序入口处的标号为INTSUB 。 中断向量表中先放 ( 小地址 ) 中断服务程序的偏移地址IP, 然后是段地址 (CS) ( 大地址 )
利用 INT 21H 的 25H 号功能可实现设置新中断向量,新中断向量应放在 DS: DX 中。
CLIPUSH DSMOV AX, SEG INTSUB ; INTSUB段基址存入 DSMOV DS, AXMOV DX, OFFSET INTSUB; INTSUB 有效地址存入 DXMOV AL, N ;中断类型号 NMOV AH, 25HINT 21H ;将 DS:DX放置中断向量表中POP DSSTI
② 用 DOS 功能设置中断向量表
用 DOS 功能取出中断向量
利用 INT 21H 的 35H 号功能可实现保存原中断向量,所取得中断向量放在 ES: BX 中。
MOV AL, N; N 为被保存的中断类型号MOV AH, 35H
INT 21H ; ES: BX 中为原中断向量PUSH ESPUSH BX
若要在主程序结束前恢复原中断向量可采用以下程序段实现:
、、、 POP DX
POP DS ;将保存于堆栈的原中断向量弹出,送入; DS:DX
MOV AL , N
MOV AH , 25H
INT 21H
、、、
中断描述符表
80486工作在保护模式下时,采用“中断描述符”来描述中断服务程序,用中断描述符表( IDT)取代中断向量表。 IDT可位于线性地址空间中的任何地方, CPU通过中断描述符表寄存器 IDTR确定 IDT的基地址,该寄存器保存有 32
位的基地址和 IDT界限。
80486保护方式下中断 / 异常处理程序进入过程 乘 8 是因为每个 IDT占用 8 字节
中断优先级与中断嵌套
中断优先级 当有多个中断源同时产生中断申请时, CPU先响应优先权最高的中断源,再响应优先级较低的中断源。
中断嵌套 当多个中断源同时发出中断请求时, CPU按照中断优先权的高低顺序 , 依次响应。这种中断套中断的过程称为中断嵌套。
中断嵌套可以有多级,具体级数原则上不限,主要取决于堆栈区的大小(因为中断处理前后均需要保护断点和现场,而断点信息和现场数据的保护是通过堆栈来完成的)。
CPU响应中断的条件① CPU内部中断是开放的。② 现行指令内无总线请求,没有更高优先级别的中断请求正在被响应或正发出、正挂起。③ CPU在现行指令结束后,即运行到最后一个机器周期的最后一个 T 状态时,才能采样 INTR线而响应可能提出了的外中断请求。
内中断处理过程① CPU自动产生中断类型号 n ;②( SP) -2→( SP),标志寄存器 F 内容入栈;③( SP) -2→( SP),当前代码段 CS内容入栈;④( SP) -2→( SP),当前指令计数器 IP内容入栈;⑤ 禁止外部中断 IF= 0 ,禁止单步中断 TF= 0 ;
中断处理过程
⑥ 从中断向量表中取中断服务程序入口地址( 4*N单元的字内容送 IP, 4*N+ 2 单元里的内容送 CS);⑦ 转中断服务程序;⑧ 执行中断服务程序并返回,弹出 IP, CS, F ,返回断点,继续执行。
外中断( INTR)执行过程① CPU发出两个中断响应信号 INTA,第二个 INTA时, CPU从当前数据总线上取中断类型码 N (通常由管理 INTR的控制器 8259A提供);②( SP) -2→( SP),标志寄存器 F 内容入栈; ③( SP) -2→( SP),当前代码段 CS内容入栈;④( SP) -2→( SP),当前指令计数器 IP内容入栈;⑤ 禁止外部中断 IF= 0 ,禁止单步中断 TF= 0 ;
⑥ 首先从中断向量表中取 4*N单元的字内容送 IP,然后再取4*N+ 2 单元里的内容送 CS;⑦ 转中断服务程序;⑧ 执行中断服务程序并返回,弹出 IP, CS, F ,返回断点,继续执行。
二、中断控制器 82598259A 的内部结构与引脚功能
对 SP/EN引脚说明(1)根据情况,可作为输入或输出使用(2)若是缓冲模式(由 ICW4 的 D3=1决定),则作为输出,作为数据缓冲器的选通线;此时该 8259A是主片还是从片由 ICW4 的 D2决定 : D2=0,从片; D2=1,主片
(3)若是非缓冲模式(由 ICW4 的 D3=0决定),则作为输入,用于区分主片还是从片:为高电平则是主片,低电平则是从片。此时不由 ICW4 的 D2决定主从片关系,所以不关心该位的值。
方 波键 盘保 留串 口 2
硬 盘软 盘
打印机
IOW
18.2Hz
A0
CS
8259A
总线
A0
数 据 线
IOR RD
WR
片选译码
IR0IR1IR2IR3IR4IR5IR6IR7
A5~
A9
D0~
D7
D0~
D7
Vcc
SP/ENCAS0CAS1CAS2
GND
+ 5V
20~3FH 用于多片8259A
级连情况INTAINT
INTA INTR
串 口 1
8259A 与总线的连接
8259A 的中断优先权管理方式 8259A有五种优先级管理方式,所有的优先级管理方式均可通过编程来设置。
⑴ 全嵌套方式 ( 由 ICW4设置 )( 普通方式 , 不需写 OCW1-3,IRQ0优先级最高 ,IRQ7优先级最低 )
⑵ 特殊全嵌套方式 ( 由 ICW4设置 )( 适用于 8259A级联的系统 , 在从片有中断时 , 主片不封锁从片 INT输入端 )
⑶ 优先级自动循环方式 ( 由 OCW2设置 )( 某中断源被响应中断后 , 其优先级自动排为最低 )
⑷ 优先级特殊循环方式 ( 由 OCW2设置 ) ( 可指定最低优先级 )
⑸ 特殊屏蔽方式 ( 由 OCW3设置 ) ( 可屏蔽高优先级 , 开放低优先级中断 )
8259A 处理过程
分两步 :
⑴ 处理外设中断申请,决定是否向 CPU发中断申请信号。
⑵ 若发出中断申请信号,且 CPU响应,则在 CPU中断响应周期送出中断类型号。
8259A 中断处理过程
IOR
IOW
数 据 线D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中 断屏蔽寄存 器 IMR 0 0
OCW2 优先级、 发EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
1 0 0 1 0 1 0 0
INTR
10
00
01
00
00
00
00
00
1中断未屏蔽优先级高
01
IF=1
执行中断程序
EOI
0
① 取中断类型号 N
② 当前 PSW 的内容入栈③ 当前 CS 的内容入栈④当前 IP 的内容入栈⑤清 IF、 TF标志为 0
⑥ 取内存单元 ( 0 : N ×4 )字内容送 IP 取中断子程⑦ 取内存单元 ( 0 : N ×4 + 2 )字内容送 CS 入口地址 此时 CS:IP 指向中断程序的入口,开始执行中断程序。
CPU响应中断过程:
保存现场
执行完中断子程中最后一条指令 IRET后,返回被中断处,继续执行被中断的程序。
发中断结束命令 EOI 由 8259A 的工作过程可知: ISR 中的内容是优先级裁决器进行裁决的重要依据 ,CPU响应某级中断后, 8259A 自动将 ISR 的对应位置 1 ,如果 CPU已执行完中断子程,而 ISR 中的对应位仍为 1, 8259A 的优先级裁决器仍会据 ISR 的内容做裁决,从而会屏蔽同级的中断申请。因此,在中断响应后,对 ISR 中相应位的清 0很重要,它是 8259A认为中断结束的标志。① 自动结束方式
8259A 在接收到第二个中断响应脉冲 INTA 时就会自动清除 ISR 中的相应位。该方式只能用在系统中只有一片 8259A且多个中断不会嵌套的情况下。 ② 非自动结束方式※ 一般结束方式 8259A 在接收到一般结束命令时,就会把 ISR 中最高优先级的 1复位,结束当前正在处理的中断。该方式适用于 8259A 工作在全嵌套方式下的情况。 ※ 特殊结束方式 当 8259A 工作在非全嵌套方式下,可选特殊结束方式。该方式下,通过命令使 8259A ISR 中的指定位复位,结束当前中断。
8086CPU如何获取中断类型号 由前面介绍知,当中断源产生中断请求后,不论是内中断、非屏蔽中断,还是可屏蔽中断,只要满足响应条件,在执行完当前指令后, CPU
内部硬件会自动完成响应中断的过程 ,共七个步骤,而第一步就是获取中断类型号。
不同的中断源, 8086CPU 获取中断类型号的方法不同,一般具有以下几步:
① CPU从引脚 INTA 发中断响应信号,接口芯片接收此信号,把中断类型号准备好;同时 ISRi=1,IRRi=0 。
② CPU 再从引脚 INTA 发中断响应信号,接口芯片接此信号后,将中断类型号送至数据总线上;
③ 从数据总线获取中断类型号。
④ CPU 根据读取到的中断类型号寻找中断程序的入口地址。
8259A 的编程
8259A 中断控制器内部有 9个可读写的寄存器
1 × I3 I4ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
处理部分
控制部分
000 0 0 0 0 0
ISR当前中断服务寄存器
PR优先级裁决器
IRR中断申请寄存器
000 0 0 0 0 0
中 断 屏 蔽 寄 存 器 IMR
OCW2
1 0 0 1 0 1 0 0
0 0
0 1
OCW3
OCW1
8259A 有两个 I/O 端口地址
• 对 9 个寄存器的读写均通过这两个端口实现
写入数据的特征位
• 写入的先后顺序
区分是对哪个寄存器进行操作
根据
1 × I3 I4ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
处理部分
控制部分
000 0 0 0 0 0
ISR当前中断服务寄存器
PR优先级裁决器
IRR中断申请寄存器
000 0 0 0 0 0
中断屏蔽寄存器
OCW2
1 0 0 1 0 1 0 0
0 0
0 1
OCW3
OCW1
D0~
D7
A0
CS
RD
WR
8
0
1
1
1
A01
0
0
A0
8259A 的初始化编程8259A 的初始化编程的顺序及内容① ICW1
A0 D7 D6 D5 D4 D3 D2 D1 D0
0 × × × ×1 LTIM SNGL IC4
② ICW2
A0 D7 D6 D5 D4 D3 D2 D1 D0
1 T7 T6 T5 ×T4 T3 × ×
③ ICW3
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
④ ICW4A0 D7 D6 D5 D4 D3 D2 D1 D0
1 T7 T6 T5 ×T4 T3 × ×
0:不要 ICW41:要 ICW4
0:有级连1:无级连
0:边沿触发1:电平触发
标志
中断号高 5位
主片 ,1:有从片从片 , 低 3 位代表位置
0:非缓冲1:缓冲
0:一般嵌套1:特殊嵌套
8259A 的操作编程① OCW1
A0 D7 D6 D5 D4 D3 D2 D1 D0
1 M7 M6 M5 M2M4 M3 M1 M0
② OCW2
A0 D7 D6 D5 D4 D3 D2 D1 D0
0 R SL EOI L20 0 L1 L0
③ OCW3
A0 D7 D6 D5 D4 D3 D2 D1 D0
0 0 ESMM SMM P0 1 RR RIS
D7 D6 D5
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
功 能
清除自动循环优先级命令
发出 EOI
无操作
发 出 SEOI ( special end of interruption)
设置自动循环优先级命令
设置自动循环优先级并发 EOI
设置特殊循环优先级命令
设置特殊循环优先级并发 SEOI
OCW2 的 D7 ~ D5 位的功能说明
教材 P178,P179页有错
0:中断开放
最低优先级编码1:最低优先级有效
1:发结束命令1:优先级循环
1 0 :读IRR
1 1 :读ISR
1:查询1 0 :特殊屏蔽清除 1 1 :特殊屏蔽设置
OCW3 的的几种用法
1) 向 8259A 送入 D2 = 0 、 D1D0 = 10B 的 OCW3 指令后,向着 8259A 偶地址的读指令可读入中断请求寄存器IRR的内容;
2)若 D1D0 = 11B,则可读入中断服务寄存器 ISR的内容。
3) 送入 8259A的 OCW3的 D2= 1 时,可使 8259A进入查询工作方式(非中断方式)。读取 8259A偶地址( A0=0 ),可得到 8259A 的状态字,若状态字的 D7= 1 ,表示8259A的 IR7~ IR0中有中断请求发生, D2~ D0给出了最高优先级中断请求的编码;若 D7= 0 ,则表示没有中断请求发生。
通过往奇地址端口写入 IMR 内容实现 (即 OCW1)
对应位为 0 ,允许该级中断申请进入 对应位为 1 ,禁止该级中断申请进入
对 8259A 的奇地址的读指令可读得中断屏蔽寄存器 IMR 的内容,也可修改 IMR的内容。
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
000 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中 断 屏 蔽 寄 存 器 IMR 0 0
OCW2 优 先 级 、 发EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 1 0 0
INTR
新增允许 IR2 的中断申请 IN AL, 21H ; 读入原 IMR 的内容 AND AL, 1111 1011B ;D2=0, 允许 IR2 的中断申请 OUT 21H, AL ;写入 IMR(OCW1) 禁止 IR4 的中断申请 IN AL, 21H ; 读入原 IMR 的内容 OR AL, 0001 0000B ;D4=1,禁止 IR4 的中断申请 OUT 21H, AL ;写入 IMR
例 已知 IBM PC/XT 系统中 8259A 的奇地址端口地址为21H
8259A在 PC 中的基本应用
从8259A
IRQ8IRQ9
IRQ10IRQ11IRQ12IRQ13 IRQ14IRQ15
主8259A
IRQ0IRQ1
IRQ3IRQ4IRQ5 IRQ6IRQ7
INT至 CPU
INT中断路由器
IRQ
7IR
Q6
IRQ
5IR
Q4
IRQ
3IR
Q2 ISA总线
PCI
总
线
PCI
总
线
系统时钟键盘
主、从 8259A级连的中断控制逻辑
主片的端口地址: 20H, 21H
从片的端口地址: A0H, A1H
8259A各中断请求的功能分配情况中断申请引脚
IRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6IRQ7IRQ8IRQ9
IRQ10IRQ11IRQ12IRQ13IRQ14IRQ15
中断类型号08h09h0Ah0Bh0Ch0Dh 0Eh0Fh70h71h72h73h74h75h76h77h
哪个设备使用系统时钟 (8254)
键盘连接从 8259
COM2 串口 2COM1 串口 1
保留软盘控制器LPT1 并口
实时时钟 (RTC)保留 (软件指向 0Ah 类型 )
保留显卡鼠标
数值协处理器硬盘控制器保留
主、从 8259A 的中断结束命令
对主 8259A 有:
MOV AL, 20H ; EOI命令
OUT 20H, AL ;写主片的 OCW2
IRET
对从 8259A 有:
MOV AL, 20H ; EOI命令,
OUT 0A0H, AL ;写从片的 OCW2
IRET
8259A 编程总结
操作 寄存器 地址 (A0) 数据 说明写 ICW1 0 D4D3:1x 触发方式 , 是否级联等
写 ICW2 1 定义中断号写 ICW3 1 定义级联写 ICW4 1 定义嵌套与结束方式写 OCW1 1 中断允许与屏蔽写 OCW2 0 D4D3:00 定义循环方式 / 写
EOI(20h)
写 OCW3 0 D4D3:01 定义屏蔽方式 / 查询等功能
读 IRR 0 写 OCW3 (D1D0:10)
读 ISR 0 写 OCW3 (D1D0:11)
读 IMR 1
查询 0 写 OCW3 (D2:1)
8259A 编程方法
ICW1 ( 0 ) 、 ICW2 ( 1 ) 、 ICW3 ( 1 ) 、 ICW4( 1 )通常由 系统初始化
OCW1 ( 1 )中断屏蔽OCW2 ( 0 )特殊操作(如 EOI 等)OCW3 ( 0 )特殊命令(如读命令)中断编程( 1 )确定奇地址、偶地址(如 20H 、 21H )( 2 )写 OCW1( 3 )开 IF ( STI )( 4 )设置中断向量( 5 )在中断服务程序中写 OCW2 (发 EOI )( 6 )如需要 , 读 ISR 、 IRR 、 IMR
中断程序例子 如图 , 中断程序从初值 0 开始对开关 K 的按
键 次 数 计 数 , 并 在 CRT 上 显 示 次 数( 0,1,2…F ),到 F 后结束程序。
CODE SEGMENT ASSUME CS:CODE
START:MOV AX,350BHINT 21H
PUSH ES PUSH BX ; 保留原中断向量 ;////////////////////////////////////////////
MOV AX,SEG INTPROCMOV DS,AXMOV DX,OFFSET INTPROCMOV AX,250BHINT 21H ; 设置新的中断向量
IN AL,21HAND AL,0F7HOUT 21H,AL ;8259 的 IR3 不屏蔽STI ;CPU 中断开放
MOV CX,0MOV DL,'0'MOV AH,2INT 21H
WAIT0: CMP CH,1 ;产生中断后给出标志 JNZ WAIT0 MOV CH,0
MOV DL,CL;CL 记录中断次数AND DL,0FHCMP DL,9JBE NEXTADD DL,7
NEXT: ADD DL,30H MOV AH,2
INT 21HCMP CL,0FH
JNZ WAIT0
;//////////////////////////
POP DX POP DS MOV AX,250BH INT 21H ; 恢复原中断向量
;///////////////////////////////////////// MOV AH,4CH INT 21H
INTPROC PROC FAR ; 中断程序 INC CL ; 计数值 +1
MOV CH,1 ; 产生中断的标志MOV AL,20H
OUT 20H,AL; 发结束命令IRET ; 中断返回
INTPROC ENDP
CODE ENDS
END START
第四节 可编程定时器 / 计数器 8254及其应用
微机系统实现定时功能,主要有三种方法:软件定时、不可编程硬件定时和可编程硬件定时。
软件定时是通过执行一个固定的程序段来实现定时。由于 CPU
执行每条指令都需要一定时间,因此执行一个固定的程序段就需要一个固定的时间。定时或延时时间的长短可通过改变循环次数来控制。
不可编程的硬件定时常采用中小规模集成电路实现。如使用 555
定时器等,硬件定时方案不占用 CPU时间,但电路连接好后,定时值就不能改变。
可编程硬件定时用可编程定时器 / 计数器来实现,本节主要介绍IBM PC系列微机使用的 Intel 8254可编程定时器 / 计数器。
一、 8254的内部结构和引脚功能(24pin)
计数器 0 、 1 、 2 的内部结构
16位初值寄存器由 CPU分两次写入
16位减 1 计数器:在CLK的作用下, 对计数初值 N 进行减 1 ,当减为 0 时 , 在 OUT引脚上产生回零时间到信号
16位锁存器其值随减 1 计数器改变而改变
二、 8254的工作方式
三、 8254的编程
1. 方式控制字 (A1 A0: 1 1)
2. 计数初值( N )
定时时间T=
CLK时钟周期 tCL×计数初值( N ) N=T/tCL
• 关于初值计算问题 , 设输入 CLK 频率为 f,周期为 T=1/f, 设初值为 N, 以方式 3 为例 :
从图可以看出 , 在方式 3 为方波方式 , 若初值设为 N,则 OUT 脉冲的高电平占 N/2 个 CLK 周期 , 低电平也为 N/2 个 CLK 周期 ( 设 N 为偶数 ), 也就是 OUT 的周期为 CLK 周期的 N 倍 , 则 OUT 脉冲的频率为 CLK的 1/N, 即若初值为 N, 则输出时钟是输入时钟频率的1/N
D7 D6 D5 D4 D3 D2 D1 D0 A1A0
0 0 0 0 x x x x 1 1 0 1 1 0
写初值 (若选择先低后高时应写 2次 )A1 A0: 0 0 通道 0, 0 1 通道 1, 1 0 通道 2
3.写命令字(1)锁存命令字 : 将指定通道的 CE 存入 OL
D7 D6 D5 D4 D3 D2 D1 D0
(2) 读回命令字 : 将选定(可多个)通道的 CE 或(和) SR 存入 OL及SL
1 1 0 0 1 1 1 0 1 1 存 CE 存 SR 通道 2 通道 1 通道 0
A1A0
D7 D6 D5 D4 D3 D2 D1 D0 A1A0
OUT 状态 D5 D4 D3 D2 D1 D0 :同控制字 0 0 0 1
1 0
4.读 OL :在某通道 CE 被锁存后读出A1 A0: 00 通道 0, 01 通道 1, 10 通道 2
5.读 SL :在某通道 SR 被锁存后读,若 SL、 OL 同时有效,则先读SL
D6 0 :可读计数 1 :无效计数
8254编程总结 功能 端口 D7 D6 D5 D4
写通道的方式控制字,对用到的每个通道各写一次
3 ( 1 1 ) 0 00 11 0
0 11 01 1
写锁存命令字,只锁存计数值,对用到的每个通道
各写一次
3 ( 1 1 ) 0 00 11 0
0 0
写读回命令字,可一次锁存所有通道的计数和状态
值
3 ( 1 1 ) 1 1
写初值或修改初值 0 ( 00 )通道 0
1 ( 01 )通道 1
2 ( 10 )通道 2
读计数值 0 ( 00 )通道 0
1 ( 01 )通道 1
2 ( 10 )通道 2
读状态值 0 ( 00 )通道 0
1 ( 01 )通道 1
2 ( 10 )通道 2
三、 8254在 PC中的应用 PC使用一片 8254,其 3 个计数通道分别用于日时钟计时、 DRAM刷新定时和控制扬声器发声声调
定时中断和定时刷新MOV AL, 36H ; 00110110 计数器 0 为方式 3 ,采用二进制计数,先低后高写入计数值OUT 43H, AL ;写入方式控制字MOV AL, 0 ;计数值为 0OUT 40H, AL ;写入低字节计数值OUT 40H, AL ;写入高字节计数值注 :1.19318M/65536=18.206Hz 周期为 55ms
MOV AL, 54H ; 01010100 计数器 1 工作为方式2 ,采用 二进制计数,只写低 8 位计数值 , 方式二是频 率发生器OUT 43H, AL ;写入方式控制字MOV AL , 18 ; 计 数 初 值 为 18; 18*1/1.19=15.084uSOUT 41H, AL ;写入计数值
扬声器控制 ;发音频率设置子程序; 入口参数: AX=1.19318×106÷发音频率SPEAKER PROC
PUSH AX
MOV AL, 0B6H ; 10110110 定时器 2 为方式 3 , ; 先低后高写16位计数值
OUT 43H, AL POP AX OUT 42H, AL ;写入低 8 位计数值 MOV AL, AH OUT 42H, AL ;写入高 8 位汁数值 RET
SPEAKER ENDP
注 :61H:8255B口SPEAKON PROC ;扬声器开子程序
PUSH AX IN AL, 61H ;读取 61H端口的原控制信息 OR AL, 03H ; D1D0= PB1PB0= 11B,
其他位不变 OUT 61H, AL ;直接控制发声 POP AX
RETSPEAKON ENDPSPEAKOFF PROC ;扬声器关子程序 PUSH AX
IN AL, 61H AND AL, 0FCH ; D1D0= PB1PB0= 00B,
其他位不变 OUT 61H, AL ;直接控制闭音 POP AX RETSPEAKOFF ENDP
可编程硬件延时 采用日时钟延迟 5S,日时钟中断来自 8254的 OUT0,接到主片 8259的 IRQ0,周期约 55mS
;延时开始MOV AH, 0 ;读取日时钟功能调用(附录 5 )
INT 1AH ;返回 : CH:CL 时 : 分 ;
DH:DL 秒 : 时钟中断次数(55mS,1/18 S)
ADD DX, 90 ;加 5 秒( 5×18= 90) MOV BX, DX ;期望值送 BX
L1: INT 1AH ;再读日时钟 CMP BX, DX ;与期望值比较 JNE L1 ;不等,则循环 …… ;相等,则延时结束
可编程硬件延时
采用实时时钟中断可实现更短延时 . 实时时钟中断周期为976uS,接到从片 8259IRQ0(即 IRQ8,中断号 70h),延迟时间必须是 976uS的倍数 .
下面程序实现 2mS延时
MOV CX, O ;CX:DX延迟的微秒数 .
MOV DX, 1952 ;延时 1.952MS= 2×976uS
MOV AH, 86H
INT 15H ;功能调用返回时,定时时间到
第五节 可编程并行 I/O接口芯片 8255及其应用 并行传送是主机与外设之间交换信息的一种基本方式,其特点是
数据的各位同时传送。 8255是一种通用可编程并行 I/O接口芯片,在 PC中常用于传递键盘信息、扬声器信息等。
一、 8255的内部结构和引脚功能
二、 8255的工作方式8255A有三种工作方式: 方式 0 、 方式 1 、 方式 2
1.方式 0 :基本输入输出方式
这种方式下,端口与外设间不需要联络信号。 8255A的 3 个端口都可以工作在该方式下,并由控制字规定为输入或输出。当 8255A
的端口工作在方式 0 时, CPU只要用输入或输出指令就可以与外设进行数据交换。因此,方式 0 也称为无条件的输入 / 输出方式。
2.方式 1 :选通输入输出方式
这种方式下,只有 A 口和 B 口可以作为 8 位的输入或输出端口, C 口主要作为 A 、 B 两个端口输入 / 输出时的联络信号。且 A 口和 B 口无论输入或输出都有数据锁存功能。该方式下 CPU与 8255A间可以用中断方式或查询方式进行信息交换。
选通输入方式
A 口、 B 口中有一个为方式 1 时,余下 13根可为方式0 (入 / 出)A 口、 B 口同为方式 1 时,余下 2 根 C 口线可为输入 / 出联线定义固定,不可更改 .
选通输入方式方式 1 工作时序,分为输入与输出
选通输入方式端口 A 和端口 B 工作于方式 1 的输入方式时,其引脚和时序如下
选通输出方式端口 A 和端口 B 工作于方式 1 的输出方式时,其引脚和时序如下
3.方式 2 :双向选通方式 方式 2 是将方式 1 的选通输入输出功能组合成一个双向数据端口,外设利用这个端口既能发送数据,又能接收数据。 8255A只有端口 A 可以工作于方式 2 ,端口 A 工作在方式 2 的引脚和时序如下:
三、 8255的编程1. 方式选择控制字
2. C口按位置位 / 复位控制字
3.初始化举例 例如,若规定端口 A 为方式 1 输出,端口 C 上半部分为输出,端口 B 指定为方式 0 输入,端口 C 下半部分为输入,则方式选择控制字应是:1 01 0 0 0 1 1 B 或 A3H。 若将此控制字的内容写入 8255A 的控制寄存器,即完成了对8255A的初始化。初始化程序段为: MOV DX , 20bH ;假设控制端口的地址为20bH
MOV AL, 0A3H ;方式选择控制字 OUT DX, AL ;送到控制端口 又如:要使端口 C 的 PC5置“ 1”, PC2置“ 0”,可通过下面的程序段实现(假设 8255A的控制端口地址为 20BH):
MOV AL , 0BH ; 0 000 101 1 PC5置“ 1”
MOV DX,20BH
OUT DX, AL ;送到控制端口 MOV AL , 04H ; 0 000 010 0 PC2置“ 0”
OUT DX, AL ;送到控制端口
四、 8255A的应用1.8255A 在 PC 中的应用
PC使用一片 8255A管理键盘、控制扬声器和输入系统配置开关的状态等。这片 8255A的端口 A 、 B 、 C 和控制口的地址分别为 60H、 61H、 62H和 63H。 在 PC机中, 8255A工作在基本输入 / 输出方式。端口 A为方式 0 输入,用来读取键盘扫描码。端口 B 工作于方式 0 输出, PB6和 PB7控制键盘接口电路、 PB0和 PB1控制扬声器发声。端口 C 为方式 0 输入,存放系统配置开关的状态。这样,系统利用如下两条指令就完成了 8255A的初始化编程: MOV AL, 100 1 1 0 0 1B ; 8255A的方式控制字99H OUT 63H, AL ;设置端口 A 和端口 C 为方式 0 输入、端口 B 方式 0 输出 80286 以上的微机系统中,由其他的多功能芯片取代了8255A 的功能,为了保证和低档微机的兼容性,系统仍使用8255A的口地址,仍然可从 60H端口地址读取按键扫描码,可使用 PB0和 PB1来控制发声系统。
2. 8255A 在简单输入输出中的应用 设系统中外扩了一片 8255A和相应的实验电路,如图所示。
要求每按一次 K 键,则使发光二极管 LEDi的状态随开关 Ki的状态变化( Ki闭合, LEDi亮; Ki断开, LEDi灭 , 需将读入的状态取反)。主机键盘有任意键按下结束。
按查询方式完成该例 , 方式选择控制字为: 1 000 0 11
0B,即 86H.参考程序如下: CODE SEGMENT
ASSUME CS: CODEMAIN: MOV AL, 86H
OUT 83H, AL ;写入方式选择控制字AGAIN: MOV AH, 1
INT 16H ;键盘有键按下?(无按键时 ZF=1)JNZ DONE ;有 ,ZF=0,转 DONEIN AL, 82H ;读 8255A C口TEST AL , 00000010B ; K 键已按 下 ( IBFB 即
PC1=1)?JZ AGAIN ;没有,重复IN AL, 81H ;读 8255A B口NOT ALOUT 80H, AL ;输出到 8255A 口JMP AGAIN
DONE: MOV AH, 4CHINT 21H
CODE ENDSEND MAIN
按中断方式完成该例 , 方式选择控制字为: 10000110B ,即 86H.
INTEB 为 1 ,即将 PC2置“ 1”,其控制字为: 00000101B或 05H,参考程序如下: CODE SEGMENT
ASSUME CS: CODE MAIN: MOV AL, 86H
OUT 83H, AL ;写入方式选择控制字MOV AL, 05HOUT 83H, AL ; PC2=1( INTEB=1)MOV AX, 0MOV DS, AXMOV BX, 0AH*4 ; IR2,0A号中断LEA AX, INTSUB ;填充中断向量表MOV [BX], AXMOV AX, SEG INTSUBMOV [BX+2], AXIN AL, 21H ;读 8259A的 IMRAND AL, 11111011BOUT 21H, AL ;开放 8259A IR2的中断STI ;开中断
AGAIN: MOV AH, 1INT 16H ;键盘有键按下?JZ AGAIN ; ZF=1,没有,等待MOV AH, 4CHINT 21H ;返回 DOS操作系统
INTSUB PROC FAR
IN AL, 81H ;读 8255A端口 BNOT ALOUT 80H, AL ;输出至 8255A端口 AMOV AL, 20HOUT 20H, AL ;中断结束命令IRET ;中断返回
INTSUB ENDP
CODE ENDSEND MAIN