8259中断实验讲解.docx

上传人:b****5 文档编号:11639700 上传时间:2023-03-29 格式:DOCX 页数:10 大小:127.62KB
下载 相关 举报
8259中断实验讲解.docx_第1页
第1页 / 共10页
8259中断实验讲解.docx_第2页
第2页 / 共10页
8259中断实验讲解.docx_第3页
第3页 / 共10页
8259中断实验讲解.docx_第4页
第4页 / 共10页
8259中断实验讲解.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

8259中断实验讲解.docx

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

8259中断实验讲解.docx

8259中断实验讲解

浙江工业大学计算机学院

实验报告

实验名称8259A中断实验

姓名李晓峰

学号************

班级物联网1301

教师雷艳静

日期12.18

一、实验内容与要求

1.1实验内容

利用8259A芯片,实现中断响应程序。

要求根据单脉冲按键,输出相应的语句:

THISISTHExxxINTERRUPT!

到达中断次数后,屏幕上显示PROGRAMTERMINATEDNORMALLY!

1.2实验要求

(1)第一次按键,输出THISISTHE1stINTERRUPT!

(2)第二次按键,输出THISISTHE2ndINTERRUPT!

(3)第十一次按键(特殊),输出THISISTHE11stINTERRUPT!

(4)以此法继续,直至计数值为零,输出PROGRAMTERMINATEDNORMALLY!

二、实验原理与硬件连线

2.1实验原理

PC用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。

中断控制器用于接收外部的中断请求信号,经过优先级别判别等处理后向CPU发出可屏蔽中断请求。

IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源。

中断源中断类型号中断功能

IRQ008H时钟

IRQ109H键盘

IRQ20AH保留

IRQ30BH串行口2

IRQ40CH串行口1

IRQ50DH硬盘

IRQ60EH软盘

IRQ70FH并行打印机

 

8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。

PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级联,对外可以提供16个中断源。

中断源中断类型号中断功能

IRQ8070H实时时钟

IRQ9071H用户中断

IRQ10072H保留

IRQ11073H保留

IRQ12074H保留

IRQ13075H协处理器

IRQ14076H硬盘

IRQ15077H保留

TPC-USB实验板上,将中断源固定到3号中断IRQ3上,即进行中断实验时,所用中断型号为0BH。

2.2硬件连线

将TPC-USB实验板上的IQR与8251芯片的IRQ3引脚相连接。

三、设计思路、步骤和程序流程图

3.1设计思路

要输出“THISISTHExxxINTERRUPT!

”,必须将字符串分解为3部分,中间部分必须独立输出。

后缀分为“th”,“st”,“nd”,“rd”,必须经过判断后进行匹配。

设置中断向量表,并开放IRQ3的中断屏蔽,同时,将DS指向数据段,便于信息的输出。

设置中断次数,便于测试。

首先,输出中断信息前缀。

对于个位数,与1比较.若为1,输出个位数字和对应后缀“st”。

若大于1,跳转判断是否等于2。

若等于2,输出数字与后缀“nd”。

同理,对于4~9可以直接输出数字和后缀“th”。

若数据为二位数,则要先判断个位数。

而10~19,数字后缀均为“th”,无需判断(特殊情况)。

判断中断计数器的值,为0时屏蔽IRQ3中断,并关中断,结束程序。

否则,中断返回,等待硬中断。

3.2实验步骤

(1)根据电路图,连接各仪器(中断连IRQ3),并进行硬件检测;

(2)设置中断向量表,并开放IRQ3的中断屏蔽。

(3)等待硬中断。

判断数据个位数字,若为1,设置后缀为“st”;若为2,设置后缀为“nd”;若为3,设置后缀为“rd”。

特殊情况,11~19时,后缀均为“th”。

(4)判断中断计数器的值,为0时屏蔽IRQ3中断,并关中断,结束程序。

否则,中断返回,等待硬中断。

3.3程序流程图

3-1主程序

3-2中断服务程序

四、程序清单与执行结果

4.1程序清单

DATASSEGMENT

MESS1DB'THISISTHE$'

MESS2DB'PROGRAMTERMINATEDNORMALLY!

',0AH,0DH,'$'

MESS4DB'ST','$'

MESS3DB'INTERRUPT!

',0AH,0DH,'$'

STR1DB'RD','$'

STR2DB'ND','$'

STR3DB'TH','$'

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVBX,1

CLI

MOVAX,SEGIRQ3;设置中断向量段地址

MOVDS,AX

MOVDX,OFFSETIRQ3;设置中断向量偏移地址

MOVAX,250BH;中断入口地址送中断向量表

INT21H

INAL,21H;读中断屏蔽字

ANDAL,0F7H;开放8259A的IR3中断

OUT21H,AL

MOVAX,DATAS

MOVDS,AX;将DS指向数据段

STI

WIN:

JMPWIN;等待硬中断

IRQ3:

MOVDX,OFFSETMESS1;输出中断信息前缀

MOVAH,9H

INT21H;DOS功能调用

CMPBX,9

JACOUT;中断次数大于9,跳转COUT

C4:

PUSHBX

MOVAX,BX

MOVCL,0AH;除数为10

DIVCL;中断次数除以10

MOVCL,AH

ADDAH,30H;输出高位数字

MOVDL,AH

MOVAH,2H

INT21H

POPBX;保存BX

CMPBX,0AH

JBC6;小于10,跳转C6

JMPC5;跳转C5

C5:

MOVDX,OFFSETSTR3;DOS功能调用,输出“th”

MOVAH,9H

INT21H

JMPSEG1;跳转SEG1

C6:

CMPCL,1;个位数是否为1

JAC1;大于1,跳转C1

MOVDX,OFFSETMESS4;DOS功能调用,输出“st”

MOVAH,9H

INT21H

JMPSEG1;跳转SEG1

COUT:

MOVAX,BX

MOVCL,0AH

DIVCL;中断次数除以10

MOVCL,AH

ADDAL,30H;输出高位

MOVDL,AL

MOVAH,02H

INT21H

JMPC4;跳转C4

C1:

CMPCL,2

JAC2

MOVDX,OFFSETSTR2;DOS功能调用,输出“nd”

MOVAH,9H

INT21H

JMPSEG1;跳转SEG1

C2:

CMPCL,3

JNZC3

MOVDX,OFFSETSTR1;DOS功能调用,输出“rd”

MOVAH,9H

INT21H

JMPSEG1;跳转SEG1

C3:

MOVDX,OFFSETSTR3;DOS功能调用,输出“th”

MOVAH,9H

INT21H

JMPSEG1;跳转SEG1

SEG1:

MOVDX,OFFSETMESS3

MOVAH,9

INT21H

INCBX

CMPBX,15;比较中断次数

JNZNEXT;跳转NEXT,中断返回

INAL,21H

ORAL,08H

OUT21H,AL

MOVDX,OFFSETMESS2;输出中断信息后缀

MOVAH,9

INT21H

MOVAH,4CH

INT21

NEXT:

MOVAL,20H;关中断

OUT20H,AL

IRET;中断返回

CODESENDS

ENDSTART

4.2执行结果

(1)第一次按键,输出THISISTHE1stINTERRUPT!

(2)第二次按键,输出THISISTHE2ndINTERRUPT!

(3)第十一次按键(特殊),输出THISISTHE11stINTERRUPT!

(4)以此法继续,直至计数值为零,输出PROGRAMTERMINATEDNORMALLY!

4-1实验结果截图

五、程序调试说明和实验感想

5.1调试说明

1.按键时,突然到某个点会停止程序。

反复检查程序并没有发现问题,猜测是软件问题。

重新开启程序多次后,该问题可解决(治标不治本,硬件问题)。

2.写代码时,没有考虑到多位数的情况。

比如,尾数为1的数字,一般后缀是”st”;尾数为2的数字,后缀一般是”nd”;尾数为3的数字,后缀一般是”rd”。

然而在10~20之间,统一用的是”th”,这点一开始没考虑到,验收时经老师提醒才发现。

3.汇编的除法很久没有使用,导致AH、AL经常弄错,调试时也不易发现。

AH,AL未使用完时一定要保存,不然容易被DOS功能调用时使用AH而产生复用错误。

5.2实验感想与收获

1.代码的逻辑性一定要严谨。

这次的代码,跳转、判断很多,稍微粗心一点就会造成错误。

最好先画好每一步的流程,标记每一段的实际作用,方便自己检查错误。

另外,对于CALL、JMP这些功能类似的代码,一定要细心的区分开来,不可混淆使用。

2.熟练使用DOS功能调用。

对于字符串的输出,已经了然于胸。

DOS功能很强大,要善于运用。

MOVDX,OFFSETSTR3;九号功能输出字符串

MOVAH,9H

INT21H

5.3实验特色

这次实验的要求不低,需要考虑的东西比较多。

不同英文的数值后缀需要分别考虑,不能用同一规律一概而论。

比如,11的后缀就不是“st”,而是“th”,这方面一定要注意。

经过老师提醒,我们这方面也完善的比较好了。

另外,由于前缀和后缀都是公共的部分,无需每次都写一段代码,只要逻辑处理妥当,就能减轻代码负担和视觉负担,这方面我们的处理也还是不错的。

5.4展望

可以设计这样一个程序:

按下单脉冲触发器一次,输出所有尾数为1的数字;按下第二次,输出所有尾数为2的数字......直到99为止。

保存一个计数值9,即为9次中断。

每个中断服务程序输出9个数字,做好循环输出工作。

2.结合8253计数器,计数值每次减一,进入中断,并输出中断信息。

减到0之后,主程序结束。

 

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

当前位置:首页 > 求职职场 > 简历

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

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