文档库

最新最全的文档下载
当前位置:文档库 > 微机实验三

微机实验三

实验三中断程序设计

【实验目的】

1.认识微机系统的中断特性。

2.学习8259中断控制器的工作原理。

3.学习8259中断控制器的应用编程。

4.掌握使用PC机内8259的方法

5.掌握修改中断向量的方法。

【实验原理及内容】

1、实验原理:

我们利用IBM-PC机的8259A,利用键盘输入作为中断请求信号,通过IRQ1来申请中断。

2、实验内容:

当用户每按下一次键盘上的按键时,即相当于从IRQ1端向计算机内部的8259A发送一次中断请求,该中断的服务是将“this is an interrupt!”显示在屏幕上。中断10次后程序退出。

3、编程提示:

1)PC微机系统中的8259

在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如下表所示。两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H两个端口。系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3级~7级。

在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。对INTR 中断的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。

表 PC微机系统中的硬件中断

中断号功能中断向量号中断向量地址

主8259A IRQ0 日时钟/计数器08H 0020H~0023H

主8259A IRQ1 键盘09H 0024H~0027H

主8259A IRQ2 接从片8259A 0AH 0028H~002BH

主8259A IRQ3 串行口2 0BH 002CH~002FH

主8259A IRQ4 串行口1 0CH 0030H~0033H

主8259A IRQ5 并行口2 0DH 0034H~0037H

主8259A IRQ6 软盘0EH 0038H~003BH

主8259A IRQ7 并行口1 0FH 003CH~003FH

从8259A IRQ8 实时钟70H 01C0H~01C3H

从8259A IRQ9 保留71H 01C4H~01C7H

从8259A IRQ10 保留72H 01C8H~01CBH

从8259A IRQ11 保留73H 01CCH~01CFH

从8259A IRQ12 保留74H 01D0H~01D3H

从8259A IRQ13 协处理器中断75H 01D4H~01D7H

从8259A IRQ14 硬盘控制器76H 01D8H~01DBH

从8259A IRQ15 保留77H 01DCH~01DFH

2)键盘中断注意事项

PC机中使用的是编码键盘,在键盘内部有一单片机对整个键盘上的字符键、功能键、控制键和组合键进行管理,当从键盘上键入一个键时,键盘上的处理器首先向微机产生硬件中断请求(IRQ1),然后将改键的扫描码传送给主机。而PC主机在IRQ1中断的作用下,调用INT 09硬件中断读入键盘的扫描码,并转换成ASCII码,存入键盘缓冲区。本实验中的键盘中断处理程序必须对键盘控制器完成键盘复位1.复位键盘控制器只需读出端口61H的内容,并将最高位置1,再写入该端口。此外,按键按下和抬起均会引起中断,所以实验中断相应次数等于按键次数乘以2。所以,重点如下:

①PC主机在IRQ1中断的作用下,调用INT 09硬件中断读入键盘的扫

描码,并转换成ASCII码,存入键盘缓冲区;

IN AL,60H ;读入扫描码(用户可对此键值进行处理)

②本实验中的键盘中断处理程序必须对键盘控制器完成键盘复位 1.复位

键盘控制器只需读出端口61H的内容,并将最高位置1,再写入该端口。

IN AL,61H ;读入控制字节

MOV AH,AL

OR AL,80H

OUT 61H,AL ;复位键盘

③按键按下和抬起均会引起中断,所以实验中断相应次数等于按键次数

乘以2。

④中断服务结束返回前要使用中断结束命令:

MOV AL,20H ;中断结束命令送中断控制器

OUT 20H,AL

【实验程序】

DATA SEGMENT

OLD_VCT DW?,?

cnt db?

mess db"this is an interrupt!",0ah,0dh,'$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START PROC FAR

MOV AX,DATA

MOV DS,AX

MOV AL,09H ;/取原中断向量

MOV AH,35H ;/取原中断向量

INT 21H ;取原中断向量

LEA SI,OLD_VCT

MOV [SI],BX

MOV [SI+2],ES

PUSH ds

MOV AX,seg MYINT

MOV DS,AX

LEA DX,MYINT ;/置中断向量

MOV AL,09H ;/置中断向量

MOV AH,25H

INT 21H ;置中断向量

POP DS

mov cnt,10

LL:CMP CNT,0

nop

nop

JNZ LL

LEA SI,OLD_VCT

MOV DS,[SI+2]

MOV DX,[SI]

MOV AX,2509H

INT 21H ;回复原中断向量

STI ;/开中断

MOV AH,4CH

INT 21H

START ENDP

MYINT PROC FAR

PUSH DX

PUSH DS

PUSH AX

STI ;开中断

lea dx,mess ;中断处理,显示字符串

mov ah,9

int 21h

cmp cnt,0 ;中断次数是否完成

jz next

dec cnt

NEXT:

IN AL,60H ;读入扫描码(用户可对此键值进行处理)IN AL,61H ;/读入控制字节

MOV AH,AL

OR AL,80H ;/复位键盘

OUT 61H,AL

CLI ;关中断

MOV AL,20H ;/中断结束命令送中断控制器

OUT 20H,AL

CLI ;/关中断

POP AX

POP DS

POP DX

IRET ;/中断返回

MYINT ENDP

CODE ENDS

END START

将编好的程序加载到软件Masm for Windows中,进行编译。【实验结果】

微机实验三

【实验结果分析】

程序编号加载到Masm for Windows中后,会出现一个操作界面,写着两行“this is a in interrupt!”,然后按任意键一次,会再出现两行“this is a in interrupt!”,按五次后中断返回。

【实验心得】

这次实验是需要软硬件结合的,需要用到实验箱,这就要求我们不但要能编写出程序,还要有能力成功的连接实验箱和电脑。实验过程中,我深刻理解了微机系统的中断特性,在成功编写8259中断控制器程序的同时也理解8259中断控制器的工作原理,并学会了修改中断向量。学到了很多。继续努力。