第9章微型机接口解说.ppt

* * 主程序流程图 开始 关中断 设置中断向量 8259A初始化 设置计数值 开中断 等待中断,并判断中断次数 CLI STI MOV CX , 10 * * 设 置 中 断 向 量 使用DOS功能调用修改或写入0AH号中断向量; 以下为25H号DOS功能调用直接写中断向量的程序段: MOV AH , 25H ;DOS调用的功能号送入AH MOV AL , 0AH ;中断类型号送入AL MOV AX , SEG INT_PRO MOV DS , AX MOV DX , OFFSET INT_PRO ;中断向量置于DS:DX中 INT 21H * * 8259A 初 始 化 单片8259A使用,16位系统, 只有一个中断源; 初始化需设置:ICW1、ICW2、ICW4、OCW1; ;写OCW1,仅允许IR2的中断请求 MOV AL , 1111 1011B OUT 21H , AL ;写ICW1,边沿触发,单片使用,需要ICW4 MOV AL , 0001 0011B OUT 20H , AL ;写ICW2 ,中断类型号0A的高5位——08H MOV AL , 08H OUT 21H , AL ;写ICW4,设置为16位工作系统 MOV AL , 01H OUT 21H , AL * * 中断次数的判断 等待中断的同时判断中断次数 LL : NOP JCXZ EXIT JMP LL EXIT: MOV AL , 0FFH OUT 21H , AL HLT * * 中断服务程序 开始 保护寄存器 显示字符串, 并记录中断次数 恢复寄存器 发EOI命令 开中断 IRET 使用了寄存器:DS 、DX 、AX; CX是主程序与中断服务程序之间的传递参数 普通EOI命令: MOV AL , 20H OUT 20H , AL 需要保护的寄存器有: DS 、DX 、 AX STI 数据段的定义: DATA SEGMENT MESS DB ‘A 8259A INTERRUPT!’,10,13, ‘$’ DATA ENDS 或特殊EOI命令: MOV AL , 62H OUT 20H , AL 以允许下一次该中断的响应 * * 显示字符串并记录中断次数 调用9号DOS功能,显示字符串; MOV AX , DATA MOV DS , AX MOV DX , OFFSET MESS MOV AH , 09H INT 21H ;显示字符串 记录中断次数:预置计数次数10; DEC CX ;计数器减1 * * 寄存器的保护与恢复 寄存器的保护: PUSH DS PUSH DX PUSH AX 寄存器的恢复: POP AX POP DX POP DS 注意:寄存器的入出栈顺序相反! * * 源程序清单(1/5) DATA1 SEGMENT MESS DB ‘A 8259A INTERRUPT!’,10,13, ‘$’ DATA1 ENDS CODE1 SEGMENT ASSUME CS:CODE1,DS:DATA1 INT_PRO PROC NEAR ;寄存器的保护 PUSH DS PUSH DX PUSH AX ;使用9号DOS功能调用,显示字符串; MOV AX , DATA MOV DS , AX * * 源程序清单(2/5) MOV DX , OFFSET MESS MOV AH , 09H INT 21H ;记录中断次数 DEC CX ;普通EOI命令 MOV AL , 20H OUT 20H , AL ;寄存器的恢复 POP AX POP DX

文档评论(0)

1亿VIP精品文档

相关文档