微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 对8259A的编程:统计中断申请的次数到十灯全灭

对8259A的编程:统计中断申请的次数到十灯全灭

时间:12-01 来源:互联网 点击:
DATA SEGMENT DATA ENDS

CODE SEGMENT ASSUME CS:CODE
ORG 11B0H ; 设置程序存储的起始位置
START:
CLI ;关中断,需要先关中
;初始化8255命令字
IOCONPT EQU 0FF2BH ;控制口
IOBPT EQU 0FF29H ;PB口
IOAPT EQU 0FF28H ;PA口
MOV AL,90H ;控制字存入AL
MOV DX,IOCONPT ;取8255控制字寄存器的端口地址存入DX
OUT DX,AL ; 控制字存入控制寄存器
;初始化8255 over
;初始化8259命令字
MOV DX,0FF80H ; 取8259的偶端口地址存入DX
MOV AL,13H ; ICW1控制字存入AL
OUT DX,AL ; 控制字存入ICW1
MOV DX,0FF81H ; 取8259的奇端口地址存入DX
MOV AL,0BH ; ICW2控制字存入AL 装入的是中断类型号
OUT DX,AL ; 控制字存入ICW2,设置中断类型号
MOV AL,03H ; ICW4控制字存入AL
OUT DX,AL ; 控制字存入ICW4,设置中断结束方式
;控制字写完了。
;修改中断向量表
SUB AX,AX

MOV ES,AX.

MOV AX,2CH
MOV DI,AX ;设置偏移地址
MOV AX,OFFSET INTWQ ;取偏移地址
CLD
STOSW ;存储偏移地址
MOV AX,SEG INTWQ ;取段基址
STOSW ;存储段基址

STI ;开中断
MOV BL,0 ;初始化中断次数计数器
main:
mov al,00h ;主程序
mov dx,iobpt
out dx,al ;点亮所有的灯
jmp main
MOV AH,4CH ;程序的结束
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTWQ PROC NEAR ;中断子程序
CLI ;关中断
PUSH AX

PUSH DX
PUSHF
INC BL ;中断次数计数器加一
mov al,bl
mov dx,iobpt ;把中断次数送到led
OUT DX,AL
CALL DELAY ;延时
cmp bl,0ah ;判断是否达到10次
jz shuchu
jmp jiedian
shuchu:
MOV AL,0FFH ;灯全灭
mov dx,iobpt
OUT DX,AL
CALL DELAY
jiedian:
MOV AL,20H

OUT 0FF80H,AL
POPF

POP DX
POP AX

STI
IRET ;中断返回
INT28 ENDP ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY PROC NEAR ;延时子程序的开始
MOV CX,0FFFFH ;初始化计数次数
CC:NOP ;空操作
LOOP CC ;循环
RET ;子程序返回
DELAY ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE ENDS ;代码段结束
END START ;源程序结束

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top