IN AL,0A1H ;读中断屏蔽寄存器,0A1H是该寄存器的端口 AND AL,0FBH ;开放中断IRQ10 OUT 0A1H,AL
MOV CX,10 ;记中断循环次数为10次 STI
WAIT: JMP WAIT
INT10: CLI PUSHAD PUSHFD
MOV CX,10 NEXT10_1:
MOV DX,31H
MOV AH,02H INT 21H
MOV DX,30H
MOV AH,02H INT 21H
MOV DX,20H MOV AH,02H INT 21H CALL DELAY1 LOOP NEXT10_1
MOV DX,0DH
MOV AH,02H INT 21H
MOV DX,0AH MOV AH,02H INT 21H
MOV AL,20H OUT 0A0H,AL OUT 20H,AL POPFD POPAD STI IRET
INT3: CLI ;中断服务程序 ;记中断循环次数为10次 ;输出DL ;输出DL ;发出EOI结束中断到PC内主片的地址20H ;输出DL,3 ;等待 ;输出DL,‘ ’ ;发出EOI结束中断到PC内从片占用的是0A0H端口 ;输出DL,发生中断后输出10 ;将中断屏蔽字送到中断屏蔽寄存器 ;从片 ;主片
;关中断,出栈,返回 ;中断服务程序
PUSHAD PUSHFD
MOV CX,10 ;记中断循环次数为10次 NEXT3_1: MOV DX,33H
MOV AH,02H ;输出DL INT 21H
MOV DX,20H ;发出EOI结束中断到PC内主片的地址20H MOV AH,02H INT 21H
CALL DELAY1 LOOP NEXT3_1
MOV DX,0DH
MOV AH,02H INT 21H
MOV DX,0AH MOV AH,02H INT 21H
MOV AL,20H
OUT 20H,AL OUT 0A0H,AL
POPFD POPAD STI IRET
DELAY1 PROC PUSHAD PUSHFD
MOV CX,0FH DELAY_LOOP1:
MOV BX,0FFFFH DELAY_LOOP2: DEC BX NOP
JNZ DELAY_LOOP2 LOOP DELAY_LOOP1 POPFD POPAD
;输出DL,3 ;等待 ;输出DL,‘ ’ ;发出EOI结束中断到PC内从片占用的是0A0H端口;发生中断输出DL,10 ;将中断屏蔽字送到中断屏蔽寄存器 ;出栈,关中断,返回 ;控制等待部分 RET
DELAY1 ENDP
CODE ENDS
END START
3.实验1-3:扩展多中断应用实验
调用程序源码文件8259-3.asm,在程序源代码中划横线的位置,请按照所学8259工作原理填写并验证,然后将所填内容写在实验报告中,并分析所填数据的形成原理。 屏幕截图:
程序代码及与案例说明:
;***************************************************************** ; 8259中断查询方式应用实验
;请根据所学原理推断横线处需填写的源代码
;*****************************************************************
I8259_1 EQU 2B0H ; 8259的ICW1端口地址 I8259_2 EQU 2B1H ; 8259的ICW2端口地址
I8259_3 EQU 2B1H ; 8259的ICW3端口地址,ICW3,ICW4,OCW1都写入奇地址中 I8259_4 EQU 2B1H ; 8259的ICW4端口地址 O8259_1 EQU 2B1H ; 8259的OCW1端口地址
O8259_2 EQU 2B0H ; 8259的OCW2端口地址,OCW2,OCW3写入偶地址 O8259_3 EQU 2B0H ; 8259的OCW3端口地址
DATA SEGMENT
MES1 DB 'YOU CAN PLAY A KEY ON THE KEYBOARD!',0DH, 0AH, 24H MES2 DD MES1
MESS1 DB 'HELLO! THIS IS INTERRUPT * 0 *!',0DH,0AH,'$' MESS2 DB 'HELLO! THIS IS INTERRUPT * 1 *!',0DH,0AH,'$' MESS3 DB 'HELLO! THIS IS INTERRUPT * 2 *!',0DH,0AH,'$' MESS4 DB 'HELLO! THIS IS INTERRUPT * 3 *!',0DH,0AH,'$' MESS5 DB 'HELLO! THIS IS INTERRUPT * 4 *!',0DH,0AH,'$' MESS6 DB 'HELLO! THIS IS INTERRUPT * 5 *!',0DH,0AH,'$' MESS7 DB 'HELLO! THIS IS INTERRUPT * 6 *!',0DH,0AH,'$' MESS8 DB 'HELLO! THIS IS INTERRUPT * 7 *!',0DH,0AH,'$' DATA ENDS
STACKS SEGMENT DB 100 DUP(?) STACKS ENDS
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACKS, ES:DATA .386
START: MOV AX,DATA MOV DS, AX MOV ES, AX MOV AX, STACKS MOV SS, AX
MOV DX, I8259_1 ;初始化8259的ICW1
MOV AL, 13H ;边沿触发、单片8259、需要ICW4,查表得到控制字 OUT DX,AL
MOV DX,I8259_2 ;初始化8259的ICW2 MOV AL,0B0H OUT DX,AL MOV AL,03H OUT DX,AL
MOV DX, O8259_1 ;初始化8259的中断屏蔽操作命令字 MOV AL, 000H ;打开屏蔽位,将全部屏蔽位打开 OUT DX,AL
QUERY: MOV AH,1 ;判断是否有按键按下 INT 16H
JNZ QUIT ;有按键则退出
MOV DX,O8259_3 ;向8259发送查询命令 MOV AL,6CH ;01101100 OUT DX,AL
IN AL,DX ;读出查询字
TEST AL,80H ;判断中断是否已响应,响应后对应位置0 JZ QUERY AND AL,07H CMP AL,00H
JE IR0ISR CMP AL,01H
JE IR1ISR CMP AL,02H
JE IR2ISR CMP AL,03H
JE IR3ISR CMP AL,04H
JE IR4ISR CMP AL,05H
JE IR5ISR CMP AL,06H
JE IR6ISR CMP AL,07H
JE IR7ISR JMP QUERY IR0ISR: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET MESS1 MOV AH,09 INT 21H JMP EOI IR1ISR: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET MESS2 MOV AH,09 INT 21H JMP EOI IR2ISR: MOV AX,DATA MOV DS,AX
;没有响应则继续查询 ;若为IR0请求,跳到IR0处理程序 ;若为IR1请求,跳到IR1处理程序 ;若为IR2请求,跳到IR2处理程序 ;若为IR3请求,跳到IR3处理程序 ;若为IR4请求,跳到IR4处理程序 ;若为IR5请求,跳到IR5处理程序 ;若为IR6请求,跳到IR6处理程序 ;若为IR7请求,跳到IR7处理程序 ;显示提示信息 ;显示提示信息
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库微机原理与接口技术 实验报告(2)在线全文阅读。
相关推荐: