实验五 基本IO扩展与8259中断实验.docx
- 文档编号:4077164
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:19
- 大小:149.40KB
实验五 基本IO扩展与8259中断实验.docx
《实验五 基本IO扩展与8259中断实验.docx》由会员分享,可在线阅读,更多相关《实验五 基本IO扩展与8259中断实验.docx(19页珍藏版)》请在冰豆网上搜索。
实验五基本IO扩展与8259中断实验
一、实验目的
1.了解TTL芯片扩展简单I/O口的方法;
2.掌握数据输入输出程序编制的方法。
3.掌握8259A中断控制器的工作原理;
4.掌握8259A可编程中断控制器的应用编程。
二、实验设备
1.PC机一台
2.QTH-8086B16位微机教学实验仪一套
三、实验说明
1.74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
2.8259A中断控制器
中断控制是微机系统的主要管理方式之一,也是处理器与外设之间通信的最有效方法之一。
它可
74LS273是一种8D触发器,当CLR为高电平且CLK端电平正跳变时,D0——D7端数据被锁存到8D触发器中。
以减少系统为反复查询外部设备状态而消耗的时间,提高了系统的整体运行效率。
在现代16位微机
系统中,系统的中断有两类:
软件中断和硬件中断。
硬件中断可以实现微机系统对外设的管理,由
8259中断控制器来完成。
(1)8259控制器的介绍
中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。
它将中断源优先级排队、
辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,
就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。
同时,
在不需增加其它电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。
它的管
理功能包括:
①记录各级中断源请求,②判别优先级,确定是否响应和响应哪一级中断,③响应中断
时,向CPU传送中断类型号。
8259A的内部结构和引脚如图3-2-1所示。
8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。
8259A的编程就是根据应用
需要将初始化命令字ICW1~ICW4和操作命令字OCW1~OCW3分别写入初始化命令寄存器组和操作命令寄
存器组。
ICW1-ICW4各命令字格式如图3-2-2所示,OCW1-OCW3各命令字格式如图3-2-3所示,其中
OCW1用于设置中断屏蔽操作字,OCW2用语设置优先级循环方式和中断结束方式的操作命令字,OCW3
用语设置和撤消特殊屏蔽方式,设置中断查询方式以及设置对8259内部寄存器的读出命令。
10
QTH-*086B实验系统说明书
图28259内部结构和引脚图
A0
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
*
1
LTIM
ADI
S*GL
I*4
8086/88不用
8*86/88不用
特征位
0:
边沿触发
无效
0:
单片使用
0:
不需要ICW4
1:
电平触发
1:
多片级联
图3(a)ICW1格式
A0
D7
*6
D5
D4
D3
D*
*1
D0
1
中断类型高5位
8086/88不用
图3(b)ICW2格式
A0
D7
D6
*5
**
D3
*2
D1
D0
1
S*
*6
S5
*4
S*
S*
*1
S0
主片
A0
D7
D*
D5
D4
D*
D2
D1
D0
1
不可用
*D2
ID1
ID0
从片
图3(c)*CW3格式
A0
D*
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
SFN*
B*F
*/S
AEOI
UPM
图3(d)ICW4格式
11
QTH-808*B实验系统说明书
图48259命令字格式
(2)8259寄存器及命令的控制访问
在硬件系统中,8259仅占用两个外设接口地址,在片选有效的情况下,利用A0来寻址不同的寄
存器和命令字。
对寄存器和命令字的访问控制如表3-1所示。
表3-18259寄存器及命令的访问控制
A0
D4
D3
读信号
写信号
片选
操作
0
*
1
0
读出*SR,IR*的内容
1
0
1
0
读出IMR的内容
*
0
0
1
0
0
写入OCW*
0
0
1
1
0
0
写入*CW3
0
1
X
1
0
0
写入ICW1
1
X
X
1
0
0
写入OCW1,ICW2,ICW3,I**4
(3)PC微机系统中8259A的应用
在现代PC微机系统中,系统中包含了两片82*9A中断控制器,经级连可以管理16级硬件中断,
其中部分中断源已经被系统硬件占用,具体使用情况如表3-2示。
两片8259A的端口地址为:
主片
在020H-03FH,实际使用020H和021H两个端口;从片在0A0H-0BFH范围,实际使用0A0H和0A1H两
个端口。
*2
QTH-8086B实验系统说明书
表3-2PC微机系统中的硬件中断
中断源
功能
中断向量号
中断源
功能
中断向量号
主8259AIRQ0
定时中断
08*
主8259AIR*8
实时钟
*0H
主8259AIRQ1
键盘中断
09H
主825*AIRQ9
保留
7*H
主*259AIRQ2
接从8259A
0AH
主8259A*RQ1*
保留
72H
主8259AI*Q3
*OM2
0BH
主825*AIRQ11
保留
73H
主*259AIR*4
*OM*
*CH
主8*5*A**Q12
保留
74H
主*259*I**5
硬盘/并口2中断
0*H
主82*9*IRQ1*
写处理中断
75H
主8*59AIRQ6
软盘
0E*
主8**9AIRQ1*
硬盘控制器
76H
主82*9AIRQ7
打印机
**H
主*259AIRQ15
保留
*7H
四、实验原理图
图17LS244与74LS273扩展I/O口原理图
五、实验内容
1.利用74LS244作为输入口,读取开关状态,并将此状态通过74LS27*驱动发光二极管显示出来。
2.用脉冲作为中断源,编写一实验程序,完成按键中断的响应,每产生一次按键中断,中断次数加1。
通过并行接口芯片8255,将中断号和中断次数分别从8255的A口和B口送两排8个LED灯分别显示出来,拨动开关KN09观察数码管的变化;改变中断输入,观察显示变化。
六、实验步骤
1.基本I/O扩展
(1)实验连线:
244的CS——MCU主模块的地址A15,Y7~Y0——开关K01—K08。
273的CS——MCU主模块的地址A14,Q7~Q0——发光二极管L1—L8。
该模块的WR、RD分别连到MCU主模块的WR、RD。
该模块的数据(AD0~AD7)连到MCU主模块的数据(AD0~AD7)。
(2)运行程序:
IO.ASM
(3)拨动开关,观察发光二极管的变化
2.8259中断实验
(1)实验连线:
⏹8259模块选通线CS连到MCU主模块的地址A14。
⏹8259模块的WR、RD分别连到MCU主模块的WR、RD。
⏹8259模块的数据(AD0~AD7)、地址线(A0~A7)分别连到MCU主模块的数据(AD0~AD7)、地址线(A0~A7)。
⏹8259模块的INTA接MCU主模块的的INTA,INT接MCU主模块的INTR,IRx(指IR0~IR7中的任一个)接信号源模块的1H。
⏹8255模块的WR、RD分别连到MCU主模块的WR、RD。
⏹8255模块的数据(AD0~AD7)、地址线(A0~A7)分别连到MCU主模块的数据(AD0~AD7)、地址线(A0~A7)。
⏹8255模块选通线CE连到MCU主模块的地址A15。
⏹8255模块的A口PA0-PA7接发光二极管L9—L16;B口PB0~PB7接发光二极管L1—L8。
(2)运行程序:
INTR.ASM。
7、实验结果
1.基本I/O扩展
源程序:
1.IO.ASM
LS244EQU7000H;设置LS244的端口地址为7000H
LS273EQU0B000H;设置LS273的端口地址为0B000H
datasegment;数据段开始
adb20dup(0);定义A为20个初始化为0的空间
dataends;数据段结束
stacksegmentstack;堆栈段开始
db100dup(0);开辟100个空间给堆栈段
stackends;堆栈段结束
codesegment;代码段开始
assumecs:
code,ss:
stack,ds:
data
ORG0100H;定义代码段起始偏移量
MAIN:
movAX,data;将DATA首地址赋值给AX
movds,ax;定义DS首地址为AX
movax,stack;将STACK首地址赋值给AX
movss,ax;定义SS首地址为AX
MOVSP,9000H;定义堆栈指针为9000H
MOVDX,LS244;读取开关状态
INAL,DX;将结果存入AL中
MOVDX,LS273;将端口存入DX中
OUTDX,AL;送LED显示
JMPMAIN;无条件跳转到MAIN
codeends;代码段结束
endMAIN;主程序结束
汇编代码
AX
DX
IP
MOVDX,LS244
0078H
4000H
0103H
INAL,DX
0087H
4000H
0104H
NOTAL
0078H
4000H
0106H
MOVDX,LS273
0078H
8000H
0109H
OUTDX,AL
0000H
8000H
010AH
JNPSTART
0000H
8000H
010DH
其余没有发生改变的参数为BX=0,CX=0,SP=FE50,FR=F002,
改变端口地址为LS244:
0111111111111111B
LS273:
1011111111111111B
在执行指令MOVDX,LS273后DX由7FFF变为BFFF
若LS244:
0111111111111111B
LS273:
1011111111111111B
则DX由6AAA变为AAAA
说明改变端口地址会使DX的值发生改变,这是由于指令中用了DX寄存器来存放端口地址。
2.8259中断实验
在流水灯的实验中加入了读取开关状态的程序,使得程序能先在一段时间内先控制开关的亮灭,在开始流水灯。
程序如下:
A82590EQU0B000H;设置A82590的端口地址为0B000H
A82591EQU0B001H;设置A82591的端口地址为0B001H
A8255EQU7000H;设置A8255的端口地址为7000H
B8255EQU7001H;设置B8255的端口地址为7001H
C8255EQU7002H;设置C8255的端口地址为7002H
D8255EQU7003H;设置D8255的端口地址为7003H
DATASEGMENT;数据段开始
NUMDB?
;声明字节变量NUM
TIMESDB0;定义字变量TIMES为0
DATAENDS;数据段结束
STACKSEGMENTSTACK;堆栈段开始
DB40DUP(0);开辟40个堆栈空间
STK_TPDB0;初始化堆栈指针为0
STACKENDS;堆栈段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
ORG0100h;定义代码段起始偏移量
MAIN:
MOVAX,DATA;将DATA首地址赋值给AX
MOVDS,AX;定义DS首地址为AX
MOVAX,STACK;将STACK首地址赋值给AX
MOVSS,AX;定义SS首地址为AX
LEASP,STK_TP;将堆栈指针指向STK_TP
MOVDX,D8255;在DX中存入8255的控制口的端口地址
MOVAL,80H;给AL赋值80H
OUTDX,AL;输出AL到DX指代的端口地址
MOVAL,0FFH;;给AL赋值0FFH
movdx,A8255;在DX中存入8255的A口的端口地址
outdx,al;输出AL到DX指代的端口地址
MOVAL,0FFH;给AL赋值0FFH
movdx,B8255;在DX中存入8255的B口的端口地址
outdx,al;输出AL到DX指代的端口地址
MOVDX,A82590;A0=0,8259A地址送入DX
MOVAL,00010011B;ICW1为13H,上升沿触发,单片使用,要写ICW4
OUTDX,AL;输出AL到DX指代的端口
MOVDX,A82591;A0=1,8259A地址送入DX
MOVAL,01001000B;ICW2为48H,提供中断类型号初始值
OUTDX,AL;输出AL到DX指代的端口
MOVAL,00000011B;ICW4,非缓冲方式,自动EOI,一般完全嵌套
OUTDX,AL;输出AL到DX指代的端口
MOVDX,A82590;A0=0,8259A地址送入DX
MOVAL,00001010B;OCW3下一个读指令读出中断号
OUTDX,AL;输出AL到DX指代的端口
NOP;静止一个指令周期
NEXT:
INAL,DX;从DX的端口中读取数据至AL
CMPAL,00H;比较AL与00H
JZNEXT;如果相等就跳转NEXT
INCTIMES;TIMES自增1
MOVCL,0FFH;给CL赋值0FFH
NEXT1:
INCCL;CL自增
SHRAL,1;AL逻辑左移1
JNCNEXT1;NEXT1自增1
MOVNUM,CL;给NUM赋值CL
MOVAL,CL;给AL赋值CL
MOVAH,00H;给AH赋值00H
ADDAL,48H;AL加上48H
MOVCX,0004H;给CX赋值0004H
MULCX;AX乘上CX,结果存入DX:
AX中
MOVBX,AX;IRQ0--48H*4+0=0120中断
MOVAX,OFFSETIIRQ;中断入口地址偏移量
MOV[BX],AX;给BX为偏移量的数据段中的空间赋值AX
INCBX;BX自增
INCBX;BX自增
MOVAX,SEGIIRQ;将SEGIIRQ赋值给AX
MOV[BX],Ax;给BX为偏移量的数据段中的空间赋值AX
MOVDX,A82590;A0=0,8259A地址送入DX
MAIN1:
STI;开中断
JmpMAIN1;无条件跳转到MAIN1
HLT;结束
IIRQPROC;子程序开始
PUSHDX;将DX推入堆栈
INCTIMES;TIMES自增
MOVAL,TIMES;中断次数
NOTAL;对AL取非
movdx,B8255;将DX指向8255的B口
outdx,al;向8255的B口输入AL
MOVAL,NUM;中断号
NOTAL;对AL取非
movdx,A8255;将DX指向8255的A口
outdx,al;向8255的A口输入AL
INCCX;CX自增
MOVDX,A82590;A0=0,8259A地址送入DX
MOVAL,20H;给AL赋值20H
OUTDX,AL;将AX中的值输入DX指向的端口中
CLI;关中断
POPDX;将DX推出堆栈
IRET;子程序返回中断
IIRQENDP;子程序结束
CODEENDS;代码段结束
ENDMAIN;主程序结束
8、实验总结
了解了TTL芯片扩展简单I/O口的方法,基本掌握数据输入输出程序编制的方法,通过实际操作LED灯的改变来了解其工作的原理。
通过自己亲自连线,在熟悉工作原理的过程中也锻炼了自己的动手能力。
经过本次的实验了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。
导教师批阅意见:
成绩评定:
预习
(20分)
操作及记录
(40分)
数据处理
20分
结果与讨论10分
思考题
10分
总分
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
深圳大学实验报告
课程名称:
微机原理及应用实验
实验名称:
基本IO口扩展与8259中断实验
学院:
物理科学与技术学院
专业:
应用物理指导教师:
李雄军
报告人:
吴勇学号:
2010180014班级:
应用物理
实验时间:
2013年12月26日
实验报告提交时间:
2014年1月2日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验五 基本IO扩展与8259中断实验 实验 基本 IO 扩展 8259 中断