1 Star 0 Fork 0

独孤影/trafficlight

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
test1.asm 3.30 KB
一键复制 编辑 原始数据 按行查看 历史
独孤影 提交于 2014-01-04 00:02 . test1.asm
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
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Assembly
1
https://gitee.com/duguying2008/trafficlight.git
[email protected]:duguying2008/trafficlight.git
duguying2008
trafficlight
trafficlight
master

搜索帮助