《微机技术第08章中断控制接口.ppt》由会员分享,可在线阅读,更多相关《微机技术第08章中断控制接口.ppt(89页珍藏版)》请在三一办公上搜索。
1、第 8 章,第8章 中断控制接口,教学重点 8088 CPU的中断系统 8259A的中断工作过程和工作方式 中断服务程序的编写,8.1 8088中断系统,8088的中断系统采用向量中断机制能够处理256个中断用中断向量号0255区别可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理,8.1.1 8088的中断类型,内部中断除法错中断指令中断溢出中断单步中断外部中断非屏蔽中断可屏蔽中断,1.内部中断,内部中断是由于8088内部执行程序出现异常引起的程序中断利用内部中断,微处理器为用户提供了发现、调试并解决程序执行时异常情况的有效途径例如,ROM-BIOS和DOS系统利用内部中
2、断为程序员提供了各种功能调用,内部中断的中断向量号已定,除法错中断,在执行除法指令时,若除数为0或商超过了寄存器所能表达的范围,则产生一个向量号为0的内部中断,称为除法错中断例如:,mov bl,0idiv bl;除数BL0,产生除法错中断,mov ax,200hmov bl,1div bl;商200H,不能用AL表达;产生除法错中断,指令中断,在执行中断调用指令INT n时产生的一个向量号为n(0 255)的内部中断,称为指令中断其中向量号为3的指令中断比较特别(生成一个字节的指令代码:11001100),常用于程序调试,被称为断点中断,例如:DEBUG.EXE调试程序的运行命令G设置的断点
3、,就是利用INT 3指令实现的,溢出中断,在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量号为4的内部中断,被称为溢出中断例如:,mov ax,2000hadd ax,7000h;2000H7000H9000H,溢出:OF1into;因为OF1,所以产生溢出中断,单步中断,若单步中断TF为1,则在每条指令执行结束后产生一个向量号为1的内部中断,称为单步中断,例如:DEBUG.EXE调试程序的单步命令T就利用单步中断实现对程序的单步调试,2.外部中断,外部中断是由于8088外部提出中断请求引起的程序中断利用外部中断,微机系统可以实时响应外部设备的数据传送请求,能够及时处理外部意外
4、或紧急事件外部中断的原因是处理器外部随机产生的,所以是真正的中断(Interrupt)内部中断的原因是处理器执行程序出现异常,所以经常被称为异常(Exception),非屏蔽中断,通过非屏蔽中断请求信号向微处理器提出的中断请求,微处理器无法禁止,将在当前指令执行结束予以响应,这个中断被称为非屏蔽中断8088的非屏蔽中断的向量号为2,非屏蔽中断请求信号为NMI非屏蔽中断主要用于处理系统的意外或故障。例如:电源调电前的数据保护存储器读写错误的处理,可屏蔽中断,外部通过可屏蔽中断请求信号向微处理器提出的中断,微处理器在允许可屏蔽中断的条件下,在当前指令执行结束予以响应,同时输出可屏蔽中断响应信号,这
5、个中断就是可屏蔽中断8088的可屏蔽中断请求和响应信号分别是INTR和INTA*;由IF标志控制可屏蔽中断是否允许响应;向量号来自外部中断控制器8088通常需要配合中断控制器8259A共同处理可屏蔽中断可屏蔽中断主要用于主机与外设交换数据,IF控制可屏蔽中断的响应,中断标志IF的状态,IF0:可屏蔽中断不会被响应关中断、禁止中断、中断屏蔽系统复位,使IF0任何一个中断被响应,使IF0执行指令CLI,使IF0IF1:可屏蔽中断会被响应开中断、允许中断、中断开放执行指令STI,使IF1执行指令IRET恢复原IF状态,明确IF标志的状态是关键,8.1.2 8088的中断响应过程,查询中断的顺序,决定
6、了各种中断源的优先权软件中断除法错中断指令中断溢出中断非屏蔽中断可屏蔽中断单步中断,8.1.2 8088的中断响应过程(续),8088各种中断源的优先权,实际上是指被识别出来的先后多种中断同时请求时,最先响应的则可能是单步中断或NMI中断,8.1.3 8088的中断向量表,中断向量:中断服务程序的入口地址(首地址)逻辑地址含有段地址CS和偏移地址IP(32位)每个中断向量的低字是偏移地址、高字是段地址,需占用4个字节8088微处理器从物理地址000H开始,依次安排各个中断向量,向量号也从0开始256个中断占用1KB区域,就形成中断向量表,向量号为N的中断向量的物理地址N4,8.2 内部中断服务
7、程序,编写内部中断服务程序与编写子程序类似利用过程定义伪指令PROC/ENDP第1条指令通常为开中断指令STI最后用中断返回指令IRET通常采用寄存器传递参数主程序需要调用中断服务程序调用前,需要设置中断向量利用INT n指令调用中断服务程序,例8.1 内部中断服务程序,编写80H号中断服务程序功能:显示以“0”结尾字符串的功能利用显示器功能调用INT 10H字符串缓冲区首地址为入口参数DS:DX(段地址:偏移地址)传递参数,数据段,intoffdw?intsegdw?intmsgdb A Instruction Interrupt!db 0dh,0ah,0,例8.1,以“0”结尾,回车、换行
8、,保存中断向量,mov ax,3580hint 21hmov intoff,bx;保存偏移地址mov intseg,es;保存段基地址,例8.1,获取中断向量(DOS功能调用INT 21H)功能号:AH35H入口参数:AL中断向量号出口参数:ES:BX中断向量(段地址:偏移地址),设置中断向量,push dsmov dx,offset new80hmov ax,seg new80hmov ds,axmov ax,2580hint 21hpop ds,例8.1,设置中断向量(DOS功能调用INT 21H)功能号:AH25H入口参数:AL中断向量号DS:DX中断向量(段地址:偏移地址),调用中断服
9、务程序,;设置入口参数:DS段地址(已设置)DX偏移地址mov dx,offset intmsgint 80h;调用80H中断服务程序,例8.1,A Instruction Interrupt!,;80H号内部中断服务程序:;显示字符串(以“0”结尾);入口参数:DS:DX缓冲器首地址new80hprocsti;开中断push ax;保护寄存器push bxpush si,例8.1,进入中断服务程序,A Instruction Interrupt!,显示字符串,mov si,dxnew1:mov al,sicmp al,0jz new2mov bx,0mov ah,0ehint 10hinc
10、sijmp new1,例8.1,A Instruction Interrupt!,退出中断服务程序,new2:pop si;恢复寄存器pop bxpop axiret;中断返回new80hendp,例8.1,A Instruction Interrupt!,主程序结束,mov dx,intoffmov ax,intsegmov ds,axmov ax,2580hint 21hmov ax,4c00hint 21h,例8.1,A Instruction Interrupt!,8.3 8259A中断控制器,Intel 8259A是可编程中断控制器PIC可用于管理Intel 8080/8085、80
11、86/8088、80286/80386的可屏蔽中断8259A的基本功能一片8259A可以管理8级中断,可扩展至64级每一级中断都可单独被屏蔽或允许在中断响应周期,可提供相应的中断向量号8259A设计有多种工作方式,可通过编程选择,8.3.1 8259A的内部结构和引脚,1.中断控制,中断请求寄存器IRR保存8条外界中断请求信号IR0IR7的请求状态Di位为1表示IRi引脚有中断请求;为0表示无请求中断服务寄存器ISR保存正在被8259A服务着的中断状态Di位为1表示IRi中断正在服务中;为0表示没有被服务中断屏蔽寄存器IMR保存对中断请求信号IR的屏蔽状态Di位为1表示IRi中断被屏蔽(禁止)
12、;为0表示允许,2.与处理器接口,3.中断级连,一个系统中,8259A可以级连,有一个主8259A,若干个(最多8个)从8259A级连时,主8259A的三条级连线CAS0CAS2作为输出线,连至每个从8259A的CAS0CAS2每个从8259A的中断请求信号INT,连至主8259A的一个中断请求输入端IR主8259A的INT线连至CPU的中断请求输入端SP*/EN*在非缓冲方式下,规定该8259A是主片(SP*1)还是从片(SP*0),动画,示例,8.3.2 8259A的中断过程,动画,8.3.3 8259A的工作方式,1.设置优先权方式,普通全嵌套方式8259A的中断优先权顺序固定不变,从高
13、到低依次为IR0、IR1、IR2、IR7中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线,对应ISR的Di位置位,至到中断结束(ISR的Di位复位)在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套特殊全嵌套方式优先权自动循环方式优先权特殊循环方式,2.结束中断处理方式,什么是8259A的中断结束?,8259A利用中断服务寄存器ISR判断:某位为1,表示正在进行中断服务;该位为0,就是该中断结束服务。这里说明如何使ISR某位为0,不反映CPU的工作状态。,2.结束中断处理方式,自动中断结束方式普通中断结束方式配合全
14、嵌套优先权方式使用当CPU用输出指令往8259A发出普通中断结束EOI命令时,8259A就会把所有正在服务的中断中优先权最高的ISR位复位特殊中断结束方式配合循环优先权方式使用CPU在程序中向8259A发送一条特殊中断结束命令,这个命令中指出了要清除哪个ISR位,3.屏蔽中断源方式,普通屏蔽方式将IMR的Di位置1,则对应的中断IRi被屏蔽,该中断请求不能从8259A送到CPU如果IMR的Di位置0,则允许IRi中断产生特殊屏蔽方式将IMR的Di位置1,对应的中断IRi被屏蔽的同时,使ISR的Di位置0,4.中断触发方式,边沿触发方式8259A将中断请求输入端出现的上升沿作为中断请求信号电平触
15、发方式中断请求端出现的高电平是有效的中断请求信号,5.数据线连接方式,缓冲方式8259A的数据线需加缓冲器予以驱动8259A把SP*/EN*引脚作为输出端,输出允许信号,用以锁存或开启缓冲器非缓冲方式SP*/EN*引脚为输入端若8259A级连,由其确定是主片或从片,8.3.4 8259A的编程,初始化编程8259A开始工作前,必须进行初始化编程给8259A写入初始化命令字ICW中断操作编程在8259A工作期间可以写入操作命令字OCW将选定的操作传送给8259A,使之按新的要求工作还可以读取8259A的信息,以便了解他的工作状态,1.初始化命令字ICW,初始化命令字ICW最多有4个8259A在开
16、始工作前必须写入必须按照ICW1ICW4顺序写入ICW1和ICW2是必须送的ICW3和ICW4由工作方式决定,流程,ICW1,表示可以任意为1为0都可以(建议为0),1只能为1,作为标志,中断触发方式:LTIM1,电平触发方式LTIM0,边沿触发方式,规定单片或级连方式:SNGL1,单片方式SNGL0,级连方式,是否写入ICW4IC41,要写入ICW4IC40,不写入ICW4,即ICW4规定的位全为0,ICW2,设置中断向量号T7T3为中断向量号的高5位低3位由8259A自动确定:IR0为000、IR1为001、IR7为111,ICW3,级连命令字主片8259A:Si1对应IRi接有从片;否则
17、IRi没有连接从片从片8259A:ID0ID2编码说明从片INT引脚接到主片哪个IR引脚,ICW4,嵌套方式:特殊全嵌套方式(SFNM1)普通全嵌套方式(SFNM0),数据线的缓冲方式:缓冲方式(BUF1)非缓冲方式(BUF0),主片/从片选择:主片(M/S=1)从片(M/S=0),中断结束方式:自动中断结束(AEOI1)非自动中断结束(AEOI0),微处理器类型:16位80 x86(PM1)8位8080/8085(PM0),2.操作命令字OCW,8259A工作期间,可以随时接受操作命令字OCWOCW共有3个:OCW1OCW3写入时没有顺序要求,需要哪个OCW就写入那个OCW,OCW1,屏蔽命
18、令字内容写入中断屏蔽寄存器IMRDiMi对应IRi,为1禁止IRi中断;为0允许IRi中断。各位互相独立。,OCW2,R、SL和EOI配合使用产生中断结束EOI命令和改变优先权顺序,L2L0的3位编码指定IR引脚,OCW3,ESMM、SMM设置中断屏蔽方式,P、RR和RIS规定随后读取的状态字含义,3.读取状态字,CPU可读出IRR、ISR、IMR和查询字A0为低,由OCW3中RR和RIS位设定读取IRR或ISR,由OCW3中P位设定读取查询字而A0引脚为高电平时读取的都是IMR查询字反映8259A是否有中断请求,查询字,中断位I位为1,有外设请求中断,W2W0的编码当前中断请求的最高优先级,
19、4.命令字和状态字的区别方法,利用读写信号区别写入的控制寄存器和读出的状态寄存器 利用地址信号区别不同I/O地址的寄存器 由控制字中的标志位说明是哪个寄存器 由芯片内顺序控制逻辑按一定顺序识别不同的寄存器 由前面的控制字决定后续操作的寄存器,接口电路中常用的方法,初始化主片8259A,mov al,11h;写入ICW1out 20h,aljmp intr1intr1:mov al,08h;写入ICW2out 21h,aljmp intr2intr2:mov al,04h;写入ICW3out 21h,aljmp intr3intr3:mov al,1h;写入ICW4out 21h,al,中断控制
20、器的初始化程序段,初始化从片8259A,mov al,11h;写入ICW1out 0a0h,aljmp intr5intr5:mov al,70h;写入ICW2out 0a1h,aljmp intr6intr6:mov al,02h;写入ICW3out 0a1h,aljmp intr7intr7:mov al,01h;写入ICW4out 0a1h,al,中断控制器的初始化程序段,8.4 8259A在IBM PC系列机上的应用,8.4 8259A在IBM PC系列机上的应用,对比在IBM PC/XT机的应用,应用注意事项,利用上升沿做为中断请求IRQ的有效信号IRQ0IRQ7的中断向量号依次为0
21、8H0FH,IRQ8IRQ15依次为70H77H采用普通全嵌套优先权方式,中断优先权从高到低顺序为IRQ0IRQ2、IRQ8IRQ15、IRQ3IRQ7,且不能改变采用普通中断结束EOI方式,需要在中断服务程序最后发送普通EOI命令一般采用普通屏蔽方式,通过写入IMR允许中断,但注意不要破坏原屏蔽状态,8.5 外部中断服务程序,编写外部可屏蔽中断服务程序,需注意:发送中断结束命令一般只能采用存储单元传递参数不要使用DOS系统功能调用中断服务程序尽量短小,8.5 外部中断服务程序(续),编写主程序,需注意:修改中断向量控制CPU的中断允许标志设置8259A的中断屏蔽寄存器,例题8.2 可屏蔽中断
22、服务程序,8259A的IRQ0(向量号为08H)中断请求来自定时器8253,每隔55ms产生一次本程序的08H号中断服务程序,每次中断显示一串信息,显示10次用内存单元(共享变量)在主程序与外部中断服务程序之间传递参数:中断次数显示信息也安排在共同的数据段中,数据段,intmsgdb A 8259A Interrupt!db 0dh,0ah,0counterdb 0,例8.2,保存中断向量,mov ax,3508hint 21hpush bx;保存偏移地址push es;保存段基地址,例8.2,设置中断向量,clipush dsmov dx,offset new08hmov ax,seg ne
23、w08hmov ds,axmov ax,2508hint 21hpop ds,例8.2,设置中断寄存器,in al,21hpush axand al,0feh;允许IRQ0out 21h,almov counter,0;设置中断次数初值sti;开中断,例8.2,循环等待中断,start1:cmp counter,10jb start1;中断10次退出,例8.2,中断就在主程序循环当中,new08hprocsti;开中断push ax;保护寄存器push bxpush dsmov ax,datamov ds,ax;设置数据段DS,例8.2,进入中断服务程序,中断处理,inc countermov
24、 si,offset intmsg;显示信息call dpstri,例8.2,显示字符串,dpstriproc;显示字符串子程序push axpush bxdps1:lodsbcmp al,0jz dps2,例8.2,显示字符串(续),mov bx,0mov ah,0ehint 10hjmp dps1dps2:pop bxpop axretdpstriendp,例8.2,退出中断服务程序,mov al,20hout 20h,alpop ds;恢复寄存器pop bxpop axiret;中断返回new08hendp,例8.2,主程序结束,clipop axout 21h,alpop dxpop
25、dsmov ax,2508hint 21hstimov ax,4c00hint 21h,例8.2,A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!,8.6 驻留中断服务程序,驻留TSR(Terminate and Stay Resident)程序用户程序运行后仍然保存在主存中,可以让其他
26、程序使用利用DOS功能调用31H代替4CH终止程序小型驻留程序常编写成COM程序驻留程序也可以编写成EXE程序需要驻留内存的程序段要写在前面,例题8.3 报时中断驻留服务程序,系统08H号中断服务程序调用1CH中断每隔55ms调用这个报时中断,中断65543次就是时间过了一个小时本例编写一个驻留内存的1CH内部中断服务程序实现每过一小时就显示信息执行此程序后,报时中断服务程序将驻留内存,new1chprocsti;开中断push si;保护寄存器push dsmov si,csmov ds,si;设置数据段DSadd countl,1adc counth,0,例8.3,进入中断服务程序,中断处
27、理,cmp countl,hourljnz n1ch1cmp counth,hourhjnz n1ch1mov countl,0mov counth,0mov si,offset intmsgcall dpstri,例8.3,退出中断服务程序,n1ch1:pop ds;恢复寄存器pop siiret;中断返回countldw 0counthdw 0intmsgdb One Hour Has Passed!db 0dh,0ah,0new1chendp,例8.3,One Hour Has Passed!,显示字符串,dpstriproc;显示字符串子程序push axpush bxdps1:lod
28、sbcmp al,0jz dps2,例8.3,显示字符串(续),mov bx,0mov ah,0ehint 10hjmp dps1dps2:pop bxpop axretdpstriendp,例8.3,主程序开始,start:mov ax,csmov ds,axmov dx,offset new1chclimov ax,251chint 21hstimov dx,offset tsrmsgmov ah,09hint 21h,例8.3,主程序结束,mov dx,offset startadd dx,15mov cl,4shr dx,cladd dx,10hmov ax,3100h;程序驻留int
29、 21htsrmsgdb INT 1CH Program Installed!db 0dh,0ah,$end start,例8.3,INT 1CH Program Installed!,第8章教学要求,1.熟悉8088的中断类型、中断响应过程、中断向量表2.掌握内部中断服务程序的编写3.理解8259A的内部结构、寄存器作用、中断过程4.掌握8259A的普通全嵌套优先权、普通中断结束、边沿触发方式,第8章教学要求(续),5.了解的8259A的ICW和OCW,注意命令字和状态字的区别方法6.了解8259A在IBM PC系列机上的应用情况7.掌握外部中断服务程序的编写习题8(第 211 页)8.4 8.6 8.9 8.11 8.13,实验2 中断实验,不用实验台,实现例题程序例8.1 内部中断服务程序例8.2 可屏蔽中断服务程序例8.3 驻留中断服务程序 然后,按照实验要求进行,提示,返回,8088的中断向量表,返回,8259级联工作示意图,返回,8259级联工作示意图,返回,8259A芯片的初始化流程,返回,8087中断请求RAM奇偶错I/O通道检查错,NMI屏蔽寄存器屏蔽位,8253定时器键盘未用异步通信卡(辅)异步通信卡(主)硬盘软盘并行打印机,NMI,INTR,01234567,优先级,8088CPU,8259A,I/O通道,返回,