记次数
按下脉冲后,打印十次 TPPC486 8259 INT5!
应用8255 8259中断
详细代码如下
1.DATA SEGMENT
2.MESS DB 'TPC486 8259 INT5! $'
3.DATA ENDS
4.CODE SEGMENT
5. ASSUME CS:CODE,DS:DATA
6.START:CLI ;关中断
7. MOV AX,DATA
8. MOV DS,AX ;给data段地址
9.
10. MOV DX,200H ;ICW1是0端口
11. MOV AL,11H ;控制字11H 边沿触发00010001
12. OUT DX,AL ;设置ICW1
13.
14. MOV DX,201H ;ICW2是1端口 中断向量
15. MOV AL,08H ;控制字是08H 中断向量为08H~0FH
16. OUT DX,AL ;设置ICW2
17.
18. MOV AL,00H ;ICW3
19. OUT DX,AL
20. MOV AL,01H ;ICW4 EOI结束中断
21. OUT DX,AL
22.
23. MOV DX,201H
24. IN AL,DX ;读IMR
25. AND AL,0DFH ;开放IR5中断 DFH(1101 1111B)
26. OUT DX,AL
27.
28. MOV AX,0
29. MOV DS,AX ;中断向量码写入内存0段区域
30.
31. LEA AX,INT_PROC ;转到中断命令 写中断向量
32. ;写中断向量地址
33. MOV BX,5
34. MOV SI,08H
35. ADD SI,BX
36. ;地址乘4 找段地址
37. ADD SI,SI
38. ADD SI,SI
39. MOV [SI],AX ;IP地址
40. MOV AX,CS
41. MOV [SI+2],AX ;CS设置中断向量地址,置入中断服务程序入口地址的段基地址CS
42. MOV CX,10 ;10次 计次
43. STI ;开中断
44. L: JMP L ;自身循环,主程序
45.INT_PROC:
46. MOV AX,DATA ;中断处理程序
47. MOV DS,AX ;地址转移
48. MOV DX,OFFSET MESS ;MESS偏移地址
49. MOV AH,09 ;显示每次中断的提示信息
50. INT 21H
51. MOV DX,200H
52. MOV AL,20H ;向8259发出结束中断
53. OUT DX,AL
54.
55. DEC CX ;减1
56. JNZ NEXT ;不为0时转移到NEXT
57.
58. ;中断结束
59. MOV DX,201H ;读IMR
60. IN AL,DX
61. OR AL,20H ;屏蔽位 关闭IR5
62. OUT DX,AL
63. STI ;开中断 允许中断嵌套
64. MOV AH,4CH
65. INT 21H ;返回DOS
66.
67.NEXT:
68. IRET ;中断返回
69.
70.CODE ENDS
71. END START