《微机实验及课程设计》实验报告
学号 22010203
东南大学
《微机实验及课程设计》
实验报告
实验七 中断(8255 方式 1)
姓 名:
孟广婵
学 号:
22010203
专 业: 测控技术与仪器 实 验 室: 计算机硬件技术
实验时间: 2012 年 05 月 24 日 报告时间: 2012 年 05 月 24 日
评定成绩:
审阅教师:
0
《微机实验及课程设计》实验报告
学号 22010203
一. 实验目的
1、掌握PC机中断处理系统的基本原理。
2、学会编写中断服务子程序。
3、掌握8255工作方式1时的使用及编程。
4、学会编写中断服务子程序。
二. 实验内容
card
interrupt:”,冒号后面添加已经中断的次数,中断10次后程序退出。
必做:
7-1、直接用手动产生单脉冲作为中断请求信号,要求每按一次开关产生中断一次,在屏幕上显示一次“TPC
pci
选做:
7-2、(输出)每按一次单脉冲产生一个正脉冲使8255产生一次中断,让CPU进行一次中断服务:依次输出
01H、02H、04H、08H、10H、20H、40H、80H使L0~L7依次发光,中断8次结束。
7-3、(输入)每按一次单脉冲产生一个正脉冲使8255产生一次中断,让CPU进行一次中断服务:读取逻辑
开关预制的ASCII码,在屏幕上显示其对应的字符,中断8次结束。
三.实验原理与接线
原理:
1、PC 机用户可使用的硬件中断只有可屏蔽中断,由 8259 中断控制器管理。中断控制器用于接收外部的中
断请求信号,经过优先级等处理后向 CPU 发出可屏蔽中断请求。IBMPC/XT 机中有一片 8259 中断控制器对
外可以提供 8 个中断源:
中断源 中断类型号 中断功能
IRQ0 08H 时钟
IRQ1 09H 键盘
IRQ2 0AH 保留
IRQ3 OBH 串行口 2
IRQ4 0CH 串行口 1
IRQ5 0DH 硬盘
IRQ6 0EH 软盘
IRQ7 0FH 并行打印机
2、这 8 个中断源的中断请求信号线 IRQ0~IRQ7 在主机的 62 线 ISA 总线插座中可以引出,系统已经设定为
中断请求信号为边沿触发、普通结束方式(用户不需对 8259 再进行初始化)。
3、对于 PC/AT 及 286 以上的微机内有扩展了一片 8259 中断控制,IRQ2 用于两片 8259 的级连,对外提供
16 个中断源:
中断源 中断类型号 中断功能
IRQ8 070H 实时时钟
IRQ9 071H 用户中断
IRQ10 072H 保留
IRQ11 O73H 保留
IRQ12 074H 保留
IRQ13 075H 协处理器
IRQ14 076H 硬盘
IRQ15 077H 保留
1
《微机实验及课程设计》实验报告
学号 22010203
4、PCI 总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过 P&P 的设置来和某一根中
断相连才能进行中断申请。
中断源 中断类型号 中断功能
IRQ0 08H 时钟
IRQ1 09H 键盘
IRQ2 0AH 保留
IRQ3 OBH 串行口 2
IRQ4 0CH 串行口 1
IRQ5 0DH 硬盘
IRQ6 0EH 软盘
IRQ7 0FH 并行打印机
接线图:
2
《微机实验及课程设计》实验报告
学号 22010203
四.实验源程序(主要部分)和流程图
源程序:
7-1、直接用手动产生单脉冲作为中断请求信号,要求每按一次开关产生中断一次,在屏幕上显示一次“TPC
pci
interrupt:”,冒号后面添加已经中断的次数,中断10次后程序退出。
card
equ 0b800h-0280h
;tpc卡中设备的io地址
;386 以上微机适用
;纯dos 下才能使用
;tasm4.1 或以上编译
data segment
ioport
int_vect EQU 0bH ;中断0-7 的向量为:08h-0fh,中断8-15 的向量为:70h-77h
irq_mask_2_7 equ 11110111b ;中断掩码,中断0-7 时从低至高相应位为零,中断8-15 时第2 位为零
irq_mask_9_15 equ 11111111b;中断0-7 时全一,中断8-15 时从低至高相应位为零
ioport_cent equ 0bc00h ;tpc 卡中9054 芯片的io 地址
csreg dw ?
ipreg dw ? ;旧中断向量保存空间
irq_times dw ? ;中断计数
num dw ?
msg1 db 0dh,0ah,'TPC pci card Interrupt',0dh,0ah,'$'
msg2 db 0dh,0ah,'Press any key to exit!',0dh,0ah,'$'
msg3 db 0dh,0ah,'Press DMC to interrupt 10 times and exit!',0dh,0ah,'$'
data ends
stacks segment
db 100 dup (?)
stacks ends
code segment
assume cs:code,ds:data,ss:stacks,es:data
main proc far
3
《微机实验及课程设计》实验报告
学号 22010203
;Enable Local Interrupt Input
start:cli
mov ax,data
mov ds,ax
mov es,ax
mov ax,stacks
mov ss,ax
mov dx,ioport_cent+68h ;设置 tpc 卡中9054 芯片io 口,使能中断
in ax,dx
or ax,0900h
out dx,ax
mov al,int_vect ;保存原中断向量
mov ah,35h
int 21h
mov ax,es
mov csreg,ax
mov ipreg,bx
mov ax,cs ;设置新中断向量
mov ds,ax
mov dx,offset int_proc
mov al,int_vect
mov ah,25h
int 21h
in al, 21h ;设置中断掩码
and al, irq_mask_2_7
out 21h, al
in al, 0a1h
and al, irq_mask_9_15
out 0a1h, al
mov ax,data
mov ds,ax
mov dx,offset msg2
mov ah,09h
int 21h
mov dx,offset msg3
mov ah,09h
int 21h
mov irq_times,8
mov num,8
sti
loop1: cmp irq_times,0 ;等待中断并判断中断8 次后退出
jz exit
mov ah,1
int 16h
4
《微机实验及课程设计》实验报告
学号 22010203
;按任意键退出
jnz exit
call disp
jmp loop1
exit: cli
mov bl, irq_mask_2_7 ;恢复中断掩码
not bl
in al, 21h
or al, bl
out 21h, al
mov bl, irq_mask_9_15
not bl
in al, 0a1h
or al, bl
out 0a1h, al
mov dx,ipreg ;恢复原中断向量
mov ax,csreg
mov ds,ax
mov ah,25h
mov al,int_vect
int 21h
mov dx,ioport_cent+68h ;设置 tpc 卡中9054 芯片io 口,关闭中断
in ax,dx
and ax,0f7ffh
out dx,ax
mov ax,4c00h
int 21h
main endp
disp proc near
push ds
push dx
push cx
push ax
mov cx,irq_times
mov ax,cx
mov bx,num
cmp ax,bx
jz disp1
mov ax,data
mov ds,ax
mov dx,offset msg1
mov ah,09h
int 21h
mov num,cx
disp1:
;显示提示信息
5
《微机实验及课程设计》实验报告
学号 22010203
pop ax
pop cx
pop dx
pop ds
ret
disp endp
int_proc proc far ;中断处理程序
dec irq_times
mov al,20h ;Send EOI
out 0a0h,al
out 20h,al
mov cx,0ffffh
loop2:
nop
loop
loop2
iret
int_proc endp
code ends
end start
-------------------------------------------------------------------------------------------
7-2、(输出)每按一次单脉冲产生一个正脉冲使8255产生一次中断,让CPU进行一次中断服务:依次输出
01H、02H、04H、08H、10H、20H、40H、80H使L0~L7依次发光,中断8次结束。
equ 0b800h-0280h
;tpc卡中设备的io地址
;386 以上微机适用
;纯dos 下才能使用
;tasm4.1 或以上编译
data segment
ioport
io8255a equ ioport+288h
io8255d equ ioport+28bh
int_vect EQU 0bH ;中断0-7 的向量为:08h-0fh,中断8-15 的向量为:70h-77h
irq_mask_2_7 equ 11110111b ;中断掩码,中断0-7 时从低至高相应位为零,中断8-15 时第2 位为零
irq_mask_9_15 equ 11111111b;中断0-7 时全一,中断8-15 时从低至高相应位为零
ioport_cent equ 0bc00h ;tpc 卡中9054 芯片的io 地址
csreg dw ?
ipreg dw ? ;旧中断向量保存空间
irq_times dw ? ;中断计数
num dw ?
led db 80h,40h,20h,10h,08h,04h,02h,01h
msg1 db 0dh,0ah,'TPC pci card Interrupt',0dh,0ah,'$'
msg2 db 0dh,0ah,'Press any key to exit!',0dh,0ah,'$'
msg3 db 0dh,0ah,'Press DMC to interrupt 10 times and exit!',0dh,0ah,'$'
data ends
6
《微机实验及课程设计》实验报告
学号 22010203
stacks segment
db 100 dup (?)
stacks ends
code segment
assume cs:code,ds:data,ss:stacks,es:data
main proc far
;Enable Local Interrupt Input
start:cli
mov ax,data
mov ds,ax
mov es,ax
mov ax,stacks
mov ss,ax
mov dx,io8255d
mov al,80h
out dx,al
mov dx,ioport_cent+68h ;设置 tpc 卡中9054 芯片io 口,使能中断
in ax,dx
or ax,0900h
out dx,ax
mov al,int_vect ;保存原中断向量
mov ah,35h
int 21h
mov ax,es
mov csreg,ax
mov ipreg,bx
mov ax,cs ;设置新中断向量
mov ds,ax
mov dx,offset int_proc
mov al,int_vect
mov ah,25h
int 21h
in al, 21h ;设置中断掩码
and al, irq_mask_2_7
out 21h, al
in al, 0a1h
and al, irq_mask_9_15
out 0a1h, al
mov ax,data
mov ds,ax
mov dx,offset msg2
mov ah,09h
int 21h
mov dx,offset msg3
7