资源描述
实验五 基本 IO 口扩展与8259中断实验
一、实验目的
1. 了解 TTL 芯片扩展简单 I/O 口的方法;
2. 掌握数据输入输出程序编制的方法。
3. 掌握 8259A 中断控制器的工作原理;
4. 掌握 8259A 可编程中断控制器的应用编程。
二、实验设备
1. PC 机一台
2. QTH-8086B 16 位微机教学实验仪一套
三、实验说明
1. 74LS244 是一种三态输出的8总线缓冲驱动器,无锁存功能,当 G 为低电平时,Ai 信号传送到Yi,当为高电平时,Yi 处于禁止高阻状态。
2. 8259A中断控制器
中断控制是微机系统的主要管理方式之一,也是处理器与外设之间通信的最有效方法之一。它可
74LS273 是一种 8D 触发器,当 CLR 为高电平且 CLK 端电平正跳变时,D0——D7 端数据被锁存到8D 触发器中。
以减少系统为反复查询外部设备状态而消耗的时间,提高了系统的整体运行效率。在现代 16 位微机
系统中,系统的中断有两类:软件中断和硬件中断。硬件中断可以实现微机系统对外设的管理,由
8259 中断控制器来完成。
(1)8259 控制器的介绍
中断控制器 8259A 是 Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、
辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对 8259A 进行编程,
就可以管理 8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,
在不需增加其它电路的情况下,通过多片 8259A 的级连,能构成多达 64 级的矢量中断系统。它的管
理功能包括:①记录各级中断源请求,②判别优先级,确定是否响应和响应哪一级中断,③响应中断
时,向 CPU 传送中断类型号。8259A 的内部结构和引脚如图 3-2-1 所示。
8259A 的命令共有 7 个,一类是初始化命令字,另一类是操作命令。8259A 的编程就是根据应用
需要将初始化命令字 ICW1~ICW4 和操作命令字 OCW1~OCW3 分别写入初始化命令寄存器组和操作命令寄
存器组。ICW1-ICW4 各命令字格式如图 3-2-2 所示,OCW1-OCW3 各命令字格式如图 3-2-3 所示,其中
OCW1 用于设置中断屏蔽操作字,OCW2 用语设置优先级循环方式和中断结束方式的操作命令字,OCW3
用语设置和撤消特殊屏蔽方式,设置中断查询方式以及设置对 8259 内部寄存器的读出命令。
10
QTH-*086B 实验系统说明书
图 2 8259 内部结构和引脚图
A0
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
*
1
LTIM
ADI
S*GL
I*4
8086/88 不用
8*86/88 不用
特征位
0:边沿触发
无效
0:单片使用
0:不需要 ICW4
1:电平触发
1:多片级联
图 3 (a) ICW1 格式
A0
D7
*6
D5
D4
D3
D*
*1
D0
1
中断类型高 5 位
8086/88 不用
图 3 (b) ICW2 格式
A0
D7
D6
*5
**
D3
*2
D1
D0
1
S*
*6
S5
*4
S*
S*
*1
S0
主片
A0
D7
D*
D5
D4
D*
D2
D1
D0
1
不可用
*D2
ID1
ID0
从片
图 3 (c) *CW3 格式
A0
D*
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
SFN*
B*F
*/S
AEOI
UPM
图 3 (d) ICW4 格式
11
QTH-808*B 实验系统说明书
图4 8259 命令字格式
(2) 8259 寄存器及命令的控制访问
在硬件系统中,8259 仅占用两个外设接口地址,在片选有效的情况下,利用 A0 来寻址不同的寄
存器和命令字。对寄存器和命令字的访问控制如表 3-1 所示。
表 3-1 8259 寄存器及命令的访问控制
A0
D4
D3
读信号
写信号
片 选
操 作
0
*
1
0
读出 *SR,IR* 的内容
1
0
1
0
读出 IMR 的内容
*
0
0
1
0
0
写入 OCW*
0
0
1
1
0
0
写入 *CW3
0
1
X
1
0
0
写入 ICW1
1
X
X
1
0
0
写入 OCW1,ICW2,ICW3,I**4
(3) PC 微机系统中 8259A 的应用
在现代 PC 微机系统中,系统中包含了两片 82*9A 中断控制器,经级连可以管理 16 级硬件中断,
其中部分中断源已经被系统硬件占用,具体使用情况如表 3-2 示。两片 8259A 的端口地址为:主片
在 020H-03FH,实际使用 020H 和 021H 两个端口;从片在 0A0H-0BFH 范围,实际使用 0A0H 和 0A1H 两
个端口。
*2
QTH-8086B 实验系统说明书
表 3-2 PC 微机系统中的硬件中断
中 断 源
功 能
中断向量号
中 断 源
功 能
中断向量号
主 8259A IRQ0
定时中断
08*
主 8259A IR*8
实时钟
*0H
主 8259A IRQ1
键盘中断
09H
主 825*A IRQ9
保留
7*H
主 *259A IRQ2
接从 8259A
0AH
主 8259A *RQ1*
保留
72H
主 8259A I*Q3
*OM2
0BH
主 825*A IRQ11
保留
73H
主 *259A IR*4
*OM*
*CH
主 8*5*A **Q12
保留
74H
主 *259* I**5
硬盘/并口 2 中断
0*H
主 82*9* IRQ1*
写处理中断
75H
主 8*59A IRQ6
软盘
0E*
主 8**9A IRQ1*
硬盘控制器
76H
主 82*9A IRQ7
打印机
**H
主 *259A IRQ15
保留
*7H
四、实验原理图
图 1 7LS244 与 74LS273 扩展 I/O 口原理图
五、实验内容
1. 利用 74LS244 作为输入口,读取开关状态,并将此状态通过 74LS27* 驱动发光二极管显示出来。
2. 用脉冲作为中断源,编写一实验程序,完成按键中断的响应,每产生一次按键中断,中断次数加1。通过并行接口芯片8255,将中断号和中断次数分别从8255的A口和B口送两排8个LED灯分别显示出来,拨动开关 KN09 观察数码管的变化;改变中断输入,观察显示变化。
六、实验步骤
1. 基本I/O扩展
(1) 实验连线:
244 的 CS——MCU 主模块的地址 A15,Y7~Y0——开关 K01—K08。
273 的 CS——MCU 主模块的地址 A14,Q7~Q0——发光二极管 L1—L8。
该模块的 WR、RD 分别连到 MCU 主模块的 WR、RD。
该模块的数据(AD0~AD7)连到 MCU 主模块的数据(AD0~AD7)。
(2) 运行程序:IO.ASM
(3) 拨动开关,观察发光二极管的变化
2. 8259中断实验
(1)实验连线:
n 8259 模块选通线 CS 连到 MCU 主模块的地址 A14。
n 8259 模块的 WR、RD 分别连到 MCU 主模块的 WR、RD。
n 8259 模块的数据(AD0~AD7)、地址线(A0~A7)分别连到 MCU 主模块的数据(AD0~AD7)、地址线(A0~A7)。
n 8259 模块的 INTA 接 MCU 主模块的的 INTA,INT 接 MCU 主模块的 INTR,IRx(指 IR0~IR7 中的任一个)接信号源模块的 1H。
n 8255 模块的 WR、RD 分别连到 MCU 主模块的 WR、RD。
n 8255 模块的数据(AD0~AD7)、地址线(A0~A7)分别连到 MCU 主模块的数据(AD0~AD7)、地址线(A0~A7)。
n 8255 模块选通线CE 连到 MCU 主模块的地址 A15。
n 8255 模块的 A口PA0-PA7接发光二极管 L9—L16;B口PB0~PB7接发光二极管L1—L8。
(2) 运行程序:INTR.ASM。
七、实验报告要求:
1. 给程序未加注释的语句加上注释;
2. 分别写明两个实验中连线操作各步骤的目的和作用;
3. 改变与各芯片CS连接的地址线,端口地址做何修改?
4. 归纳总结LS244和LS273的作用及其编程方法;
4. 归纳总结中断编程步骤;
5. 总结比较I/O接口查询方式与中断方式的各自的特点。
七、源程序清单及其每句的注释
1、基本I/O扩展:IO.ASM
LS244 EQU 7000H ;定义LS244端口地址
LS273 EQU 0B000H ;定义LS273端口地址
DATA SEGMENT ;数据段
A DB 20 DUP(0)
DATA ENDS
STACK SEGMENT STACK ;堆栈段
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE, SS:STACK,DS:DATA
ORG 0100H ;段程序的起始地址
MAIN: MOV AX, DATA
MOV DS, AX ;设置数据段
MOV AX, STACK
MOV SS,AX ;设置堆栈段
MOV SP,9000H
MOV DX,LS244 ;LS244地址给DX,读取开关状态
IN AL,DX ;输入开关状态到AL
MOV DX,LS273 ;LS273地址给DX,读取二极管状态
OUT DX,AL ;AL内容送LED显示
JMP MAIN ;无条件跳转,循环MAIN
CODE ENDS
END MAIN
2. INTR.ASM
;数据线、地址线
;8255读写信号接WR、RD,选通信号CE接A15,PA0-PA7接发光二极管 L16—L9;
;PB0~PB7接发光二极管L8—L1。
;8259读写信号接WR、RD,选通信号CS接A14,INTA接INTA,INT接INTR,IR0接脉
;冲电路的上升沿用
A82590 EQU 0B000H ;设8259A,A0端口地址是0B000H
A82591 EQU 0B001H ;设8259A,A1端口地址是0B001H
A8255 EQU 7000H ;设8255A0端口地址是7000H
B8255 EQU 7001H ;设8255B0端口地址是7001H
C8255 EQU 7002H ;设8255C0端口地址是7002H
D8255 EQU 7003H ;设8255D0端口地址是7003H
DATA SEGMENT ;数据段
NUM DB ? ;中断类型 为字节型
TIMES DB 0 ;设置中断次数初始值是0
DATA ENDS
STACK SEGMENT STACK ;定义堆栈段
DB 40 DUP(0) ;堆栈段开40字节空间,初始化为0
STK_TP DB 0 ;栈顶指针地址赋值为0
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE, DS:DATA, SS:STACK,ES:DATA
ORG 0100H ;设置段程序的起始地址
MAIN: MOV AX, DATA ;
MOV DS, AX ;设置数据段地址在DS中
MOV AX, STACK
MOV SS,AX ;设置堆栈段地址在AX中
LEA SP, STK_TP ;设置栈顶指针地址
MOV DX, D8255 ;8255D控制端地址给DX
MOV AL, 80H ;给AL送80H
OUT DX, AL ;设置8255A、B、C口,为基础输出
MOV AL, 0FFH; ;0FFH给AL
MOV DX, A8255 ;8255A口端口地址存入DX
OUT DX,AL ;AL中内容输出至8255A口
MOV AL,0FFH ;0FFH给AL
MOV DX, B8255 ;8255B口端口地址存入DX
OUT DX,AL ;AL中内容输出至8255B口
MOV DX,A82590 ;A0=0,8259A地址送入DX
MOV AL,00010011B; ICW1为13H,上升沿触发,单片使用,要写ICW4
OUT DX,AL ;初始化ICW1
MOV DX,A82591 ;A0=1,8259A地址送入DX
MOV AL,01001000B ;ICW2为48H,提供中断类型号初始值
OUT DX,AL ;初始化ICW2
MOV AL,00000011B;ICW4,非缓冲方式,自动EOI,一般完全嵌套
OUT DX,AL ;初始化ICW4
MOV DX,A82590 ;A0=0,8259A端口地址送入DX
MOV AL,00001010B ;OCW3下一个读指令读出中断号
OUT DX, AL ;读入OCW3
NOP ;静止一个指令周期
NEXT: ;读中断类型的子程序
IN AL, DX ;读中断号IRX到AL
CMP AL, 00H ;比较AL和00H
JZ NEXT ;AL等于0,转移到NEXT
;INC TIMES ;TIMES自增1
MOV CL, 0FFH ;0FFH送入CL
NEXT1: ;建立中断类型表格的子程序
INC CL ;CL自增1
SHR AL,1 ;AL右移一位
JNC NEXT1 ;没有进位,则跳转到NEXT1
MOV NUM,CL ;CL中内容送给NUM
MOV AL,CL ;CL内容送给AL
MOV AH,00H ;高八位清零
ADD AL,48H ;ICW2是48H,中断类型号送给AL
MOV CX,0004H
MUL CX ;AX乘以CX中内容,送给AX
MOV BX,AX ;IRQ0--48H*4+0=0120中断
MOV AX,OFFSET IIRQ ;中断入口地址偏移量
MOV [BX],AX
INC BX
INC BX
MOV AX,SEG IIRQ ;代码段地址给AX
MOV [BX],AX
MOV DX,A82590 ;A0=0,8259A端口地址送给DX
MAIN1: STI ;开中断
JMP MAIN1 ;无条件跳转到MAIN1
HLT
IIRQ PROC
PUSH DX ;DX推入堆栈
INC TIMES ;TIMES自增1
MOV AL,TIMES ;中断次数
NOT AL ;AL内容取反
MOV DX, B8255 ;读取8255B端口地址
OUT DX, AL ;输出
MOV AL,NUM ;中断号
NOT AL ;AL取反
MOV DX, A8255 ;读取8255A端口地址
OUT DX, AL ;8255A端口地址内容给AL
INC CX ;CX自增1
MOV DX, A82590 ;
MOV AL, 20H ;OCW2,非特殊EOI命令,有效中断请求级别为0
OUT DX, AL
CLI ;关中断
POP DX
IRET
IIRQ ENDP
CODE ENDS
END MAIN
八. 实验结果
1. 基本I/O扩展:
连接好电路并做好程序调试工作后,拨动开关,开关K01~K08分别对应发光二极管L1~L8,当开关处于低电平状态时二极管亮,不同开关独立控制不同二极管。
(1) 改变开关控制状态,即由原来的低电平灯亮变成高电平灯亮,为实现这一想法,只要用NOT语句将AL内容取反,改变后程序如下:
MAIN: MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS,AX
MOV SP,9000H
MOV DX,LS244
IN AL,DX
NOT AL ;用NOT将AL取反
MOV DX,LS273
OUT DX,AL
JMP MAIN
(2)如下改变LS244和LS273端口地址:
LS244 EQU 7000H LS273 EQU 0B000H LS244 EQU 4000H
LS273 EQU 8000H
改变之后重新运行程序,发现没有影响,原因是:
LS244:原来端口地址7000H,高八位为01110000B,4000H的高八位为01000000B,控制244的片选端A14=1没有变
LS273:原来端口地址0B000H,高八位为10110000B, 8000H的高八位为10000000B, 控制273的片选端A14=0没有变
因此改变端口地址也可以正常工作。
2.8259中断实验:
连接好电路并做好程序调试工作后,拨动开关,发光二极管L8~L1的亮暗显示中断次数的二进制数,发光二极管L16~L9显示中断类型的二进制数。
如接IR3,中断次数为6次,则灯亮灭情况如下(○表示灯暗,●表示灯亮)
○○○○○●●○ (中断次数6次110B)
○○○○○○●● (中断类型)
如接IR5,中断次数为19次,则灯亮灭情况如下(○表示灯暗,●表示灯亮)
○○○●○○●● (中断次数19次10011B)
○○○○○●○● (中断类型)
九. 思考题
1. 给程序未加注释的语句加上注释;
答:已注释。
2 归纳总结LS244和LS273的作用及其编程方法;
答:74LS244主要用于三态输出,作为地址驱动器、时钟驱动器、总线驱动器和定向发送器等;
74LS273是一种带清除功能的8D触发器, 1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,
低电平清除,常用作数据锁存器,地址锁存器:
D0~D7:输入入;Q0~Q7:输出
第一脚WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0(低电平);
CP(CLK):触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,
D0~D7的数据不变。
3.归纳总结中断编程步骤;
答:(1)实验连线(2) 运行程序:INTR.ASM。
4. 总结比较I/O接口查询方式与中断方式的各自的特点
答:I/O接口查询方式:接口电路简单,CPU利用率低;
中断方式:CPU利用率高,中断服务需要保护断点和恢复断点。
十. 实验总结
通过两个实验,自己根据线路图或线路提示步骤一步一步地连接好线,然后通过计算机软件及事先编写好的程序代码执行程序,使用微机器件实现了基本I/O扩展和8259中断,最终实现了实验结果。
在实验过程中,通过连接线路和实现电路,对电路的器件及其作用有了更多的了解,对微机的认识也更深了。
指导教师批阅意见:
成绩评定:
预习情况(20)
实验过程(35)
实验报告(45)
总分
指导教师签字:
年 月 日
展开阅读全文