微机原理实验5.docx | 您所在的位置:网站首页 › 乐高收藏展示 › 微机原理实验5.docx |
微机原理实验5.docx 《微机原理实验5.docx》由会员分享,可在线阅读,更多相关《微机原理实验5.docx(31页珍藏版)》请在冰豆网上搜索。 微机原理实验5 实验五中断特性及8259应用编程实验 实验目的: 1、认识TDN86/51系统的中断特性。 2、掌握8259中断控制器的工作原理。 3、 ICW1 ICW2 级联方式? 要ICW4? ICW4 芯片就绪,接受中断请求 ICW3 Y Y N N 掌握8259可编程中断控制器的应用编程。 4、学习掌握8259级联方式的使用方法。 5、学习在接口实验单元上连接实验电路的方法 相关理论知识: 1、8259A可编程中断控制器 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片,它将中断源优先级排队、判别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A编程就可以管理8级外部中断,并可以选择优先模式和中断请求方式。 8259A的编程,就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。 命令字 D7 D6 D5 D4 D3 D2 D1 D0 设定值 入口 地址 ICW1 0 0 0 1 1: 电平触发 0: 边沿触发 0 1: 单片 0: 多片 1: 有ICW4 0: 无ICW4 13H 20H ICW2 中断向量地址T7~T3位 0 0 0 08H 21H ICW3(主) 1: IRQi线上有级联从片 0: 无级联从片 — 21H ICW3(从) 不用 与主片对应的从片识别码,从000~111 — — ICW4 不用 1: 特殊嵌套 0: 一般嵌套 1: 缓冲 0: 非缓冲 1: 主片 0: 从片 1: 自动EOI 0: 正常EOI 1 0DH 21H 操作命令字OCW1~OCW3可根据需要随时进行设置,其命令字格式如下: 命令字 D7 D6 D5 D4 D3 D2 D1 D0 入口 地址 OCW1 1: 置中断屏蔽位,0: 清除中断屏蔽位 21H OCW2 R SL EOI 0 0 L2 L1 L0 20H OCW3 0 00和01: 无意义 10: 撤销特殊屏蔽 11: 设定特殊屏蔽 0 1 P: 查询命令 00和01: 无意义 10: 读IRR 11: 读ISR 20H 其中对于OCW2命令字具体意义如下: 1L2~L0: 对应IRi的编码,取值从000~111 2R、SI、EOI组合编码 001 常规EOI命令 中断结束 011 特殊EOI命令 101 在常规EOI时循环 自动循环 100 在自动EOI时循环(置位) 000 在自动EOI时循环(复位) 111 在特殊EOI时循环 特殊循环 110 置优先权命令 010 无操作
2、系统中的8259A芯片 系统中的8259A芯片工作于单片方式,但可由用户扩展接成级联方式,线路如下所示。 图中的圈点表示此为排针形式引出脚。 8088 XD0 XD1 XD2 XD3 XD4 XD5 XD6 XD7
IOY1 XIOR XIOW XA0 INTR INAQS1 D0IR0 D1IR1 D2IR2 D3IR2 D4IR2 D5IR2 D6IR2 D78259IR7 INT INTASP/EN CS RDCAS0 WRCAS1 A0CAS2 IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7
CAS0 CAS1 CAS2 INTA +5V 系统启动时,8259A被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW来实现的。 系统初始化时,规定0#和4#中断源分别提供给实时时钟和与PC微机联机的串口通信使用,用户可以使用其余中断源。 在进入监控后,只有4#中断源处于开启状态,其他中断源都被屏蔽了。 中断矢量地址和中断号之间的关系如下表: 中断序号 0 1 2 3 4 5 6 7 功能调用 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 矢量地址 20H - 23H 24H - 27H 28H - 2BH 2CH - 2FH 30H - 33H 34H - 37H 38H - 3BH 3CH - 3FH 说明 时钟 可用 可用 串口2 串口1 可用 可用 可用 3、接口实验单元中的R-S触发器电路 7400 +5V kk1+ kk1- kk1 1k KK2- KK2+ KK1- KK1+ 8259A IRQ7 图R-S触发器图实验 (1)线路 实验内容: 一、8259应用实验 (1) 按上右图所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。 主程序 修改IRQ7中断矢量 CX=00AH CX=0? 开中断 屏蔽IRQ7 开中断 停机 Y N 显示“7” CX=CX-1 关中断 返回 IRQ7中断服务处理 修正IMR,使IRQ7中断允许 STACKSEGMENTSTACK DW64DUP(? ) STACKENDS CODESEGMENT ASSUMECS: CODE,SS: STACK START: PUSHDS MOVAX,0000H MOVDS,AX;数据段段寄存器清零 MOVAX,OFFSETIRQ7;取中断服务程序入口地址(相对地址) ADDAX,2000H;加装载时IP地址(绝对地址) MOVSI,003CH;填8259中断7中断矢量 MOV[SI],AX;填偏移地址 MOVAX,0000H MOVSI,003EH MOV[SI],AX;填段地址 CLI;关中断 POPDS INAL,21H;读8259中断屏蔽字 ANDAL,7FH;开8259中断7 OUT21H,AL MOVCX,000AH;设置中断次数 A1: CMPCX,0000H JNZA2 INAL,21H;读8259中断屏蔽字 ORAL,80H;关8259中断7 OUT21H,AL STI HLT A2: STI JMPA1 IRQ7: MOVAH,01H;中断服务程序入口 MOVAL,37H INT10H MOVAL,20H;“空格” INT10H DECCX MOVAL,20H OUT20H,AL;结束中断命令 CLI IRET CODEENDS ENDSTART 实验步骤: (1)按图连接试验线路,检查无误后打开实验箱电源。 (2)输入程序并检查无误,经汇编、连接后通过调试窗口装入系统0000: 2000处。 (3)G=0000: 2000运行程序。 (4)重复按KK2微动开关,观察显示屏上显示结果。
二、8259应用实验 (2) KK2- KK2+ KK1- KK1+ 8259A IRQ7 IRQ6 编写程序实现: ⏹当无中断请求时,执行主程序,延时显示“main”,每显示一个空一格; ⏹若有中断请求,则执行其中断服务程序,显示对应中断号“6”或“7”; ⏹若正在执行较低级的中断服务程序,则允许比它优先级高的中断被相应(IRQ6>IRQ7)。 实验程序如下: STACKSEGMENTSTACK DW64DUP(? ) STACKENDS DATASEGMENT TABLEDB4DH,41H,49H,4EH,20H,00H DATAENDS CODESEGMENT ASSUMECS: CODE,SS: STACK START: MOVAX,DATA MOVDS,AX PUSHDS MOVAX,0000H MOVDS,AX MOVAX,OFFSETIRQ6;取中断服务程序入口地址 ADDAX,2000H MOVSI,0038H;填8259中断6中断矢量 MOV[SI],AX MOVAX,0000H MOVSI,003AH MOV[SI],AX MOVAX,OFFSETIRQ7;取中断服务程序入口地址 ADDAX,2000H MOVSI,003CH;填8259中断7中断矢量 MOV[SI],AX MOVAX,0000H MOVSI,003EH MOV[SI],AX POPDS MOVAL,13H;初始化ICW1 OUT20H,AL MOVAL,08H;初始化ICW2 OUT21H,AL MOVAL,09H;初始化ICW4 OUT21H,AL MOVAL,3DH;配置OCW1 OUT21H,AL STI A1: MOVCX,0007H MOVAL,0DH MOVAH,01H INT10H;显示回车 A2: MOVAH,06H MOVBX,OFFSETTABLE INT10H;显示main CALLDALLY LOOPA2;循环显示main JMPA1 IRQ6: STI;开中断 CALLDALLY MOVAL,36H MOVAH,01H INT10H;显示6 MOVAL,20H OUT20H,AL IRET IRQ7: STI;开中断 CALLDALLY MOVAL,37H MOVAH,01H INT10H;显示7 MOVAL,20H OUT20H,AL IRET DALLY: PUSHCX;出栈CX PUSHAX MOVCX,0040H A3: MOVAX,056CH A4: DECAX JNEA4 LOOPA3 POPAX POPCX RET CODEENDS ENDSTART 实验步骤: (1)画出以上程序流程图,并在程序后面填写相应注释。 Begin
把IRQ6的服务程序的地址,填入中断向量表中
把IRQ7的服务程序的地址,填入中断向量表中
初始化8259相关的寄存器(ICW1,ICW2,ICW3,ICW4)
开始程序,显示字符“main“
中断请求 无中断请求 有请求 等待 执行中断服务程序,显示“6“或”7“
执行完成
延时
完成
(2)按图连接实验电路,检查无误后打开实验箱电源。 (3)输入程序并检查无误,经汇编、连接后装入系统。 (4)G=0000: 2000运行实验程序,记录运行结果: 1没有按键时: 延时显示MAIN,每显示一个空一格 2单独按下KK1或KK2时: 按下KK1显示6,接着延时显示MAIN,每显示一个空一格 按下KK2显示7,接着延时显示MAIN,每显示一个空一格 3先按下KK1再按下KK2时: 延时显示6,接着延时显示MAIN, 4先按下KK2再按下KK1时: 延时显示67,接着延时显示MAIN 分析结果: 实验小结: 实验5主要是中断实验,通过这次实验: 1、掌握了8259A的工作原理; 2、掌握了编写中断服务程序的方法; 3、掌握了初始化中断向量的方法。 教师评语: 实验六8253定时/计数器应用实验 实验目的: 1、熟悉定时/计数器在系统中的典型接法。 2、掌握定时/计数器的工作方式及应用编程 相关理论知识: 一、8253可编程定时/计数器介绍 8253可编程定时/计数器是Intel公司生产的通用外围芯片之一。 它有3个独立的十六位计数器,计数频率范围为0-2MHz,所有计数方式和操作方式都通过编程进行控制。 1、8253的功能 在实际应用当中,8253可以在不同场合实现以下功能: 延时终端、可编程频率发生器、事件计数器、分频器、实时时钟、数字单稳、复杂的电机控制器。 2、8253的工作方式 方式0 计数结束产生中断 方式1 可重触发的单稳触发器 方式2 分频器 方式3 方波频率发生器 方式4 软件触发的选通信号 方式5 硬件触发的选通信号 3、8253的内部结构及引脚 4、8253的控制字格式
5、8253的初始化编程 送控制字到控制端口 (43H) 送计数初值到计数器端口 (40H、41H、42H) 系统总线 IOY2 XIOR XIOW XA0 XA1 +5V +5V 8259-IRQ0 OPCLK 8251-TXCLK 1.8432MHz +5V XD0 XD1 XD2 XD3 XD4 XD5 XD6 XD7 二、系统中的8253芯片 系统中装有一片8253芯片,线路如上右图所示: 实验内容: 一、计数中断实验 8253的通道2工作于方式0,用于事件计数,当计数5次时,向8259A发出中断请求信号,显示“M”,实验线路如图所示: KK1
8253 计数/定时器 +5V GATE2 CLK2 OUT2
8259 中断控制器 IRQ7 STACKSEGMENTSTACK DW64DUP(? ) STACKENDS CODESEGMENT ASSUMECS: CODE,SS: STACK START: INAL,21H ANDAL,7FH;OCW1,开IRQ7中断 OUT21H,AL MOVAL,90H OUT43h,AL;设置8253控制字 A1: MOVAL,5H OUT42h,AL;设置计数初值 HLT STI;开外部中断(cpu) JMPA1 MOVAX,014DH;中断服务子程序 INT10H MOVAX,0120H INT10H MOVAL,20H;OCW2,常规EOI命令 OUT20H,AL IRET CODEENDS ENDSTART (1)关闭电源,按图接线,接通电源。 (2)输入程序并检查无误,经汇编、连接后装入系统。 (3)用U2000命令查看“MOVAX,014DH”指令的偏移地址为2012。 (4)在0000: 003CH单元填入中断矢量,即0000: 003C12200000。 (5)运行程序,并按动KK1键,在按动5次后,屏幕上显示一个“M”,这是因为当计数超过5的时候,就会产生中断,然后运行中断程序: 显示“M“。 二、定时中断实验 利用8253的通道0工作于方式2来产生定时中断(IRQ0),循环显示“0”-“9”十个数,系统默认线路如下。 1.19MHz
8253 计数/定时器 +5V GATE0 CLK0 OUT0
8259 中断控制器 IRQ0 STACKSEGMENTSTACK DW64DUP(? ) STACKENDS CODESEGMENT ASSUMECS: CODE,SS: STACK START: PUSHDS MOVAX,0000H MOVDS,AX MOVAX,OFFSETIRQ0 ADDAX,2000H MOVSI,0020H;填中断矢量表中的IP MOV[SI],AX MOVAX,0000H MOVSI,0021H;填中断矢量表中的CS MOV[SI],AX POPDS MOVAL,FEh;OCW1,开IRQ0中断 OUT21H,AL MOVAL,1Dh;设置8253控制字 OUT43H,AL MOVAL,0FFH;设置8253计数初值低8位 OUT40H,AL MOVDL,30H;设置起始字符‘0’ A1: STI JMPA1;等待中断 IRQ0: MOVAH,01H;中断服务子程序 MOVAL,DL CMPAL,3AH;字符9,比较 JNZA2;未完毕时转A2继续显示 MOVAL,0DH;显示完毕后换行 INT10H MOVAL,30H;重新设置起始字符 A2: INT10H INCAX MOVDL,AL MOVAX,0120H INT10H CALLDALLY MOVAL,20H;OCW2,常规EOI命令 OUT20H,AL IRET DALLY: MOVCX,0100H;延时 A3: MOVBX,0560H A4: DECBX JNZA4 LOOPA3 RET CODEENDS ENDSTART (1)输入程序并检查无误,经汇编、连接后装入系统。 (2)运行程序,显示屏上出现现象为0123456789。 (3)修改8253的时常数为0FH,再运行程序,显示速度明显变快。 三、电子发声实验 系统的OPCLK(1.1625MHz)作为音乐节拍,从表格TABLE中查出每个音符对应的时常数送给计数器2(工作在方式3: 方波频率发生器),以确定音调,驱动扬声器产生音乐,实验线路图如下: OPCLK 1.1625MHz
8253 计数/定时器 +5V GATE2 CLK2 OUT2
SPKUNIT SPK 注意: SPK接线要在装入程序并运行后进行。 STACKSEGMENTSTACK DW64DUP(? ) STACKENDS DATASEGMENT TABLEDB33H,33H,3DH,33H,26H,26H,26H,26H,2DH,2DH,26H,2DH,33H DB33H,33H,33H,33H,33H,4DH,45H,3DH,3DH,3DH,45H,4DH,45H DB45H,45H,45H,45H,45H,45H,45H,33H,33H,3DH,33H,26H,26H DB26H,28H,2DH,2DH,26H,26H,33H,33H,33H,33H,45H,3DH,39H DB39H,39H,52H,4DH,4DH,4DH,4DH,4DH,4DH,4DH,4DH,2DH,2DH DB26H,26H,26H,26H,26H,26H,28H,28H,2DH,28H,26H,26H,26H DB26H,2DH,28H,26H,2DH,2DH,33H,3DH,4DH,45H,45H,45H,45H DB45H,45H,45H,45H,33H,33H,3DH,33H,26H,26H,26H,28H,2DH DB2DH,26H,2DH,33H,33H,33H,33H,33H,33H,45H,3DH,39H,39H DB39H,52H,4DH,4DH,4DH,4DH,4DH,4DH,4DH,4DH,00H DATAENDS CODESEGMENT ASSUMECS: CODE,SS: STACK,DS: DATA START: MOVAX,DATA MOVDS,AX MOVBX,OFFSETTABLE MOVAL,[BX] MOVAH,00H A1: MOVDL,25H;时常数*25H作为计数值保存于AX中 MULDL;发音频率=1.1625MHz/37=314Hz PUSHAX MOVAL,B7;计数器2,方式3,写16位BCD初值 OUT43H,AL POPAX OUT42H,AL;设置低八位计数初值 MOVAL,AH OUT42H,AL;设置高八位计数初值 INCBX MOVAH,00H MOVAL,[BX];取下一个时常数 TESTAL,0FFH;测试是否为最后一个00H JZA3 MOVCX,77FFH;延时播放当前音符 A2: PUSHAX POPAX LOOPA2 JMPA1;转A1播放下一个音符 A3: MOVBX,OFFSETTABLE;取第一个时常数,重新播放 MOVAL,[BX] MOVAH,00H JMPA1 CODEENDS ENDSTART (1)关闭电源,按图接线,检查无误后打开电源。 (2)输入程序并检查无误,经汇编、连接后装入系统。 (3)运行程序,注意听扬声器发出的音乐声。
思考题: 1、在将计数初值赋给8253后,马上就可以启动并进行定时或计数吗? 答: 不会马上就可以启动并进行定时
2、假设8253的通道1输入时钟频率为2MHz,现在需要使用其作为分频器,输出62.5KHz频率的时钟,则应设置计数初值(分频系数)为多少? 应采用哪种工作方式? 请写出初始化程序。 MOVAL,57H OUT27H,AL MOVAL,32H OUT25H,AL
实验小结: 通过本次实验,熟悉了8253定时器/计数 |
CopyRight 2018-2019 实验室设备网 版权所有 |