1、实验 8259 单级中断控制器实验一、实验目的 掌握 8259 中断控制器的接口方法。 掌握 8259 中断控制器的应用编程。二、实验内容 利用 8259 实现对外部中断的响应和处理,要求程序对每次中断进行计数,并将计数结果送数码显示。三、实验接线图 图 66四、编程指南 8259 芯片介绍中断控制器 8259A 是专为控制优先级中断而设计的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对 8259A 进行编程,就可以管理 8 级中断,并选择优先模式和中断请求方式。即中断结构可以由用户编程来设定。同时,在不需要增加其它电路的情况下,通过多片
2、8259A 的级联,能构成多达 64 级的矢量中断系统。 本实验中使用 3 号中断源 IR3, “ ”插孔和 IR3 相连,中断方式为边沿触发方式,每拨二次 AN 开关产生一次中断,满 5 次中断,显示“8259good”。如果中断源电平信号不符合规定要求,则自动转到 7 号中断,显示“Err”。五、实验程序框图 IR3 中断服务程序:IR7 中断服务程序:六、实验步骤 1、按图 66 连好实验线路图。8259 的 INT 连 8088 的 INTR;8259 的 INTA 连 8088 的 INTA;“ ”插孔和 8259 的 3 号中断 IR3 插孔相连,“ ”端初始为低电平;8259 的
3、 CS 端接 FF80H 孔。2、运行实验程序,在系统处于命令提示符“P.”状态下,按 SCAL 键,输入 12D0,按 EXEC 键, 系统显示 82591。3、拨动 AN 开关按钮, 按满 l0 次显示 good。 七、实验程序清单 CODE SEGMENT ;H8259.ASMASSUME CS:CODEINTPORT1 EQU 0FF80HINTPORT2 EQU 0FF81HINTQ3 EQU INTREEUP3INTQ7 EQU INTREEUP7PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口ORG 12D0HSTART
4、: JMP START0BUF DB ?,?,?,?,?,?intcnt db ?data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FHSTART0: CLD ;递加CALL BUF1 ;写显示缓冲初值CALL WRINTVER ;写中断向量MOV AL,13H ;写 ICW1MOV DX,INTPORT1OUT DX,ALMOV AL,08H ;写 ICW2MOV DX,INTPORT2OUT DX,AL
5、MOV AL,09H ;写 ICW4OUT DX,ALMOV AL,0F7H ;写 OCW1OUT DX,ALMOV intcnt,01H ;中断计数初值STI ;开中断WATING: CALL DISP ;DISP 8259-1JMP WATING ;循环显示WRINTVER: MOV AX,0H ;写中断向量子程序MOV ES,AXMOV DI,002CH ;IR3 中断向量地址LEA AX,INTQ3 ;IR3 中断服务地址STOSW ;写中断服务地址偏移量MOV AX,0000h ;写中断服务段地址STOSWMOV DI,003CH ;IR7 中断向量地址LEA AX,INTQ7 ;I
6、R7 中断服务地址STOSW ;写中断服务地址偏移量MOV AX,0000h ;写中断服务段地址STOSWRETINTREEUP3:CLI ;IR3 中断服务push ax ;压栈保护现场push bxpush cxpush dxMOV AL,INTCNT ;CALL CONVERS ;拆送缓冲区MOV BX,OFFSET BUF ;077BHMOV AL,10HMOV CX,05HINTRE0: MOV BX,AL ;高五位缓冲区送熄灭码INC BXLOOP INTRE0MOV AL,20H ;中断返回码MOV DX,INTPORT1OUT DX,ALADD INTCNT,01HCMP IN
7、TCNT,06HJNA INTRE2 ;中断次数小于 5 次继续CALL BUF2 ;中断次数结束 DISP:goodINTRE1: CALL DISPJMP INTRE1CONVERS: AND AL,0FH ;拆送缓冲区MOV BX,offset buf ;077AHMOV BX+5,ALRETINTRE2: MOV AL,20HMOV DX,INTPORT1OUT DX,ALpop dxpop cxpop bxpop axSTIIRET ;中断返回INTREEUP7:CLI ;IR7 中断服务MOV AL,20H ;中断返回码MOV DX,INTPORT1OUT DX,ALcall bu
8、f3 ;disp:errINTRE3: CALL DISP ;循环显示:ERRJMP INTRE3DISP: MOV AL,0FFH ;显示子程序 ,5msMOV DX,PAOUT DX,ALMOV CL,0DFH ;20H MOV BX,OFFSET BUFDIS1: MOV AL,BXMOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,BXPOP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,00A0HLOOP $POP CXCMP CL,0FEH ;
9、01HJZ LX1INC BXROR CL,1 ;SHR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BUF,08H ;写”8259-1”MOV BUF+1,02HMOV BUF+2,05HMOV BUF+3,09HMOV BUF+4,17HMOV BUF+5,01HRETBUF2: MOV BUF,09H ;写”good ”MOV BUF+1,00HMOV BUF+2,00HMOV BUF+3,0dHMOV BUF+4,10HMOV BUF+5,10HRETBUF3: MOV BUF,0eH ;写”err ”MOV BUF+1,18HMOV BUF+2,18HMOV BUF+3,10HMOV BUF+4,10HMOV BUF+5,10HRETCODE ENDSEND START