当前位置:文档之家› 实验四定时器8253与中断控制器8259A实验

实验四定时器8253与中断控制器8259A实验

实验四 定时器8253与中断控制器8259A 实验
一﹑实验目的
1. 掌握计数器/定时器8253的工作原理和编程方法。

2. 掌握8259中断控制器的工作原理;
3. 掌握中断服务程序的编写。

二﹑实验内容
1. 该实验用PC 机内部的中断控制器8259A ,中断源用TPC_H 实验箱上8253来产生,电路如下所示,将8253计数器0、计数器1分别设置为方式3和方式2,计数初值设为2000,每隔4秒产生一次。

TPC_H 实验箱上的IRQ 已连接到PC 机内部主片8259A 的IRQ7,主片8259A 的端口地址为20H 和21H ,主机启动时,系统已将8259A 中断控制器进行了初始化(边沿触发﹑一般完全嵌套方式﹑非自动结束,ICW2为08H ,IRQ7对应的中断类型码为0FH);
2. 实验电路如下图:
注意:做中断实验时,JB 上的短路片应插在“I/O ”位置,JC 上的短路片插在“I/O ”位置。

3. 编写程序,要求每次主机响应外中断IRQ7时,显示"THIS IS A 8259A INTERRUPT !",在键盘上敲任意一个键,程序退出。

4. 修改电路和程序,直接用手动产生单个脉冲作为中断请求信号,要求每按一次开关产生一次中断,在屏幕上显示一次“THIS IS A IRQ7 INTRUPT !”,中断10次后程序退出。

JC
I/O EM
实验连线6条,如图红色虚线所示
去IRQ7
去去50去1MHz 输出端
1.复习8259A工作原理,编程方法和使用方法。

2.根据要求编写相应的汇编程序。

四﹑报告要求
1.整理好经过运行是正确的源程序,并加上注释。

2.总结实验调试过程中遇到的问题。

3.通过实验回答思考题。

五﹑思考题
初始化时设置为非自动结束方式,那么在中断服务程序
将结束时必须设置什么操作命令?如果不设置这种命令会发
生什么现象?
六、实验原理
1、PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。

中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。

IBM-PC/XT机内有一片8259中断控制器对外可提供8个中断源:
中断源中断类型号中断功能
IRQ0 08H 时钟
IRQ1 09H 键盘
IRQ2 0AH 保留
IRQ3 0BH 串行口2
IRQ4 0CH 串行口1
IRQ5 0DH 硬盘
IRQ6 0EH 软盘
IRQ7 0FH 并行打印机
8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线总线插槽中可以引出,系统已设定中断请求信号为“边沿触发”、普通结束方式。

对于286以上的微机又扩展了一片8259中断控制器,主片的IRQ2已用于从片的级连。

本实验箱在出厂时,默认IRQ7引到实验台上。

2、编程说明:PC机中断控制器8259的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清0(允许中断),中断服务程序返回前要使用中断结束命令:
MOV AL,20H
OUT 20H,AL
中断结束返回DOS时应将IMR对应位置1,以关闭中断。

七、实验参考流程如下:
八、实验步骤:
⑴、打开实验箱,按红虚线位置连接好接线(6条),检查连接有无错误。

⑵、连接微机至实验板的50线扁平电缆。

⑶、打开微机和实验板电源。

⑷、编写程序并调试程序。

⑸、调试通过后全速运行并观察实验结果。

⑹、写出实验报告并交微机组成原理实验室。

九、实验参考程序如下:
;******************************; ;* 8259IRQ7定时中断服务程序 *; ;******************************; data segment
mess db ' THIS IS A 8259A INTERRUPT !',0aH,0dH,'$' data ends stack segment
db 100h dup(?) stack ends code segment
assume cs:code,ds:data,ss:stack start: mov ax,cs mov ds,ax
mov dx,offset int7 mov ax,250fh
int 21h ;设中断程序int7的类型号为0fh cli ;清中断标志位 in al,21h ;读中断屏蔽寄存器 and al,7fh ;开放IRQ7中断 out 21h,al
中断主程序
中断服务程序
sti ;开中断
mov dx,283h ;向8253写控制字
mov al,36h ;使0通道为工作方式3
out dx,al
mov ax,2000 ;写入循环计数初值2000
mov dx,280h
out dx,al ;先写入低字节
mov al,ah
out dx,al ;后写入高字节
mov dx,283h
mov al,74h ;设8253通道1工作方式2
out dx,al
mov ax,2000 ;写入循环计数初值2000
mov dx,281h
out dx,al ;先写低字节
mov al,ah
out dx,al ;后写高字节
sss: jmp sss
int7: mov ax,data ;中断服务程序
mov ds,ax
mov dx,offset mess
mov ah,09 ;显示每次中断的提示信息
int 21h
mov al,20h
out 20h,al ;发出EOI结束中断
mov ah,06h ;检测按键状态
mov dl,0ffh
int 21h
je rete
in al,21h
or al,80h ;关闭IR7中断
out 21h,al
sti ;置中断标志位
mov ah,4ch ;返回DOS
int 21h
rete: sti ;开中断
iret ;中断返回
code ends
end start
;********************************;
;* 8259IRQ7中断10次服务程序 *;
;********************************;
data segment
mess db ' THIS IS A 8259A INTERRUPT !',0aH,0dH,'$' data ends
code segment
assume cs:code,ds:data
start: mov ax,cs
mov ds,ax
mov dx,offset int7
mov ax,250fh
int 21h ;设中断程序int7的类型号为0fh
cli ;清中断标志位
in al,21h ;读中断屏蔽寄存器
and al,7fh ;开放IRQ7中断
out 21h,al
mov cx,10 ;记中断循环次数为10次
sti ;置中断标志位
ll: jmp ll
int7: mov ax,data ;中断服务程序
mov ds,ax
mov dx,offset mess
mov ah,09 ;显示每次中断的提示信息
int 21h
mov al,20h
out 20h,al ;发出EOI结束中断
loop next
in al,21h
or al,80h ;关闭IR7中断
out 21h,al
sti ;置中断标志位
mov ah,4ch ;返回DOS
int 21h
next: iret
code ends
end start。

相关主题