8259a中断控制器——利用IRQ2显示中断过程

合集下载

8259A可编程中断控制器

8259A可编程中断控制器

ISR2上的1,一直要保持到该中断源的中断处理结束为止,当8259A收到中断结 束命令后,ISR2才被清0,表明连接在IR2上的外设的中断服务已经结束。 有两个以上的“1”,表明有中断嵌套。
设IR2引脚有中断请求,IRR2= 1
IR7引脚 IR6 IR5 IR4 IR3
CPU 响 应 IR2 中断,回送中 断应答信号; 8259 的 INTA 引 脚收到第一个 中断响应信号 , 使 ISR 某 位 ( 如 ISR2) 置 1 时 ,把IRR中某位 (如IRR2)清0
2)内部结构 *1 中断请求寄存器 IRR Interrupt Request Register 功能: 存放中断请求信号直到CPU响应中断为止。
IRR7
:
:
:
IRR0
IR7引脚
IR0引脚 或
IR7~IR0引脚上出现中断请求信号
上升边或高电平表示有中断请求,则相应的位置1。 80X86计算机系统设定的是上升边方式
*2中断屏蔽寄存器 IMR Interrupt Mask Register 功能: 用于屏蔽某IR0~IR7引脚上的中断请求信号,使之不能被传递给CPU。
某位为1,则屏蔽对应引脚上的中断请求;为0,允许。 IMR与IRR的各个位一一对应
例:IR0,IR3,IR7引脚上有中断请求信号,要求只屏蔽IR7引脚上的中断请求,则对屏蔽寄 存器送入屏蔽字10000000即可
IR2 IR1 IR0引脚
IRR7
IRR2
1 0
IRR0
IRR IMR
1
10
ISR
第二个中断响应信号,启动8259把选中的中断源的中断类型号 回送给CPU
*4 优先级分析器 PR Priority Resolver 功能:用于分析中断请求寄存器IRR中各位的优先级,对各个中断请求择优。 *择优对象:没有被屏蔽的IRi *择优时间:接收到第一个INTA信号时 *择优方式:由编程决定 *择优结果:找出优先级最高的中断源,送出中断类型号给CPU,并且使ISRi对应的位置1。 *5 逻辑控制 根据CPU对8259A设定的方式,产生8259A内部所需的控制信号,并且能够 发出INT信号和接收INTA信号。 *6 读写逻辑 *7 数据总线缓冲器:通过这一环节,可以使8259A的数据线直接与CPU的DB连接而不用增加 其它电路。 *8 级联缓存器/比较器(了解) 在多片8259A级联的情况下,用于存放和比较从8259A的级联选择代码。CPU响应中断 时,通过CS2~CS0对从8259A输出级联选择代码,选出发中断请求的从8259A;从8259A则通 过CS2~CS0接受来自主8259A的选择代码。 *9 初始化命令寄存器和操作字命令寄存器 两组可编程控制寄存器,用于设定或改变8259A的工作方式和控制方式。

8259可编程的中断控制器

8259可编程的中断控制器

82598259A是一个可编程的中断控制器,应用在实时的、以中断方式进行监控的计算机系统中。

用一片8259A可以管理8个等级的中断申请。

并可再经级联扩展多至8片8259A,使得中断等级可扩展多至64级。

8259A可以作为一个I/O外围器件,用系统软件编程,它所具有的多种优先权方式可以通过主程序在任何时候进行改变或重新组织。

这意味着可以按照全系统的外围情况和要求,设计出一个完整的中断结构,用来实现优先管理、中断屏蔽以及自动中断矢量转移。

它几乎可以适合于任何一种中断控制的结构,因而得到了广泛的应用。

1 引脚图8259A为28脚双列直插式封装的器件。

2 内部结构其工作过程如下:第一步:当中断请求线(IR0~IR7)上有信号输入时,就把中断请求寄存器IRR相应的位置1。

第二步:当IRR的一位置1后,就会与IMR中相应的屏蔽位进行比较,如该屏蔽位为0,则请求被发送给优先级分析器;如该屏蔽位为1,则封锁该请求。

第三步:当一个中断请求被输入优先级分析器后,将由优先权分析器判定其优先权,然后向CPU 发中断申请,INT脚变高(INT联到8086的INTR)。

第四步:CPU的INTR引脚为异步状态接收,也就是它可以在任何时间(与时钟无关)接收中断。

在软件控制下利用STI指令(中断置位)或CLI(中断复位)指令可分别将CPU的“中断开放标志位”IF置位或复位,可以做到接受或不理睬在INTR上的中断申请。

第五步:假定CPU中的IF标志为1,则CPU在完成当前指令的即进入中断响应周期,这个中断响应周期将标志寄存器入栈,然后清除IF标志,关闭了中断。

再将代码段寄存器和指令指针也入栈(这是为了从中断服务程序返回),然后CPU发出第二个 INTA脉冲通知8259A,说明8086已经允许了它的中断请求。

若8086用于“最小方式”,则INTA脉冲信号为8086 INTA引脚上的信号;若8086用于“最大方式”时,则8086 LOCK脚在中断响应序列执行期间变为低电平。

实验五 8259A中断控制器实验

实验五  8259A中断控制器实验

南昌大学实验报告学生姓名:林海金学号:6100210178 专业班级:卓越通信101班实验类型: 验证□综合□设计□创新实验日期:2012-5-22 实验成绩:一、实验项目名称实验五8259A中断控制器实验二、实验目的(1)了解8259A中断控制器的工作原理。

(2)了解PC机中断的原理和过程。

(3)学会中断程序的编写。

三、实验要求编写中断程序,在请求8259A1时,能够响应8259A的硬件中断,并在数码管上显示“IRQ0…”字样,中断结束时,显示“E…IRQ”。

四、实验仪器及连线方式1)实验仪器:AEDK-T598D实验系统。

2)连线方式:INT0连接至+PULSE;8259A的片选接至试验箱的200H;8279的片选接至210H~217H。

五、实验说明以中断0为例,先加载主中断程序,然后再加载中断程序IRQ0程序,然后打开对话窗口,输入“SW 0:0020,<回车>0000,””8200<回车>”,在执行“G8100:0<回车>Y”即可。

六、实验参考程序INT00 EQU 200HINT01 EQU 201HZ8279 EQU 239HD8279 EQU 238HLEDMODE EQU 00HSCANFRQ EQU 38HDA TA SEGMENTDA TA ENDSSTACK SEGMENTSTA DW 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: CLIMOV AL,13HMOV DX,INT00OUT DX,ALNOPNOPMOV AL,8MOV DX,INT01OUT DX,ALMOV CX,0FFFHL00: LOOP L00MOV AL,3MOV DX,INT01OUT DX,ALMOV CX,0FFFHMOV CX,0FFFHL01: LOOP L01NOPNOPMOV DX,Z8279MOV AL,LEDMODEOUT DX,ALMOV AL,SCANFRQOUT DX,ALMOV DX,INT01MOV AL,00HOUT DX,ALMOV CX,0FFFHL02: LOOP L02MOV DX,INT00MOV AL,20HOUT DX,ALMOV CX,0FFFHL03: LOOP L03MOV DX,Z8279MOV AL,90HOUT DX,ALMOV AL,0D0HOUT DX,ALMOV CX,0FFFFHL2: LOOP L2MOV AL,67HOUT DX,ALMOV AL,50HOUT DX,ALMOV AL,0FHOUT DX,ALJMP SHORT $+2STIHLT0X2: MOV DX,Z8279MOV AX,0D0HOUT DX,ALMOV CX,0FFFHLOOP L5L5: LOOP L5MOV AL,90HOUT DX,ALMOV DX,D8279MOV AL,67HOUT DX,ALMOV AL,50HOUT DX,ALMOV AL,0FHOUT DX,ALMOV AL,80HOUT DX,ALOUT DX,ALMOV AL,79HOUT DX,ALJMP SHORT X2NOPCODE ENDSEND STARTZ8279 EQU 239HD8279 EQU 238HINT0 EQU 200HDA TA SEGMENTDA TA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: STIMOV CX,0FFFHMOV DX,Z8279MOV AL,0D0HOUT DX,ALL1: LOOP L1MOV AL,90HOUT DX,ALMOV DX,D8279MOV AL,80HOUT DX,ALOUT DX,ALOUT DX,ALMOV AL,3FHOUT DX,ALOUT DX,ALMOV AL,50HOUT DX,ALMOV AL,0FHOUT DX,ALMOV CX,0FFFFH12: LOOP L2MOV DX,INT0MOV AL,20HOUT DX,ALIRETCODE ENDSEND START七、实验步骤1、实验前检查实验箱是否完好,串口是否正确连接;2、按照实验电路图连接好电路,并检测通讯口;3、在LCA88ET环境中依次进入文件--打开--EXP--88ASM--8259A和Irgo;4、程序加载:设置--实验机--加载地址,8259A加载到8100H,Irgo加载到8200H;5、在LCA88ET环境中进行程序调试,调试(或窗口)--对话窗口--SW 0:0200<回车>0000,8200<回车>,再执行G8100:0<回车>Y6、运行程序,按下按键,看实验箱上数码管显示结果是否正确;3、实验结果:程序运行后,每次按下按键都能产生中断。

实验四 8259A的单级中断控制实验

实验四 8259A的单级中断控制实验

实验四使用8259A的单级中断控制实验一、实验目的1.掌握中断控制器8259A与微机接口的原理和方法。

2.掌握中断控制器8259A的应用编程。

二、实验内容编制程序,利用开关作为8259芯片IR7的中断源,人工控制产生单一中断。

中断的功能是驱动发光二极管,使其亮灭,不停地闪动。

三、实验提示8259中断控制器是专为控制优先级中断设计的芯片。

它将中断源优先级排队,辩别中断源以及提供中断矢量的电路集于一片中。

因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,并选择优行模式和中断请求方式,即中断结构可以由用户编程来设定。

同时,在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。

实验箱中采用一片8259A中断控制芯片,工作于主片方式,8个中断请求输入端IR0~IR7对应的中断型号为8~F,其和中断矢量关于如下表所示。

表1 8259中断矢量对应关系务程序程序,使系统每次响应外部中断IR7时发光二极管闪烁。

四、实验电路五、实验软件清单Port0 EQU 0FFE0HPort1 EQU 0FFE1HCODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HP8259: CLIMOV AX,OFFSET INT8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXCALL FOR8259MOV AL,0FEHMOV DX,0FFE4HSTIJMP $;============================== FOR8259:MOV AL,13HMOV DX,Port0OUT DX,ALMOV AL,08HMOV DX,Port1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;--------------------------- INT8259:cliPush dxPush axMOV AL,20HMOV DX,Port0OUT DX,ALPop axPop dxOut dx,almov cx,0loop $Rol al,1STIIRETCODE ENDSEND P8259六、实验软件框图七、实验步骤(1)按实验电路图连接线路:①开关Ki 和8259 7号中断IR7插孔相连。

8259A中断控制器IRQ2的应用

8259A中断控制器IRQ2的应用

8259A中断控制器IRQ2的应用
一、实验目的
掌握8259A中断控制器工作原理,熟悉实验中涉及到的中断屏蔽寄存器IMR和中断服务寄存器ISR等的使用方法.
学会中断处理程序的编写
二、实验内容
用8259A的输出作为中断请求信号使8259A产生中断,进入中断后
显示一个字符串.
中断请求通过8259的IRQ2端输入,中断源可以是片外8253定时器输出的脉冲,并把8253的OUTO和总线槽IR02连接好.
编写程序,要求每次主机响应外部中断IRQ2时,显示字符串
“THIS IS A 8259A INTERRUPT!”(或其它串),中断十次后,程序退出。

三.编程提示
本实验使用PC/XT机内的8259A芯片,主机启动实际时已将8259A中断寄存器前五位初始化为00001,因此,IRQ2的中断号应为0AH。

主机IRQ2保留给用户使用,而其他外中断已由系统时钟,键盘等占用,因此,编程时要注意系统中已使用的中断请求号。

只须将IMR 寄存器中对应IRQ2的位清零,允许IRQ2中断即可。

机内8259A初始化为普通结束方式,因此,外中断结束时,必须
使用中断结束命令清除中断服务寄存器ISR中的对应位。

程序退出时,关闭IRQ2中断,即给IMR中相应位置1,禁止中断。

机系统中IRQ2硬中断为用户保留的。

编程时首先应将IRQ2对应的中断向量(中断号为0ah)保存起来,然后设置新的中断向量以指向中断处理程序。

另外,还要将中断屏蔽寄存器的相应位开放。

PC机8259A的中断应用实验

PC机8259A的中断应用实验

8259A的中断应用实验一、实验目的(1)学习8259 A中断控制器的结构及其工作原理。

(2)掌握59A的工作方式及初始化。

(2)学习8259 可编程控制器的应用编程。

(3)掌握使用PC 机内8259 的方法。

(4)掌握修改中断向量的方法。

二、实验要求编写一键盘中断处理程序,计数键盘中断次数,并用该程序替换系统键盘中断处理程序,使当键盘中断产生10 次后,显示按键次数并结束应用。

三、相关基本知识a、CPUCPU是中央处理单元(Central Process Unit)的缩写,它可以被简称做微处理器。

(Microprocessor),不过经常被人们直接称为处理器(processor)。

不要因为这些简称而忽视它的作用,CPU是计算机的核心,其重要性好比心脏对于人一样。

实际上,处理器的作用和大脑更相似,因为它负责处理、运算计算机内部的所有数据,而主板芯片组则更像是心脏,它控制着数据的交换。

CPU的种类决定了你使用的操作系统和相应的软件。

CPU主要由运算器、控制器、寄存器组和内部总线等构成,是PC的核心,再配上储存器、输入/输出接口和系统总线组成为完整的PC。

CPU的基本结构、功能及参数CPU主要由运算器、控制器、寄存器组和内部总线等构成。

寄存器组用于在指令执行过后存放操作数和中间数据,由运算器完成指令所规定的运算及操作。

CPU主要的性能指标有:1.主频主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。

CPU的主频=外频×倍频系数。

很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差。

CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号震荡的速度。

CPU的运算速度还要看CPU的流水线的各方面的性能指标。

当然,主频和实际的运算速度是有关的,只能说主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。

2.外频外频是CPU的基准频率,单位也是MHz。

实验三 8259A硬件中断实验

实验三 8259A硬件中断实验

实验三 8259A硬件中断实验一、实验目的1.掌握8088中断系统原理。

2.掌握8259A扩展8088系统中断的方法及编程。

二、实验内容根据系统提供的电路,掌握8259的工作原理,编程实现外部脉冲使8259产生中断。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图(1) 8259A芯片介绍8259A是专用控制中断优先级而设计的集成电路,可对中断源的优先级排队、识别、及提供中断矢量。

单块8259A可编程实现8级中断管理,并可选择优先模式及中断请求方式。

另外由多片8259A级联,可构成多达64级的矢量中断系统。

本实验用2号中断源IR2,接单次脉冲,中断方式为边沿触发方式。

程序每按一次按键产生一次中断,中断服务程序使输出状态反转一次。

本实验需要用到CPU模块(F3区)、8259模块(C5区)、八位逻辑电平输出模块(E4)、八位逻辑电平显示模块(B5)。

8259电路原理图参见图11-1。

五、实验预习要求学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。

六、实验步骤1)系统各跳线器处在初始设置状态。

用导线连接单次脉冲低信号到8259模块的INT_2;用导线连接8259模块的CS_8259到CPU模块的200H;用导线对应连接8259模块的INT、INTA到CPU模块的88INTR、88/INTA;扩展输出模块的JD1C接8位LED显示的JD4B;用导线连接扩展输出模块的CS_273到CPU模块的208H。

2)启动PC机,打开THGMW-88软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

3)手动按单次脉冲,按一次产生一次中断,LED显示状态反转一次。

实验程序:把程序补充完整,记录调试通过的程序。

CS8259 EQU 200HCS273 EQU 208HCODE SEGMENTASSUME CS:CODE,DS:CODESTART: XOR AX,AXMOV DS,AXLEA AX,IRQ2MOV DS:28H,AXMOV AX,CSMOV DS:2AH,AXMOV DX,CS8259MOV ; ICW1OUT DX,ALINC DXMOV AL,08H ; ICW2:中断号从8开始OUT DX,ALMOV ; ICW4:全嵌套方式,86/88系统,自动结束中断OUT DX,ALMOV ; OCW1:开放Int-2OUT DX,ALMOV DX,CS8259MOV ; OCW2:非特殊EOI结束中断OUT DX,ALSTI ; 开中断MOV BL,055HHERE:MOV AL,BLOUT DX,ALCALL DELAYJMP HEREIRQ2: CLIMOV AL,BLNOT ALMOV BL,ALSTIIRETDelay proc near。

8259中断实验实验报告

8259中断实验实验报告

实验报告实验名称8259A中断控制器实验姓名学号班级教师日期一、实验内容与要求1.1 实验内容了解8259A终端控制器的工作原理,了解PC中断的原理和过程,设计并编写程序,设置8259A的命令字,定义中断服务程序,使在TPC-USB平台上每按一次单脉冲开关产生一次中断,在屏幕上依次显示“The 1 TPCA Interrupt!”、“The 2 TPCA Interrupt!”、……、“The 10 TPCA Interrupt!”,中断10次后程序退出,并在屏幕上显示“The TPCA Interrupt end!”。

1.2 实验要求(1)具有一定的汇编编程的基础,能编写一些基本语句来实现实验。

实验前根据实验流程图,写出对应代码;(2)要了解8259A中断控制器的内部结构和外部引脚,理解芯片的工作原理和工作过程。

熟悉8259A芯片的命令字,对其进行编程;(3)熟悉实验平台TPC-USB了解各个接口的名称与功能,进行实验时能快速并正确地连接好实验电路;(4)连接PC与TPC-USB平台,用微机实验软件运行程序,每按一次TPC-USB平台上的单脉冲开关产生一次中断,要在屏幕上依次显示“The 1 TPCA Interrupt!”、“The 2TPCA Interrupt!”、……、“The 10 TPCA Interrupt!”,中断10次后程序退出,并在屏幕上显示“The TPCA Interrupt end!”。

二、实验原理与硬件连线2.1 实验原理8259A是一种可编程中断控制器,可协助CPU进行中断管理。

8259A 的内部结构如图1所示。

单片8259A工作时,每次中断处理过程如下:(1)当IR7 ~ IR0 上有中断请求,则IRR 相应的位置1;(2)对于已进入IRR且未被IMR屏蔽的中断请求,PR电路进行优先级判定,得到最高级的中断请求;(3)控制逻辑接收中断请求,向CPU发INT 信号;(4)若CPU允许中断,则在当前指令结束后连续发出2个中断应答信号INTA,进行中断响应。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8259a中断控制器:利用8259A的IRQ2显示中断过程目录8259a中断控制器:利用8259A的IRQ2显示中断过程 (1)设计题目: (1)要求: (1)设计思路: (1)实验代码: (2)实验心得体会: (10)设计题目:利用8259A IRQ2显示中断过程要求:1.主是在7段数码管上循环显示‘8’从右到左显示2.中断服务中在7段数码管上依次显示全1234567 89要去显示2秒左右时间可采用软件Software延迟(时间可通过调试大致2秒左右)总计中断9次结束返回DOS3.每次由手动产生IRQ2中断请求信号引起中断设计思路:软件Software方面有两个主要部分:主和中断服务子主首先要完成是些和处理工作例如查找设备设置TPC卡中9054芯片IO口,保存原来0AH号中断中断向量设置新中断向量设置中断掩码显示提示信息然后打开中断进入主循环在主循环中不断在LED上从右向左显示8直到被IRQ2中断信号打断此外在主中还对中断执行进行计数当计数满9次后自动跳出为了使主上8循环可以看出来故将显示8延迟设计比较长当完成9次中断主还要完成些后续处理工作:恢复中断掩码;恢复中断向量;设置TPC卡中9054芯片IO口,关闭中断返回DOS中断子完成在6位数码管上“同时”显示个数功能这个数为1—9中某个可以用循环次数作为参数这里同时显示实质上是利用视觉上暂停效果即只要每秒能在同个数码管上显示信息超过24次看起来就是同时了而这点在现在计算机速度条件下很容易实现为了不发生混乱在中断子执行过程中不允许再次中断另外中还有两个子:findtpc和dispword这些是为了完成查找设备等预处理硬件方面实验时把总线上IRQ2引脚和拨键开关相连以手动产生中断信号另外再把LED片选信号CS和210-217相连(注:LED显示是通过向LED数据端口送入数据再向LED位选端口送入位选信号来实现)实验代码:;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译;**********************************************;;*利用8259AIRQ2 显示中断过程*;;**********************************************;io_plx_device_id equ 05406h ;TPC卡设备IDio_plx_vendor_idequ 010b5h ;TPC卡厂商IDIO_PLX_SUB_ID EQU 0905410B5H;TPC卡子设备及厂商IDportseg EQU 211H-200H ;数码管端口地址portbit EQU 210H-200Hdata segmentcsregdw?[Page]ipreg dw? ;旧中断向量保存空间irq_times dw10 ;中断计数msg1 db 0dh,0ah,\'TPC pci card Interrupt\',0dh,0ah,\'$\'msg2 db 0dh,0ah,\'Press any key to exit!\',0dh,0ah,\'$\'msg3 db 0dh,0ah,\'Press DMC or wait to errupt 10 times and exit!\',0dh,0ah,\'$\'io_9054base_address db 4 DUP(0) ;TPC卡PCI接口芯片I/O基地址暂存空间io_base_addressdb 4 DUP(0) ;TPC卡I/O基地址暂存空间errupt_line db 2 DUP(0) ;TPC卡中断号暂存空间pcicardnotfind db 0dh,0ah,\'TPC pci card not find or address/errupt error !!!\',0dh,0ah,\'$\' io9054baseaddress db 0dh,0ah,\'TPC pci card 9054 Chip I/O Base Address : \',\'$\' iobaseaddress db 0dh,0ah,\'TPC pci card I/O Base Address : \',\'$\'number db 0dh,0ah,\'TPC pci card Interrupt Line : \',\'$\'enter_ db 0dh,0ah,\'$\'MESS DB \'8253A TIMER0 IN MODE3! COUNT=0200H\',0AH,0DHDB \'8253A TIMER1 IN MODE2! COUNT=0aH\',0AH,0DH,\'$\'irq_vect db 08h,09h,0ah,0bh,0ch,0dh,0eh,0fh,70h,71h,72h,73h,74h,75h,76h,77h;新中断向量,中断0-7向量为:08h-0fh,中断8-15向量为:70h-77hirq_mask_0_7_table db 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111bdb 011111011b,011111011b,011111011b,011111011b[Page] db 011111011b,011111011b,011111011b,011111011b;新中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_8_15_table db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh db 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111b;新中断掩码,中断0-7时全,中断8-15时从低至高相应位为零LED DB 06,5BH,4FH,66H,6DH,7DH,07,7FH,6FHdata endsstacks segmentdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:;Enable Local Interrupt Input.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axcall findtpc ;查找TPC卡资源并显示movdx,word ptr io_9054base_addressadd dx,68h;设置tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,axmov bx,word ptr errupt_line ;保存原中断向量mov al, ptr [irq_vect+bx]mov ah,35h21hmov ax,esmov csreg,ax[Page] mov ipreg,bxmov bx,word ptr errupt_line ;设置新中断向量mov al, ptr [irq_vect+bx]mov cx,csmov ds,cxmov dx,off _procmov ah,25h21hmov ax,datamov ds,axmov es,axin al, 21h ;设置中断掩码mov bx,word ptr errupt_linemov ah, ptr [irq_mask_0_7_table+bx]and al,ahout 21h, alin al, 0a1hmov bx,word ptr errupt_linemov ah, ptr [irq_mask_8_15_table+bx]and al,ahout 0a1h, almov dx,off msg2mov ah,09h21hmov dx,off msg3mov ah,09h21hmov irq_times,0sti ;开中断loop1:cmp irq_times,9 ;等待中断并判断中断9次后退出jz exitmov ax,datamov ds,ax[Page] mov al,7FHmovdx,word ptr io_base_addressadd dx,portsegout dx,almov al,blmovdx,word ptr io_base_addressadd dx,portbitout dx,alpushcxmov cx,0FFFFhskip3:push cxmov cx,03FFHskip4:loop skip4pop cxloop skip3pop cxshl bl,1cmp bl,40hjne skip5mov bl,01hskip5:jmp loop1exit:climov bx,word ptr errupt_line ;恢复中断掩码mov ah, ptr [irq_mask_0_7_table+bx]not ahin al, 21hor al, ahout 21h, almov bx,word ptr errupt_linemov ah, ptr [irq_mask_8_15_table+bx]not ahin al, 0a1hor al, ah[Page] out 0a1h, almov bx,word ptr errupt_line ;恢复原中断向量mov al, ptr [irq_vect+bx]mov dx,ipregmov cx,csregmov ds,cxmov ah,25h21hmov ax,data ;设置tpc 卡中9054芯片io口,关闭中断mov ds,axmov dx,word ptr io_9054base_address add dx,68hin ax,dxand ax,0f7ffhout dx,axmov ax,4c00h21h ;退出_proc proc farclipush axpush dxpush dsmov bl,01hmov ax,datamov ds,axmovsi,irq_timesmov cx,05FFHagain:mov al,LED[si]movdx,word ptr io_base_addressadd dx,portsegout dx,almov al,blmovdx,word ptr io_base_addressadd dx,portbit[Page] out dx,alshl bl,1cmp bl,40hjne skip6mov bl,01hskip6:push cxmov cx,0FFFFHagain2:pushcxmov cx,10again4:loopagain4pop cxloop again2pop cxloop againmov al,20h ;Send EOIout 0a0h,alout 20h,alinc irq_timespop dspop dxpop axstiiret_proc endpfindtpc proc near ;查找TPC卡资源并显示pushadpushfdmov ax,0b101h1ahjc findtpc_notfind ;检查PCI BIOS是否存在mov ax,0b102hmov cx,io_plx_device_idmov dx,io_plx_vendor_idmov si,01ahjc findtpc_notfind ;检查tpc卡是否安装,设备号、厂商号[Page]mov ax,0b10ahmov di,02ch1ahjc findtpc_notfindcmp ecx,io_plx_sub_idjnz findtpc_notfind ;检查tpc卡是否安装,子设备号、厂商号mov ax,0b10ahmov di,14h1ahjc findtpc_notfind ;读TPC卡9054芯片I/O基址信息mov dword ptr io_9054base_address,ecxand ecx,1jz findtpc_notfind ;检查是否为i/o基址信息mov ecx,dword ptr io_9054base_addressand ecx,0fffffffehmov dword ptr io_9054base_address,ecx;去除i/o指示位并保存MOV AX,0B10AHMOV DI,18HINT 1AHJCfindtpc_notfind ;读TPC卡I/O基址信息mov dword ptr io_base_address,ecxand ecx,1jz findtpc_notfind ;检查是否为i/o基址信息mov ecx,dword ptr io_base_address[Page] and ecx,0fffffffehmov dword ptr io_base_address,ecx ;去除i/o指示位并保存mov ax,0b10ahmov di,3ch1ahjc findtpc_notfind ;读TPC卡中断信息and cx,0ffhmov word ptr errupt_line,cx ;去除errupt其它指示位并保存mov dx,off io9054baseaddress ;显示i/o提示信息mov ah,09h21hmov ax,word ptr io_9054base_addresscall dispword ;显示i/o基地址mov dx,off iobaseaddress ;显示i/o提示信息mov ah,09h21hmov ax,word ptr io_base_addresscall dispword ;显示i/o基地址mov dx,off number ;显示errupt提示信息mov ah,09h21h[Page] mov ax,word ptr errupt_linecall dispword ;显示中断号mov dx,off enter_ ;加回车符,换行符21hpopfdpopadretfindtpc_notfind:mov dx,off pcicardnotfind ;显示未找到tpc卡提示信息mov ah,09h21hmov ax,4c00h21h ;退出findtpc endpdispword proc near ;显示子push dxpush cxpush bxmov cx,4mov bx,16dispword_loop1:push axpush cxsub bx,4mov cx,bxshr ax,cland al,0fh ;首先取低4位[Page] mov dl,alcmp dl,9 ;判断是否<=9jle dispword_num ;若是则为\'0\'-\'9\',ASCII码加30H add dl,7 ;否则为\'A\'-\'F\',ASCII码加37Hdispword_num:add dl,30hmov ah,02h ;显示21hpop cxpop axloop dispword_loop1pop bxpop cxpop dxret ;子返回dispword endpend start实验心得体会:本实验难点在LED显示上由于在此的前我直认为LED显示是由8255A驱动所以开始做这个时我首先想到是利用8255A但是结合实验箱上LED我才发现这样思路方法行区别于是再回头认真学习了下LED显示原理才发现LED显示其实很简单只要往数据端口送数据再往位选端口送入位选代码就可以了这下流程变得豁然开朗另外在设计时候我和其他同学讨论了手动中断信号种种产生方式最终发现用开关直接和总线插槽上IRQ2直接相连时最简单思路方法!本实验些预处理操作和有关TPC实验板化、后处理都是结合平时实验在此基础上修改完成经过小组成员致努力我们圆满完成了这次实验任务!经过此次实验我体验了从实战到学习再到实战过程乐趣。

相关文档
最新文档