1、 第第7章章 中断及应用技术中断及应用技术 7.1.中断系统中断系统 (1)中断 CPU正在执行某一段程序的过程中,如果外界或内部发生了紧急事件,要求CPU暂停正在运行的程序转去执行这个紧急事件的处理程序,待处理完后再回到被停止执行程序的间断点,继续执行原来被打断了的程序,这一过程称为中断。(2)中断源 产生中断请求的事件叫中断源。(3)中断请求 中断源向CPU发出的申请中断的信号。中断源只有在自身未被屏蔽情况下才能发中断请求。(4)可屏蔽中断与不可屏蔽中断 所谓“屏蔽”是中断源的中断请求信号CPU拒绝响应。凡是微处理器内部能够“屏蔽”的中断,称为可屏蔽中断;凡是微处理器内部不能够“屏蔽”中断
2、,称为不可屏蔽中断,通常是由内部的中断触发器(或中断允许触发器)来控制的。(5)中断优先权 CPU需要规定各个中断源的优先级,使CPU在多个中断源同时发出中断请求时能找到优先级最高的中断源。(6)中断响应 CPU收到中断源的中断请求后,并不立即响应,而是在一定时刻、满足一定条件下,才能响应中断源的请求。(7)中断源识别及中断判优 1)查询中断 中断源识别包括两个方面:确定中断源和找到该中断服务程序的首地址。查询中断采用硬件电路与软件程序查询相结合的方式,来确定中断源及中断处理程序的人口地址。断源查询方式硬件原理示意图:设中断源的优先级由高到低的顺序为:ABCD 查询方式程序如下:INAL,IP
3、ORT;从输入接口读取D0D3.TESTAL,01H;是设备A请求吗?JNZA;是,转设备A中断服务程序.TESTAL,02H;否,是设备B请求吗?JNZB;是,转设备B中断服务程序.TESTAL,04H;否,是设备C请求吗?JNZC ;是,转设备C中断服务程序.TESTAL,08H;否,是设备D请求吗?JNZ D ;是,转设备D服务程序.2)中断优先级编码 通过硬件设置中断优先级编码电路见图6-12。(8)中断过程中断过程 中断过程主要包括:中断请求;中断判优;中断响应;中断处理(执行中断服务程序);中断返回。7.1.2.80 x86中断系统中断系统 (1)8086中断源 8086中断系统的
4、中断源分为两大类:内部中断和外部中断,1)内部中断 由CPU本身启动或执行中断指令产生的中断称为内部中断。内部中断是不可屏蔽中断,其中断源为两种情况:执行软件中断指令(INT n)产生的中断;由硬件自动产生中断请求,然后通过调用中断指令产生的中断。2)外部中断 外部中断是由外部设备作为中断源发出请求信号引起的中断。可屏蔽中断:在80 x86系统中,可屏蔽中断由外部设备的中断请求信号,通过中断控制器8259输出高电平触发CPU引脚INTR。当中断允许标志位IF=1,CPU才能响应INTR的中断请求。不可屏蔽中断:所谓不可屏蔽中断就是CPU必须响应的中断,该中断不受中断允许标志位IF限制,不可屏蔽
5、中断由中断源的中断请求信号以电压正跳变(即边沿触发)方式触发CPU引脚NMI。这种中断一旦产生,在CPU内部直接产生中断类型号为2的中断。(2)中断向量表 8086系统提供支持最多256种不同的中断,为了便于管理和方便编程,256种中断分别以0255的序号表示中中断的类型号断的类型号(如除法出错为0号中断,NMI为2号中断等)。每一种类型的中断,都必须有相应的中断处理程序,中断服务程序的入口地址称为中断向量中断向量。每个中断向量占用存储单元4个字节,前两个字节(低位在前高位在后)存储中断服务程序人口地址的16位段内地址(即偏移量IP),后两个字节(低位在前高位在后)存储中断服务程序人口地址的1
6、6位段地址(即段地址CS)。按照中断类型码由小到大的顺序,把256个中断的中断向量集中地存放在连续的存储空间中,这个存储空间称为中断向量表中断向量表。中断向量表中断向量表固定存放在存储器的地址为:0000:00000000:03FFH的低端空间;共2564=1024个字节。中断向量地址中断向量在中断向量表中的存储地址。中断向量在中断向量表中的存储地址。中断类型号n与中断向量地址的关系式:中断向量地址n4 例如,1AH类中断,其中断向量地址应为n41AH4=68H。(3)中断类型号的获取 8086CPU在响应中断后,必须获取该中断的中断类型码。对于可屏蔽中断由CPU的引脚INTR引入,其中断类型
7、号由中断控制器芯片8259(下面介绍)在初始化编程时确定。内部中断和异常处理及非屏蔽中断时,系统自动产生中断类型号并转入相应的中断处理程序入口。对于软件中断INT n指令,指令中n即为中断类型码。例如,某中断源向CPU发出中断请求并给出给出中断类型码n,由于每个中断向量占用4个字节单元,故类型码为n的中断向量在中断向量表中存储单元的地址为n4,CPU找到该地址对应的4个内存字节单元,将前2字节单元送入IP,后两字节单元的内容送入CS后,由此转入中断服务程序。7.2 8259A可编程中断控制器 80 x86系统采用专用的中断控制器芯片8259A实现外部中断与CPU的接口功能。1.8259A中断控
8、制器逻辑功能 1)一片8259A可管理8个中断请求,具有八级优先权控制。可以通过对8259编程进行指定,并把当前优先级最高的中断请求送到CPU的INTR端。2)可通过多个8259A的级连。3)对任何一级中断可实现单独屏蔽。4)当CPU响应中断时,向CPU提供相应中断源的中断向量。5)具有多种优先权管理模式,且这些管理模式多能动态改变。2.8259A内部结构及引脚功能 8259A的内部逻辑结构:中断请求寄存器(IRR)优先级分析器 中断服务寄存器(ISR)中断屏蔽寄存器(IMR)数据总线缓存器、读/写控制电路 级联缓冲器/比较器.见教材图6-16。3.8259A编程 8259A有两种寄存器可以通
9、过编程实现对8259的初始化设置和工作方式的选择。(1)初始化命令字寄存器 8259A在开始工作之前,必须进行初始化编程。初始化编程主要包括以下内容:设置中断请求的触发方式(电平触发或边沿触发);设置8259A是单片工作方式还是多片级联工作方式、是主片还是从片;设置中断源的中断类型码(只需设置IRQ0的中断类型码);8259A共有4个初始化 命令字,它们必须按顺序填写,且ICW1写在8259A偶地址端口中,其余3个写于8259A奇地址端口中。ICW1:决定8259A的工作方式;ICW2:设定可屏蔽中断的中断类型码(高5位);ICW3:用于级联方式;ICW4:设定8259A的优先级管理方式,EO
10、I方式等 【例】设8259A的偶地址端口为80H、奇地址端口为81H、单片使用、上升边沿触发。初始化程序为:MOV AL,13H;设置ICW1OUT 80H,AL;MOV AL,60H;设置 ICW2 (中断类型码为60H67H)OUT 81,AL (2)操作控制字寄存器OCW1OCW3:在初始化编程后,8259A就可以开始工作,CPU可以向8259A发出一些控制命令,这些控制命令称为操作命令字,它们存放在寄存器OCW1,OCW2和OCW3中。OCW1:用来设置中断源的屏蔽状态;OCW2:用来设置中断结束的方式和修改为循环方式的中断优先权管理方式;OCW3:用来设置特殊屏蔽方式和查询方式,并用
11、来控制8259A内部状态字IRR,ISR的读出。4.基于基于Protues软件的软件的8259接口电路接口电路 仿真调试仿真调试 在计算机接口电路中,通常可以采用Protues仿真软件环境对其进行软硬件仿真调试。在已经安装Protues软件(本节为Proteus7.10版本)的计算机系统中,可以在桌面双击ISIS 7 Professional快捷方式图标,或者单击按钮“开始”“所有程序”“Proteus 7 Professional”“ISIS 7 Professional”,ISIS程序启动之后,弹出主工作窗口。如图7-11所示。例:例:8259外部中断控制外部中断控制74LS273接接8只
12、只LED灯移动点亮灯移动点亮 图图7-12 8259A中断控制中断控制LED灯仿真原理图灯仿真原理图汇编语言源程序见汇编语言源程序见P223 7.3 中断应用 1.ROM BIOS中断调用 BIOS(Basic I/O System)即基本输入/输出系统。在80 x86微机系统中,BIOS被固化在为0FE000H开始的8KB的ROM区,又称ROM BIOS。BIOS中断服务程序的调用步骤为:在AH寄存器中设置需要调用的中断服务程序的功能号。设置中断服务程序的入口。通过INT n指令调用BIOS处理程序,n为中断类型码。有些处理程序结束后,可以取得出口参数。【例】指令:INT 16H,AH=0,
13、功能:从键盘读入一个字符送人AL。人口参数:AH=0 出口参数:AL 指令段:MOV AH,0;功能0 INT 16H;从键盘输入一个字符,该 字符的ASCII码送人AL.2.DOS系统功能调用 DOS(操作系统)系统功能调用为程序员提供的80多个常用子程序,可在汇编语言程序中直接调用。DOS系统功能调用步骤为:在AH寄存器中设置调用子程序的功能号。根据所调用功能号设置入口参数。系统功能调用INT 21H指令转入子程序入口。子程序运行完毕后,按规定取得出口参数。【例】功能号AH=2,功能:将DL寄存器中的ASCII字符送屏幕显示。人口参数:AH=0,DL的内容为字符的ASCII码。指令段:MO
14、V DL,A;欲显示字符 MOV AH,2;INT 21H;屏幕显示字符A.DOS系统功能调用中AH=25H的功能为:设置中断向量表,其参数如下:设置中断向量:人口参数:AH=25H AL=中断类型号 DS:DX=中断服务程序的人口地址(要求段地址存入DS,偏移量存入DX)【例】某中断源使用类型码为n=60H,其中断处理程序人口地址为INT60H,把它设置在中断向量表中。程序段如下:PUSH DS MOV AX,SEG INT60H ;段基地址送 AX MOV DS,AX MOV DX,OFFSET INT60H;偏移地址送DX MOV AL,60H;中断类型号送AL MOV AH,25H INT21H ;25H功能调用 POP DS