8259中断控制实验.docx

上传人:b****1 文档编号:22990766 上传时间:2023-04-29 格式:DOCX 页数:16 大小:2.36MB
下载 相关 举报
8259中断控制实验.docx_第1页
第1页 / 共16页
8259中断控制实验.docx_第2页
第2页 / 共16页
8259中断控制实验.docx_第3页
第3页 / 共16页
8259中断控制实验.docx_第4页
第4页 / 共16页
8259中断控制实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

8259中断控制实验.docx

《8259中断控制实验.docx》由会员分享,可在线阅读,更多相关《8259中断控制实验.docx(16页珍藏版)》请在冰豆网上搜索。

8259中断控制实验.docx

8259中断控制实验

 

本科实验报告

 

课程名称:

接口实验

姓名:

学院:

系:

专业:

学号:

指导教师:

 

2015年12月26日

浙江大学实验报告

课程名称:

接口实验实验类型:

普通实验

实验项目名称:

8259中断控制实验

学生姓名:

专业:

学号:

同组学生姓名:

指导老师:

实验地点:

实验日期:

2015年12月22日

一、实验目的和要求:

1.掌握中断的工作原理及编程方式,掌握8259中断控制器工作原理,了解中断控制芯片的初始化及工作方式的设定,熟悉实验中涉及到的各寄存器的使用方法,学会中断程序的编写。

2.学会中断控制器8259接口电路的应用和中断服务程序的编写。

3.了解PCI总线目标接口适配器PCI9052的使用,学会其中断及状态的控制。

二、实验内容和原理

8259中断控制电路:

在PC机中,主板上的两片8259可编程中断控制芯片以主从结构为系统提供了15级中断(每片8级,其中一级作为级联)。

从片的中断请求信号INT与主片的IRQ2相连。

其中给用户保留的中断号有IRQ10、IRQ11、IRQ12、和IRQ15,这些中断级都设置在从片上。

主片:

IRQ0——T/C0

IRQ1——键盘中断

IRQ2——8259从片

IRQ3——串口2

IRQ4——串口1

IRQ5——并行口2

IRQ6——软盘控制器

IRQ7——并行口1

从片:

IRQ8——实时时钟中断

IRQ9——RE—DTNECT

IRQA——保留

IRQB——保留

IRQC——保留

IRQD——协处理器

IRQE——硬盘控制器

IRQF——保留

PC机中8259中断管理设有相应的矢量地址,主片的IRQ0—IRQ7对应为08H—0FH,从片的IRQ8—IRQ15对应为70H—77H。

主片的中断控制寄存器ISR和中断屏蔽寄存器IMR的端口地址分别为20H和21H,从片的中断控制寄存器ISR和中断屏蔽寄存器IMR的端口地址分别为0A0H和0A1H。

中断初始化编程时,若使用主片中的中断级,只需打开主片屏蔽寄存器的相应屏蔽级,并在中断处理完毕后发中断结束命令EOI;而使用从片中的中断级,除对从片相应的级作出处理,还需打开主片IRQ2相应的屏蔽寄存器位,并在中断处理完毕后对主片和从片都要发中断结束命令EOI。

9052的中断控制寄存器:

偏移地址为4CH的32位寄存器。

其中高19位为保留位,低13位可根据需要进行8位、16位操作。

实验仪上的中断源信号必须通过9052控制器才能到达8259中断控制器,因此需先打开9052控制器的中断使能端,即第6位PCIInterruptEnable。

而在实验程序退出前必须关闭使能端。

同时,每次中断结束时还需将9052邮箱的中断标志位(第10、11位)清除,确保下一次中断能进入。

实验内容:

中断请求信号由J区的正单脉冲J102产生,要求每按一次按钮产生一次中断时,在屏幕上显示字符串“THISISSXL_100INTERRUPT”,控制其若干次后退出中断方式并返回DOS。

桥芯片9052:

将I/O地址0+4C的内容置为5BH,使能外设的中断信号。

程序退出前要关闭(或恢复)中断使能,即将该地址内容置为17H。

中断程序返回前,要清9052邮箱的中断标志:

将(I/O地址0+4D)OR0CH,再返送回I/O地址0+4D地址单元。

中断控制芯片:

8259设置好相应级的中断矢量,将相应的中断屏蔽位打开,8259即可响应中断。

程序退出前要恢复原屏蔽状态

为维护系统,在设置中断屏蔽位时一般采用保护方式,例如要将第5级中断打开,可使用下列语句:

INAL,21H

ANDAL,11011111B

OUT21H,AL

中断程序返回前,要清8259的中断标志:

即使OCW2的EOI为1。

如:

MOVAL,00100000B

OUT20H,AL

OUTA0H,AL

中断实验程序须在纯DOS环境下运行。

此处指的纯DOS环境是指微机启动时按F8键进入的DOS环境。

Windows重启进入MSDOS的方式,由于系统资源被重新规划过,因此不能正常实验。

1.初始化阶段:

PC机的初始化是通过系统初始化程序设置的,初始化命令字已在系统初始化程序中设置完成,因此实验时不必再进行初始化,以免设置不当造成死机等现象。

初始化时设置为一般结束方式。

2.中断矢量的设置由DOS的25H号功能完成,原中断矢量的保存由35H号功能实现。

实验中使用的中断源属于外部中断,它是随机产生的,程序设计时应考虑以下几个方面:

①必须保护现场,即保护中断发生时各寄存器的值。

CPU在响应中断时已把各标志和返回地址放入堆栈,保护现场是指通用寄存器的内容、以及除代码段寄存器以外的其它三个寄存器的内容。

一般方法是将它们压入堆栈。

②中断处理尽快完成。

因为外部中断级别高,在进行外部中断响应时,往往不再响应其它外部中断,因此中断程序中只需完成必要的工作,如设置或清除标志、计数、启动等重要且短暂的操作,对于耗时的操作,可通过设置标志等方式,在主程序中通过查询方式来完成。

③恢复现场。

与第①项相应,程序退出时要恢复系统原来的状态,确保系统的正常。

④由于DOS是不能重入的,因此外部中断服务程序中不应使用系统调用。

例如,主程序中正在执行DOS系统调用,就出现了“重入”。

不能“重入”一是因为进入DOS系统要进行堆栈初始化,二是可能造成两个程序同时进入临界资源

三、主要仪器设备

微机一台,SXL_100接口实验仪一套

四、操作方法与实验步骤

1.根据实验内容编写源程序lab8.asm,设置包括两个方面:

桥芯片9052和中断控制芯片8259。

2.在dos系统下输入命令行mllab8.asm进行编译

3.在dos系统下输入命令行lab8运行程序

实验硬件接线操作:

选择一个触发器的正脉冲输出端J区J102+接入9052控制中断的输入端A区的J19—IRQ。

五、源程序、程序框图、程序函数及过程介绍

⏹程序框图

⏹源程序

datasegment

int_vectequ71h

ioport_0equ0dc80h

int_timedb00h;计数器

csregdw?

ipregdw?

irq_markdb?

;9052屏蔽状态

int_markdb?

;8259屏蔽寄存器状态

disp1db'ThisisSXL_100interrupt',0dh,0ah,'$'

disp2db'programrun!

Exitafterinterrupt40times.',0dh,0ah,'$'

dataends

stacksegment

db100dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack,es:

data

start:

cli

movax,data

movds,ax

moves,ax

movax,stack

movss,ax

;9052中断通道的设置

movdx,ioport_0+4ch;9052中断控制寄存器低八位。

inal,dx;读入9052中断状态

movirq_mark,al;保存9052中断状态

oral,5bh

outdx,al;开放9052中断

;中断向量的保存和设置

movah,35h;取72h号(中断类型号)中断向量保存在ES:

BX

moval,int_vect

int21h

movax,es

movcsreg,ax;保存原向量,以便恢复

movipreg,bx

pushds

movax,cs;构建新的中断向量DS:

DX

movds,ax

movdx,offsetinterrupt

movah,25h

moval,int_vect;中断类型号

int21h;;设置中断矢量

;8259屏蔽字的设置

inal,0a1h;;读取中断屏蔽字

movint_mark,al;;保存中断屏蔽字

andal,0fbh

out0a1h,al;;设置中断屏蔽字

popds

movdx,0de03h

moval,10111000b

outdx,al

movdx,0de03h

moval,00000110b

outdx,al

nop

nop

movdx,0de03h

moval,00001001b;

outdx,al

 

movdx,offsetdisp2

movah,09h

int21h;;显示提示字符

movint_time,0

sti

loop1:

cmp[int_time],40;;中断40次计数

jzexit

jmploop1

exit:

cli

moval,irq_mark

movdx,ioport_0+4ch

outdx,al;;恢复9052中断状态

movdx,ipreg

movax,csreg

movds,ax

movah,25h

moval,int_vect

int21h;;恢复中断矢量

sti

movax,4c00h

int21h;;返回DOS

;中断服务程序

interrupt:

cli

pushax

pushdx

pushds

inc[int_time];;计数器加1

movax,data

movds,ax

movdx,offsetdisp1

movah,09h

int21h;;显示进入中断

movdx,0de00h

inal,dx

movdx,0de01h

outdx,al

;8259中断标志位的清除

moval,20h;20h=0010000b(OCW2的值),EOI位为1

out20h,al;向8259主片发EOI

out0a0h,al;向8259从片发EOI

;9052中断邮箱标志的清除

movdx,ioport_0+4dh;9052的中断控制寄存器的高8位端口的地址

inal,dx

oral,0ch

outdx,al;9052清中断标志

popds

popdx

popax

sti

iret;中断返回

codeends

endstart

六、实验结果与分析

⏹第一次测试:

程序按照实验要求,产生40次中断后就结束

在dos中输入命令lab8运行程序

显示“programrun!

Exitafterinterrupt40times”

按键

产生第一次中断,在屏幕上输出“ThisisSXL_100interrupt”

按键五次,在屏幕上进行了5次输出

再一次按键,在屏幕上进行了第七次输出

 

再一次按键,在屏幕上进行了第八次输出

按键若干次后,输出占满整个屏幕

再按若干次,达到40次按键,则程序结束

⏹第二次测试

由于第一次测试中需要产生40次中断才能使实验结束,屏幕大小限制导致没法对中断在屏幕上的输出进行计数,因此第二次测试将改成产生10次中断后程序结束,这样就可直接在屏幕上输出有几次中断输出

Dos中输入lab8运行程序

按键两次,产生两次中断,在屏幕上两次输出

再按键一次,产生第三次中断,在屏幕上输出

再按键七次,产生7次中断,共10次,程序结束,下图中可得出恰好程序输出10次

七、讨论、心得

通过此实验,对8259中断芯片有了更加深入的了解

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1