当前位置:文档之家› 8259的外部优先级中断实验指导书新规定

8259的外部优先级中断实验指导书新规定

中断实验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观察)。

联机①用串口线连接实验机和系统计算机。

打开实验机的电源,显示8086。

②点击系统机桌面上的图标(CT2000系统软件实验平台),在对话框中选择“好”。

在仿真器菜单中点击“仿真器设置”。

在对话框中选择不使用软件模拟器。

在选择仿真器项中选择“CT2000实验系统”,仿真头选择“8088/8086实验”,CPU选择“8088”。

端口选择为COM1。

确认硬件仿真器设置。

实验机显示“888888”。

通过逻辑分析仪记录波形③点击项目菜单选择“编译”→检查编译是否正确。

④置逻辑分析仪:仿真器→跟踪器/逻辑分析仪设置→逻辑分析仪;逻辑分析仪窗口“”→触发设置→采样频率10M。

⑤点击“”复位→“”全速运行程序→发“”单脉冲后,可通过逻辑分析仪窗口观察到中断相应的波形,通过分析波形可以了解中断的响应过程,以及中断响应的条件,记录波形。

2.4.7 8259A的内部寄存器:(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.9 8259A的编程:(1) 设置初始化命令字ICW1:单片8259A, 边沿触发。

设置ICW1,对8259A编程指令序列为:mov dx, CS8259Amov al, 00010011Bout dx, al(2) 设置初始化命令字ICW2:中断号为20H。

T3为中断向量地址。

设置ICW2,对8259A编程指令序列为:mov dx, CS8259Bmov al, 00100000Bout dx, al(3) 设置初始化命令字ICW4:工作在8086/88 方式。

设置ICW4,对8259A编程指令为:mov dx, CS8259Bmov al, 00000001Bout dx, al(4) 设置操作命令字OCW1:只响应INT0, INT1, INT2 中断。

1——中断请求被屏蔽设置OCW1,对8259A编程指令序列为:mov dx, CS8259Bmov al, 11111000Bout dx, al(5) 设置操作命令字OCW2:8259A采用普通EOI结束方式。

偶地址 0 0 1 0 0 0 0 0设置OCW2,对8259A编程指令序列为:mov dx, CS8259Amov al, 20h2.4.11 实验程序:ICW1 equ 00010011b ; 单片8259A, 上升沿中断, 要写ICW4 ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111000b ; 只响应INT0, INT1, INT2 中断CS8259A equ 08000h ; 8259A地址CS8259B equ 08001hdata segmentMSG db 0, 0, 0, 0, 0, 0, 0, 0CNT db 0data endscode segmentassume cs:code, ds: dataIEnt0 proc nearpush axpush bxmov bx, offset MSGmov al, CNTmov ah, 0add bx, axmov [bx], 0inc CNTmov dx, CS8259Amov al, 20h ; 中断服务程序结束指令out dx, alpop bxpop axiretIEnt0 endpIEnt1 proc nearpush axpush bxmov bx, offset MSGmov al, CNTmov ah, 0add bx, axmov [bx], 1inc CNTmov dx, CS8259Amov al, 20h ; 中断服务程序结束指令out dx, alpop bxpop axiretIEnt1 endpIEnt2 proc nearpush axpush bxmov bx, offset MSGmov al, CNTmov ah, 0add bx, axmov [bx], 2inc CNTmov dx, CS8259Amov al, 20h ; 中断服务程序结束指令out dx, alpop bxpop axiretIEnt2 endpIInit procmov dx, CS8259Amov al, ICW1out dx, almov dx, CS8259Bmov al, ICW2out dx, almov al, ICW4out dx, almov al, OCW1out dx, alretIInit endpstart proc nearclimov ax, 0mov ds, axmov bx, 4*ICW2 ; 中断号mov ax, codeshl ax, 4 ; x 16add ax, offset IEnt0 ; 中断0入口地址(段地址为0)mov [bx], axinc bxinc bxmov [bx], 0 ; 代码段地址为0inc bxinc bxmov ax, codeshl ax, 4 ; x 16add ax, offset IEnt1 ; 中断1入口地址(段地址为0)mov [bx], axinc bxinc bxmov [bx], 0inc bxinc bxmov ax, codeshl ax, 4 ; x 16add ax, offset IEnt2 ; 中断2入口地址(段地址为0)mov [bx], axinc bxinc bxmov [bx], 0call IInitmov ax, datamov ds, axmov CNT, 0 ; 计数值初始为0stiLP: nop ; 等待中断,并计数。

jmp LPstart endpcode endsend start8259A内部结构图。

相关主题