第6章 中断系统与可编程8259A.docx
- 文档编号:27095906
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:52
- 大小:185.91KB
第6章 中断系统与可编程8259A.docx
《第6章 中断系统与可编程8259A.docx》由会员分享,可在线阅读,更多相关《第6章 中断系统与可编程8259A.docx(52页珍藏版)》请在冰豆网上搜索。
第6章中断系统与可编程8259A
目录
第6章中断系统与可编程8259A
6.18086中断系统
6.1.1项目1:
外部中断控制继电器
6.1.2知识讲解
6.28259A芯片引脚和内部结构
6.2.1项目2:
用8259A中断控制LED灯左循环亮
6.2.2知识讲解
6.38259A控制字及编程应用
6.3.1项目3:
外部中断次数显示
6.3.2知识讲解
6.4项目扩展与工程应用
6.4.1项目4:
中断控制跑马灯
6.4.2项目5:
两个外部中断源中断
思考题与练习题
第6章中断系统与可编程8259A
6.18086中断系统
6.1.1项目1:
外部中断控制继电器
1.项目要求与目的
(1)项目要求:
用8086CPU控制8259可编程中断控制器,实现对外部中断的响应和处理。
要求程序中对IR0每次中断,去控制继电器动作,使LED闪烁。
(2)项目目的:
●了解8086中断的概念。
●了解8086的中断类型。
●了解8086的中断矢量表。
●了解8086的中断过程。
2.项目电路连接与说明
(1)项目电路连接:
如图6-1所示的粗线为要接的连线,接线描述如下:
8259A的片选
连至地址译码处的210H~217H插孔;8255A的片选
连至地址译码处的200H~207H插孔;PB0接到继电器的控制端上;将UP脉冲按钮连接至8259A的IR0插孔。
(2)项目说明:
8086需要外接中断控制器才能对外部中断进行处理。
8259可外接8个中断源,本项目只响应IR0中断。
将单脉冲信号UP接到8259的IR0脚,每次中断时,可以看到继电器控制的LED灯闪烁。
3.项目电路原理框图
项目电路原理框图如图6-1所示。
电路由8086CPU、8255A芯片、8259A芯片、继电器及驱动和脉冲按钮UP组成。
图6-1外部中断控制继电器电路图
4.项目程序设计
(1)程序流程图
外部中断控制继电器程序流程图如6-2所示。
(a)主程序(b)IR0中断服务程序
图6-2外部中断控制继电器程序流程图
(2)程序清单
外部中断控制继电器程序清单如下所示。
DATASEGMENT
DATAENDS
STACKSEGMENTSTACK
STADW50DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAL,13H;00010011B,ICW1:
边沿触发,单片,要ICW4
MOVDX,210H;8259地址
OUTDX,AL
MOVAL,8;ICW2中断类型号为8
MOVDX,211H
OUTDX,AL
MOVAL,01H;ICW4不用缓冲方式,正常中断结束,非特殊的全嵌套方式
OUTDX,AL
MOVAX,0;清零
MOVDS,AX;数据段清零
LEAAX,INT0;写8259中断程序的入口地址
MOVDS:
[4*8],AX;把中断服务程序的入口地址偏移量送中断矢量表
MOVAX,CS
MOVDS:
[4*8+2],AX;把中断服务程序的入口地址段地址送中断矢量表
INAL,DX;读中断屏蔽寄存器IMR,
ANDAL,0FEH;屏蔽IR1~IR7,允许IR0中的中断请求
OUTDX,AL
MOVDX,203H;8255初始化
MOVAL,80H;B口输出,方式0
OUTDX,AL
MOVBL,01H;置继电器动作初值
STI;开中断
AGAIN:
HLT
JMPAGAIN;等待
INT0PROCNEAR;IR1中断服务程序
MOVDX,201H;8255的PB口地址
NOTBL;求反
MOVAL,BL
OUTDX,AL;PB0输出
MOVDX,210H
MOVAL,20H;OCW2发结束命令EOI=1
OUTDX,AL
IRET
INT1ENDP
CODEENDS
ENDSTART
6.1.2知识讲解
1.中断基本概念
(1)中断
中断是通过硬件来改变CPU的运行方向的。
当CPU在执行程序时,由内部或外部的原因引起的随机事件要求CPU暂时停止正在执行的程序,而转向执行一个用于处理该随机事件的程序,处理完后又返回被中止的程序断点处继续执行,这一过程就称为中断。
中断之后所执行的相应的处理程序通常称之为中断服务或中断处理子程序,原来正常运行的程序称为主程序。
主程序被断开的位置(或地址)称为“断点”。
引起中断的原因,或能发出中断申请的来源,称为“中断源”。
中断源要求服务的请求称为“中断请求”(或中断申请)。
中断示意图如图6-3所示。
图6-3中断示意图
(2)中断的特点
①提高CPU的效率
中断可以解决高速的CPU与低速的外设之间的矛盾,使CPU和外设并行工作。
CPU在启动外设工作后继续执行主程序,同时外设也在工作。
每当外设做完一件事就发出中断申请,请求CPU中断它正在执行的程序,转去执行中断服务程序,中断处理完之后,CPU恢复执行主程序,外设也继续工作。
这样,CPU可启动多个外设同时工作,大大地提高了CPU的效率。
②实时处理
在实时控制系统中,工业现场的各种参数和信息都会随时间而变化。
这些外界变量可根据要求随时向CPU发出中断申请,请求CPU及时处理中断请求。
如果满足中断条件,CPU就立刻会响应,转入中断处理,从而实现实时处理。
③故障处理
控制系统的故障和紧急情况难以预料的,如掉电、设备运行出错等,可通过中断系统由故障源向CPU发出中断请求,再由CPU转到相应的故障处理程序进行处理。
(3)中断的功能
①实现中断响应和中断返回
当CPU收到中断请求后,CPU要根据相关条件(如中断优先级、是否允许中断)进行判断,决定是否响应这个中断请求。
若响应,则在执行完当前指令后立刻响应这一中断请求。
CPU中断过程为:
第一步将断点处的PC值(即下一条应执行指令的地址)压入堆栈保留下来(这称为保护断点,由硬件自动执行)。
第二步将有关的寄存器内容和标志PSW状态压入堆栈保留下来(这称为保护现场,由用户自己编程完成)。
第三步执行中断服务程序。
第四步中断返回,CPU将继续执行原主程序。
中断返回过程为:
首先恢复原保留寄存器的内容和标志位的状态,这称为恢复现场,由用户编程完成。
然后,再加返回指令IRET,IRET指令的功能是恢复PC值,使CPU返回断点,这称为恢复断点。
②实现优先权排队
中断优先权也称为中断优先级。
中断系统中存在着多个中断源,同一时刻可能会有不止一个中断源提出中断请求,因此需要给所有中断源安排不同的优先级别。
CPU可通过中断优先级排队电路首先响应中断优先级高的中断请求,等到处理完优先级高的中断请求后,再来响应优先级低的中断请求。
③实现中断嵌套
当CPU响应某一中断时,若有中断优先级更高的中断源发出中断请求,CPU会暂停正在执行的中断服务程序,并保留这个程序的断点,转向执行中断优先级更高的中断源的中断服务程序,等处理完这个高优先级的中断请求后,再返回来继续执行被暂停的中断服务程序。
这个过程称为中断嵌套。
中断嵌套流程图如图6-4所示。
图6-4中断嵌套流程图
(4)中断源
引发中断的事件称为中断源。
8086CPU的中断源有两类:
一是内部中断源,由CPU内部的标志TF为1或执行一条软件中断指令而引起;二是外部中断,由外部请求信号引起。
外部中断又分为可屏蔽中断(INTR)和非屏蔽中断(NMI)。
中断源形式如图6-5所示。
图6-58086CPU的中断源
(5)禁止中断与中断屏蔽
在有些情况下,CPU不允许响应可屏蔽中断INTR,当中断源向CPU申请中断后,CPU不能终止当前正在运行的程序并转到中断服务程序,这种情况就是禁止中断。
在另一些情况下,例如有多个中断源发出申请时,CPU只响应其中某些中断,而屏蔽其他类型的中断,这就叫中断屏蔽。
中断屏蔽可以通过中断屏蔽触发器来实现。
将中断源对应的中断屏蔽触发器置1,则中断源的中断请求被屏蔽,否则该中断源的中断请求被允许。
2.中断类型与中断向量表
8086CPU的中断系统能够处理256个不同的中断源,每个中断源都有一个为它服务的中断处理程序。
CPU响应中断后,就要转入相应的中断处理程序中。
下面就介绍CPU如何转入中断处理程序的。
●中断类型号:
就是为每个中断源指定一个编号,称为中断类型号。
●中断矢量:
每一个中断服务程序有一个确定的入口地址,该地址称为中断矢量。
●中断矢量表:
把系统中所有的中断矢量集中起来,按中断类型号从小到大的顺序安排到存储器的某一个区域内,这个存放中断矢量的存储区叫中断矢量表。
80x86CPU的中断矢量表位于主存储器最低地址00000H~003FFH中,共占用1024个存储器单元。
中断矢量表中共有256项,能处理256级中断矢量,对应中断类型号是00H~0FFH,中断矢量表的结构如图6-6所示。
图6-6中断矢量表结构图
中断服务程序的入口地址在中断矢量表中,占4个字节,其中两个低地址字节中存放中断服务程序入口地址的段内地址偏移量(IP)部分,两个高地址字节中存放中断服务程序入口地址的段地址(CS)部分。
在中断矢量表中,各个中断矢量表按中断类型码从0到255顺序存放。
这样,知道了中断类型码,很快就可计算出相应中断矢量的存放位置,从而取出中断矢量。
而每个中断矢量的地址可由中断类型码乘以4计算出来。
CPU响应中断时,只要把中断类型码N左移2位(乘以4),即可得到中断矢量在中断矢量表中的对应地址4N,然后把两个低地址字节中存放中断服务程序入口地址的段内地址偏移量(IP)部分,两个高地址字节中存放中断服务程序入口地址的段地址(CS)部分。
【例题6-1】中断类型码为27H,中断矢量为:
中断矢量应存放在从0000H:
009CH开始的4个连续字节单元中,即:
(0000H:
009CH,0000H:
009DH)→IP
(0000H:
009EH,0000H:
0009FH)→CS
如(0000H:
009CH)=21H
(0000H:
009DH)=43H
(0000H:
009EH)=65H
(0000H:
009FH)=87H
则27H号中断的中断服务程序的入口地址为:
8765H:
4321H.
【例题6-2】中断类型码为17H,如中断服务程序的入口地址是:
3240H:
87FFH,试指出中断矢量表中存放该中断矢量的4个字节单元的地址及内容。
解:
由于中断类型码为17H,则中断矢量为:
中断矢量应存放在从0000H:
005CH开始的4个连续字节单元中,即:
(0000H:
005CH)=FFH
(0000H:
005DH)=87H
(0000H:
005EH)=40H
(0000H:
005FH)=32H
3.中断响应过程
(1)8086中断响应过程
8086的中断响应过程如图6-7所示。
从图可以看出,该流程已经考虑了不同中断源的响应优先级,当多个中断同时申请中断时,CPU先响应内部中断,其次响应非屏蔽中断NMI,然后响应可屏蔽中断INTR,最后响应单步中断。
这个中断响应过程,不同的中断略有所不同。
图6-78086的中断响应过程
(2)INTR中断响应过程
不同的微型计算机的中断系统略有所不同,但实现中断时的过程基本相同。
中断过程包括4个阶段即:
中断请求、中断响应、中断服务、中断返回。
下面以INTR中断为例来说明中断的响应过程。
CPU在INTR引脚上接到一个中断请求信号,若此时的中断允许标志IF=1,并且,当前的中断请求具有最高的优先级,CPU就在执行完当前指令以后开始响应外部的中断请求。
这时,CPU通过
引脚连续发出两个负脉冲信号,外设接口在接到第二个负脉冲以后,就在数据线上发送中断类型号,CPU接到此中断类型号后,将进行如下5步操作:
第1步,将中断类型号送入暂存器保存。
第2步,将标志寄存器PSW内容压入堆栈,以保护中断时的状态。
第3步,把IF和TF标志清零。
IF清零是为了防止在中断响应的同时又来别的中断,而TF清零是为了防止CPU以单步方式执行中断处理程序。
第4步,保护断点。
就是将当前程序执行的下一条指令的IP和CS的内容压栈。
保护断点的作用是为了执行中断服务程序后能返回主程序。
第5步,根据得到的中断类型号,在中断向量表中找出中断向量,将其装入IP和CS,这时程序就转向中断服务程序去执行。
4.8086中断结构
8086中断结构如图6-8所示,从图中可以看出,8086中断系统分为外部中断和内部中断两大类,外部中断也称为硬件中断,它由非屏蔽中断NMI和可屏蔽中断INTR构成。
内部中断也称为软件中断,它由除法错误中断、溢出中断、单步中断、断点中断和INTn指令中断构成。
同时8086CPU规定了各类中断的优先级,最高为除法错误中断INT0、溢出中断INT0及INTn指令、非屏蔽中断NMI、可屏蔽中断INTR、最低的是单步中断。
下面简单进行介绍。
(1)外部中断
80x86CPU有两条外部中断请求线:
NMI和INTR,即NMI(17引脚)非屏蔽中断和INTR(18引脚))可屏蔽中断。
① NMI非屏蔽中断:
中断类型号为2,NMI非屏蔽中断的中断请求信号从CPU的外部送往CPU的引脚NMI上,采用边沿触发方式
图6-88086中断结构
②INTR可屏蔽中断:
中断类型号为08H~0FH。
INTR可屏蔽中断的中断源一般是外部设备,可屏蔽中断请求信号通过INTR引脚输入,所有的可屏蔽中断请求公用一条INTR线,由可编程中断控制器8259A管理。
需要注意的是非屏蔽中断与可屏蔽中断的不同点:
●可屏蔽中断INTR由CPU的程序状态控制字中的IF位为1还是为0决定的。
IF=1,CPU响应由INTR端引入的中断申请;IF=0,CPU不响应由INTR端引入的中断申请。
由INTR端引入,依靠IF端置0还是置1决定CPU是否响应的中断称为可屏蔽中断。
IF位置0可通过指令CLI实现,称为关中断。
IF位置1通过指令STI实现,称为开中断。
●由NMI端引入,不受IF位状态的控制,只要有中断申请就必须响应的中断称为非屏蔽中断。
(2)内部中断
内部中断的中断源在CPU的内部。
内部中断包括除法错误中断、溢出中断、单步中断、断点中断和INTn指令中断等。
内部中断是由CPU内部事件引发的中断。
①除法错误中断:
除法错误中断的中断类型号为0。
当CPU执行除法操作,除数为零或商超出计算机可表示的最大数值范围时,产生0号,除法错误中断。
②单步中断:
单步中断的中断类型号为1。
当PSW标志寄存器的单步标志位TF为1时,每执行完一条指令,CPU立即暂停程序的执行,产生1号中断。
单步中断可用于进行程序的调试。
③断点中断:
断点中断的中断类型号为3。
为了调试汇编语言程序经常需要设置断点,可以在程序中加入INT3指令。
④溢出中断:
溢出中断的中断类型号为4,以指令INTO的形式出现。
当PSW标志寄存器的溢出标志OF为1时,且CPU执行INTO指令,则产生溢出中断。
⑤INTn中断:
INTn中断也称为软件中断,以指令INTn的形式出现,中断类型号就是n。
CPU执行INTn指令,产生类型号为n的内部中断。
6.28259A芯片引脚和内部结构
6.2.1项目2:
用8259A中断控制LED灯左循环亮
1.项目要求与目的
(1)项目要求:
用8086控制8259可编程中断控制器,实现对外部中断的响应和处理。
编写程序实现8086响应外部中断8259的IR0,每按一次脉冲按钮,结果用8255的PA口输出到LED发光二极管灯左循环亮。
(2)项目目的:
●了解8259A的芯片引脚及内部结构。
●了解8259的初始化编程。
●了解8086与8259的连接方法。
2.项目电路连接与说明
(1)项目电路连接:
如图6-9所示的粗线为要接的连线,接线描述如下:
8259A的片选
连至地址译码处的210H~217H插孔;8255A的片选
连至地址译码处的200H~207H插孔;将8只LED发光二极管连接至8255A的PA0~PA7插孔;将UP脉冲按钮连接至8259A的IR0插孔。
(2)项目说明:
8259可外接8个中断源,本项目只响应INT0中断,8259也可以多级连接,以响应多个中断源。
将单脉冲信号接到8259的INT0脚。
每按一下UP,8259A就中断一次,LED发光二极管灯左循环亮。
在编程时应注意:
●正确地设置可编程中断控制和工作方式。
●必须正确地设置中断服务程序地址。
3.项目电路原理框图
项目电路原理框图如图6-9所示。
电路由8086CPU、8255A芯片、8259A芯片、8只发光二极管LED0~LED7和脉冲按钮UP组成。
图6-9用8259A中断控制LED灯左循环亮电路图
4.项目程序设计
(1)程序流程图
用8259A中断控制LED灯左循环亮程序流程图如6-10所示。
图6-10用8259A中断控制LED灯左循环亮程序流程图
(2)程序清单
用8259A中断控制LED灯左循环亮程序清单如下所示。
DATASEGMENT
DATAENDS
STACKSEGMENTSTACK
STADW50DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAL,13H;00010011B,ICW1:
边沿触发,单片,要ICW4
MOVDX,210H;8259地址
OUTDX,AL
MOVAL,8;ICW2中断类型号为8
MOVDX,211H
OUTDX,AL
MOVAL,01H;ICW4不用缓冲方式,正常中断结束,非特殊的全嵌套方式
OUTDX,AL
MOVAX,0;清零
MOVDS,AX;数据段清零
LEAAX,INT0;写8259中断程序的入口地址
MOVDS:
[4*8],AX;把中断服务程序的入口地址偏移量送中断矢量表
MOVAX,CS
MOVDS:
[4*8+2],AX;把中断服务程序的入口地址段地址送中断矢量表
INAL,DX;读中断屏蔽寄存器IMR,
ANDAL,0FEH;屏蔽IR1~IR7,允许IR0中的中断请求
OUTDX,AL
MOVDX,203H;8255初始化
MOVAL,80H;A口输出,方式0
OUTDX,AL
MOVBL,0FEH;LED0灯亮(低电平灯亮)
MOVAL,BL
MOVDX,200H
OUTDX,AL;PA0灯亮
STI;开中断
REPEAT:
HLT
JMPREPEAT;等待
INT0PROCNEAR;8259中断程序
ROLBL,1;左循环1次
MOVAL,BL
MOVDX,200H;PA口灯亮
OUTDX,AL
MOVDX,210H
MOVAL,20H;OCW2发结束命令EOI=1
OUTDX,AL
IRET
INT0ENDP
CODEENDS
ENDSTART
6.2.2知识讲解
1.概述
Intel8259A可编程中断控制器用于管理PC机中的INTR中断(外部可屏蔽中断)。
外部设备可通过中断控制器8259A的中断请求线INT把中断请求信号送往CPU的INTR线,以便提出中断请求。
8259A的主要功能如下所示。
(1)可管理8个中断源电路的中断,并能对其进行优先级管理。
(2)用9片8259A可组成主从式中断系统,管理64个中断源电路的中断,并能对其进行优先级管理。
(3)对中断源有屏蔽或允许申请中断的操作。
(4)能自动送出中断类型号,使CPU迅速找到中断服务程序的入口地址。
2.8259A芯片引脚与内部结构
(1)8259A芯片引脚
8259A为28脚双列直插式芯片,芯片引脚如图6-11所示,各引脚信号功能如下所示。
①
(1脚):
片选信号。
输入,低电平有效。
该信号有效时,CPU可对该8259A进行读写操作。
②
(2脚):
写信号。
输入,低电平有效。
该信号有效时,允许CPU把命令字(ICW和OCW)写入相应命令寄存器。
③
(3脚):
读信号。
输入,低电平有效。
该信号有效时,允许该8259A将状态信息放到数据总线上供CPU检测。
图6-118259A芯片引脚图
④D0~D7(11~4脚):
双向数据总线。
用来传送控制、状态和中断类型号。
⑤IR0~IR7(18~25脚):
外部中断请求信号。
⑥INT(17脚):
中断请求信号。
用来向CPU发送中断请求信号。
⑦
(26脚):
中断响应信号。
CPU同意中断申请后,发此信号作为响应中断的回答信号。
⑧A0(27脚):
地址输入信号,用于寻址8259A内部寄存器,一般与地址总线的A0连接。
同
、
和
在PCAT机上的组合操作功能见表6-1
表6-18259A读/写操作与I/O端口地址
⑨CAS0~CAS2(12、13、15脚):
级联信号。
双向引脚,用来控制多片8259A的级联使用。
对主片来说,CAS0~CAS2为输出;对从片来说,CAS0~CAS2为输入。
⑩
/
(16脚):
从片/允许缓冲器信号。
此信号线为双向,作用有二:
一是当为输入时,用来决定本片是主片还是从片,当
=1,该片为主片;当
=0,该片为从片;二是当为输出时,
/
可作为启动数据总线驱动器的启动信号。
(2)8259A芯片内部结构
8259A的内部结构如图6-12所示。
下面介绍各个部分的功能
图6-128259A芯片的内部结构
①数据总线缓冲器。
这是一个8位的双向三态缓冲器,是8259A与CPU之间的数据接口,在读/写逻辑的控制之下实现CPU与8259A之间的信息交换。
②读\写控制电路。
读/写逻辑电路控制CPU与8259A之间的信息交换。
为片选信号线,低电平时选中8259A工作。
由片选信号
和A0指定内部寄存器,CPU可以通过执行OUT指令,将初始化命令字和工作命令字写入相应的命令寄存器ICW和OCW中;也可以通过执行IN指令,将8259A中的IRR、ISR、IMR等寄存器的内容读入CPU中。
③级联缓冲/比较器。
用来实现多个8259A的级联及数据缓冲方式。
级联时,一个8259A芯片为主片,最多能带动8个8259从片,因此最多可以实现对64级中断的管理。
这时,从片的INT脚与主片的一条中断请求信号线IRi相连,同时将主片的CAS0~CAS2与与所有从片的CAS0~CAS2相连,构成8259A的主从式控制结构。
主片
引脚接高电平,CAS0~CAS2为输出引脚;从片
引脚接低电平,CAS0~CAS2为输入引脚。
每个从8259A芯片的中断请求信号INT接至主8259A芯片的中断请求输入端IRi,主8259A的INT连接至CPU的中断请求输入端。
主、从8259A芯片
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 中断系统与可编程8259A 中断 系统 可编程 8259
![提示](https://static.bdocx.com/images/bang_tan.gif)