1/43实验九中断特性及8259应用编程实验实验目的1.认识TDN86/51系统的中断特性。2.掌握8259中断控制器的工作原理3.掌握8259可编程中断控制器的应用编程4.学习掌握8259级连方式的使用方法5.学习在接口实验单元上构造连接实验电路的方法实验设备1.TDN86/51或TDN86/88教学实验系统一台2.排线、导线若干实验内容及步骤(一)系统中的8259芯片1.8259A可编程中断控制器介绍中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。8259A的内部结构和引脚如图9-1所示。矚慫润厲钐瘗睞枥庑赖賃軔。8259A的编程,就是根据应用需要将初始化命令ICW1-ICW4和操作命令字ICW1-ICW3分别写入初始化命令寄存器组和操作命令寄存器组。写初始化命令字ICW的流程如图9-2所示,ICW1-ICW4各命令字格式如表9-1所示,OCW1-OCW3各命令字格式如图9-3所示。聞創沟燴鐺險爱氇谴净祸測。2.系统中的8259A芯片系统中的8259A芯片工作于单片方式,但可由用户扩展成接连方式。其线路如图9-X(没画出)所示。图中的圈点表示此为排针形式引出脚。(注:以下线路中的圈点均为排针形式引出脚,以后不再另作说明)。残骛楼諍锩瀨濟溆塹籟婭骒。系统启动时,8259A被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW来实现的。系统初始化时,规定0#和4#中断源分别提供给实时钟和与PC微机联机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有4#中断源处于开启状态,其他中断源都被屏蔽了。中断矢量地址与中断符号之间的关系如下表。酽锕极額閉镇桧猪訣锥顧荭。3.接口实验单元中的级连实验用8259A芯片除系统中的8259A芯片外,在接口实验单元中专门提供了另一片8259A芯片,以便进行8259A级连实验。其线路如图9-X(没画)所示。彈贸摄尔霁毙攬砖卤庑诒尔。4.接口实验单元中的R-S触发器电路謀荞抟箧飆鐸怼类蒋薔點鉍。厦礴恳蹒骈時盡继價骚卺癩。茕桢广鳓鯡选块网羈泪镀齐。CSIR7A0VCCDB3DB4DB5DB6DB7WRINTARD8259A342156722232425262728IR6IR5IR4IR3INTIR7IR6IR5IR4IR3IR2IR1CAS2CAS1CAS0A0DB7~DB0RDWRCS数据总线缓冲器读/写控制逻辑级联缓冲/比较器中断请求寄存器IRRIR0控制逻辑服务状态寄存器ISR优先权处理器INTAICW1ICW22/43鹅娅尽損鹌惨歷茏鴛賴縈诘。主程序中断响应周期中断服务程序籟丛妈羥为贍偾蛏练淨槠挞。断点图9-5中断过程示意图預頌圣鉉儐歲龈讶骅籴買闥。渗釤呛俨匀谔鱉调硯錦鋇絨。A0A0D7D6D5D4D3D2D1D0铙誅卧泻噦圣骋贶頂廡缝勵。擁締凤袜备訊顎轮烂蔷報赢。图9-8ICW2初始化命令字格式A0D7D6D5D4D3D2D1D0贓熱俣阃歲匱阊邺镓騷鯛汉。图9-9从8259A的ICW3初始化命令字格式坛摶乡囂忏蒌鍥铃氈淚跻馱。A0图9-10初始化命令字ICW4格式A0D7D6D5D4D3D2D1D0图9-118259A的OCW1操作命令字格式蜡變黲癟報伥铉锚鈰赘籜葦。A0D7D6D5D4D3D2D1D0買鲷鴯譖昙膚遙闫撷凄届嬌。图9-128259A的OCW2操作命令字格式A0D7D6D5D4D3D2D1D0綾镝鯛駕櫬鹕踪韦辚糴飙钪。图9-138259A的OCW3操作命令字格式图9-148259A非缓冲方式的级连结构驅踬髏彦浃绥譎饴憂锦諑琼。猫虿驢绘燈鮒诛髅貺庑献鵬。8088/8086系统的中断过程:(1)中断指令译码或查询中断:中断指令、断点指令经译码即进入中断,INTO指令在OF=1时进入中断,DIV、IDIV指令在以0为除数或商超出所能表达的范围时,进入中断,TF=1时进入单步中断。锹籁饗迳琐筆襖鸥娅薔嗚訝。对于硬件中断,8088每条指令执行的末尾采样中断请求输入信号。若有NMI请求则进入非屏蔽中断(具有比INTR高的优先权)。若有INTR,且IF=1则进入可屏蔽中断。構氽頑黉碩饨荠龈话骛門戲。识别中断源FLAGS、CS、IP进栈清TF、IF标志读中断向量,转入中断服务程序保护现场开中断中断处理关中断恢复现场开中断中断返回1M7M6M5M4M3M2M1M0中断屏蔽1屏蔽中断输入0允许中断输入0RSLEOI00L2L1L0有效中断请求级别01234567010101010011001100001111001非特殊EOI命令011*特殊EOI命令101按非特殊EOI命令旋转100自动EOI方式旋转(SET)000自动EOI方式旋转(清除)111*特殊EOI方式旋转110*置优先权命令*表示需要使用L2~L0中断结束自动旋转特殊旋转软件中断?形成中断类型码NMI?IF=1?INTR?进入中断响应读中断类型码指令结束?执行指令YYYYNNNQDCLRCLKI/O设备READY+5VIRQ-INTA图9-4中断请求触发器0A7A6A51LTIMADISNGLIC41需要ICW40不需要ICW41单片工作0级连工作中断矢量地址的A7~A5(只用于MCS80/85)调用地址间隔1间隔为40间隔为81电平触发0边沿触发图9-7ICW1初始化命令字格式1×××××ID2ID1ID0从ID01234567010101010011001100001111KK2-KK2+KK1-KK2+8259KKUNIT图9-16实验(1)线路IRQ7ABD7~D0D7~D0D7~D0VCCDBCBCSA0INTACAS0从8259ACAS1SP/ENCAS2IR7···IR0INTCSA0INTACAS0从8259ACAS1SP/ENCAS2IR7···IR0INTCSA0INTAINTCAS0主8259ACAS1CAS2IR7IR6···IR0SP/ENKK1+0×ESMMSMM01PRRRIS特殊屏蔽模式10复位特殊屏蔽11置位特殊屏蔽读寄存器命令10在下一个读脉冲读IRR11在下一个读脉冲读ISR1T7T6T5T4T3×××中断类型码的高5位T7~T3不可屏蔽中断8259A可屏蔽中断请求INTn指令INT3断点除法出错单步中断INTO溢出8086CPU中断逻辑NMIINTR图9-68086中断结构18086/8088模式0MCS-80/85模式1自动EOI0正常EOI1特殊全嵌套方式0非特殊全嵌套方式1000SFNMBUFM/SAEOIμPM0x非缓冲方式10缓冲方式/从11缓冲方式/主3/43(2)形成或取得中断类型码对于软件中断,处理机自动形成相应的中断类型码:对于NMI中断,8088/8086自动形成类型码2。对于INTR中断,8088/8086接连产生两个中断响应周期,在第二个中断响应周期读取中断类型码。輒峄陽檉簖疖網儂號泶蛴镧。(3)查向量表:处理器发中断类型码乘以4就得到中断向量。中断向量指向该中断源的中断服务程序入口。(4)保护现场:保存CPU状态:标志寄存器内容压入堆栈。保存断点:CS、IP内容入栈。(5)TF非0时保存TF(6)清IF、TF,屏蔽新的INTR和单步中断(7)转向中断服务程序:由中断向量表取来的字节中的低字(16位)送进IP,高字(16位)送进CS。(8)执行中断服务子程序(9)恢复断点:从堆栈中弹IP、CS,恢复CPU状态,从堆栈中弹出标志寄存器。(10)返回二、实验内容8259应用实验(1)按图9-16所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。实验流程如下:尧侧閆繭絳闕绚勵蜆贅瀝纰。STACKSEGMENTSTACKDW64DUP(?)STACKENDSCODESEGMENTASSUMECS:CODESTART:PUSHDS;保存数据段MOVAX,0000HMOVDS,AX;数据段清零MOVAX,OFFSETIRQ7;取中断程序入口地址(相对地址)ADDAX,2000H;加装载时IP=2000H地址(绝对地址)MOVSI,003CH;填8259中断7中断矢量MOV[SI],AX;填偏移量矢量MOVAX,0000H;段地址CS=0000HMOVSI,003EHMOV[SI],AX;填段地址矢量CLI;关中断POPDS;弹栈INAL,21H;读8259中断屏蔽字ANDAL,7FH;开8259中断7OUT21H,ALMOVCX,000AH4/43A1:CMPCX,0000HJNZA2INAL,21H;读8259中断屏蔽字ORAL,80H;关8259中断7OUT21H,ALSTIHLTA2:STIJMPA1IRQ7:MOVAX,0137H;中断程序入口INT10HMOVAX,0120HINT10HDECCXMOVAL,20HOUT20H,ALCLIIRETCODEENDSENDSTART识饒鎂錕缢灩筧嚌俨淒侬减。实验步骤(1)按图9-16连接实验线路(2)输入程序并检查无误,经汇编、连接后装入系统(3)G=0000:2000↙运行程序。(注意:程序中8259A中断矢量地址为绝对地址,已定义为段地址CS=0000H,偏移地址IP=2000H,故装载时一定按此填入CS与IP地址。后面实验不再重述)。凍鈹鋨劳臘锴痫婦胫籴铍賄。(4)重复按KK2微机开关,显示屏上应用“7”来响应,直到按10次后,系统处于停机状态,用CTRL+C返回监控。恥諤銪灭萦欢煬鞏鹜錦聰櫻。3.8259应用实验(2)鯊腎鑰诎褳鉀沩懼統庫摇饬。按图9-19所示实验线路,编写程序,完成下面的要求:当无中断请求时。执行主程序,延时显示“main”,若有中断请求,则执行其中断服务程序,显示该中断号为“6”或“7”;若正在执行较低级的中断服务程序,则允许比他优先级高的中断被响应(IRQ6IRQ7).主程序在执行过程中,每显示一个“main”,空一格。实验程序如下:硕癘鄴颃诌攆檸攜驤蔹鸶胶。STACKSEGMENTSTACK;定义堆栈段DW64DUP(?)STACKENDSDATASEGMENT;定义数据段KK2-KK2+KK1-KK2+8259KKUNIT图9-19实验(2)线路IRQ6IRQ7修改IRQ7中断矢量修正IMR,使IRQ7中断允许CX=00AHCX=0?开中断屏蔽IRQ7中断矢量停机关中断CX=CX-1显示“7”IRQ7中断服务处理返回Y图9-188259应用实验(1)框图5/43TABLEDB4DH,41H,49H,4EH,20H,00HDATAENDSCODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;主程序开始MOVDS,AX;填数据段地址PUSHDS;保存数据段MOVAX,0000HMOVDS,AX;数据段清零MOVAX,OFFSETIRQ6;取中断程序入口地址(相对地址)ADDAX,2000H;加装载时IP=2000H地址(绝对地址)MOVSI,0038H;填8259中断6中断矢量MOV[SI],AX;填中断6偏移量矢量MOVAX,0000H;段地址CS=0000HMOVSI,003AHMOV[SI],AX;取中断6段地址矢量MOVAX,OFFSETIRQ7;取中断程序入口地址(相对地址)ADDAX,2000H;加装载时IP=2000H地址(绝对地址)MOVSI,003CH;填8259中断7中断矢量MOV[SI],AX;填中断7段地址矢量MOVAX,0000H;段地址CS=0000HMOVSI,003EHMOV[SI],AX;填中断7段地址矢量POPDS;弹栈MOVAL,13HOUT20H,ALMOVAL,08HOUT21H,ALMOVAL,09HOUT21H,AL