8. 7.1.2 8255 外部引脚及内部结构 1. 8255 内部结构 数据 总线 缓冲器 内部控制线 内部数据线 D 0 ~ D 7 A 组 控制 A 组 端口 A A 组 端口 C 上部 B 组 控制 B 组 端口 B B 组 端口 C 下部 读写 控制 逻辑 PC 0 ~ PC 3 PB 0 ~ PB 7 PC 4 ~ PC 7 PA 0 ~ PA 7 RD WR A 0 A 1 CS RESET
9.
10.
11.
12. 与处理器接口 写端口 A 写端口 B 写端口 C 写控制字 写操作 WR* 读端口 A 读端口 B 读端口 C 非法 读操作 RD* 60H 61H 62H 63H I/O 地址 0 0 0 0 0 1 0 1 0 0 1 1 CS* A1 A0
13.
14.
15. 方式 0 输入时序 请体会这里 8255A 的 数据缓冲作用 data data 输入端口 D 0 ~ D 7 RD CS,A 1 ,A 0
16. 方式 0 输出时序 8255A 对 CPU 通过它 输出给外设的数据进行锁存 WR data data 输出端口 D 0 ~ D 7 CS,A 1 ,A 0
17. 方式 1 输入引脚: A 端口 数据选通信号 表示外设已经准备好数据 输入缓冲器满信号 表示 A 口已经接收数据 中断请求信号 请求 CPU 接收数据 PC 4 PC 5 PC 3 PA 7 ~PA 0 INTE A IBF A INTR A STB A 中断允许触发器
18. 方式 1 输入引脚: B 端口 方式 1 需借用端口 C 用做联络信号 同时还具有中断请求和屏蔽功能 PC 2 PC 1 PC 0 PB 7 ~PB 0 INTE B IBF B INTR B STB B 数据选通信号 表示外设已经准备好数据 输入缓冲器满信号 表示 A 口已经接收数据 中断请求信号 请求 CPU 接收数据 中断允许触发器
19.
20. 方式 1 输入时序 STB* 和 IBF 是外设和 8255A 间 的一对应答联络信号, 为的是可靠地输入数据 data INTR IBF data 输入端口 D 0 ~ D 7 STB RD
21.
22. 方式 1 输出引脚: A 端口 外设响应信号 表示外设已经接收到数据 输出缓冲器满信号 表示 CPU 已经输出了数据 中断请求信号 请求 CPU 再次输出数据 征用 C 口 3 引脚和 1 个控制位 PC 6 PC 7 PC 3 PA 7 ~PA 0 INTE A OBF A INTR A ACK A 中断允许触发器
23. 方式 1 输出引脚: B 端口 征用 C 口 3 引脚和 1 个控制位 PC 2 PC 1 PC 0 PB 7 ~PB 0 INTE B OBF B INTR B ACK B 外设响应信号 表示外设已经接收到数据 输出缓冲器满信号 表示 CPU 已经输出了数据 中断请求信号 请求 CPU 再次输出数据 中断允许触发器
24.
25. 方式 1 输出时序 OBF* 和 ACK* 是外设和 8255A 间 的一对应答联络信号, 为的是可靠地输出数据 INTR data data 输出端口 D 0 ~ D 7 WR OBF ACK
26.
27. 方式 2 双向选通引脚 PC6 PC7 PC3 PA 7 ~PA 0 INTE 1 -OBF A INTR A -ACK A PC4 PC5 IBF A -STB A INTE2 数据 输入中断和输出中断 通过或门输出 INTR A 信号 征用 C 口 5 引脚和 2 个控制位 中断允许触发器 (控制中断输出) 通过位控 PC 6 设置 INTE 1 中断允许触发器 (控制中断输出) 通过位控 PC 4 设置 INTE 2 输入联络 输出联络
28. 方式 2 双向时序 data-out INTR data-out data-in data-in PA 0 ~ PA 7 D 0 ~ D 7 IBF WR OBF ACK STB RD
32. 2. 8255 的状态字 8255 的状态字为查询式输入 / 输出数据提供了外设的工作状态,如 IBF 、、 INTR 等。根据 8255 工作在不同的工作方式下,以及各端口作输入、输出的不同情况,状态字的格式有所不同。值得注意的是, C 口的状态字与 C 口各位对外的引脚状态不完全一致。
33. 端口 C 的状态字 方式 1 输入 × × × INTRA INTE2 IBFA INTE1 OBFA INTRB OBFB INTEB INTRA I/O I/O INTEA OBFA 方式 2 双向 方式 1 输出 INTRB IBFB INTEB INTRA INTEA IBFA I/O I/O D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7 A 组 B 组
52. 1 方式控制字 00 计数器 0 01 计数器 1 10 计数器 2 11 非法 00 计数器锁存命令 01 只读写低字节 10 只读写高字节 11 先读写低字节 后读写高字节 000 方式 0 001 方式 1 010 方式 2 011 方式 3 100 方式 4 101 方式 5 0 二进制 1 十进制 控制字写入控制字 I/O 地址( A 1 A 0 = 11 ) 7.2.2 8253 的方式控制字和读 / 写操作 数制 工作方式 读写格式 计数器 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
53.
54.
55. 例 7.4 利用 8253 的计数器通道 2 产生频率为 1000Hz 的方波。设计数时钟脉冲的频率 f= Hz 。其初始化程序如下 : MOV AL , 10110110B ;方式 3 ,通道 2 ,二进制,先低后高 OUT COTR , AL ;写入控制寄存器 MOV AX , 4A7H ;产生 10000Hz 所需的计数初值 =f/1000 OUT CTN2 , AL ; 先写计数初值低字节 MOV AL , AH OUT CTN2 , AL ;再写计数初值高字节
56. 例 7.5 若选择通道 0 ,工作在方式 1 ,计数初值为 2350H ,按十进制计数,并设 8253 的端口地址为 40H ~ 43H ,则初始化程序段为 MOV AL , 33H ;计数器 0 ,方式 1 ,十进制,先低后高 OUT 43H , AL ;写入控制寄存器 MOV AL , 50H ;计数初值低字节 OUT 40H , AL ;写入计数器 0 MOV AL , 23H ;计数初值高字节 OUT 40H , AL ;写入计数器 0
57.
58. 例如 采用锁存读的方法,读取通道 1 的 16 位计数值,其程序段如下: MOV AL , 40H ;方式控制字:通道 1 ,锁存 OUT COTR , AL ;写入 8253 的控制寄存器 IN AL , CNT1 ;第一次读入低 8 位 MOV CL , AL IN AL , CNT1 ;第二次读入高 8 位 MOV CH , AL