20中断实验8259A是一种可编程接口芯片,它将中断源的优先级排队、识别中断源及提供中断向量的功能集于一体,因此,只需对8259A进行编程,就可以管理8级中断,并选择优先模式、中断请求方式、中断结束方式等。在中断源超过8个时,不需加任何附加电路通过多片级联构成多达64级向量中断,所以8259A的中断控制功能既强又灵活。-+-2.4.4实验预习:(1)了解中断的概念。(2)了解8259A的工作原理。(3)分析、了解中断子程序入口地址的设置过程。2.4.5实验要求:(1).要认真预习实验内容。(2).要求在运行主程序时对每次中断进行记录。2.4.6实验步骤及说明:(1)连线。(2)编辑录入源程序并汇编。(3)启动系统,运行程序。(4)触发脉冲(中断申请)。(5)观察验证结果。(6)说明:一个8259A可外接8个中断源,本实验只响应INT0,INT1,INT2中断,8259A也可以多级连接以响应多个中断源。本实验的8259A的INT0,INT1,INT2管脚分别是中断申请源,哪个优先级高,就首先执行相应的中断服务程序,假设CUP首先响应的是INT0申请源,那么就要执行IENT0中断服务程序,就说明它的级别最高。现将INT0,INT1,INT2管脚连到一起,接到单脉冲信号发生器插孔,在运行主程序时,同时申请中断(给一个正脉冲),观察存储器的内容在执行IENT0、IENT1、IENT2中断服务程序前后数据的变化(从0400H观察)。联机2.4.1实验目的:(1)了解和学习8259A的编程。(2)熟悉8088/86与8259A的连接及控制方法。2.4.2实验内容:(1)用8088/86控制8259A可编程中断控制器,实现对外部中断的响应和处理。(2)要求在运行主程序中时,对每次中断进行记录。2.4.3实验仪器及器件:(1)计算机一台。(2)CT2000组成技术实验仪一台。(3)8259A芯片一片。(4)万用表。21①用串口线连接实验机和系统计算机。打开实验机的电源,显示8086。②点击系统机桌面上的图标(CT2000系统软件实验平台),在对话框中选择“好”。在仿真器菜单中点击“仿真器设置”。在对话框中选择不使用软件模拟器。在选择仿真器项中选择“CT2000实验系统”,仿真头选择“8088/8086实验”,CPU选择“8088”。端口选择为COM1。确认硬件仿真器设置。实验机显示“888888”。通过逻辑分析仪记录波形③点击项目菜单选择“编译”→检查编译是否正确。④置逻辑分析仪:仿真器→跟踪器/逻辑分析仪设置→逻辑分析仪;逻辑分析仪窗口“”→触发设置→采样频率10M。⑤点击“”复位→“”全速运行程序→发“”单脉冲后,可通过逻辑分析仪窗口观察到中断相应的波形,通过分析波形可以了解中断的响应过程,以及中断响应的条件,记录波形。2.4.78259A的内部寄存器:(1)中断请求寄存器IRR每片8259A能够管理8个外部中断源,其中断请求输入端为IR7-IR0,在没设定指定优先级或优先级循环方式时IR0的优先级最高,IR7的优先级最低。请求信号可以是电平触发也可以是边沿触发。中断请求寄存器IRR是一个具有锁存功能的8位寄存器,用它来存放外部中断请求信号IR7-IR0。当某个中断源有请求时,IRR寄存器中的相应位置“1”,当中断请求被响应,IRR寄存器中的相应位被清零。(2)中断屏蔽寄存器IMR中断屏蔽寄存器IMR是一个8位锁存器,与8级中断源IR7-IR0相对应。其中的每一位可以对IRR中相对应的中断源进行屏蔽。某位为“1”时,相应中断源被屏蔽,某位为“0”时,表示开放。(3)优先权分析器PR当中断源IRi有中断请求产生时,PR检查新产生的中断请求的优先级并和“正在服务的中断”进行比较,判定是否向CPU提出中断申请。同时有多个中断请求时,PR进行中断请求优先级的比较并提出申请,及中断被响应时送出最高优先级中断源的中断类型号。(4)中断服务寄存器ISR中断服务寄存器ISR是一个8位锁存器,与8级中断源IR7-IR0相对应。用来存放正在服务的所有中断级,包括尚末服务完而中途被别的中断所打断了的中断级,在第一个INTA信号有效时ISR的相应位置“1”,中断服务结束时用命令将其清零。2.4.8编程注意事项:(1)正确设置可编程中断控制和工作方式。(2)必须正确设置中断服务程序人口地址。2.4.98259A的编程:22(1)设置初始化命令字ICW1:单片8259A,边沿触发。A0D7D6D5D4D3D2D1D00A7A6A51LTIMASIC4偶地址设置ICW1,对8259A编程指令序列为:movdx,CS8259Amoval,00010011Boutdx,al(2)设置初始化命令字ICW2:中断号为20H。A0(奇地址)D7D6D5D4D3D2D1D01A15/T7A14/T6A13/T5A12/T4A11/T3A10A9A8在8080/8085模式下A15——A8为中断向量地址,在8088/8086模式下T7——T3为中断向量地址。设置ICW2,对8259A编程指令序列为:movdx,CS8259Bmoval,00100000Boutdx,al(3)设置初始化命令字ICW4:工作在8086/88方式。A0D7D6D5D4D3D2D1D01000SFNMBUFM/SAEOIPM奇地址中断向量地址,仅在8080/8085模式用0—边沿触发1—电位触发0—不需ICW41—需要ICW40—多片8259A1—单片8259A地址间距01—特殊全嵌套方式0—一般嵌套方式0×非缓冲方式缓冲方式/从控制器缓冲方式/主控制器10111—8086/8088模式0—8080/8085模式1—自动EOI0—正常EOI23设置ICW4,对8259A编程指令为:movdx,CS8259Bmoval,00000001Boutdx,al(4)设置操作命令字OCW1:只响应INT0,INT1,INT2中断。A0D7D6D5D4D3D2D1D01M7M6M5M4M3M2M1M0奇地址0——中断请求被开放1——中断请求被屏蔽设置OCW1,对8259A编程指令序列为:movdx,CS8259Bmoval,11111000Boutdx,al(5)设置操作命令字OCW2:8259A采用普通EOI结束方式。A0D7D6D5D4D3D2D1D00RSLEOI00L2L1L0偶地址00100000设置OCW2,对8259A编程指令序列为:movdx,CS8259Amoval,20houtdx,al242.4.10程序框图:2.4.11实验程序:ICW1equ00010011b;单片8259A,上升沿中断,要写ICW4ICW2equ00100000b;中断号为20HICW4equ00000001b;工作在8086/88方式OCW1equ11111000b;只响应INT0,INT1,INT2中断CS8259Aequ08000h;8259A地址CS8259Bequ08001hdatasegmentMSGdb0,0,0,0,0,0,0,0CNTdb0dataendscodesegmentassumecs:code,ds:dataIEnt0procnearpushax主程序框图中断子程序框图开始设置中断服务程序地址设置中断控制器工作方式中断允许等待中断中断入口计数值加1输出计数值输出中断结束命令中断返回25pushbxmovbx,offsetMSGmoval,CNTmovah,0addbx,axmov[bx],0incCNTmovdx,CS8259Amoval,20h;中断服务程序结束指令outdx,alpopbxpopaxiretIEnt0endpIEnt1procnearpushaxpushbxmovbx,offsetMSGmoval,CNTmovah,0addbx,axmov[bx],1incCNTmovdx,CS8259Amoval,20h;中断服务程序结束指令outdx,alpopbxpopaxiretIEnt1endpIEnt2procnearpushaxpushbxmovbx,offsetMSGmoval,CNTmovah,0addbx,axmov[bx],2incCNT26movdx,CS8259Amoval,20h;中断服务程序结束指令outdx,alpopbxpopaxiretIEnt2endpIInitprocmovdx,CS8259Amoval,ICW1outdx,almovdx,CS8259Bmoval,ICW2outdx,almoval,ICW4outdx,almoval,OCW1outdx,alretIInitendpstartprocnearclimovax,0movds,axmovbx,4*ICW2;中断号movax,codeshlax,4;x16addax,offsetIEnt0;中断0入口地址(段地址为0)mov[bx],axincbxincbxmov[bx],0;代码段地址为0incbxincbxmovax,codeshlax,4;x16addax,offsetIEnt1;中断1入口地址(段地址为0)mov[bx],axincbx27incbxmov[bx],0incbxincbxmovax,codeshlax,4;x16addax,offsetIEnt2;中断2入口地址(段地址为0)mov[bx],axincbxincbxmov[bx],0callIInitmovax,datamovds,axmovCNT,0;计数值初始为0stiLP:nop;等待中断,并计数。jmpLPstartendpcodeendsendstart8259A内部结构图