微机原理实验5.docx
《微机原理实验5.docx》由会员分享,可在线阅读,更多相关《微机原理实验5.docx(31页珍藏版)》请在冰豆网上搜索。
![微机原理实验5.docx](https://file1.bdocx.com/fileroot1/2023-1/11/5ee26fa9-bb9a-4ec2-b6df-c989645f9062/5ee26fa9-bb9a-4ec2-b6df-c989645f90621.gif)
微机原理实验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定时器/计数