1、实验7 中断控制器实验 一、实验目的 了解8259中断控制器的基本使用,掌握中断程序编程技术。 【386EX中断系统简介】 * 386EX CPU内部有两个8259中断控制器,一个主8259,一个从8259,其级联方式与PC机相同。主从8259使用的命令字和端口地址与PC DOS兼容。386EX模块允许用户使用的中断请求信号端子有两个,分别是中断请求信号区的MIR5和SIR0,它们分别对应主8259芯片中断请求引脚IR5和从8259中断请求引脚IR0。因8259初始化已由固件完成,因此用户编程时只需写入中断屏蔽字和中断向量,而无需再次初始化。,有关的中断控制参数如下:,注意: 1.写入中断屏蔽
2、字OCW1时,应采取读修改写序列。 即 主片:IN AL, 21H 从片: IN AL, 0A1HH AND AL,0DFH AND AL, 0FEH OUT 21H,AL OUT 0A1H, AL 2.中断请求信号为正脉冲触发,所以MIR5或SIR0端子应该与单脉冲电路产生的正极信号端子(PLUS)连接,不可接错。,二、实验内容1、单中断:使用单脉冲电路产生的脉冲信号作为386EX模块8259中断请求输入,每按一次单脉冲按键,触发一次中断,使7段数码管显示的“5”字左移一位,显示到最左端后再从最右端开始显示,如此重复。,关键问题 MIR5的的开中断字:11011111。应在奇端口(即21H
3、)读和写,是OCW1命令。 中断向量表从0地址开始。偏移量中断类型号4, 段基址中断类型号4+2 延时程序。 中断结束命令:是OCW2命令mov al, 20hout 20h, al程序见下页。,.Model small .386 data segment led_cs equ 200h led_cs1 equ 201h ledcode db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h old dd ? data ends code segment assume cs:code,ds:data start: climov ax,datamov ds,axmo
4、v es, ax,in al,21hand al,11011111b ; 屏蔽字节out 21h,al ; OCW1 push ds mov bx,0mov ds,bxlea ax,cs:int_proc ; 中断服务程序的偏移地址mov si,35h ; 主片的中断号=35Hsal si,2 ; 中断号4,即左移2次mov ds:si,ax ; 偏移地址装入中断向量表push cs pop ax mov ds:si+2,ax ; 段基址装入中断向量表 pop ds,ttt: lea bx,ledcode ; 段码起始地址 sti ; 开中断 sss: mov ch,1 ; 位码 lll: c
5、mp ch,40h ; 到最左端了吗?je sssjmp lllint_proc proc far ; 中断服务程序push axcall dispmov al,20h ; OCW2。固定优先级,发EOI out 20h,al ; 送到偶地址 pop ax stiiret ; 中断返回 int_proc endp,disp proc 显示子程序push dxpush bxpush ax l: mov al,6dhmov dx,led_csnopnopout dx,al ; 送段码mov al,ch e: mov dx,led_cs1 ; 送位码out dx,al shl ch,1 ; 位码左移一位 exitdisp:pop axpop bxpop dx ret disp endp,delay proc 延时子程序push ecxmov ecx,0fffffffh kk1: loop kk1pop ecxret delay endpcode endsend start,