1、一、8086的中断分类,不可屏蔽中断请求,CPU中断逻辑,单步,中断控制器,8259,外部中断,NMI,INTR,CPU,IBM PC 机中断系统,7.4 可编程中断控制器8259A,8259A能管理8级外部中断,在不增加其他电路的情况下,通过芯片级联方式能扩充为主从式中断系统,最多可以管理64级外中断(9片)。,8259A作为专用的中断优先管理芯片,一般可以接受多级中断请求。通过编程8259A可以工作在多种不同方式,如边缘/电平触发、无缓冲/缓冲、特殊屏蔽、优先循环等方式。,外部中断请求信号,1. 中断请求寄存器IRR8位,存放外中断的中断请求IRQ0IRQ7 ,若 IRQi 有外中断请求时
2、,则相应的 Di 位置为1,3. 中断服务寄存器ISR8位,记录当前正在处理中的所有中断级,当某个(或几个)中断级正在被服务时,ISR中对应位置为,2.中断屏蔽寄存器IMR 8位,对IRR起屏蔽作用。当某中断需要屏蔽时,IMR中的对应位置置,这个过程可以用OCW1 动态控制。,4. 优先级判别器PR对保存在IRR中未被屏蔽的中断请求进行判优,确定最高优先级。当CPU响应这个中断请求,ISR的对应位置1。,5. 初始化命令字寄存器ICW1ICW4均为8位寄存器,初始化时用于存放8259A的初始化命令字ICW1ICW4,在以后的操作过程中基本保持不变,6. 操作命令字寄存器OCW1OCW3均为8位
3、寄存器,用于存放操作数OCW1OCW3,以实现对中断过程动态管理。其中,寄存器OCW1即中断屏蔽寄存器IMR,注意:寄存器ICW1ICW4和OCW1OCW3只占用两个I/O端口地址(奇地址和偶地址),由引脚A0的输入信号来选择。,7.4.2 8259A的外部引脚,D0D7数据线,双向三态数据线 RD和WR读写控制线IRQ7IRQ0中断请求输入信号 INT中断请求输出,接至CPU的INTRINTA中断允许输入,接至CPU的INTACAS0CAS2级联信号线,用于级联SP/EN从片选择/允许缓冲信号,双重功能引脚,在工作于缓冲方式时,用作输出(EN),控制缓冲器的收发;SP用于控制是主片还是从片,
4、SP=0是从片,SP=1时是主片,这时它作为输入。,7.4.3 中断的工作方式,1. 中断嵌套方式,普通全嵌套方式,特殊全嵌套方式,普通全嵌套方式是8259A最基本、最常用且是默认的工作方式,简称为全嵌套方式。 该方式的中断优先权固定,IRQ最高,依次到IRQ最低。只有优先权更高的中断才能打断某个正在进行的中断服务程序(前提CPU处于开中断状态),主要用在级联情况,与全嵌套方式基本相同,除了:CPU响应某从8259A中断请求后,并不屏蔽该从片的中断退出中断服务程序之前,要检查该从8259A中是否还有其它中断源 (送EOI,检查ISR,为0表示无其它中断),2. 中断屏蔽方式,普通屏蔽方式,特殊
5、屏蔽方式,根中断线中任一根都可根据要求单独屏蔽,只要将IMR寄存器的对应位置,就可屏蔽掉相应的中断请求,正在处理的中断优先级别最低,其他未屏蔽的中断源都可中断其服务程序,3. 中断优先权循环方式,全嵌套方式中,中断源的优先权是固定的,故又称为固定优先权方式。 实际中,中断源的优先权不一定有明显的等级,而且优先权还有可能改变有下列两种改变优先权的方法: 自动循环方式(等优先权方式) 特殊循环方式(指定最低级的循环方式),自动循环方式(等优先权方式),某级中断被处理完,它的优先级别降为最低,而原来比它低一级的中断请求升为最高级。,例:初始顺序由高到低: IRQ、IRQ、IRQ若IRQ中断,其服务程
6、序执行完后,调整顺序由高到低: IRQ、 、IRQ、IRQ、 、IRQ,可见各中断源具有相等的优先权,故自动循环方式又称为等优先权方式,特殊循环方式(指定最低级的循环方式),初始优先权不是固定的,而是在程序中利用操作命令字指定最低优先级,其他中断源的优先级也随之确定,例:初始设置IRQ5优先权最低:则最初优先权由高到低为: IRQ6、 IRQ7、IRQ、 、IRQ、IRQ5,4. 中断查询方式,查询方式可用来查询8259A是否有中断请求正在被处理,如果有,则给出当前处理的最高优先级是哪一级,用操作命令字OCW3可以设置8259A为查询方式,只用一条IN指令即可以从数据总线上读取中断状态字中断状
7、态字格式如图:,5. 中断结束方式,中断处理结束后须将ISR相应位清,以开放同级或低级的中断请求,清除的方式就是中断结束方式 。,CPU响应中断请求时,在第二个INTA脉冲的后沿,由8259A自动将ISR的相应位清 只能用于不允许中断嵌套的场合,自动结束方式,非自动结束方式(常用),中断服务程序末尾向8259A发出中断结束(EOI)命令以清除ISR对应位 普通的EOI命令:自动清除最高优先权位 全嵌套方式 特殊的EOI命令:位编码指定清除位 任意方式,6. 中断触发方式,8259A的IRQi引脚上出现上升沿信号表示有中断请求,边沿触发方式,电平触发方式,8259A的IRQi引脚上出现高电平信号
8、表示有中断请求 该方式下,应注意及时撤除高电平,否则可能会引起不应该出现的第二次中断,7、中断向量表,1.规定中断服务程序地址,即每一类型中断应转入哪个中断服务程序;,2. 8086前1K字节的内存(00000H003FFH)放中断向量表,容纳256 个中断向量,每个中断向量占4个字节。,3. 低地址 2字节 IP 高地址 2字节 CS,4. 类型:,0 4 专用中断,8 1FH ROM BIOS 用,20 FFH 为DOS 和BASIC 保留,60 7FH 用户可使用,8、中断矢量和中断矢量表,中断矢量:中断处理子程序的入口地址中断矢量表:8086中断系统有0255种类型的中断(共256种)
9、,位于内存的最低1KB的空间,地址范围为00000003FFH。每个类型号占4个字节,高2个字节存放中断入口地址的段基址,低2个字节存放段内偏移地址,如图所示:,9、修改中断向量表的编程,类型号为n的中断服务程序:,ORG 0200HINMM PROC FARBEGIN: IRETINMM ENDP,CLIMOV AX,0MOV ES,AXMOV DI,4*nMOV AX,OFFSET BEGINSTOSWMOV AX,SEG BEGINSTOSW,方法2(调用DOS功能):,方法1:,DS:DX SEG BEGIN:OFFSET BEGINMOV AH,25H MOV AL,n INT 21
10、H,在IBM-PC机初始化命令字在系统启动时已自动装入,工作方式为:1. 中断请求触发为上升沿有效;2. 中断采用正常全嵌套方式,特点:优先级是固定的,即0级(IRQ0)最高,7 级(IRQ7)最低;顺序为: IRQ0IRQ1IRQ2IRQ7低、高级中断同时请求时,响应高级中断;低级中断执行时,高级中断可以嵌入低级中断;,执行条件:主程序中要有开中断指令,使IF=1时,才可能响应中断;中断服务程序中要有开中断指令,才可能使高级中断嵌入;,3. 中断采用正常结束方式(非自动)因此在每个中断服务程序的最后要使用关中断指令:MOV AL,20H; OUT 20H,AL;,初始化,中断结束,关中断,I
11、RET,开中断,IR2中断,IR3中断,开中断,开中断,开中断,开中断,IRET,中断结束,关中断,关中断,主 程 序,IRQ3请求,IRQ2请求,中断嵌套过程,IRQ0,IRQ0,1,0,8259,IRQ0,IRQ1,IRQ2,IRQ3,IRQ4,IRQ5,IRQ6,IRQ7,INT,8086CPU,INTR,关于74HC373,373 的输出端 O0O7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总线。 当 OE 为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高
12、电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。 当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV,关于74HC245,总线收发器(bus transceiver),典型的CMOS型三态缓冲门电路 第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。 第29脚“A”信号输入输出端,A0=B0、A7=B7,A0与B0是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同
13、。 第1118脚“B”信号输入输出端,功能与“A”端一样,不再描述。 第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。,实验内容一程序,code segmentassume cs:codestart:pushesxorax,axmoves, axmoval, 2xorah,ahshlal,1 shlal,1 ;计算2号中断的中断向量在中断向量表中的地址movsi, ax ;中断向量的表地址送SImovax, offset nmi_servicemoves:si,ax ;保持中断服务程序的IP地址 mov bx, cs mov
14、es:si+2,bx ;保持中断服务程序的CS地址,pop esmoval, 0FEH ;LED初值,最低位DI亮movdx, 8000H ;74HC373输出口地址outdx, aljmp$nmi_service: ;中断服务程序rolal,1 ;LED状态移位movdx, 8000H ;74HC373输出口地址outdx, alexit:iret ;中断返回codeendsend,实验内容二程序,CODESEGMENT ASSUME DS:DATA,CS:CODE START:MOVAX, DATA ;装入数据段地址 MOV DS, AX PUSH ES ;中断向量初始化 XOR AX,
15、AX MOVES, AX MOVAL, 2 XORAH, AH SHLAL, 1 SHLAL, 1 MOVSI, AX MOVAX, OFFSET NMI_SERVICE MOVES:SI, AX MOVBX, CS MOVES:SI+2, BX POPES,MOVSI, OFFSET TABLE ;将SI指向七段数码管编码表首MOVDX, 8000H ;设置端口地址LP:MOVAL, SI ;将要显示的数码管编码送ALOUTDX, AL ;由端口输出JMPLPNMI_SERVICE:INCSI ;SI指向下一个数字CMPSI, OFFSET TABLE_END ;是否到达表尾,或者是否超过数字9JBEXITMOVSI, OFFSET TABLE ;大于9后回到0,即表首EXIT: IRETCODE ENDSDATA SEGMENT TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;09的共阴极七段数码管编码TABLE_END = $DATAENDSENDSTART,