北京科技大学计算机与通信工程学院实验报告实验名称:实验一8259中断控制器应用实验实验二8254定时/计数器应用实验实验三8255并口控制器应用实验学生姓名:专业:班级:学号:指导教师:实验成绩:实验地点:机电楼320实验时间:2015年12月4日2一、实验目的与实验要求1、实验目的实验一1.掌握PC机中断处理系统的基本原理。2.掌握可编程中断控制器8259的应用编程方法。实验二1.掌握8254的工作方式及应用编程。2.掌握8254典型应用电路的接法。实验三1.掌握8255的工作方式及应用编程。2.掌握8255典型应用电路的接法。2、实验要求实验一(1)实验1-1:PC机内中断应用实验①按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象,将屏幕显示结果以截图方式写在实验报告中。②自设计实验。改变接线方式,将单次脉冲连到USB核心板上的IRQ10插孔上,参考本实验代码,编程实现IRQ10中断。(注意:考虑PC机内中断级联的方式,参看前面的原理说明),将代码写在报告中。(2)实验1-2:PC机内中断嵌套实验①按接线图连好接线,调用程序源代码8259-2.asm,做如下操作,并将屏幕显示结果以截图的方式写在实验报告中,并分析产生该现象的原因:A.按下连接IRQ的单次脉冲按键,屏幕上会显示10个3,在屏幕上10次显示未结束之前,按下连接IRQ10的单次脉冲按键,观察现象;B.按下连接IRQ10的单次脉冲按键,屏幕上会显示10个10,在屏幕上10次显示未结束之前,按下连接IRQ3的单次脉冲按键,观察现象。3②程序中所有代码均没有注释,请在报告中补全注释,尽量详细。(3)实验1-3:扩展多中断应用实验说明:本实验采用查询方式,应用实验箱提供的8259中断源,向PC机提交中断请求。拨动开关发起请求一次中断,屏幕上显示相应的中断请求号。调用程序源码文件8259-3.asm,在程序源代码中划横线的位置,请按照所学8259工作原理填写并验证,然后将所填内容写在实验报告中,并分析所填数据的形成原理。实验二(1)实验2-1:计数器应用实验①将计数器0设置为方式3,计数器初值为4,用手动逐个输入单脉冲,用LED灯观察OUT0电平变化。将代码中划横线的部分填上相应的代码,并在实验报告中对所填代码做原理分析。②如果令计数器0工作在方式0,其实验现象有什么不同,在报告中进行分析说明。(2)实验2-2:自设计实验参考实验一的程序和接线,自行设计接线图以及程序代码,实现,以1MHz为时钟源,应用8254的定时功能,将其分频为1Hz。以LED灯作为输出显示。经过实际验证后,在报告中画出接线图,并给出源代码。实验三(1)实验3-1:可编程并行接口8255方式0应用实验编写程序,自行设定A、B、C三个口中某一个口为输入,某一个为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。根据原理补全代码中缺失的部分,根据自己的设计,补全接线图,并将代码和对应的接线图写在实验报告中。(2)实验3-2:自设计试验自行设计完成本实验,要求,8255A口工作在方式一输入,B口工作在方式一输出,利用方式一的控制信号,使数据从输入到输出人为可控。在实验报告中画出接线图,并说明设计的原理,给出对应的程序代码。4二、实验设备(环境)及要求Windows7系统下的HQFC集成开发环境,CZ-CIUS微机接口实验系统。三、实验内容与步骤实验一实验1-1(1)实验内容PC机内中断实验。使用单次脉冲模拟中断产生。验证中断处理程序,在显示器屏幕上显示一行预设定的字符串。(2)主要步骤①按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象。②自设计实验。改变接线方式,将单次脉冲连到USB核心板上的IRQ10插孔上,参考本实验代码,编程实现IRQ10中断。(注意:考虑PC机内中断级联的方式,参看前面的原理说明)。接线图:说明:本实验只需要一根连线,一端接系统总线区的IRQ引脚,一端接到单脉冲单元的引脚上,接线如图1-1所示。参考流程图:5程序源代码:(1);数据段DATASEGMENTMESSDB'TPCAinterrupt!',0DH,0AH,'$';需要显示的数据,以'$'结束,方便系统调用。0DH,0AH为换行DATAENDS;代码段CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,CS;系统调用25是设置中断MOVDS,AXMOVDX,OFFSETINT3;采用间接修改法,设置中断向量MOVAX,250BH;设置IRQ3对应的中断向量,25是系统调用功能;号,在AL里放中断向量号,0B*4=2C,是中断程序的地址所在位置,DS放中断程序的段;基址,DX放偏移地址INT21H;中断设置完成INAL,21H;读中断屏蔽寄存器,21H是该寄存器的端口号ANDAL,0F7H;开放IRQ3中断,允许IRQ3的中断申请OUT21H,AL;写OCW1MOVCX,10;记中断循环次数为10次STI;允许中断发生6WAIT:JMPWAITINT3:MOVAX,DATA;中断服务程序MOVDS,AXMOVDX,OFFSETMESSMOVAH,09;在屏幕上显示每次中断的提示信息,DS:DX中存放显示的字符串的地址INT21HMOVAL,20H;发出EOI结束中断到PC内主片的地址20HOUT20H,ALLOOPNEXT;LOOP每次跳转CX自动减1INAL,21H;读中断屏蔽寄存器,获取中断屏蔽字ORAL,08H;关闭IRQ3中断OUT21H,AL;将中断屏蔽字送到中断屏蔽寄存器STI;置中断标志位MOVAH,4CH;返回DOSINT21HNEXT:IRET;中断返回CODEENDSENDSTART(2)DATASEGMENTMESSDB'TPCAinterrupt!',0DH,0AH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,CSMOVDS,AXMOVDX,OFFSETINT3;采用间接修改法,设置中断向量MOVAX,2572HINT21HINAL,21H;主片ANDAL,0FBH;11111011OUT21H,ALINAL,0A1H;从片ANDAL,0FBH;11111011OUT0A1H,AL7MOVCX,10;记中断循环次数为10次STI;允许中断发生WAIT:JMPWAITINT3:MOVAX,DATA;中断服务程序MOVDS,AXMOVDX,OFFSETMESSMOVAH,09;在屏幕上显示每次中断的提示信息INT21HMOVAL,20H;发出EOI结束中断到PC内主片的地址20HOUT20H,AL;关闭主片OUT0A0H,AL;关闭从片LOOPNEXTINAL,21H;读中断屏蔽寄存器,获取中断屏蔽字ORAL,04H;关闭IRQ3中断OUT21H,AL;将中断屏蔽字送到中断屏蔽寄存器INAL,0A1H;读中断屏蔽寄存器,获取中断屏蔽字ORAL,04H;关闭IRQ10中断OUT0A1H,AL;将中断屏蔽字送到中断屏蔽寄存器STI;置中断标志位MOVAH,4CH;返回DOSINT21HNEXT:IRET;中断返回CODEENDSENDSTART实验1-2(1)实验内容PC机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。(2)主要步骤接线图:8说明:本实验接线图如图1-3所示,从单脉冲单元引出两根导线,一根接到系统总线单元区的IRQ引脚,一根接到USB核心卡的IRQ10端。参考流程图:程序源代码:CODESEGMENTASSUMECS:CODE,DS:DATASTART:.386;告诉汇编器生成intel80386指令集CLI;关中断MOVAX,CS;设置中断向量表INT10MOVDS,AX;将CS段基址给DSMOVDX,OFFSETINT10;int10的偏移地址给DXMOVAX,2572HINT21H;系统调用25号设置中断功能,中断号72H9;设置完成;设置中断向量表INT3MOVDX,OFFSETINT3MOVAX,250BHINT21H;系统调用25号设置中断功能,中断号0BH;设置完成INAL,21HANDAL,0F3H;11110011OUT21H,AL;写OCW1,开放2,3号端口INAL,0A1HANDAL,0FBH;11111011OUT0A1H,AL;写OCW1,开放10号端口MOVCX,10STIWAIT:JMPWAIT;CPU等待中断;INT10代码INT10:CLI;关中断PUSHADPUSHFD;将各种寄存器的值入栈,保存现场MOVCX,10;给CX赋值,循环10次NEXT10_1:MOVDX,31HMOVAH,02HINT21H;系统调用02功能,DL为显示内容ASCII31H:1MOVDX,30HMOVAH,02H;系统调用02功能,DL为显示内容ASCII31H:0INT21HMOVDX,20H;系统调用02功能,DL为显示内容ASCII20H:空格MOVAH,02H10INT21HCALLDELAY1;调用DELAY1子程序LOOPNEXT10_1;在CX0之前跳转,并使CX=CX-1;换行操作MOVDX,0DH;系统调用02功能,DL为显示内容ASCII0DH:归位键MOVAH,02HINT21HMOVDX,0AH;系统调用02功能,DL为显示内容ASCII0AH:换行MOVAH,02HINT21HMOVAL,20HOUT0A0H,ALOUT20H,AL;发送OCW2结束到主片(偶地址为20H)和从片(偶地址为A0H)POPFDPOPAD;将之前入栈的恢复,恢复现场STI;开中断IRET;中断返回;INT3代码INT3:CLI;关中断PUSHAD;将各种寄存器的值入栈,保存现场PUSHFDMOVCX,10;给CX赋值,循环10次NEXT3_1:MOVDX,33H;系统调用02功能,DL为显示内容ASCII33H:3MOVAH,02HINT21HMOVDX,20H;系统调用02功能,DL为显示内容ASCII20H:空格11MOVAH,02HINT21HCALLDELAY1;调用DELAY1子程序LOOPNEXT3_1;在CX0之前跳转,并使CX=CX-1;换行操作MOVDX,0DH;系统调用02功能,DL为显示内容ASCII0DH:归位键MOVAH,02HINT21HMOVDX,0AH;系统调用02功能,DL为显示内容ASCII0AH:换行MOVAH,02HINT21HMOVAL,20HOUT0A0H,ALOUT20H,AL;发送OCW2结束到主片(偶地址为20H)和从片(偶地址为A0H)POPFDPOPAD;将之前入栈的恢复,恢复现场STI;开中断IRET;中断返回DELAY1PROCPUSHAD;将各种寄存器的值入栈,保存现场PUSHFDMOVCX,0FH;给CX赋值,循环15次DELAY_LOOP1:MOVBX,0FFFFH;BX给成FFFFH,每次减一到0跳出循环以此来达到延时的效果12DELAY_LOOP2:DECBXNOPJNZDELAY_LOOP2LOOPDELAY_LOOP1POPFDPOPAD;恢复现场RETDELAY1ENDPCODEENDSENDSTART实验1-3(1)实验内容扩展多中断源查询方式应用实验。利用实验平台上8259控制器作为中断扩展源,编写程序对8259控制器的中断请求进行处理。(2)主要步骤接线图:说明:接线图如图1-5所示,以逻辑电平开关模拟单次脉冲,开关置高电平,代表一次脉冲,8259模块相应管脚分别与系统总线、I/O地址单元和+5V相连。参考流程图:13源程序代码:;*****************************************************************;8259中断查询方式应用实验;请根据所学原理推断横线处需填写的源代码;*******