代码拉取完成,页面将自动刷新
DATA SEGMENT
digit DB 0010000B,0000000B,1111000B,0000010B,0010010B,0011001B,0110000B,0100100B,1111001B,1000000B
;9 8 7 6 5 4 3 2 1 0
digit_index DB 9
led DW 9024H,4824H,024H,2409H,2412H,2400H ;灯变化的六个阶段
;is_flash DB 0 ;是否要闪,处于闪烁期为1,否则为0
flash_count DB 1 ;闪动次数计数
count DB 1 ;申明计数变量,初值1
;原中断
INT0A_OFF DW ?
INT0A_SEG DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
;初始化8255
MOV DX,303H ;8255A控制端口地址
MOV AL,80H ;控制方式字:10000000B;
OUT DX,AL ;控制方式字送到控制端口
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;使LED灯及数码管熄灭
MOV DX,300H ;PA口LED灯熄灭
MOV AL,0H
OUT DX,AL
MOV DX,301H ;PB口LED灯熄灭
OUT DX,AL
MOV DX,302H ;PC口数码管熄灭
MOV AL,0FFH
OUT DX,AL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;初始化8253
MOV DX,307H ;8253控制端口地址
MOV AL,10110110B ;选计数器2,方式3,二进制方式计数
OUT DX,AL
MOV DX,306H ;计数器2的地址:306h
MOV AX,1000 ;计数次数1000
OUT DX,AL ;先送低8位
MOV AL,AH
OUT DX,AL ;后送高8位
MOV DX,307H ;8253控制端口
MOV AL,01110110B ;选计数器1,方式3,二进制方式计数
OUT DX,AL
MOV DX,305H ;计数器1的地址
MOV AX,1000 ;计数次数1000
OUT DX,AL ;先送低8位
MOV AL,AH
OUT DX,AL ;后送高8位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AX,3572H ;获取原中断向量
INT 21H
MOV INT0A_OFF,BX ;保存原中断向量
MOV BX,ES
MOV INT0A_SEG,BX
CLI ;关中断
MOV AX,2572H
MOV DX,SEG TRAFFIC_LIGHT ;设置新的中断向量到中断服务程序TRAFFIC_LIGHT
PUSH DS
MOV DS,DX
MOV DX,OFFSET TRAFFIC_LIGHT
INT 21H
POP DS
STI ;开中断
IN AL,0A1H ;打开IRQ10
AND AL,0FBH
OUT 0A1H,AL
IN AL,21H ;打开IRQ2
AND AL,0FBH
OUT 21H,AL
L1:
MOV AH,0BH ;检查是否有Esc键按下
INT 21H
INC AL
JNZ NEXT0 ; 若无键按下,则程序往下执行
MOV AH,08H ;如有Esc键按下,则程序退出
INT 21H
CMP AL,27
JZ _EXIT
NEXT0:
JMP L1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_EXIT: ;退出程序
IN AL,0A1H ;屏蔽IRQ10
OR AL,04H
OUT 0A1H,AL
IN AL,21H ;屏蔽IRQ2
OR AL,04H
OUT 21H,AL
MOV AX,4C00H ;程序退出
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TRAFFIC_LIGHT PROC FAR ;中断服务程序
;保存寄存器
PUSH SI
PUSH AX
PUSH BX
PUSH DX
CLI ;关中断
MOV AL,62H ;发中断结束命令
MOV DX,0A0H
OUT DX,AL ;向从片8259发EOI命令
OUT 020H,AL ;向主片8259发EOI命令
STI ;开中断
;还原寄存器
POP DX
POP BX
POP AX
POP SI
IRET ;(interrupt return)中断返回
TRAFFIC_LIGHT ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE ENDS
END START
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。