微机原理与汇编语言 实
姓 名 课程名称 实验名称 xxx 学 号 验
xxxxxx 报告
专业班级 实验日期 成 绩 计科x班 2014.11.25 微机原理与汇编语言 8259中断控制器实验 一、实验目的 1、掌握8259A的工作原理。 2、掌握编写中断服务程序方法。 3、掌握初始化中断向量的方法。 二、实验内容 1、实验原理
本实验用到三部分电路:电平开关电路、简单I/O口扩展电路和8259中断控制器电路。
电平开关电路
简单io扩展电路
1
8259中断控制器电路
1)电平开关电路
开关量输入电路由8只开关组成,每只开关有两个位置H和L,一个位置代表高电平,一个位置代表低电平。对应的插孔是:K1~K8。
2)扩展输出口
扩展输出接口由74LS273构成,74LS273的输出信号由插孔O0~O7输出,插孔CS273是其选通信号,其它信号线已接好。 3)8259中断控制电路
CS8259是8259芯片的片选插孔,IR0~IR7是8259的中断申请输入插孔。DDBUS是系统8位数据总线。INT插孔是8259向8086CPU的中断申请线,INTA是8086的中断应答信号。 2、实验步骤
1)实验接线
CS0?CS8259 CS1?CS273 O0~O7?LED1~LED8 K1~K8?IR0~IR7 INT?INTR INTA?QINTA
CS0 片选信号,地址04A0~04AF 偶地址有效 CS1 片选信号,地址04B0~04BF 偶地址有效 CS2 片选信号,地址04C0~04CF 偶地址有效 CS3 片选信号,地址04D0~04DF 偶地址有效 CS4 片选信号,地址04E0~04EF 偶地址有效 CS5 片选信号,地址04F0~04FF 偶地址有效 CS6 片选信号,地址0000~01FF 偶地址有效 CS7 片选信号,地址0200~03FF 偶地址有效
关于偶地址有效
2
当8259片选连接CS0时,因访问端口时地址位A0的值必须为1,由A1地址位来区分两个端口吗, 因此,偶地址:04A0,04A4… 奇地址:04A2,04A6…
2)编译调试程序
3)全速运行程序,拨动某一电平开关,观察LED的亮灭情况。 3、实验结果
全速运行程序,由上往下拨动开关时,相应位置的LED点亮,其余LED全灭。 三、实验源码及框图
开始
中断服务流程关中断8259初始化开中断AX置数YAX=00H?开中断NAX输出中断返回延时
assume cs:code code segment public org 100h start: ;中断系统未初始化,先关中断
Cli
;8259初始化
mov dx,04a0h
3
mov ax,13h out dx,ax
;ICW1, ICW4 NEEDED
mov dx,04a2h mov ax,80h out dx,ax mov ax,03H out dx,ax mov ax,00h out dx,ax ;安装中断向量 mov ax,0 mov ds,ax
;ICW2 中断类型80h
;ICW4
;OCW1, 开放所有中断
;中断向量表位于内存最开始的1KB,段地址为0
mov si,200h ;初始化中断向量表,80H*4=200H mov ax,offset hint mov ds:[si],ax add si,2
mov ds:[si],100h ;代码段的内存起始地址为01100H,代码段段地址0100H mov cx,0 mov ax,0 sti
;指示灯输出 ;中断标识
waiting: cmp ax,55h jne waiting ;没发生中断,则等待 mov dx,04b0h ;273端口地址 xor cx,0ffh mov ax,cx out dx,ax ;LED灯亮暗交替 mov ax,0 jmp waiting
;中断服务程序 hint: mov ax,55h iret code ends
end start
注意;中断向量的安装不能使用DOS功能调用
四、实验总结
1)通过本次实验,我掌握了8259A的工作原理,掌握编写中断服务程序方法,以及初始化中断向量的方法
2)8086的中断系统是向量中断方式。内存中特定位置有一中断向量表,表内存有不同中断类型的中断向量(中断入口地址)。不同中断类型的中断向量在表内有对应的偏移地址,其计算方法是:中断类型*4, 中断类型由8259通过数据总线送给8086,8086内部电路会将该类型值自动乘4,而后赋给指令指针,从而转向中断向量表的相应单元取得中断入口地址,之后就进入中断服务程序。
4
3)中断类型的高5位由8259寄存器ICW2决定,低3位由中断源IRx的编码自动填入。IR0~IR7的编码分别为000,001,010,011,100,101,110,111
4)在本次实验中8259的工作方式为自动中断结束方式,中断自动结束方式只能适用于有一块8259A,并且各级中断不会发生嵌套的情况,所以在实验中又做了普通中断结束方式,在中断子程序之后,向8259发出普通中断结束命令。源码如下:
;********************************************** ;* 8259A中断控制器实验 ;*
;* 触发IRi号中断,则第i号指示灯亮 ;*
;*********************************************** assume cs:code code segment public org 100h start: cli ;关中断,系统初始化 mov dx,04b0h ;熄灭全部指示灯 mov ax,0ffh out dx,ax ;mov ax,0 ;mov ss,ax ;mov sp,4000h ;Stack initialization mov dx,04a0h ;8259片选接CS0 mov ax,13h ;ICW1,1片8259, ICW4 NEEDED out dx,ax mov dx,04a2h mov ax,80h out dx,ax ;ICW2 中断类型80h~87h mov ax,01h ;ICW4,01,普通全嵌套,非缓冲,非自动结束中断, out dx,ax mov ax,00h ;OCW1, 开放所有中断 out dx,ax nop ;以上为8259初始化 mov ax,0 ;初始化中断向量表 mov ds,ax mov di,200h ;80H*4=200H mov ax,offset int0 mov ds:[di],ax add di,2 mov ds:[di],100h add di,2 mov ax,offset int1 mov ds:[di],ax add di,2 mov ds:[di],100h
5