微机原理实验5汇编.docx
《微机原理实验5汇编.docx》由会员分享,可在线阅读,更多相关《微机原理实验5汇编.docx(31页珍藏版)》请在冰豆网上搜索。
![微机原理实验5汇编.docx](https://file1.bdocx.com/fileroot1/2023-7/9/c006a7b6-7d60-4dfa-b443-a39df6b61b65/c006a7b6-7d60-4dfa-b443-a39df6b61b651.gif)
微机原理实验5汇编
实验五中断特性及8259应用编程实验
实验目的:
1、认识TDN86/51系统的中断特性。
2、掌握8259中断控制器的工作原理。
3、
掌握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芯片工作于单片方式,但可由用户扩展接成级联方式,线路如下所示。
图中的圈点表示此为排针形式引出脚。
系统启动时,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触发器电路
图R-S触发器图实验
(1)线路
实验内容:
一、8259应用实验
(1)
按上右图所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。
主程序
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)
编写程序实现:
⏹当无中断请求时,执行主程序,延时显示“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)画出以上程序流程图,并在程序后面填写相应注释。
(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的初始化编程
二、系统中的8253芯片
系统中装有一片8253芯片,线路如上右图所示:
实验内容:
一、计数中断实验
8253的通道2工作于方式0,用于事件计数,当计数5次时,向8259A发出中断请求信号,显示“M”,实验线路如图所示:
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”十个数,系统默认线路如下。
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:
方波频率发生器),以确定音调,驱动扬声器产生音乐,实验线路图如下:
注意:
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定时器/计数器的内部工作原理,透彻理解了8253的方式控制字,状态字等功能的实现原理,这是本次实验最大的收获!
并且,掌握了对8253的初始化以及运行的过程。
锻炼。
本次实验比较成功,获益匪浅
教师评语:
实验七8255并行接口实验
实验目的:
1、学习并掌握8255的各种工作方式及其应用。
2、学习在系统接口实验单元上构造实验电路。
相关理论知识:
一、8255可编程并行接口芯片介绍
8255是Intel公司生产的通用并行IO接口芯片,它具有ABC三个并行接口,能在以下三种方式下工作:
方式0:
基本输入/输出方式
方式1:
选通输入/输出方式
方式2:
双向选通工作方式
8255工作方式控制字及C口置位/复位控制字如下图所示:
其中:
数据传送方向0—输出,1—输入
二、系统中的8255芯片
8255的数据线、片选信号线、地址线、读写控制线等分别与系统总线相连,其ABC三个端口以排针形式引出,供8255实验使用,其线路如图所示,端口地址为60H~63H。
实验内容及实验步骤:
一、8255接口应用实验
(1)
按图所示实验线路编写程序,使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。
用一组开关信号接入端口B,端口A输出线接至一组发光二极管上,然后通过对8255芯片编程来实现输入/输出功能。
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVAL,82H
OUT63h,AL
A1:
INAL,61H
OUT60H,AL
JMPA1
CODEENDS
ENDSTART
实验步骤:
(1)按图接线,接通电源。
(2)输入程序并检查无误,经汇编、连接后装入系统。
(3)运行程序,拨动开关组,观察发光二极管与开关组状态的对应关系。
(4)修改程序,实现以下功能应增加什么指令:
1发光状态与开关组状态相反:
NOTAL
2高4位与低4位状态相反:
MOVCL,4RCRAL,CL
二、8255接口应用实验
(2)
按图所示实验线路编写程序,使8255端口A工作在方式0并作为输出口。
利用KK1+触发系统的IRQ7中断,进入中断服务后,利用8255的A口输出中断计数状态给LED灯显示,中断10次关闭中断IRQ7并返回系统。
STACKSEGMEN