微型计算机原理及应用:第7章 微型计算机中断系统_第1页
微型计算机原理及应用:第7章 微型计算机中断系统_第2页
微型计算机原理及应用:第7章 微型计算机中断系统_第3页
微型计算机原理及应用:第7章 微型计算机中断系统_第4页
微型计算机原理及应用:第7章 微型计算机中断系统_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章 微型计算机中断系统概述:中断:CPU在运行程序期间,遇到某些特殊情况(被内部或外部事件所打断),暂时中止原先程序的执行,而转去执行一段特定的处理程序,这一过程就叫中断。 这段特定的处理程序叫做中断服务程序。中断方式:当外设作好传送准备后,主动向CPU请求中断,CPU响应中断后在中断处理程序中与外设交换数据。若外设未准备好,CPU可以执行其他程序,提高了CPU的利用率每条指令完成后,CPU均可响应中断,因此当设备准备好时,可及时与CPU交换数据,提高了实时性二、中断处理过程不论哪种中断都遵循同样的中断处理过程中断源中断请求 当 前 程 序中断服务程序程序断点中断返回中断响应中断:处理器暂

2、停执行当前程序,转而处理随机发生的事件,处理完毕后再返回到断点处继续执行原来程序的过程。中断基本过程:(1)中断请求(2)中断判优(3)中断响应(4)中断处理(5)中断返回(1)中断请求:中断源发出中断请求(不同中断源发出中断请求的条件不同)(2)中断判优:当多个中断源同时提出中断请求时,CPU首先响应优先级最高的中断并决定是否能实现中断嵌套。通常一个系统有多个中断源,而CPU同一时刻只能响应一个中断源的请求,那么当多个中断源同时请求中断服务时,应该先响应哪一个,有一个次序安排的问题。按中断源的轻重缓急程度确定的优先级别,称为优先级。除法错 INT0指令 INT n溢出 INTONMIINTR

3、单步 INT1优先级递增高低当CPU正在响应某一中断源的请求,执行为其服务的中断服务程序时,如果有优先级更高的中断源发出请求,CPU将中止正在执行的中断服务程序而转入新的中断源服务,等新的中断服务程序执行完后,再返回到被中止的中断服务程序,这一过程称为中断嵌套。中断嵌套可以有多级,具体级数原则上不限,只取决于堆栈深度1#中断请求响应返回1#中断服务程序2#中断请求响应返回2#中断服务程序3#中断请求响应返回3#中断服务程序原主程序中断优先级3#2#1#(3)中断响应除(1)(2)外还需中断允许标志位(IF)为1才可以响应中断。注:(1)CPU在复位时,IF复位为0,因此在使用中断时要开中断 (

4、2)CPU在响应中断后自动关闭中断,要实现中断嵌套需要在进入中断服务子程序后开中断STI开中断指令将标志寄存器中的中断标志位IF置1,允许CPU响应来自INTR引脚的中断请求CLI关中断指令将标志寄存器中的中断标志位IF清0,使CPU不响应来自INTR引脚的中断请求响应中断时自动进行相应的处理:保护状态标志、保护断点、获取中断向量(中断服务程序的入口地址)(4)中断处理(1)保护现场:将中断服务程序中要用到的寄存器的内容压入堆栈保存。(2)开中断;(3)执行中断服务处理程序;(4)关中断;(5)恢复现场:将相关寄存器的内容弹出堆栈。(5)中断返回IRET中断返回指令中断服务程序的出口指令,从栈

5、顶弹出6个字节依次写入IP、CS和标志寄存器POP IPPOP CSPOPF注:在执行IRET之前必须保证栈顶是断点地址,否则执行IRET指令将导致系统瘫痪中断的类型中断的类型PC系列微机最多可以支持256种中断,它们被分为四种类型:1.内部中断和异常: 被零除、单步、溢出、断点2.软件中断: 指令中断 INT n3.外部可屏蔽中断:INTR (CPU可以控制是否响应中断)4.外部非屏蔽中断:NMI (有中断请求CPU就需响应) 1、2属于内部中断,3、4属于外部中断。外部中断源有:(1)I/O设备,如键盘,显示器(CRT),打印机等;(2)数据通道,如磁盘,磁带等;(3)实时钟,如外部所需的

6、定时电路等;(4)故障源,如掉电、存储器奇偶校验错。每个中断和异常都指定了一个类型号代表不同的优先级。1. 内部中断和异常处理器执行某些操作而引起的中断,包括除法错误异常、单步调试中断、断点中断等这类中断使用了00H07H中的若干个中断号INT0-除法错误, 没有INT0形式的指令, CPU自动产生INT1-单步中断,同样也没有INT1形式的指令,TF1时产生INT2 -NMI,CPU处理外部紧急事件,硬件中断INT3-格式:INT, 断点中断INT4-格式:INTO,溢出中断,OF1时配合INTO执行 中断的类型2.软件中断执行有定义的INT n指令而引发的中断,称为软件中断,它的形式是IN

7、T n, 包括BIOS中断和DOS中断,以及用户自定义中断等有定义的 INT n :并非所有的中断号都有对应的中断 服务程序,没有定义的中断的INT n 是无意义的。定义 INT n 包含三个内容:1。确定合适的中断号n2。用过程的形式完成中断服务子程序 3。将此过程的逻辑地址植入相应的中断矢量中断的类型3.外部可屏蔽中断 外部可屏蔽中断是处理器响应各种外部硬件中断的最常用的方法,通过CPU的INTR引脚产生外部可屏蔽中断,受处理器内部的中断允许标志位IF的控制,处理器以电平触发方式接受INTR请求,当每条指令结束时,若INTR为高电平且IF=1,则CPU响应相应I/O接口的中断请求。处理器只

8、有一个INTR引脚可以接受外部可屏蔽中断请求,为了管理众多的外部中断源,微机系统中采用可编程中断控制器8259。PC系列机通过两片8259级连可以响应15个外部中断源。中断的类型4.外部非屏蔽中断为外部紧急请求提供服务的中断,通过处理器的NMI引脚产生NMI输入是上升沿触发的,只要NMI输入端上出现由0到1的跳变,一个中断服务请求就被锁存在CPU中,与IF标志的状态无关NMI有一个专用的类型号02H使用非屏蔽中断的典型例子是电源故障中断中断的类型中断响应过程 一、内部中断响应过程对于专用中断,中断类型码自动产生,对于INT n指令。N为中断类型码,获取类型码后的处理过程如下:类型码乘以4后,得

9、到中断向量地址;将标志寄存器压栈 (PUSH F)将TF置0(TF=0),禁止单步操作, 将IF置0 (IF=0) ,使CPU处于关中断状态断点的CS、IP压栈(PUSH CS PUSH IP)从中断向量表取n号中断向量 IP、CS (CS=n*4+2, IP=n*4 )转向n号中断服务程序二、外部中断响应过程1、非屏蔽中断响应:CPU检测到非屏蔽中断请求,自动产生中断类型码,得到中断向量地址。后续的处理同内部中断。2、可屏蔽中断响应: 通过IF来决定,IF1可以响应中断。中断响应过程中断的优先级 8088在内存的前1k字节建立了一个中断向量表,可存储256个中断向量,每个中断向量占用4个字节

10、,分别存放中断服务程序入口地址的段地址和偏移量。每个中断向量以类型码加以区别,如: Int 21h DOS系统功能中断 Int 10h 屏幕显示 键盘中断 类型码 9 当执行中断时,CPU将中断类型码乘以4后,得到中断向量地址,进而得到IP和CS的值,它就是中断服务程序的入口地址,程序由此转入中断服务程序执行。000000000C00013C1F1F3C:0100 (1F4C0)PUSH AXPUSH BX003FF中断向量表INT 3中断服务程序中断向量中断向量表中断向量表 地址(Hex) 类型码 中断名称 03 0 除以0 47 1 单步 8B 2 非屏蔽 CF 3 断点 1013 4 溢

11、出 1417 5 打印屏幕 181B 6 保留 1D1F 7 保留 2023 8 定时器 2427 9 键盘 282B A 保留的硬中断 2C2F B 异步通信(COM2) 3033 C 异步通信(COM1) 3437 D 硬盘 383B E 软盘 3C3F F 并行打印机地址(Hex) 类型码 中断名称4043 10 视频显示I/O调用4447 11 设备检测调用484B 12 存储器容量检测4C4F 13 软/硬盘I/O调用5053 14 通信I/O调用5457 15 盒式磁带I/O调用585B 16 键盘I/O调用5C5F 17 打印机I/O调用6063 18 ROM BASIC6467

12、 19 引导程序入口686B 1A 时间调用6C6F 1B 键盘CTRL-BREAK控制7073 1C 定时器报时7477 1D 显示器参数表787B 1E 软盘参数表地址(Hex) 类型码 中断名称7C7F 1F 字符点阵结构参数表8083 20 程序结束,返回DOS8487 21 DOS系统功能调用888B 22 程序结束地址8C8F 23 CTRL_BREAK退出地址9093 24 标准错误出口地址9497 25 绝对磁盘读989B 26 绝对磁盘写9C9F 27 程序结束,驻留内存A0FF 283F 为DOS保留10017F 405F 保留18019F 6067 为用户软中断保留1A0

13、1FF 687F 不用200217 8085 BASIC使用2183C3 86F0 BASIC运行时,用于解释3C43FF F1FF 未用中断向量表的操作 当CPU响应中断,便从中断向量表中相继取出偏移地址和段地址作为中断服务程序的入口地址,而转移去执行中断服务程序。因此,当用户要编写自己的中断服务程序时,必须将服务程序的入口地址填入系统的中断向量表中。 下面所示程序表示怎样填写中断向量表,以实现用户所定义的60H中断。 CLI MOV AX,0 MOV ES,AX MOV DI,4*60H ;中断向量表中位置 MOV AX,OFFSET INTRE STOSW ;存入偏移量自动修改DI MO

14、V AX,SEG INTRE STOSW ;存入段基址 STIINTRE PROC PUSH AX PUSH BX . . . POP BX POP AX IRETINTRE ENDPINT 60H 也可以DOS功能调用实现这一功能。CLIPUSH DSMOV AX,SEG INTRMOV DS,AXMOV DX,OFFSET INTR ;中断服务程序入口地址放入DS:DX中MOV AH,25H ;功能号25H送入AH中 MOV AL,60H ;类型码放入ALINT 21H ;调用21H 中断POP DSSTI INTRE PROC PUSH AX PUSH BX . . . POP BX P

15、OP AX IRETINTRE ENDP中断向量表的操作可调用相应的DOS功能,读写中断向量表取中断向量预置AH=35H, AL=中断类型号执行INT 21H把类型号为AL的中断向量取出到ES:BX中设置中断向量预置AH=25H, AL=中断类型号,DS:DX=中断向量执行INT 21H把DS:DX指向的中断向量放置到中断向量表中类型号为AL的中断向量处例:用户定义的中断服务程序置换系统原有的nXX中断服务程序DATA SEGMENT OLD_INT_SEG DW ?OLD_INT_OFF DW ?DATA ENDS.MOV AL, XXMOV AH, 35HINT 21HMOV OLD_IN

16、T_SEG, ESMOV OLD_INT_OFF, BXCLIPUSH DSMOV AX, SEG NEW_INTMOV DS, AXMOV DX, OFFSET NEW_INTMOV AH, 25HMOV AL, XXINT 21HPOP DSSTICLIPUSH DSMOV AX, SEG OLD_INT_SEGMOV DS, AXMOV DX, OFFSET OLD_INT_OFFMOV AH, 25HMOV AL, XXINT 21H.中断向量表的操作8259A可编程中断控制器8259A内部结构和引脚8259A的工作过程8259A的工作方式8259A的编程 8259A内部结构和引脚 一

17、、功能 Intel 8259A是兼容于8080/8085和8086/8088系列的可编程中断控制器,其功能主要有:1) 单片8259A可管理8级中断;2) 通过级连,可管理多于8级的中断,在不增加其它电路的前提下,可使 用9片8259A构成64级主从式中断系统;3) 每一级中断都可通过编程使之被屏蔽或被允许;4) 8259A可通过编程被设定为几种不同的工作方式;5) 8259采用NMOS工艺,只需要一组5V电源。CS WRRDD7D6D5D4D3D2D1D0CAS0CAS1GNDVccA0INTAIR7IR6IR5IR4IR3IR2IR1IR0INTSP/ENCAS2D7D0 三态数据总线(双

18、向)RD 读输入WR 写输入A0 选择内部寄存器地址CS 片选CAS0CAS2 级连线SP/EN 从程序/允许缓冲INT 中断请求输出INTA 中断响应输入IR0IR7 中断请求输入 8259管脚对照表1 282 273 264 255 246 237 228 219 2010 1911 1812 1713 1614 15管脚信号数据总线 缓冲器读/写逻辑 级联缓冲 比较器控 制 逻 辑在服务寄存器ISR优先权电路中断请求寄存器 IRR中断屏蔽寄存器IMRIR0IR7D7D0INTA INTRDWRA0CSCAS0CAS1CAS2SP/EN内部数据总线二、结构IR18位双向三态。是与CPU进行

19、数据交换的数据通道,CPU对它的读出和写入都是通过该缓冲器进行的。用于CPU对8259A进行读写控制用于多片8259A进行级连根据设定的工作方式管理整个芯片的工作8位寄存器。用于存放来自外设的中断请求信号,当某引脚有中断请求信号时,相应的位被置1。0 0 0 1 0 1 1 0IRR8位寄存器。用于存放正在处理的中断请求信号,8259A在接收到CPU的响应信号(INTA)后,使相应位置1。0 0 0 1 0 10 0ISR用于识别和管理各种中断请求信号的优先级别。8位寄存器用于存放对中断请求的屏蔽信息。当某位被编程设置为1 时,则相应的中断请求信号被屏蔽,不会被送到CPU.1 0 0 0 0

20、0 0 1IMR8259A的工作过程1。硬件有中断请求,IRR置位2。INT 向INTR发中断请求3。若IF=1,则第一个INTA响应,最高优先级的 ISR置位,IRR复位5。第二个INTA脉冲,送中断类型码。若为自动中断结束方式,则ISR相应位复位,执行中断服务子程序。6。对非AEOI ,发EOI指令使得ISR相应的位清0。可屏蔽中断响应周期 8088响应中断,到转入中断处理,要经过两个中断响应周期。T1 T2 T3 T4 T1 T2 T3 T4第一个中断响应周期第二个中断响应周期CLKALEINTAAD7AD0向量类型码第一个INTA信号:将在服务寄存器ISR相应位置位,表示正在为响应的那

21、一级服务;同时将中断请求触发器复位。为本级再次中断请求做好准备。第二个INTA信号:要求8259A输入中断向量类型码。8259A的工作方式中断触发方式普通全嵌套方式特殊全嵌套方式自动循环方式特殊循环方式优先权固定方式优先权循环方式设置优先权方式普通中断结束方式特殊中断结束方式自动中断结束方式非自动中断结束方式结束中断处理方式屏蔽中断源方式普通屏蔽方式特殊屏蔽方式边沿触发方式电平触发方式返回到初始化优先级控制方式两类优先级控制方式:固定优先级和循环优先级固定优先级方式(普通全嵌套方式和特殊全嵌套方式)所有中断请求IRi的中断优先级固定不变优先级排列顺序可编程改变加电后8259A的默认方式,默认优

22、先级顺序从高到低为IR0IR7IR7IR6IR5IR4IR3IR2IR1IR07654321032107654最低级最高级最高级最低级优先级IR7IR6IR5IR4IR3IR2IR1IR0默认优先级优先级可编程改变固定优先级的中断嵌套在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。8259A有两种中断嵌套方式:普通全嵌套方式(默认方式) 中断请求优先级顺序是IRQ 0IRQ7。当一个中断被响应时,中断服务寄存器ISR相应位被置为“1”,且保持到中断服务程序在返回前发中断结束命令为止。在ISR位置位期间,禁止再发生同级或较低级的中断,较高级的中断请求仍能产生中断。每个中断请求可分别由I

23、MR相应位屏蔽。(OCW1)特殊全嵌套方式 中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。注: 特殊全嵌套仅用于多个8259A级联系统中的主片8259A ,而不能用于从8259A或单8259A系统。D.主8259AIR0IR1IR2IR3IR4IR5IR6IR7普通嵌套方式:从片的INT被主片封锁,故更高级别的IR0-IR2中断也无法得到响应特殊嵌套方式:因主片不封锁从片的INT,故级别高的IR0-IR2中断可以得到响应。(但IR3-IR7仍被本从片封锁)C.假定IR3发生中断,并获得服务普通嵌套方式:IR4的中断被服务时,这些中断将被封锁。B.特殊嵌套方式:I

24、R4的中断被服务时,只封锁IR5-IR7。A.INTE.从8259AINTIR0IR1IR2IR3IR4IR5IR6IR7普通全嵌套方式与特殊全嵌套方式的区别 去CPU循环优先级方式(1)优先权自动循环方式 一般用于系统中有多个优先级相等的中断源的情况。 在这种方式下,优先级队列是变化的,一个设备受到服务后,其优先级自动降到最低。初始优先级队列是固定的,为: IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 (由高到低)。如果这时IRQ1有中断请求,则在完成其中断服务后,优先级队列变为(由高到低): IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IR

25、Q0 IRQ1 优先级自动循环方式由操作命令字OCW2设定。 (2)优先级特殊循环方式初始优先级顺序可用编程改变(特殊循环方式)IR7IR6IR5IR4IR3IR2IR1IR07654321021076543最低级最高级最高级最低级ISR内容IR7IR6IR5IR4IR3IR2IR1IR0IR4的服务结束以前0101000001000000IR4的服务结束以后ISRi结束中断处理方式当某一IRi中断被服务时,ISR中的相应位ISRi=1。当服务结束后,则必须清零该ISRi位。使ISRi=0是通过向8259A发出中断结束命令(EOI命令)实现的。三种EOI命令 (1)自动EOI(AEOI)在第2

26、个INTA#结束时,由8259A使ISRi自动复位; 注:因不保留当前正在服务的中断的状态,故AEOI不能用于中断嵌套方式(2)非指定EOI(NSEOI)由CPU发出正常EOI命令,该EOI命令使ISRi=1的位中优先级最高的那一位复位。用于普通全嵌套方式(3)指定EOI(SEOI)(特殊EOI方式)由CPU发出一条SEOI命令,该EOI命令中指出了所要复位的ISR的位号。用于特殊全嵌套方式中断服务程序向从PIC发EOI命令读从PIC的ISR全0?向主PIC发EOI命令YIRET恢复现场N特殊全嵌套方式下的EOI处理只有当从PIC的中断全部处理完后,才能向主PIC发EOI命令屏蔽中断源的方式普

27、通屏蔽方式:IMR屏蔽字决定了允许或禁止某位IRi所对应的中断:IMi=1 禁止, IMi=0 允许。特殊屏蔽方式:提供了允许较低优先级的中断能够得到响应的特殊手段。原理:假定当前正在处理IR6,先进入特殊屏蔽方式,然后设置IM6=1。这时,除IR6外的所有中断请求均能得到响应。(ISR中相应的位将被清零)特殊屏蔽方式中只能用SEOI命令结束中断。中断触发方式边沿触发IRi出现上升沿表示有中断请求 电平触发IRi出现高电平表示有中断请求在第1个INTA#结束前,IRi必须保持高电平 级联方式:一个8259A主片至多带8个从片,因此可扩展控制64个中断源。所有的主片和从片均分别进行初始化,且可设

28、定为不同的工作方式。缓冲方式: 缓冲方式:在多片8259A级连的大系统中,8259A通过总线驱动器和数据总线相连,这就是缓冲方式。 非缓冲方式:当系统中只有单片8259A时,一般将它直接与数据总线相连;另外,在一些不太大的系统中,即使有几片8259A级连工作,也可以将8259A直接与数据总线连。这种连接即为非缓冲方式。1 初始化命令字初始化命令字ICW(Initialization Command Word)通常是系统开机时,由初始化程序填写,且在整个系统工作过程中保持不变。8259A初始化命令字必须按顺 序填写。 顺序写入24个字节的初始化命令字ICW1ICW2ICW3ICW4 级连方式?需

29、要ICW4?准备接受中断请求No(SGNL=1) Yes (SGNL=0) No(ICW4=0) Yes (ICW4=1)8259A的编程 (初始化编程和操作方式编程)8259A初始化过程的流程图6.5.4 8259A的编程 (初始化编程和操作方式编程)(1) ICW1 (初始化字) (设定具体功能,同时系统内部初始化) 1 初始化命令字1需要ICW40不需要ICW41单片8259A0级连调用地址间距(仅用于MCS80 / 85模式)1电平触发方式0边沿触发方式中断向量地址(仅用于MCS80 / 85模式)对于8086/8088通常置为0A0 D7 D6 D5 D4 D3 D2 D1 D0 0

30、A7 A6 A5 1 LTIM ADI SNGL ICW4ICW1识别位偶地址1 T7 T6 T5 T4 T3 中断向量地址的A15A8位 (MCS8080 / 8085 模式)中断类型码的T7T3位(8086 / 8088模式)A0 D7 D6 D5 D4 D3 D2 D1 D01(2) ICW2 (中断类型码) 注: T7T3 中断类型码高位, 由编程决定,用于 PX8686系统。 低三位自动设置为 IR0 IR7 的类型编码。 D7 D6 D5 D4 D3 D2 D1 D0IR7T7 T6 T5 T4 T3 1 1 1IR6T7 T6 T5 T4 T3 1 1 0IR5T7 T6 T5

31、T4 T3 1 0 1IR4T7 T6 T5 T4 T3 1 0 0IR3T7 T6 T5 T4 T3 0 1 1IR2T7 T6 T5 T4 T3 0 1 0IR1T7 T6 T5 T4 T3 0 0 1IR0T7 T6 T5 T4 T3 0 0 08259A传送的中断类型码 1 S7 S6 S5 S4 S3 S2 S1 S0 1IR输入带有一个从控制器 0IR输入不带一个从控制器A0 D7 D6 D5 D4 D3 D2 D1 D01 1 0 0 0 0 0 ID2 ID1 ID0从控制器ID,编码000111分别对应从片接入主片的IR0IR7。A0 D7 D6 D5 D4 D3 D2 D1

32、 D01(3) ICW3 (主控制器) 级联控制字 ICW3 (从控制器)系统怎样区分主片和从片?不同的从片怎样区分? 186 / 88模式080 / 85模式1自动EOI0非自动EOI 0 X 非缓冲方式 1 0 缓冲方式/从控制器 1 1 缓冲方式/主控制器1特殊全嵌套方式0非特殊全嵌套方式A0 D7 D6 D5 D4 D3 D2 D1 D01(4) ICW4 中断结束方式字0 0 0 SFNM BUF M / S AEOI PM初始化编程 例1 (P261)PC机中使用单片8259A,定义地址为:20H、21H,8259A的工作方式设置如下: (1) 固定优先权级别,普通全嵌套:IR0最

33、高,IR7最低 ; (2) 8个中断类型码分别是 08H 0FH; (3) 中断请求信号采用边沿触发方式,非缓冲方式; (4) 中断服务结束时,采用普通中断结束命令(EOI); (5) 采用普通屏蔽方式。程序: MOV AL,13H ;初始化ICW1 OUT 20H,AL ;偶地址 MOV AL, 08H ;初始化ICW2 OUT 21H, AL ;奇地址 MOV AL, 01H ;初始化ICW4 OUT 21H, AL ;奇地址 0 0 0 1 0 0 1 1 B 13H ;边缘触发,单片,需要ICW40 0 0 0 1 0 0 0 B 08H ;IR0中断类型码为08H 0 0 0 0 0

34、 0 0 1 B 01H ;8086/8088 普通EOI 非缓冲,全嵌套初始化命令字: ICW1: ICW2: ICW4: 8259A应用举例初始化编程:例2PC/AT中,8259的使用情况为:1. 2片8259级联,提供15级向量中断。从片的INT接主片的IR2。2. 端口地址:主片20H、21H,从片A0H、A1H。3. 主片和从片均采用边沿触发。4. 采用全嵌套优先级排列方式5.采用非缓冲方式6.主片的类型码为08H0FH,从片的类型码为70H77H。ICW1A EQU 20H ;主片端口地址ICW2A EQU ICW1A+1ICW3A EQU ICW2AICW4A EQU ICW2A

35、ICW1B EQU 0A0H ;从片端口地址ICW2B EQU ICW1B+1ICW3B EQU ICW2BICW4B EQU ICW2B;- 主片8259A-MOV AL,11H ;ICW1,边沿触发,多片,需ICW4OUT ICW1A,ALNOP ;I/O端口延时MOV AL,08H ;ICW2,中断类型码OUT ICW2A,ALNOPMOV AL,04H ;ICW3,00000100,IR2接从片OUT ICW3A,ALNOPMOV AL,01H ;ICW4,非缓冲,全嵌套,非自动结束OUT ICW4A,ALNOP;- 从片8259A-MOV AL,11H ;ICW1,边沿触发,多片,需

36、ICW4OUT ICW1B,ALNOPMOV AL,70H ;ICW2,中断类型码OUT ICW2B,ALNOPMOV AL,02H ;ICW3,INT接主片的IR2OUT ICW3B,ALNOPMOV AL,01H ;ICW4,非缓冲,全嵌套,非自动结束OUT ICW4B,ALNOPPC/AT机主、从8259的初始化程序5. 8259A应用举例 由CPU向8259A送三个字节的操作命令字OCW(Operation Command Word), 用以规定8259A的工作方式,如: 中断屏蔽 结束中断 优先权循环 中断状态 等。 操作命令字是在应用程序中设置的,且可设置多次。设置时,顺序上没有严

37、格的要求。但对端口地址有要求,如OCW1写入奇地址,其余两个写入偶 地址。2 操作命令字OCW(当不写入时,表示全嵌套 ) 1 M7 M6 M5 M4 M3 M2 M1 M0中断屏蔽1置屏蔽0复位屏蔽A0 D7 D6 D5 D4 D3 D2 D1 D01(1)OCW1 (中断屏蔽命令字)命令字中的M7M0对应IMR的各位。Mi=1表示该中断被屏蔽,Mi=0表示该中断开放。命令格式如图。 R、SL、EOI的不同组合决定了8259A的几种工作方式。 L2L0 这几位确定当SL=1时指定的特殊结束或特殊循环时的中断优先级。 D4 D3 是特征位 0 R SL EOI 0 0 L2 L1 L00 0

38、1 普通EOI命令,全嵌套方式0 1 1 特殊EOI,L2L1 ISR位清零1 0 1 普通EOI,自动循环1 0 0 自动EOI,自动循环(置位) 自动循环 0 0 0 自动EOI,取消优先级自动循环1 1 1 普通EOI,特殊循环(置位)1 1 0 优先权特殊循环(置位)0 1 0 无操作0 0 0 0 有 0 0 1 1 效 0 1 0 2 的 0 1 1 3 中1 0 0 4 断1 0 1 5 请 1 1 0 6 求 1 1 1 7 级 别(2)OCW2 中断结束和优先权循环控制字A0 D7 D6 D5 D4 D3 D2 D1 D00中断结束特殊循环MOV AL,20HOUT 20H,

39、AL 0 0 ESMM SMM 0 1 P RR RIS用于控制8259A的运行方式。命令格式如图。(3)OCW3屏蔽和读中断控制字A0 D7 D6 D5 D4 D3 D2 D1 D00X 0 1 XX 1 1 01 0 0 0下一个指令读查询字下一个指令读IRR下一个指令读ISR特殊屏蔽方式0 0 1 10 1 0 1无作用复位特殊屏蔽置特殊屏蔽 当送出OCW3且P0,随后对同一地址(A00)的读(IN)指令完成读IRR(RR/RIS=1/0)或读ISR(RR/RIS=1/1)无意义查询字 0 I X X X X W2 W1 W0A0 D7 D6 D5 D4 D3 D2 D1 D001 本片

40、有中断请求0 无外设请求中断编码000111给出当前优先级最高的外部中断请求编码A0D4D3RDWRCS输入操作(读)01001100IRR、ISR 或中断类型码 数据总线IMR 数据总线输出操作(写)0001001X01XX111100000000数据总线 OCW2 数据总线 OCW3数据总线 ICW1数据总线 ICW2、ICW3、ICW4、OCW1断开功能XXXXXX1X1X01数据总线 3态(无操作)数据总线 3态(无操作)8259A的读写操作OCW编程举例例1、允许日时钟IRQ0和键盘IRQ1中断,其他中断状态不变 IN AL,21H ; 读出IMR AND AL,0FCH ;允许IR

41、Q0和IRQ1 OUT 21H,AL ;写入OCW1,即IMR 例2、读8259A相关寄存器的内容。8259A的端口地址为20H、21H,读入IRR、ISR、IMR寄存器的内容,并相继保存在数据段内偏移地址为2000H开始的内存单元中。 MOV AL, xxx01010B ;发OCW3,欲读取IRR的内容 OUT 20H, AL IN AL, 20H ;读入并保存IRR的内容 MOV 2000H,AL MOV AL,xxx01011B ;发OCW3,欲读取ISR的内容 OUT 20H, AL IN AL, 20H ;读入并保存ISR的内容 MOV 2001H, AL IN AL ,21H ;读

42、入并保存IMR的内容 MOV 2002H,AL返回8259A应用举例中断程序设计1、中断服务程序的编程原则1)中断是异步发生的,必须保护现场2)中断处理之前要先初始化中断向量,在此之前要先关中断。3)在中断服务程序入口处要立即开中断,以允许较高优先级的中断产生4)中断服务程序的服务时间要尽量压缩,以免干扰同级或低级中断设备的工作5)由于PC机中8259采用正常结束中断,因此在中断服务程序执行IRET返回前应向8259发结束中断命令EOIMOV AL, 20H;使当前ISR中的对应位复位OUT 20H, ALIRET6)当编制替代系统原有中断服务程序时,应保存好原中断向量的内容。在应用程序终止前

43、恢复原有的中断向量7)中断服务程序不要使用DOS系统功能调用(INT 21H),因为DOS不允许重入8)若中断服务程序只为某个应用程序服务,则中断服务程序可以和主程序组装成一个程序一起装入内存,随主程序结束而一起退出内存9)若中断服务程序为多个应用程序服务,则中断服务程序可以与一个初始化程序组装成一个程序一起装入内存,通过初始化程序的执行而将中断服务程序驻留内存设置CPU的中断允许标志要控制所有的可屏蔽中断,可开中断STI或关中断CLIINTR中断服务程序的编程中断入口保护现场中断服务发中断结束命令恢复现场中断返回中断服务程序设计举例DATA SEGMENT MESS DB THIS IS A

44、 IRQ7 INTRUPT !,0AH,0DH,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX, CS MOV DS,AX MOV DX,OFFSET INT7 MOV AX, 250AH INT 21H IN AL, 21H AND AL, 7FH OUT 21H,AL MOV CX, 10 STIHERE: JMP HEREINT7: MOV AX,DATA ;中断服务子程序 MOV DS,AX MOV DX,OFFSET MESS MOV AH,09 INT 21H MOV AL,20H ;EOI指令 OUT 20H,A

45、L LOOP NEXT IN AL,21H OR AL,80H OUT 21H,AL CLI MOV AH,4CH INT 21H NEXT: IRET ;中断返回 CODE ENDS END START 例1 利用连接在8259A IR0上的时钟信号, 编写具有定时功能程序, 要求每隔5秒在屏蔽上显示一个字符 A。8088INTR主 板IF18.2Hz 方波8259AINT中断屏蔽寄存器IR0当前中断服务寄存器08h18259A时钟中断程序时钟信号连接在IR0上,申请的中断类型号为08H。时钟信号是一个频率为18.2HZ的方波信号,即每秒向8259A发出18.2次的中断申请。如果CPU响应该

46、中断申请,则以每秒18.2次的频率执行08H类型的中断子程。分析80888259AINTR IR018.2Hz方波信号INT中断申请的任务是每5秒显示一个字符A1秒执行18.2次,则5秒执行18.25=91次,只在执行到第91次时显示A,其它不显示。在中断子程中用一个量来计数中断子程被执行的次数,即CPU响应IR0中断申请的次数。当达到91次,则显示A,并将计数值清0,重新计数;其它情况只计数,不显示A。中断子程的最后应发中断结束命令EOI。主程序中断子程CLI关中断保存原08H中断向量设置新08H中断向量设置8259A的中断屏蔽字,允许IR0中断 08H中断子程 执行次数初值0STI开中断主

47、程其它工作处理(可用双重循环延时代替)恢复原08H中断向量返回DOS开始CX发中断结束命令EOI恢复现场IRET中断返回保存现场开始中断子程被执行一次CX CX+1 NY调02HDOS功能显示字符A CX 0 重新记数到91次,即5秒时间到?code SEGMENT ASSUME CS:codestart: CLI ;关中断MOV AL, 08H MOV AH, 35HINT 21H ;取系统08H类型中断向量PUSH ES ;用堆栈保存 PUSH BXPUSH DS MOV DX, OFFSET display ;设置08H 类型中断向量 MOV AX, SEG displayMOV DS,

48、 AXMOV AL, 08HMOV AH, 25HINT 21HPOP DS程序清单:IN AL, 21H ;设置8259A中断屏蔽字, AND AL, 1111 1110B ;允许IR0中断 OUT 21H, ALMOV CX, 0 ;置中断子程计数器初值为0STI ;CPU开中断MOV SI, 8000H ;用双重循环延时,w2: MOV DI, 8000H ;模拟CPU对其他任务的处理 w1: DEC DI ;DI,SI的值可修改,控制主程执行时间JNZ w1DEC SIJNZ w2POP DX ;恢复系统08H类型中断向量 POP DSMOV AL, 08HMOV AH, 25HINT 21HMOV AH, 4CH ;返回DO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论