您的位置 首页 新品

对8259A的编程:计算中止请求的次数到十灯全灭

DATASEGMENTDATAENDSCODESEGMENTASSUMECS:CODEORG11B0H;设置程序存储的起始位置START:CLI;关中断,需要先关中;初始

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 ;源程序完毕

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/255098.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部