聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 8259A芯片使用方法

8259A芯片使用方法

时间:2020-06-09 12:41:40    下载该word文档

一、 8259A的引线及部结构

1、 引脚信号

8259A引脚信号如图所示:

8259A引脚

D7D0:双向、三态数据线,与系统数据总线相连8259A编程时,命令字由此写入;在第二个中断响应总线周期中,中断类型码由此传给CPU

:读信号,输入,与系统控制总线相连=0CPU8259A进行读操作。

:写信号,输入,与系统控制总线相连。当=0CPU8259A进行写操作。

A0片寄存器寻址信号,输入用于对寄存器端口寻址每片8259A两个寄存器端口A0=0时,选中偶地址端口,A0=1时,选中奇地址端口。在与8088系统相连时,可将该引脚与地址总线的A0连接;与8086系统连接时可将该引脚与地址总线的A1连接

:片选信号,输入。=08259A被选中。在与8088系统相连时,系统地址信号A15~A1经译码器译码后为8259A产生片选信号

/双功能双向信号。当8259A工作在缓冲模式时,它作为输出,用于控制缓冲器的传送方向。当数据从CPU送往8259A时,/输出为高电平;当数据从8259A送往CPU时,/输出为低电平。当8259A工作在非缓冲模式时,它作为输入,用于指定8259A是主片还是从片(级联方式)。/=18259A为主片,/=08259A为从片。

INT:中断请求信号,输出,与CPU的中断请求信号线INT相连。在级联方式下,从片的INT与主片的IR7~IR0中的某一根连接在一起。

第一个中断响应脉冲到达IRR锁存功能失效,不接受IR0IR7上的中断请求信号;直到第二个中断响应脉冲结束后,IRR锁存功能才得以恢复。

中断服务寄存器(interrupt service registerISR

ISR是一个8IS0~IS7寄存器,用于记录CPU当前正在服务的中断IS0~IS7中断请求信号IR0~IR7对应。第一个中断响应脉冲达到后,如果8259A决定使IRi得到响应,则会将对应的ISii07)置1,表示IRi正在被服务ISi的复位则由8259A中断结束方式决定。若8259A设置为自动结束方式,ISi会在第二个中断响应脉冲的后沿被自动复位为0;若8259A设置为非自动结束方式,则Di其对应的中断服务程序发送来的中断结束命令EOI复位。

ISi1可阻止与其同级或更低优先级的中断请求被响应,但不能阻止比其优先级高的中断请求被响应,即允许中断嵌套。因此,ISR中可能不止一位被置1

中断屏蔽寄存器(interrupt mask registerIMR

IMR是一个8IM0~IM7寄存器,用来存放IR0IR7的中断屏蔽标志。IM0IM7与中断请求信号IR0IR7对应,用于屏蔽IRi。当IMi=1时,对应的IRi中断请求被禁止;IMi=0时,对应IRi中断被开放

优先权判决器(priority registerPR

优先权判决器IRR记录的当前中断请求ISR记录的CPU正在服务的中断按中断优先级排队并进行比较,如果IRR优先级最高者的优先级高于ISR优先级最高者,则由中断控制逻辑向CPU发出中断请求信号INT使CPU暂停当前的中断服务,转而响应IRR优先级最高者,即进行中断嵌套;否8259A不向CPU发起中断请求INTCPU继续当前的工作

二、 8259A的工作过程

1、 接受来自IR0~IR7中断请求,使IRR的对应位置1

2、 PRIRR中记录的且未被屏蔽的中断和IRS中记录的中断进行优先权判决,并决定是否向CPU发起中断请求INT如果IRR优先级最高者的优先级高于ISR优先级最高者,则向CPU发出中断请求信号INT,否则不发出。

3、 CPU收到INT,如果IF=1,则待当前执行的指令结束后连续返回8295A个中断响应信号

4、 8295A收到第一个中断响应信号

(1) 使IRR锁存功能失效,不再接受中断请求,直到第二个中断响应信号结束后恢复。

(2) IRR中记录的优先级最高的中断请求进行响应:使其对应的ISR位置1,并使其对应的IRR位复位。

5、 8295A收到第二个中断响应信号

(1) 将被响应中断的中断类型码送CPUCPU用中断类型码乘以4就得到了该中断的中断向量的地址,然后从该地址中取出中断向量,转而执行该中断的中断服务程序,即对该中断进行服务

(2) 如果8295A工作在自动结束方式,在第二个中断响应脉冲的后沿,会使被响应中断对应的ISR位复位。如果8295A工作在非自动结束方式,则中断服务程序在结束之前,应通过中断结束命令(EOI)使中断对应的ISR位复位。

三、 8259A的工作方式

8259A的中断管理功能很强,单片可以管理8级外部中断,在多片级联方式下最多可以管理64级外部中断,并且具有中断优先权判优、中断嵌套、中断屏蔽和中断结束等多种中断管理方式。

1、 中断优先方式

一般情况下,8259A总是响应优先级最高的中断请求,而且使CPU暂停对低优先级中断的服务,转而服务高优先级的中断,即中断嵌套。8259A的中断优先方式分为两种:

固定优先级方式

固定优先级方式中,IR0IR7的中断优先级是固定不变的,除非通过编程重新设置优先级别8259A在加电后就工作在固定优先级方式,刚加电时,IR0IR7默认的优先级顺序是:IR0IR1IR2IR7其中,IR0的优先级最高,IR7的优先级最低。

自动循环优先方式

在自动循环优先方式中,IR0IR0优先级是可以改变的。其变化规律是:当某个中断请求服务结束后,的优先自动降为最低,原来比它低一级的中断则为最高级IR0IR7优先级按右循环方式改变。例如,若初始优先级从高到底依次为IR0IR1IR2IR7,此时如果IR4IR6有中断请求,则先服务IR4。在IR4被服务之后,它自动降为最低级,IR5变为最高级,这时中断优先级顺序变为:IR5IR6IR7IR0IR1IR2IR3IR4。这种优先管理方式,可以使8个中断请求都享受同等优先服务的权利。

  自动循环优先方式分为普通自动循环方式和特殊自动循环方式两种

  普通自动循环方式的特点是:IR7IR0的初始优先级顺序由系统指定,即优先级从IR0IR7依次降低。以后随着中断的产生,它们的优先级顺序将按右循环方式自动改变。

而特殊自动循环方式的特点是:通过编程人为地将某个中断请求降为最低级,而其它中断请求的优先级也随之改变,以后随着中断的产生,它们的优先级顺序将按右循环方式自动改变例如,通过编程将IR4降为最低级后,IR7IR0的优先级顺序则变为:IR5IR6IR7IR0IR1IR2IR3IR4

2、 中断嵌套方式

无论是固定优先级方式而是自动循环优先级方式,它们都允许中断嵌套,即允许更高优先级的中断打断CPU当前的中断服务过程,使CPU转而为更高优先级的中断进行服务。8259A允许两种嵌套方式:

普通全嵌套方式

  普通全嵌套方式是8259A最常用的工作方式,简称为全嵌套方式,它是8259A初始化后默认的工作方式。其特点是:在CPU进行中断服务时(即执行中断服务程序过程中),若有新的中断请求到来,8259A允许比当前服务的中断请求的优先级“的中断请求进入(也就是为比当前服务的中断请求的优先级“的中断请求CPU发出INT信号),而不允许“同级低级的中断请求进入

特殊全嵌套方式

  特殊全嵌套方式是8259A在多片级联方式下使用的一种嵌套方式。其特点是:CPU进行中断服务8259A除了允许更高优先中断请求进入外,还允许同级中断请求进入,从而实现了对同级中断请求的特殊嵌套。

  在级联方式下,主片通常设置为特殊全嵌套方式,从片设置为普通全嵌套方式。这样设置的好处在于:当从片的某个中断请求得到响应并进入中断服务期间后,来自该从片的“更高级”的中断请求仍能被主片响应。这是因为从片的所有中断请求都是通过同一个IRi引入主片,对于主片来说,来自从片的所有中断请求都属于同级,而特殊全嵌套方式允许同级的中断请求进入,因此主片能响应来自从片的“更高级”的中断请求。

3、 中断屏蔽方式

中断屏蔽方式是对8259A中断请求IR0IR7进行屏蔽的一种中断管理方式,有普通屏蔽方式和特殊屏蔽方式两种。

普通屏蔽方式

  普通屏蔽方式是通过8259A的中断屏蔽寄存器(IMR)来实现对中断请求IRi的屏蔽。通过编程写入操作命令字OCW1,将IMR中的IMi位置1,以达到对相应的IRii07)中断请求的屏蔽。一旦IRi被屏蔽,它就不可能被8259A响应

特殊屏蔽方式

在某些应用场合,我们希望正在被CPU服务的中断能够被更低优先级的中断请求打断。为达到这个目的,自然会想到使IMR中的相应位置1,使本级中断受到屏蔽,从而为更低优先级的中断请求进入提供可能,但是这样做有一个问题:每当一个中断请求被响应时,8259A会使该中断对应的ISR位置1,只要CPU没有对该中断发出中断结束命令(EOI),8259A就会禁止所有比它优先级低的中断请求进入。如果8259A工作在特殊屏蔽方式,使IMR的某位置1,就会同时使ISR的对应位自动复位。这样就可以使更低优先级的中断请求进入,当然未被屏蔽的更高优先级的中断请求也可以进入。可以通过编程写入操作命令字OCW3来设置或取消特殊屏蔽方式。

4、 中断结束方式

当一个中断请求IRi得到响应时,8259A会将其对应的ISR位置1CPU服务完该中断后,应及时清除其对应ISR,否则就意味着CPU仍在为该中断服务,致使比它优先级低的中断请求无法进入

  8259A提供了以下三种中断结束方式:

自动结束方式

  如采用自动结束方式,则刚被响应的中断请求对应的ISR位会在第二个中断响应脉冲后沿被复位。这种中断服务结束方式是由硬件自动完成的需要注意的是:尽管中断请求对应的ISR清除,但其中断服务程序并不一定真正结束,若在中断服务程序的执行过程中有另外一个比优先级低的请求信号到来,8259A并没有保存任何标志来表示当前中断服务尚未结束,致使低优先级中断请求进入,打断当前中断服务程序的执行。因此这种方式只适合用在没有中断嵌套的场合。

普通结束方式

如采用普通结束方式,则中断服务程序在结束之前应向8259A写入一个包含了普通EOI命令操作命令字OCW2该命令不指定需复位的ISR位。收到该命令后,8259A清除ISR已置1优先级最高的那一位在普通全嵌套方式下,因为CPU正在服务的中断只会被优先级更高的中断请求打断,因此当前结束的中断必定是所有正在服务的中断中优先级最高的,它对应着ISR已置1优先级最高的那一位,因此普通结束方式适用于普通全嵌套方式下的中断结束。

特殊结束方式

特殊结束方式要求中断服务程序在结束之前向8259A写入一个包含了特殊EOI命令操作命令字OCW2该命令要指定需复位的ISR位。由于在特殊EOI命令中明确指出了复位ISR中的哪一位,因此,它可以用于普通全嵌套方式下的中断结束,更适用于优先级嵌套结构有可能遭到破坏时(CPU正在服务的高优先级中断被低优先级/同级的中断请求打断)的中断结束。

在此,对级联系统中的从片的中断结束处理做一些说明。在主片设置为特殊全嵌套方式,从片设置为全嵌套方式的情况下,从片可能出现中断嵌套。来自从片的任意中断的中断服务程序在结束之前,都应先向从片发出一个普通EOI命令,使其本身对应的ISR位复位,然后读出ISR的容,如果为0,则向主片发出一个特殊EOI命令,清除主片中与引入从片的IRi对应的ISR位;如果从片ISR的容不为0,则说明从片中仍有中断服务尚未完成,此时,则不需要向主片发出特殊EOI命令。

5、 中断触发方式

中断请求输入端IR0IR7可采用中断触发方式有电平触发和边沿触发两种,由初始化命令字ICW1中的LTIM位来设定。

LTIM设置为1时,为电平触发方式8259A检测到IRii07)端有高电平时产生中断。如采用这种触发方式中断请求信号在被响应后应及时撤除否则可能引起不该有的第二次中断。

LTIM设置为0时,为边沿触发方式8259A检测到IRi端有由低到高的跳变信号时产生中断。

无论采用哪种中断触发方式,中断请求信号都应维持足够的宽度,即在第一个中断响应信号到达之前,都必须保持高电平。

6、 级联工作方式

当中断源超过8个时,就无法用一片8259A来管理,这时可采用8259A的级联工作方式。指定一片8259A为主控芯片(主片),它的INT输出端接到CPUINT输入端,而其余的8259A芯片均作为从属芯片(从片),其INT输出端分别接到主片的不同IR输入端。由于8259A8IR输入端,故一个主片可连接8个从片,最多允许有64IR中断请求输入。由一片主片和两片从片构成的级联中断系统如下图所示,其中省略了用于产生片选信号的译码器。

8259A多片级联方式的硬件连接图

在级联系统中,主片和从片都有独立的地址,而且需分别进行初始化编程来设置各自的初始工作方式。

若中断请求来自于从片,该请求将通过从片的INT输出端传给主片,一旦该请求被主片响应,主片会通过CAS0~ CAS02来通知相应的从片,而从片即可把该中断请求对应的中断类型码放到数据总线上,使该中断请求得到CPU的服务。

7、 总线连接方式

8259A数据线与系统数据总线的连接有缓冲和非缓冲两种方式。

缓冲方式

如果8259A通过总线驱动器和系统数据总线连接,8259A应选择缓冲方式。当设置为缓冲方式后,/即为输出引脚。在8259ACPU传送中断类型的时候,/输出一个低电平,用此信号作为总线驱动器的启动信号。

非缓冲方式

  如果8259A数据线与系统数据总线直接相连,那么8259A工作在非缓冲方式

四、 8259A的编程

8259A是可编程中断控制器,在其工作之前,必须采用写入控制命令的方法来对其进行初始化;在其工作时,还可以采用相同的方式来改变其工作状态,这就是8259A的编程。控制命令分为初始化命令字ICW和操作命令字OCWICW4个,分别是ICW1~ICW4OCW3个,分别是OCW1~OCW3,它们被写入8259A后,分别保存在相应的寄存器中,例如,ICW1保存在ICW1寄存器中,OCW1保存在OCW1寄存器中。8259A的编程分为初始化编程和操作方式编程。

初始化编程

8259A工作之前,通过软件向其写入初始化命令字ICW1~ICW4,设置其初始工作方式。

操作方式编程

8259A工作的过程中,通过软件向其写入操作命令字OCW1~OCW3,改变其工作方式。OCW可在8259A初始化后的任何时刻写入。

1、 8259A部寄存器的寻址方法

8259A有多个部寄存器,单靠A0无法满足寄存器寻址的需要,因此还要在和数据线D3D4的配合下,才能完成对多个部寄存器的访问。部寄存器的访问方法如下图所示:

8259A的端口分配及读/写操作功能表

2、 8259A的初始化顺序

8259A中的寄存器端口地址有两个,一个是奇地址(A0=1),一个是偶地址(A0=0)。通过上表可以看出,在往8259A写入控制命令时,若A0=1,则写入的对象包括4个寄存器ICW2ICW3ICW4OCW1,这说明四个寄存器端口共用同一个I/O地址,为了区分写入的到底是哪个寄存器,8259A规定了严格的写入顺序,即按照ICW2ICW3ICW4OCW1的顺序写入。同样在初始化时,ICW1~ICW4的写入也必须遵循ICW1→ICW2ICW3ICW4这样的顺序。

3、 8259A初始化命令字ICW

  通过初始化编程,可将ICW写入8259A,设置其初始工作方式。

(1) ICW1

ICW1的条件为:A0=0D4=1,这时,写入的数据被当成是ICW1。写ICW1意味着对8259A进行初始化,同时8259A还会完成以下工作:

清除ISRIMR

将中断优先级顺序设为初始状态:IR0(最高)~IR(最低)。

采用普通屏蔽方式。

采用非自动中断结束方式。

ICW1的格式如下图所示:

ICW的格式

IC4:指示在初始化时是否需要写入命令字ICW4。在80x86 CPU系统中需要定义ICW4IC41

SNGL:指示8259A在系统中使用单片还是多片级联。SNGL1为单片,SNGL0为多片级联。

ADI:设置调用时间间隔,在80486 CPU中无效。

LTIM:定义IRi的中断请求触发方式。LTIM1为电平触发,LTIM0为边沿触发

D4ICW1的标志位,恒为1

D5D7:未用,通常设置为0

(2) ICW2

ICW2的写入条件为:A0=1,它只能在ICW1写入之后写入。ICW2用于设置中断类型码,其格式如下图所示

ICW2的格式

IR0~IR7各有一个中断类型码,它们是连续的,例如IR0的中断类型码为08HIR7的中断类型码为0FH。中断类型码可用8位二进制数来表示,对于8259A8个中断类型码而言,它们的高5位都是相同的,不同的是低3位。因此在初始化时只需设置ICW2的高5位,低3位可任意。8259A决定响应某个中断时,它会将该中断请求的序号放入ICW2的低3位,并将该寄存器的容放到数据总线供CPU读取。

例如:向ICW2写入40H时,则IR0IR7对应的中断类型号为40H47H

(3) ICW3

ICW3的写入条件为:A0=1,它只能在ICW2写入之后写入。ICW3仅在级联方式下才需要写入,也就是当ICW1SNGl位设为0时才需要写入。主片和从片ICW3的格式不同,如下图所示:

主片的ICW3格式

从片的ICW3格式

S0S7IR0IR7相对应,若主片IRii07)引脚上连接从片,则Si1,否则Si0

ID2ID0是从片标识码,它必须与本从片所连接之主片IR线的序号一致。例如,当从片的中断请求信号线INT与主片的IR2连接时,ID2ID0应设置为010

D7D3未用,通常设置为0

  在主片响应来自从片的中断请求时,通过级联信号线CAS2CAS0送出被响应中断的从片标识码,各从片用自己的ICW3CAS2CAS0进行比较,二者一致的从片被确定为当前中断源,该从片可以将中断的中断类型码送到数据总线供CPU读取

(4) ICW4

  ICW4的写入条件为A0=1,它只能在ICW3写入之后才能写入。ICW4用于设定8259A的工作方式,其格式图所示

ICW4的格式

mP:设置CPU模式。mP180x86模式,mP08080/8085模式。

AEOI:设置8259A的中断结束方式。AEOI1为自动结束方式,AEOI0为非自动结束方式。

M/:选择缓冲级联方式下的主片与从片。M/1为主片,M/0为从片

BUF:设置缓冲方式。BUF1为缓冲方式,BUF0为非缓冲方式。

SFNM:设置特殊全嵌套方式。SFNM1为特殊全嵌套方式,SFNM0普通全嵌套方式

D7D5:未定义,通常设置为0

  需要注意:当多片8259A级联时,若在8259A的数据线与系统总线之间加入总线驱动器,/作为总线驱动器的控制信号使用此时D3BUF应设置为1主片和从片的区分不能依靠/引脚,而是由M/来选择,当M/0时为从片;当M/1时为主片。如果BUF0,则M/定义无意义。

4、 8259A操作命令字OCW

8259A工作时,可通过写入OCW,改变其工作方式。OCW1~OCW3的写入没有固定顺序。

(1) OCW1

OWC1的写入条件为:A0=1。通过它可控制哪些中断请求被屏蔽。其格式所示

OCW1的格式

Mi=1时,对应的IRi请求被禁止;当Mi=0时,对应的IRi请求被允许。

(2) OCW2

  OW2的写入条件为:A0=0OWC2用于设置中断优先方式和中断结束方式其格式如图所示

OCW2的格式

R:设置中断优先方式R1自动循环优先级方式;R0固定优先级方式。

D4D3OCW2标志位,必须都设为0

SL:设置特殊自动循环方式。当SL=1时,若EOI=0R=1L2~L0对应的IRi的优先级被设为最低;若EOI=1L2~L0对应的ISR位被复位。SL=0时,L2~L0的编码无效。

L2L0对应着IR7IR0IS7~ IS0。当SL=1时,它有两个作用:EOI=0R=1L2~L0对应的IRi的优先级被设为最低;若EOI=1L2~L0对应的ISR位被复位。

EOI:中断结束命令。EOI1时,若SL=1,则使L2~L0对应的ISR位复位,这种结束中断的方式称为特殊中断结束方式;若SL=0,则使ISR中置1的优先权最高位复位,这种结束中断的方式称为普通中断结束方式。

(3) OCW3

OCW3的写入条件为:A0=0D4=0D3=0。其格式如图所示

OCW3的格式

OCW3有三个功能:

设置中断屏蔽方式

ESMMSMM组合可用来设置或取消特殊屏蔽方式。当ESMM1SMM1时,设置特殊屏蔽;当ESMM1SMM0时,取消特殊屏蔽。

查询中断请求

CPU禁止中断(IF=0)或不希望8259A发起中断请求INT时,就可以采用8259A的查询工作方式来查询8259A的中断状态。为此,可先写一个P=1OCW38259A,然后再从同一I/O地址读入数据,就可得到下图所示的中断状态寄存器的容。I=1表示8259AIR7~IR0有中断请求产生,其中优先级最高的IRi的序号由R2~R0给出;否则表示无中断产生。

图 中断状态寄存器

8259A部寄存器

先写一个RR=1RIS=0OCW38259A,再从同一个端口地址读入数据,就可读入IRR的容。

先写一个RR=1RIS=1OCW38259A,再从同一个端口地址读入数据,就可读入ISR的容。

例如,设8259A的两个端口地址为20H21HOCW3ISRIRR共用一个地址20H

读取ISR容的程序段为

MOV AL, 00001011B ; 设置好命令字OCW3,使RR=1RIS=1

OUT 20H, AL ; OCW3写入8259A20H端口

IN AL, 20H ; 从同一个端口ISR容至AL

读取IRR容的程序段为

MOV AL, 00001010B ; 设置好命令字OCW3,使RR=1RIS=0

OUT 20H, AL       ; OCW3写入8259A20H端口

IN AL, 20H       ; 从同一个端口IRR容至AL

读取中断状态寄存器的程序段为:

MOV AL, 00001111B ; 设置好命令字OCW3,使P=1

OUT 20H, AL ; OCW3写入8259A20H端口

IN AL, 20H     ; 从同一个端口出中断状态寄存器的容至AL

5、 8259A的初始化编程

  8259A的初始化编程需要写入初始化命令字ICW1ICW4,对它的各种工作方式进行设置。但由于ICW1ICW4使用两个端口地址,即ICW1A00的端口,ICW2ICW4使用A01的端口,因此初始化程序应严格按照系统规定的顺序写入,即先写入ICW1,接着写ICW2, ICW3, ICW4

8259A的初始化流程下图所示。

需注意的是,如果多个8259A级联在一起工作,主片和从片应分别进行初始化。

操作命令字OCW1OCW3的写入比较灵活,没有固定的顺序,可以在主程序中写入,也可以在中断服务子程序中写入;可以在初始化时写入,也可以在工作以后写入,视需要而定。下面通过例子来说明如何编写8259A的初始化程序。

ICW的写入顺顺序

例】某微机系统使用主、从两片8259A管理中断,从片中断请求INT与主片的IR2连接。设主片工作于特殊完全嵌套、非缓冲和非自动结束方式,中断类型号为40H~47H,端口地址为20H21H。从片工作于完全嵌套、非缓冲和非自动结束方式,中断类型号为70H~77H,端口地址为80H81H。试编写主片和从片的初始化程序。

  根据题意,设置ICW1, ICW2, ICW3ICW4的格式,按图的顺序写入。编写初始化程序如下:

主片8259A的初始化程序如下:

  MOV   AL, 00010001B       ; ICW1级联, 边沿触发, 需要写ICW4

  OUT   20H, AL          ; ICW1

  MOV   AL, 01000000B       ; ICW2中断类型号40H

  OUT   21H, AL          ; ICW2

  MOV   AL, 00000100B       ; ICW3主片的IR2引脚接从片

  OUT   21H, AL          ; ICW3

  MOV   AL, 00010001B       ; ICW4特殊完全嵌套、非缓冲、自动结束

  OUT   21H, AL          ; ICW4

从片8259A初始化程序如下:

MOV   AL, 00010001B       ; ICW1级联, 边沿触发, 需要写ICW4

OUT   80H, AL          ; ICW1

MOV   AL, 01110000B       ; ICW2中断类型号70H

OUT   81H, AL         ; ICW2

MOV   AL, 00000010B      ; ICW3接主片的IR2引脚

OUT   81H, AL         ; ICW3

MOV   AL, 00000001B       ; ICW4完全嵌套、非缓冲、非自动结束

OUT   81H, AL          ; ICW4

6、 中断程序的设计

中断程序的设计包括主程序和中断服务程序两部分。

主程序的设计主要包含以下步骤:

(1) 关中断

在主程序对中断进行相关设置之前,应关闭CPU的中断标志位,防止CPU在该过程中响应中断。

(2) 保存原中断向量

在把自己的中断服务程序入口地址(中断向量)设置到中断向量表之前,应先保存该地址中原来的容(原中断向量)。通过INT 21H35H号功能调用可取出原中断向量,取出的中断向量放在ES:BX中,其中ES包含的是入口地址中的段地址,BX包含的是入口地址中的偏移地址。取出的中断向量可保存在用户程序的数据段或附加段中,以便主程序退出前能恢复原中断向量。

(3) 设置自己的中断向量

将自己编写的中断服务程序的入口地址存入中断向量表的相应表项中。这可以通过INT 21H25H号功能调用完成。在调用25H号功能前,中断服务程序所在段的段地址应放在DS中,中断服务程序的偏移地址应放在DX中。

(4) 8259A初始化

8259A进行初始化编程,设置8259A的工作方式。

(5) CPU开中断

前面的工作完成后,就可以打开CPU的中断标志位,让CPU响应中断。

(6) 恢复原中断向量

主程序退出前一定要恢复原中断向量。

中断服务程序在对应的中断产生时被CPU自动调用,为该中断请求进行服务。如果8259A采用的是普通结束方式,中断服务程序在结束之前应向8259AOCW2写入一般EOI命令。

【例设计一个中断处理程序。要求中断请求信号以跳变方式由IR2引入(可为任一定时脉冲信号),当CPU响应IR2请求时,输出字符串8259A INTERRUPT!”,中断出现10程序退出(设8259A的端口地址为20H21H,中断类型号为40H~47H)。

  中断处理程序如下:

  DATA   SEGMENT

  MESS   DB'8259A? INTERRUPT!', 0AH, 0DH, '$'

  COUNT   DB  10         ; 计数值为10

  DATA   ENDS

  STACK   SEGMENT STACK

  STA    DB 100H DUP(?)

  TOP    EQU LENGTH  STA

  STACK   ENDS

  CODE    SEGMENT

  ASSUME  CS:CODE, DS:DATA, SS:STACK

  MAIN:   CLI ; 主程序

  MOV    AX,DATA

  NOV    DS, AX

  MOV    AX, STACK

  MOV    SS, AX

  MOV    SP, TOP

  MOV    AL, 13H          ; 8259A初始化

  OUT    20H, AL         ; 单片, 边沿触发

  MOV    AL, 40H         ; 中断类型号40H

  OUT    21H, AL

  MOV    AL, 01H         ; 非自动结束

  OUT    21H, AL

  MOV    AX, SEG INT-P      ; 设置中断向量

  MOV    DS, AX          ; 中断服务子程序入口段基址送DS

  MOV    DX, OFFSET INT-P     ; 中断服务子程序入口偏移地址送DX

  MOV    AL, 42H         ; IR2的中断类型号42HAL

  MOV    AH, 25H         ; 25H功能调用

  INT    21H

  IN    AL, 21H         ; IMR

  AND    AL, 0FBH        ; 允许IR2请求中断

  OUT    21H, AL         ; 写中断屏蔽字OCW1

  WAIT1:  STI           ; 开中断

  CMP    COUNT,0         ; 判断10次中断是否结束

  JNZ    WAIT1          ; 未结束, 等待

  MOV    AX, 4C00H        ; 结束, 返回DOS

  INT    21H

  INT-P   PROC             ; 中断服务程序

  PUSH    AX

  PUSH    DX

  MOV    DX, OFFSET MESS ; 显示字符串

  MOV    AH, 09H

  INT    21H

  MOV    AL, 20H           ; OCW2, 送中断结束命令EOI

  OUT    20H, AL

  POP    DX           

  POP    AX 

  IRET                ; 中断返回

  INT-P   ENDP

  CODE   ENDS

  END    MAIN

免费下载 Word文档免费下载: 8259A芯片使用方法

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服