定时器8253与中断控制器8259A实验
时间:2026-01-18
时间:2026-01-18
定时器8253与中断控制器8259A实验8255和LED数码管显示实验
实验七 定时器8253与中断控制器8259A实验
二、实验电路
图1 8253与8259 实验电路图 280H~287H
五、实验项目
1.该实验用PC机内部的中断控制器8259A,中断源用TPC-H实验箱上的8253来产生,电路如图1所示,将8253计数器0,计数器1分别设置为方式3和方式2,计数初值设为2000,使8253每隔4秒产生一次中断请求。
2.编写程序,要求每次主机响应外中断IRQ7时,显示"THIS IS A 8259A INTERRUPT !",在键盘上敲任意一个键,程序退出。
3.修改电路和程序,直接用手动产生单个脉冲作为中断请求信号,要求每按一次开关产生一次中断,在屏幕上显示一次" THIS IS A 8259A INTERRUPT !",中断10次后程序退出。
六、编程提示
1.在TPC-H实验系统的接口卡上有一个跳线开关(JP),可以选择IRQ2、IRQ3、IRQ4、IRQ7引到试验箱上的IRQ插孔,出厂设置的是IRQ7。
2.由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。
3.由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法如下:在纯DOS环境下 C:\ASM\>提示符下键入PORTR1后敲回车键,会得到:
TPC PCI Card 9054 Chip I/O Base Adress:2000
TPC PCI Card I/O Base Adress:2400
TPC PCI Card Memory Base Adress:d2000000
TPC PCI Card Interrupt Line:0A
其中,2000为PCI卡上9054芯片的基地址;2400为试验箱的基地址,2400/2407对应的是280/287H插孔;0A表示系统分配中断为IRQ10。
4.由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:
mov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,使能中断
in ax,dx
定时器8253与中断控制器8259A实验8255和LED数码管显示实验
实验七 定时器8253与中断控制器8259A实验
or ax,0900h
out dx,ax
其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址(TPC PCI Card 9054 Chip I/O Base Adress:2000),+68H的偏移是关于9054芯片中断使能的寄存器地址,设置含义如下:
设置INTCSR(68H)寄存器,中断模式设置:
其它位为零即可,更多内容参看9054芯片数据手册
程序退出前还要关闭9054的中断,代码如下:
mov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,关闭中断
in ax,dx
and ax,0f7ffh
out dx,ax
5. PC机中断控制器8259 的主片地址为20H、21H, 从片地址为A0H、A1H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:
MOV AL,20H
OUT 20H,AL
OUT 0A0H,AL
中断结束返回DOS时应将IMR对应位置1,以关闭中断。
;手动产生单个脉冲作为中断请求信号对应程序
data segment
int_offset dw ?
int_seg dw ? ;旧中断向量保存空间
irq_times db 10 ; 中断计数
flag db 0 ; 中断标志
msg1 db 0dh,0ah,' THIS IS A 8259A INTERRUPT !',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
cli
; TPC PCI Card 9054 Chip I/O Base Adress:2000时
mov dx,2068h ;设置 tpc 卡中9054芯片io口,使能中断
in ax,dx
定时器8253与中断控制器8259A实验8255和LED数码管显示实验
or ax,900h
out dx,ax
push ds
; TPC PCI Card Interrupt Line:0A,分配中断为IRQ10时,中断类型号为72H
mov ax,3572h
int 21h ;保存原中断向量
mov int_seg,es
mov int_offset,bx
mov ax,seg int_proc ;设置新中断向量
mov ds,ax
mov dx,offset int_proc
mov ax,2572h
int 21h
in al, 0a1h
and al, 11111011b
out 0a1h, al ;开放从片相应的中断
pop ds
sti
loop1: cmp flag,0
je loop1
mov dx,offset msg1
mov ah,9
int 21h
mov flag,0
dec irq_times
jnz loop1
cli
in al, 0a1h
or al, 00000100b
out 0a1h, al ;屏蔽从片相应的中断
mov dx, int_offset ;恢复原中断向量
mov ds,int_seg
mov ax,2572h
int 21h
mov dx,2068h ;设置 tpc 卡中9054芯片io口,关闭中断
in ax,dx
and ax,0f7ffh
out dx,ax
sti
mov ax,4c00h
int 21h
int_proc proc far
push ax
mov flag,1
mov al,20h
out 0a0h,al
out 20h,al ;Send EOI
pop ax
iret
int_proc endp
code ends
end start
定时器8253与中断控制器8259A实验8255和LED数码管显示实验
实验七 定时器8253与中断控制器8259A实验
;8253每隔4秒产生一次中断请求对应程序
data segment
int_offset dw ?
int_seg dw ? ;旧中断向量保存空间
flag db 0
msg1 db 0dh,0ah,' THIS IS A 8259A INTERRUPT !',0dh,0ah,'$'
msg2 db 0dh,0ah,'Press any key to exit!',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
cli
; TPC PCI Card 9054 Chip I/O Base Adress:2000时
mov dx,2068h ;设置 tpc 卡中9054芯片io口,使能中断
in ax,dx
or ax,900h
out dx,ax
push ds
; TPC PCI Card Interrupt Line:0A,分配中断为IRQ10时,中断类型号为72H …… 此处隐藏:3927字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:重大矛盾纠纷排查调处台帐