1、实 验 报 告课程名称 微机原理及应用实验 学生学院 自动化学院 专业班级 14 级物联网 4 班 学 号 3114001569 学生姓名 林思培 指导教师 王春茹 2016 年 11 月 28 日1一. 实验目的1) 掌握 8259 中断控制器的工作原理。2) 掌握 8259 可编程中断控制器的应用编程。3) 学习掌握 8259 级联方式的使用方法。4) 掌握在接口实验单元上构建连接实验电路的方法。二. 实验设备PC 一台,TD-PITE 微机/单片机教学实验装置一套三. 实验内容与步骤1) 实验内容修改图 2-5-2 接线,将 KK2+接到 MIR6。编写程序,实现按一次 KK2+时,显示
2、字符“2013NKL”(用AH=09H,INT 21H 显示),中断 16 次后程序退出。2) 分析参照实验书的实验1.8259A 单中断实验,先对执行IRQ6中断时要产生的动作(显示字符串)这一功能进行编写,然后初始化主片8259A, 开放IR6中断,初始化中断可运行的次数,用CX记录,然后执行一次中断就CX-1,当16次中断完成后,禁止 IR6中断,程序结束。3) 代码DATAS SEGMENTDATA1 DB 2013NKL$ DATAS ENDSSTACKS SEGMENTDW 64 DUP(?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA
3、TAS,SS:STACKSSTART:MOV AX,DATAS ;现用的段地址送 AXMOV DS,AX ;送DS段寄存器PUSH DS ;因为下面需要用到 DS,先把其进栈MOV AX,0000HMOV DS,AXMOV AX,OFFSET IRQ6 ;取中断入口地址MOV SI,0038H ;IR6的中断向量表地址 为38H3BH2MOV SI,AX ;填IRQ6的偏移地址MOV AX,CSMOV SI,003AHMOV SI,AX ;填IRQ6的段地址;初始化主片8259AMOV AL,11HOUT 20H,AL ;写入ICW1MOV AL,08HOUT 21H,AL ;写入ICW2MO
4、V AL,04HOUT 21H,AL ;写入ICW3MOV AL,01HOUT 21H,AL ;写入ICW4IN AL,21HAND AL,0BFHOUT 21H,AL ;开放IR6中断POP DS ;将DS出栈STIMOV CX,0010H ;初始化循环次数CX为16A1:CMP CX,0 ;当CX=0,禁止IR6中断JNZ A2IN AL,21HOR AL,40HOUT 21H,ALA2:NOPJMP A1IRQ6:MOV DX,OFFSET DATA1MOV AH,09H ;显示2013NKLINT 21HDEC CXMOV AL,20HOUT 20H,ALIRETMOV AH,4CHI
5、NT 21HCODES ENDSEND START4) 调试步骤(1)按照图 2-5-2 连接实验线路 3(2)输入程序并检查无误,经汇编、连接后装入系统。(3)在输出区选择“调试”方式,用 G=(CS): 0000 回车运行程序。(4)重复按 KK2 微动开关,显示屏上应用“2013NKL”来响应,直到按 16 次后,程序退出。四. 实验的结果及分析每按一次,屏幕显示“2013NKL”,按了 16 次后,程序结束。运行正确。五. 实验总结本次实验中,刚开始很多同学都出显示乱码问题,后来经过老师的检查后,发现了我们的代码中都有一个相同的错误,是因为我们都是从实验代码中进行更改出来的代码,而实验代码中是没有用到数据段的,而我的代码中是存在数据段的,该数据段存放的是 DATA1 DB 2013NKL$ ,所以我忘了在代码段开始时加入下面这两行。MOV AX,DATAS ;现用的段地址送AXMOV DS,AX ;送DS段寄存器所以会出现很多其他不符合的信息,当加上这两行后,因为下面要用到 DS,所以要先把目前 DS 的内容送进栈保存。