锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2024-05-08 17:07:10

DATA SEGME DATA ENDS
CODE SEGMENT ASSUME CS:CODE
ORG 11B0H ; 设置程序存储的起始位置
START:
CLI ;关中断,需要先关中
;初始化8255命令字
IOCPT 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 ; I1控制字存入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,0F ;灯全灭
mov dx,iobpt
OUT DX,AL
CALL DELAY
jiedian:
MOV AL,20H

OUT 0FF80H,AL
POPF

POP DX
POP AX

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


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章