📄 8253.txt
字号:
FOR EAT598
;ORG 8100:0
INT00 EQU 200h
INT01 EQU 201h
Z8279 EQU 239H
D8279 EQU 238H
TIM_CTL EQU 22bH
TIMER0 EQU 228H
MODE03 EQU 00110111B
LEDMODE EQU 00H
SCANFRQ EQU 38H
stack segment
sta dw 50 dup(?)
top equ length sta
stack ends
CODE SEGMENT
ASSUME CS:CODE,SS:stack,ds:CODE
START:
;-------------------------------------------------
;8253计数器
;-------------------------------------------------
XOR CX,CX
PUSH DS
MOV AX,0
PUSH AX
CLI
MOV DX,TIM_CTL ;8253控制字端口
MOV AL,MODE03 ;计数器0,工作方式3,BCD码
OUT DX,AL
MOV DX,TIMER0 ;8253计数器0的端口
MOV AL,40H ;初值240
OUT DX,AL
MOV AL,02H
OUT DX,AL
;*********8259中断*********
MOV AX,00
MOV ES,AX
MOV BX,8*4
MOV AX,OFFSET ZD
MOV ES:WORD PTR[BX],AX
PUSH CS
POP AX
MOV ES:WORD PTR[BX+2],AX
CLI ;关中断
MOV AL,13H ;ICW1:边沿触发,单片,要ICW4
MOV DX,INT00
OUT DX,AL
NOP
NOP
MOV AL,8 ;中断号从8开始
MOV DX,INT01
OUT DX,AL
NOP
NOP
MOV AL,3 ;全嵌套方式,86/88系统 9
MOV DX,INT01
OUT DX,AL
MOV DX,INT01
MOV AL,00H ;八个中断全部开放
OUT DX,AL
MOV DX,INT00
MOV AL,20H ;非特殊EOI结束中断
OUT DX,AL
MOV DX,Z8279 ;8279左边输入,八位显示,外部译码
MOV AL,LEDMODE
OUT DX,AL
MOV AL,SCANFRQ ;设置扫描频率
OUT DX,AL
;---------------------------------------------------
;8279
;----------------------------------------------------
MOV AL,90H ;写显示缓冲区RAM命令字
OUT DX,AL
MOV DX,D8279
MOV AL,3FH ;显示中断前字样"00:00"
OUT DX,AL
MOV AL,3FH
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,3FH
OUT DX,AL
MOV AL,3FH
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,3FH
OUT DX,AL
MOV AL,3FH
OUT DX,AL
PUSH CS
POP DS
mov NUM,10
MOV SEC,50
MOV MIN,58
MOV HOU,0
ST1: STI ;开中断
hlt ;等待硬件中断
jmp st1
ZD:
DEC NUM ;自减10次
; CMP NUM,0
jz SEC1
IRET
SEC1:
CLI
INC SEC
MOV AH,0
MOV BL,10
MOV Al,SEC
DIV BL ;除法,商在AL中,余数在AH中
MOV CL,AL
MOV DX,Z8279
MOV AL,80H
OUT DX,AL
MOV AL,AH
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;个位显示
MOV DX,Z8279
MOV AL,81H
OUT DX,AL
MOV AL,CL
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;十位显示
CMP SEC,60
JZ MIN1
JMP L1
MIN1:
MOV SEC,0
MOV AL,3FH ;显示中断前字样"00:00"
OUT DX,AL
MOV AL,3FH
OUT DX,AL
INC MIN
MOV AL,MIN
MOV BL,10
DIV BL ;除法,商在AL中,余数在AH中
MOV CL,AL
MOV DX,Z8279
MOV AL,83H
OUT DX,AL
MOV AL,AH
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;显示个位
MOV DX,Z8279
MOV AL,84H
OUT DX,AL
MOV AL,CL
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;十位显示
cmp min,60
JZ HOU1
JMP L1
HOU1:
MOV MIN,0
MOV AL,3FH ;显示中断前字样"00:00"
OUT DX,AL
MOV AL,3FH
OUT DX,AL
INC HOU
MOV AL,HOU
MOV BL,10
DIV BL ;除法,商在AL中,余数在AH中
MOV CL,AL
MOV DX,Z8279
MOV AL,86H
OUT DX,AL
MOV AL,AH
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;显示个位
MOV DX,Z8279
MOV AL,87H
OUT DX,AL
MOV AL,CL
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;十位显示
cmp HOU,24
JZ L2
JMP L1
L2:MOV HOU,0
MOV AL,3FH ;显示中断前字样"00:00"
OUT DX,AL
MOV AL,3FH
OUT DX,AL
L1: MOV NUM,10
exit: iRET
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
NUM DB ?
SEC DB ?
MIN DB ?
HOU DB ?
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -