微 机 原 理 与 接 口 技 术 实 验 报 告
______________________________________________________________________________
班级:通信工程 姓名: 班级内序号:10 学号:
实验日期:2019/12/26 实验顺序: 4 实验名称:8255 方式 1 中断输入实验
学院:计算机与通信工程学院 专业:通信工程
指导教师:张旭
______________________________________________________________________________
一.实验目的
1.掌握 8255 工作方式1时的使用及编程。
2.进一步掌握中断处理程序的编写。
__________________________________________________________________________
二.实验环境
TPC-ZK-II
______________________________________________________________________________
三.实验原理
简单描述:
8255 通过方式 1 输入,把 A 设置为输入,A0-A7 解二级制开关,C 口 PC4 连接到外部正
脉冲,当正脉冲输入时会引发中断信号,PC5 是应该信号,当输入缓冲器满时,会产生高电
平有效的 IBF 信号,PC3 产生 INTR 信号,连接 8259A 从片的 IR2,并将主片的 IR2 与从片级
联,所以主片和从片的 IR2 都需要开中断。当有正脉冲输入时,8255 产生有效的 INTR 信号,
INTR 通过 8259A 向 CPU 提出中断请求,使 CPU 从 8255 的端口读取数据。
使用 DOS 的 25H 功能,并利用中断类型码 72H 将中断子程序入口地址存入中断向量表,
并对 8259A 主片和从片进行初始化,设置 IR2 开中断。对 8255 进行初始化,设置 A 口的输
入方式,因中断信号不会使内部触发器 INTE 置 1,所以需要利用 C 口的位操作将 INTE 置 1。
中断服务子程序功能为显示字符,需要调用 DOS 的 2 号功能,并且主片和从片都要设置 EOI
命令。
通过拨码开关设置要显示字符的 ASCll 码,然后按下正脉冲,PC3 产生有效的 INTR 信
号,INTR 通过 8259A 向 CPU 产生中断请求,CPU 收到中断请求产生中断响应,根据中断向量
表的中断程序入口地址跳转到中断子程序去执行,本实验中执行并读取从 A 口传来的数据并
显示在屏幕上。
34
33
32
31
30
29
28
27
5
36
9
8
35
6
8255
17
PC3
PC4 13
D0
D1
D2
D3
D4
D5
D6
D7
RD
WR
A0
A1
RESET
CS
4
3
2
1
40
39
38
37
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
D0
D1
D2
D3
D4
D5
D6
D7
IOR
IOW
A0
A1
RESET
288H
SIRQx
K0
K1
K2
K3
K4
K5
K6
K7
电
平
输
入
开关
开 始
从 A口 输 入 数 据
寄 存 器 初 始 化
设 置 中 断 矢 量 (IRQ10)
并 开 放 中 断 (IRQ10)
设 置 8255工 作 方 式 1
A口 输 入
将 8255的 PC4置 位
设 置 中 断 次 数 计 数 器
循 环 等 待
在 屏 幕 上 显 示 相 应 的 ASCII码
发 中 断 结 束 命 令
中 断 次 数 计 数 器 减 1
计 数 器 =0?
N
中 断 返 回
Y
关 闭 中 断 (IRQ10)
开 中 断
结 束
_____________________________________________________________________________
四.实验步骤及结果分析
1、代码及解释:
data segment
info db 'Master IR3$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,seg int10 ;取中断子程序的段地址到 ax 中
mov ds,ax ;将段的偏移地址送入 ds 用于访问内存
mov dx,offset int10 ;取中断子程序的便宜地址到 dx 中
mov al,72h ;传送中断程序所在的中断地址到中断向量码的地址
mov ah,25h ;调用 dos 的 25 号功能来写入中断向量码
int 21h
in al,21h ;查看中断屏蔽寄存器 IMR 地址 21H A0 = 1
and al,11111011b ;设置 IR3 的中断被允许
out 21h,al
in al,0a1h ;从 IMR 中读入 ICW1 控制字
and al,11111011b ;使得 IR2 开中断
out 0a1h,al
mov dx,28bh ;向 8255 的控制寄存器写入控制字 A0=1A1=1
mov al,0b8h ;设置 8255 工作在方式 1,A 口输入,c 口输出
out dx,al
mov al,09h ;设置 8255 的 PC4 置 1 使得 INTEa=1 开中断,以便外设送入数据后发出
STB=1 时向 CPU 发出中断响应
out dx,al
here:jmp here ;不想将中断的程序占用的内存被释放,可以使用中断驻留的方式来使子
程序不被释放
int10 proc
push ax ;保护中断子程序的内容
push dx
mov dx,288h ;CPU 向 8255 读入数据
in al,dx
mov dl,al
mov ah,2
int 21h
mov al,00100000b ;中断服务子程序结束使用 EOI 方式将 IRR 寄存器对应的中断置零
out 0a0h,al ;设置从片的 EOI 命令方式来结束中断
mov al,00100000b
out 20h,al
pop dx
pop ax
iret ; pop ip pop cs popf
int10 endp
code ends
end start
2、运行结果如图:
执行成果:
五.实验心得疑问建议
本次实验是 8255 通过方式 1 进行中断输入实验,在实验过程中,我掌握了中断处理程
序的编写方法,进一步了解了 8255 工作方式1时的使用及编程方法。此外在本次实验过程
中又复习到了上节课所学习到的主片 8259 与从片 8259 级联的工作方式,对系统的中断有了
更进一步的理解。在实验箱操作的过程中,通过查阅 ASCLL 码表进行开关的设置,让我知道
了如何将 ASCLL 与此程序相配合,进一步锻炼了自己的编程思维。
这是本学期的最后一次微机原理实验课,通过这四次课的学习让我明白了很多关于微机
原理编程的知识,也对书本的内容有了更深层次的理解,我认为自己还需要多看汇编语言程
序,多适应汇编语言逻辑,争取更好地掌握编程方法。
感谢老师耐心细致的讲解!
疑问:无
建议:无