;上一片8255的地址
PAEQU08H
PBEQU0AH
PCEQU0CH
CONWEQU0EH
;8253
AD82530EQU10H
AD82531EQU12H
AD82532EQU14H
AD8253CONWEQU16H
;============================
STACKSEGMENTSTACK
DB200DUP(0)
STACK ENDS
;============================
DATASEGMENT
LED_TABDB3FH, 06H, 5BH, 4FH, 66H
DB6DH, 7DH, 07H, 7FH, 6FH
DB77H, 7CH, 39H, 5EH, 79H, 71H
MMMDB0
SSSDB0
ONEDB 5
TWODB 15
THREEDB 5
FOURDB 15
DATAENDS
;=============================
CODESEGMENT
ASSUMECS:CODE, DS:DATA
START:
PUSHDS
MOVAX, DATA
MOVDS, AX
;=================
;设置中断向量8253
CLI
MOVAX, 0
MOVES, AX
MOVSI, 08H
MOVAX, OFFSET TIME_INT
MOVES:[SI], AX
MOVAX, CS
MOVES:[SI+2], AX
;=================
;初始化8255A
MOVAL, 80H
OUTCONW, AL
;初始化8253
MOVAL, 36H
OUTAD8253CONW, AL
MOVAX, 65000
OUTAD82530, AL
MOVAL, AH
OUTAD82530, AL
;===============
LL:
;=================
;CALLIS_AD_TIMT
CALLPRINT_ALL
;=================
JMPLL
INC_S:
PUSHAX
INCSSS
MOVAL, SSS
CMPAL, 60
JNEENDIF0
MOVAL, 0
MOVSSS, AL
CALLINC_M
ENDIF0:
POPAX
RET
INC_M:
PUSHAX
INCMMM
MOVAL, MMM
CMPAL, 60
JNEENDIF1
MOVAL, 0
MOVMMM, AL
;CALLINC_H
ENDIF1:
POPAX
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DENG1:MOVAL, ONE
CMPAL, 0
JNEDENG11
JEDENG2
DENG11:
DECONE
MOV DX,PC
MOV AL,01H ;第一个灯亮
OUT DX,AL
RET
DENG2:
MOVAL, TWO
CMPAL, 0
JNEDENG22
JEDENG3
DENG22:
DEC TWO
MOV DX,PC
MOV AL,02H ;第二个灯亮
OUT DX,AL
RET
DENG3:
MOVAL, THREE
CMPAL, 0
JNE DENG33
JE DENG4
DENG33:
DEC THREE
MOV DX,PC
MOV AL,04H ;第三个灯亮
OUT DX,AL
RET
DENG4:
MOVAL, FOUR
CMPAL, 0
JNE DENG44
JE DENG5
DENG44:
DEC FOUR
MOV DX,PC
MOV AL,08H ;第四个灯亮
OUT DX,AL
RET
DENG5:
MOV AL,5
MOV ONE,AL
MOV AL,15
MOV TWO,AL
MOV AL,5
MOV THREE,AL
MOV AL,15
MOV FOUR,AL
MOV AL,0
MOV MMM,AL
MOV AL,0
MOV SSS,AL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_LED:;(位选, 数字);写某一位数码管
MOVBP, SP
PUSHAX
PUSHDX
;=========
MOVAX, [BP + 4]
OUTPB, AL
MOVBX, [BP + 2]
LEASI, LED_TAB
MOVAL, [BX + SI]
OUTPA, AL
;=========
POPDX
POPAX
RET4
PRINT_TIME:;(时0分2秒4,数值);写时分秒
MOVBP, SP
PUSHAX
PUSHDX
PUSHCX
;=============
MOVAX, [BP + 2]
MOVDL, 10
DIVDL
MOVCL, AH
MOVDX, [BP + 4]
PUSHDX
XORAH, AH
PUSHAX
CALLWRITE_LED
CALLDELAY
INCDX
PUSHDX
XORCH, CH
PUSHCX
CALLWRITE_LED
;=============
POPCX
POPDX
POPAX
RET4
PRINT_ALL:;显示时间
PUSHAX
;============HOUR
MOVAX, 2
PUSHAX
MOVAL, MMM
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
;============MINUTE
PUSHAX
MOVAX, 4
PUSHAX
MOVAL, SSS
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
;==============SECOND
D1:
MOVAL, ONE
CMPAL, 0
JNED11
JED2
D11:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, ONE
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
D2:
MOVAL, TWO
CMPAL, 0
JNED22
JED3
D22:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, TWO
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
D3:
;DEC EEE
MOVAL, THREE
CMPAL, 0
JNE D33
JE D4
D33:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, THREE
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
D4:
MOVAL, FOUR
CMPAL, 0
JNE D44
JE D1
D44:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, FOUR
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
DELAY:
PUSHBX
PUSHCX
MOVBX, 2
DEL1:
MOVCX, 100
DEL2:
DECCX
CMPCX, 0
JNEDEL2
DECBX
CMPBX, 0
JNEDEL1
POPCX
POPBX
RET
DELAY_K:;按键延时函数,去除抖动
PUSHBX
PUSHCX
MOVBX, 50
DELK1:
MOVCX, 300
DELK2:
DECCX
CMPCX, 0
JNEDELK2
DECBX
CMPBX, 0
JNEDELK1
POPCX
POPBX
RET
TIME_INT: ;定时器中断处理函数
CALLDENG1
CALLINC_S
IRET
CODEENDS
END START
PAEQU08H
PBEQU0AH
PCEQU0CH
CONWEQU0EH
;8253
AD82530EQU10H
AD82531EQU12H
AD82532EQU14H
AD8253CONWEQU16H
;============================
STACKSEGMENTSTACK
DB200DUP(0)
STACK ENDS
;============================
DATASEGMENT
LED_TABDB3FH, 06H, 5BH, 4FH, 66H
DB6DH, 7DH, 07H, 7FH, 6FH
DB77H, 7CH, 39H, 5EH, 79H, 71H
MMMDB0
SSSDB0
ONEDB 5
TWODB 15
THREEDB 5
FOURDB 15
DATAENDS
;=============================
CODESEGMENT
ASSUMECS:CODE, DS:DATA
START:
PUSHDS
MOVAX, DATA
MOVDS, AX
;=================
;设置中断向量8253
CLI
MOVAX, 0
MOVES, AX
MOVSI, 08H
MOVAX, OFFSET TIME_INT
MOVES:[SI], AX
MOVAX, CS
MOVES:[SI+2], AX
;=================
;初始化8255A
MOVAL, 80H
OUTCONW, AL
;初始化8253
MOVAL, 36H
OUTAD8253CONW, AL
MOVAX, 65000
OUTAD82530, AL
MOVAL, AH
OUTAD82530, AL
;===============
LL:
;=================
;CALLIS_AD_TIMT
CALLPRINT_ALL
;=================
JMPLL
INC_S:
PUSHAX
INCSSS
MOVAL, SSS
CMPAL, 60
JNEENDIF0
MOVAL, 0
MOVSSS, AL
CALLINC_M
ENDIF0:
POPAX
RET
INC_M:
PUSHAX
INCMMM
MOVAL, MMM
CMPAL, 60
JNEENDIF1
MOVAL, 0
MOVMMM, AL
;CALLINC_H
ENDIF1:
POPAX
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DENG1:MOVAL, ONE
CMPAL, 0
JNEDENG11
JEDENG2
DENG11:
DECONE
MOV DX,PC
MOV AL,01H ;第一个灯亮
OUT DX,AL
RET
DENG2:
MOVAL, TWO
CMPAL, 0
JNEDENG22
JEDENG3
DENG22:
DEC TWO
MOV DX,PC
MOV AL,02H ;第二个灯亮
OUT DX,AL
RET
DENG3:
MOVAL, THREE
CMPAL, 0
JNE DENG33
JE DENG4
DENG33:
DEC THREE
MOV DX,PC
MOV AL,04H ;第三个灯亮
OUT DX,AL
RET
DENG4:
MOVAL, FOUR
CMPAL, 0
JNE DENG44
JE DENG5
DENG44:
DEC FOUR
MOV DX,PC
MOV AL,08H ;第四个灯亮
OUT DX,AL
RET
DENG5:
MOV AL,5
MOV ONE,AL
MOV AL,15
MOV TWO,AL
MOV AL,5
MOV THREE,AL
MOV AL,15
MOV FOUR,AL
MOV AL,0
MOV MMM,AL
MOV AL,0
MOV SSS,AL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_LED:;(位选, 数字);写某一位数码管
MOVBP, SP
PUSHAX
PUSHDX
;=========
MOVAX, [BP + 4]
OUTPB, AL
MOVBX, [BP + 2]
LEASI, LED_TAB
MOVAL, [BX + SI]
OUTPA, AL
;=========
POPDX
POPAX
RET4
PRINT_TIME:;(时0分2秒4,数值);写时分秒
MOVBP, SP
PUSHAX
PUSHDX
PUSHCX
;=============
MOVAX, [BP + 2]
MOVDL, 10
DIVDL
MOVCL, AH
MOVDX, [BP + 4]
PUSHDX
XORAH, AH
PUSHAX
CALLWRITE_LED
CALLDELAY
INCDX
PUSHDX
XORCH, CH
PUSHCX
CALLWRITE_LED
;=============
POPCX
POPDX
POPAX
RET4
PRINT_ALL:;显示时间
PUSHAX
;============HOUR
MOVAX, 2
PUSHAX
MOVAL, MMM
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
;============MINUTE
PUSHAX
MOVAX, 4
PUSHAX
MOVAL, SSS
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
;==============SECOND
D1:
MOVAL, ONE
CMPAL, 0
JNED11
JED2
D11:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, ONE
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
D2:
MOVAL, TWO
CMPAL, 0
JNED22
JED3
D22:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, TWO
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
D3:
;DEC EEE
MOVAL, THREE
CMPAL, 0
JNE D33
JE D4
D33:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, THREE
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
D4:
MOVAL, FOUR
CMPAL, 0
JNE D44
JE D1
D44:
PUSHAX
;==============SECOND
MOVAX, 0
PUSHAX
MOVAL, FOUR
XORAH, AH
PUSHAX
CALLPRINT_TIME
CALLDELAY
POPAX
RET
DELAY:
PUSHBX
PUSHCX
MOVBX, 2
DEL1:
MOVCX, 100
DEL2:
DECCX
CMPCX, 0
JNEDEL2
DECBX
CMPBX, 0
JNEDEL1
POPCX
POPBX
RET
DELAY_K:;按键延时函数,去除抖动
PUSHBX
PUSHCX
MOVBX, 50
DELK1:
MOVCX, 300
DELK2:
DECCX
CMPCX, 0
JNEDELK2
DECBX
CMPBX, 0
JNEDELK1
POPCX
POPBX
RET
TIME_INT: ;定时器中断处理函数
CALLDENG1
CALLINC_S
IRET
CODEENDS
END START