📄 wnl.asm
字号:
e87
;======数据空间定义============
;时钟原始数据:30H-37H
;拆开数据:40H-4FH
;显示数据:50H-5EH
;系统时钟:
;==============================
;======位地址空间定义=========
CLOCK BIT P3.5
IO BIT P3.6
RST BIT P3.7
BIAOZHI BIT 01H
;===============================
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP SERVE_T0
ORG 0030H
MAIN:MOV R4,#10
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#00H
MOV DPTR,#TABLE
MOV P2,#00H
MOV A,#80H
MOV B,#00H
LCALL DS_WRITE
MOV 37H,#20H
LOOP:LCALL GET1302
LCALL CHAI
LCALL XCHE
LCALL OUTPUT
LCALL ADJUST
AJMP LOOP
;=========================
SERVE_T0:PUSH ACC
PUSH R1
PUSH B
MOV TH0,#4CH
MOV TL0,#00H
DJNZ R4,SE_RET
MOV R4,#10
CPL BIAOZHI
MOV A,R0
ADD A,#10H
MOV R1,A
MOV B,@R1
JB BIAOZHI,LIANG
MOV @R1,#00H
LIANG:LCALL OUTPUT
MOV @R1,B
SE_RET:POP B
POP R1
POP ACC
RETI
;========拆开数据==========
CHAI:PUSH R0
PUSH R1
PUSH R3
MOV R0,#30H
MOV R1,#40H
MOV R3,#08H
CH1:MOV A,@R0
MOV B,A
ANL A,#0FH
MOV @R1,A
INC R1
CJNE R3,#03H,CH2
INC R0
DEC R3
AJMP CH1
CH2:MOV A,B
ANL A,#0F0H
SWAP A
MOV @R1,A
INC R0
INC R1
DJNZ R3,CH1
POP R3
POP R1
POP R0
RET
;*******转换**********
XCHE:PUSH R0
PUSH R1
PUSH ACC
PUSH R3
MOV R0,#40H
MOV R1,#50H
MOV R3,#0FH
XCH1:MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R3,XCH1
POP R3
POP ACC
POP R1
POP R0
RET
;=========组合数据==============
COMBIN:PUSH R0
PUSH R1
PUSH ACC
PUSH B
MOV R0,#30H
MOV R1,#40H
COM1:MOV B,@R1
INC R1
MOV A,@R1
CJNE R1,#4BH,COM2
MOV @R0,B
INC R0
AJMP COM1
COM2:MOV A,@R1
SWAP A
ADD A,B
MOV @R0,A
INC R1
INC R0
CJNE R0,#38H, COM1
POP B
POP ACC
POP R1
POP R0
RET
;******** 输出 **********
OUTPUT:PUSH R0
PUSH R3
MOV R3,#0FH
MOV R0,#50H
MOV SCON,#00H
CLOOP3:MOV A,@R0
MOV SBUF,A
HERE:JNB TI,HERE
CLR TI
INC R0
DJNZ R3,CLOOP3
SETB P2.7
CLR P2.7
POP R3
POP R0
RET
;*******SET1302向1302写入数据*************
SET1302:MOV R6,#07H
MOV R0,#30H
MOV A,#8EH ;---------|
MOV B,#00H ;去写保护 |
LCALL DS_WRITE ;---------|
MOV R1,#80H ;秒写命令控制
ALOOP:MOV B,@R0
MOV A,R1
LCALL DS_WRITE
INC R1 ;写命令为偶数
INC R1
INC R0
DJNZ R6,ALOOP
MOV A,#8EH ;-----------|
MOV B,#80H ;加上写保护 |
LCALL DS_WRITE ;-----------|
RET
;***************写入一字节数据子程序, *************
;********A为命令字节,B是待输入的的数据********
DS_WRITE:CLR RST
CLR CLOCK
SETB RST
LCALL DS_WSUB
MOV A,B
LCALL DS_WSUB
RET
;************向DS1302写入一字节子程序,字节***********
;*************在A中,可以时命令也可以是数据**********
DS_WSUB:MOV R7,#08H;
WLOOP:RRC A
MOV IO,C
SETB CLOCK
NOP
CLR CLOCK
DJNZ R7,WLOOP
RET
;********** GET1302从1302中读出数据******
GET1302:MOV A,#81H;
MOV B,A
MOV R5,#07H
MOV R0,#30H
BLOOP:LCALL DS_READ
MOV @R0,A
INC B
INC B
MOV A,B
INC R0
DJNZ R5,BLOOP
RET
;************从DS1302读出一字节子程序-**********
;*********A先为输入命令,后为读出数据*********
DS_READ:CLR RST
CLR CLOCK
SETB RST
LCALL DS_WSUB
LCALL DS_RSUB
RET
;*********从DS1302读出一字节数据,********
;*********运行后A里为读取的数据*************
DS_RSUB:MOV R7,#08H
RLOOP:CLR CLOCK
MOV C,IO
RRC A
SETB CLOCK
CLR CLOCK
DJNZ R7,RLOOP
RET
;**********调整*************
ADJUST:PUSH R0
SETB BIAOZHI
MOV R0,#4FH
Q7:MOV P1,#0FFH
MOV A,P1
CPL A
ANL A,#0E0H
JZ Q1
LCALL D_10ms
MOV A,P1
CPL A
ANL A,#0E0H
JZ Q1
K: MOV B,A
MOV P1,#0FFH
MOV A,P1
CPL A
ANL A,#0E0H
JNZ K ;判断键是否释放
LCALL D_10MS
MOV A,B
SETB TR0
SETB ET0
SETB EA
JB ACC.7,K1
JB ACC.6,K2
JB ACC.5,K3
Q1:CJNE R0,#4FH,Q7 ;无调整时不用进行加减处理,加减键无效
AJMP KRET
;=========调整位选择处理程序======
K1:DEC R0
CJNE R0,#3FH,Q7
LCALL COMBIN
LCALL SET1302
AJMP KRET
;======加减处理程序=========
K2:MOV A,@R0
INC A
;============================
CJNE R0,#41H,W1 ;SECOND
CJNE A,#06H,W1
CLR A
W1:CJNE R0,#43H,W2 ;MINUTE
CJNE A,#06H,W2
CLR A
W2:CJNE R0,#45H,W3 ;HOUR
CJNE A,#03H,W3
CLR A
W3:CJNE R0,#47H,W4 ;DAY
CJNE A,#04H,W4
CLR A
W4:CJNE R0,#49H,W5 ;MONTH
CJNE A,#02H,W5
CLR A
W5:CJNE R0,#4AH,W6 ;DATE
CJNE A,#08H,W6
CLR A
;===============================
W6:CJNE A,#0AH,Q3
CLR A
Q3:MOV @R0,A
LCALL XCHE
AJMP Q7
K3:MOV A,@R0
DEC A
;=====================================
CJNE R0,#41H,D1 ;SECOND
CJNE A,#07H,D1
MOV A,#05H
D1:CJNE R0,#43H,D2 ;MINUTE
CJNE A,#0FFH,D2
MOV A,#05H
D2:CJNE R0,#45H,D3 ;HOUR
CJNE A,#0FFH,D3
MOV A,#02H
D3:CJNE R0,#47H,D4 ;DAY
CJNE A,#0FFH,D4
MOV A,#03H
D4:CJNE R0,#49H,D5 ;MONTH
CJNE A,#0FFH,D5
MOV A,#01H
D5:CJNE R0,#4AH,D6 ;DATE
CJNE A,#0FFH,D6
MOV A,#07H
;=====================================
D6:CJNE A,#0FFH,Q3
MOV A,#09H
AJMP Q3
KRET:CLR TR0
CLR ET0
CLR EA
POP R0
RET
TABLE:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
D_10MS:MOV R2,#20
G2:MOV R3,#250
G1:DJNZ R3,G1
DJNZ R2,G2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -