⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 万年历.asm

📁 这是一个调试完全成功的万年历汇编源码程序
💻 ASM
字号:
SCLK BIT P2.3
IO BIT P2.4
RST BIT P2.5
FLAG1 BIT F0
DQ BIT P2.1
TEMPER_L EQU 29H
TEMPER_H EQU 28H
NUM EQU 67H

YEAR  DATA 66H
MONTH DATA 65H
WEEK  DATA 64H
DAY   DATA 63H
HOUR  DATA 62H
MINTUE DATA 61H
SECOND  DATA 60H
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H

ORG 0000H
LJMP START

ORG 0040H
START:
MOV SECOND,#55H
MOV MINTUE,#21H
MOV HOUR,#17H
MOV DAY,#09H
MOV MONTH,#09H
MOV WEEK,#05H
MOV YEAR,#08H
MOV NUM,#01H
SETB P2.0
CLR P2.6
CLR P2.7 
CLR P2.2
BEGIN:
LCALL SET1302

LCALL INIT_18B20
LCALL RE_CONFIG
LCALL GET_TEMPER
LCALL CHANGE ;将温度值存到29H

READOUT:
MOV A,NUM
READMODE1: 
CJNE A,#01H,READMODE2
MOV R5,#81H
MOV R6,#83H
MOV R7,#85H
CLR P3.6
SETB P3.5
SETB P3.4
SETB P3.7
AJMP WHOLEREAD
READMODE2: CJNE A,#02H,READMODE3
MOV R5,#8BH
MOV R6,#87H
MOV R7,#89H
AJMP WHOLEREAD
READMODE3: CJNE	A,#03H,READMODE4
MOV R5,#8BH
MOV R6,#87H
MOV R7,#89H
AJMP WHOLEREAD
READMODE4: 
MOV R5,29H
MOV R0,29H
MOV R6,#83H
MOV R7,#85H
AJMP MODEREAD4

WHOLEREAD:
MOV DS1302_ADDR,R5
LCALL READ
MOV R0,DS1302_DATA
MODEREAD4:
LCALL DIVIDE
MOV 50H,R1
MOV 51H,R2
MOV DS1302_ADDR,R6
LCALL READ
MOV R0,DS1302_DATA
LCALL DIVIDE
MOV 52H,R1
MOV 53H,R2
MOV DS1302_ADDR,R7
LCALL READ
MOV R0,DS1302_DATA
LCALL DIVIDE
MOV 54H,R1
MOV 55H,R2

LCALL INIT_18B20
LCALL RE_CONFIG
LCALL GET_TEMPER
LCALL CHANGE
LCALL DISPLAY
LCALL SCANF
LJMP READOUT


SCANF:
LCALL SHIMO
LCALL ZHISHE
RET
SHIMO:
JNB P1.4,MOSHI
RET

MOSHI:
INC NUM
MOV A,NUM
CJNE A,#05H,MOSHI1
MOV A,#01H
MOV NUM,A
MOSHI1: CJNE A,#01H,MOSHI2
LCALL DELAY2
MOV R5,#81H
MOV R6,#83H
MOV R7,#85H
CLR P3.6
SETB P3.7
SETB P3.4
SETB P3.5
LJMP READOUT

MOSHI2: CJNE A,#02H,MOSHI3
LCALL DELAY2
MOV R5,#8BH
MOV R6,#87H
MOV R7,#89H
CLR P3.7
SETB P3.5
SETB P3.4
SETB P3.6
LJMP READOUT

MOSHI3: CJNE A,#03H,MOSHI4
LCALL DELAY2
MOV R5,#8BH
MOV R6,#87H
MOV R7,#89H
CLR P3.5
SETB P3.6
SETB P3.7
SETB P3.4
LJMP READOUT

MOSHI4:
LCALL DELAY2
MOV R5,29H
MOV R0,29H
MOV R6,#83H
MOV R7,#85H
CLR P3.4
SETB P3.5
SETB P3.6
SETB P3.7
LJMP READOUT

DELAY2:
MOV R0,#3
D1:MOV R1,#200
D2:MOV R2,#248
D3:DJNZ R2,D3
DJNZ R1,D2
DJNZ R0,D1
RET

ZHISHE:
JNB P1.0,SHEZHI
RET


SHEZHI:
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H
LCALL WRITE
LCALL DELAY2

SETGZ: 
MOV A,NUM
MODE1: CJNE A,#01H,MODE2
LCALL ADD_DATA
MOV R5,#59H
LJMP JN1
MODE2: CJNE A,#02H,MODE3
LCALL ADD_DATA
LJMP JN2
MODE3: CJNE A,#03H,MODE4
LCALL ADD_DATA
LJMP JN2
MODE4:
LCALL ADD_DATA
LJMP JN4
CALLJN1:
JNB P1.0,JN1
RET


JN1:
LCALL DELAY2
JN01:
LCALL FENLI
LCALL DISPLAY
JNB P1.0,JN11
JNB P1.3,SURE3
JNB P1.1,GADDSECOND
JNB P1.2,GSUBSECOND
AJMP JN01


GADDSECOND:
MOV A,R5
MOV R4,A
LCALL ADD1
MOV R5,A
CJNE A,#60H,GADDSECOND1
MOV R5,#00H
AJMP GADDSECOND1


GSUBSECOND:
MOV A,R5
MOV R4,A
LCALL SUB1
MOV R5,A
CJNE A,#00H,GADDSECOND1
MOV R5,#59H
AJMP GADDSECOND1
GADDSECOND1:
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,R5
LCALL WRITE


WAT1:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN1
JNB P1.0,JN11
JNB P1.2,JN1
JNB P1.3,SURE3
AJMP WAT1

SURE3: 
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H
LCALL WRITE
LJMP READOUT


JN11:
LCALL DELAY2
JN011:
LCALL FENLI
LCALL DISPLAY
JNB P1.0,JN111
JNB P1.3,SURE3
JNB P1.1,GADDMINTUE
JNB P1.2,GSUBMINTUE
AJMP JN011
GADDMINTUE:
MOV A,R6
MOV R4,A
LCALL ADD1
MOV R6,A
CJNE A,#60H,GADDMINTUE1
MOV R6,#00H
AJMP GADDMINTUE1
GSUBMINTUE:
MOV A,R6
MOV R4,A
LCALL SUB1
MOV R6,A
CJNE A,#00H,GADDMINTUE1
MOV R6,#59H
AJMP GADDMINTUE1
GADDMINTUE1:
MOV DS1302_ADDR,#82H
MOV DS1302_DATA,R6
LCALL WRITE


WAT11:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN11
JNB P1.0,JN111
JNB P1.2,JN11
JNB P1.3,SURE3
AJMP WAT11

JN111:
LCALL DELAY2
JN0111:
LCALL FENLI
LCALL DISPLAY
LCALL CALLJN1
JNB P1.3,SURE3
JNB P1.1,GADDHOUR
JNB P1.2,GSUBHOUR
AJMP JN0111
GADDHOUR:
MOV A,R7
MOV R4,A
LCALL ADD1
MOV R7,A
CJNE A,#24H,GADDHOUR1
MOV R7,#00H
AJMP GADDHOUR1
GSUBHOUR:
MOV A,R7
MOV R4,A
LCALL SUB1
MOV R7,A
CJNE A,#00H,GADDHOUR1
MOV R7,#23H
AJMP GADDHOUR1
GADDHOUR1:
MOV DS1302_ADDR,#84H
MOV DS1302_DATA,R7
LCALL WRITE


WAT111:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN111
LCALL CALLJN1
JNB P1.2,JN111
JNB P1.3,SURE1
AJMP WAT111

SURE1: 
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H
LCALL WRITE
LJMP READOUT


CALLJN2:
JNB P1.0,JN2
RET
 
JN2:
LCALL DELAY2
JN02:
LCALL FENLI
LCALL DISPLAY
JNB P1.0,JN22
LCALL LIANSURE1
JNB P1.1,GADDWEEK
JNB P1.2,GSUBWEEK
AJMP JN02
GADDWEEK:
MOV A,R5
MOV R4,A
LCALL ADD1
MOV R5,A
CJNE A,#08H,GADDWEEK1
MOV R5,#01H
AJMP GADDWEEK1
GSUBWEEK:
MOV A,R5
MOV R4,A
LCALL SUB1
MOV R5,A
CJNE A,#00H,GADDWEEK1
MOV R5,#07H
AJMP GADDWEEK1
GADDWEEK1:
MOV DS1302_ADDR,#8AH
MOV DS1302_DATA,R5
LCALL WRITE

WAT2:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN2
JNB P1.0,JN22
JNB P1.2,JN2
JNB P1.3,SURE1
AJMP WAT2

LIANSURE1:
JNB P1.3,SURE1
RET
JN22:
LCALL DELAY2
JN022:
LCALL FENLI
LCALL DISPLAY
JNB P1.0,JN222
LCALL LIANSURE1
JNB P1.1,GADDDAY
JNB P1.2,GSUBDAY
AJMP JN022
GADDDAY:
MOV A,R6
MOV R4,A
LCALL ADD1
MOV R6,A
CJNE A,#32H,GADDDAY1
MOV R6,#01H
AJMP GADDDAY1
GSUBDAY:
MOV A,R6
MOV R4,A
LCALL SUB1
MOV R6,A
CJNE A,#00H,GADDDAY1
MOV R6,#31H
AJMP GADDDAY1
GADDDAY1:
MOV DS1302_ADDR,#86H
MOV DS1302_DATA,R6
LCALL WRITE

WAT22:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN22
JNB P1.0,JN222
JNB P1.2,JN22
JNB P1.3,SURE2
AJMP WAT22

JN222:
LCALL DELAY2
JN0222:
LCALL FENLI
LCALL DISPLAY
LCALL CALLJN2
JNB P1.3,SURE2
JNB P1.1,GADDMONTH
JNB P1.2,GSUBMONTH
AJMP JN0222
GADDMONTH:
MOV A,R7
MOV R4,A
LCALL ADD1
MOV R7,A
CJNE A,#13H,GADDMONTH1
MOV R7,#01H
AJMP GADDMONTH1
GSUBMONTH:
MOV A,R7
MOV R4,A
LCALL SUB1
MOV R7,A
CJNE A,#00H,GADDMONTH1
MOV R7,#12H
AJMP GADDMONTH1
GADDMONTH1:
MOV DS1302_ADDR,#88H
MOV DS1302_DATA,R7
LCALL WRITE

WAT222:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN222
LCALL CALLJN2
JNB P1.2,JN222
JNB P1.3,SURE2
AJMP WAT222

SURE2: 
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H
LCALL WRITE
LJMP READOUT


CALLJN44:
JNB P1.0,JN44
RET
JN44:
LCALL DELAY2
JN044:
LCALL FENLI
LCALL DISPLAY
JNB P1.0,JN4
JNB P1.3,SURE2
JNB P1.1,GADDHOU
JNB P1.2,GSUBHOU
AJMP JN044
GADDHOU:
MOV A,R7
MOV R4,A
LCALL ADD1
MOV R7,A
CJNE A,#24H,GADDHOU1
MOV R7,#00H
AJMP GADDHOU1
GSUBHOU:
MOV A,R7
MOV R4,A
LCALL SUB1
MOV R7,A
CJNE A,#00H,GADDHOU1
MOV R7,#23H
AJMP GADDHOU1
GADDHOU1:
MOV DS1302_ADDR,#84H
MOV DS1302_DATA,R6
LCALL WRITE



WAT44:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN44
JNB P1.0,JN4
JNB P1.2,JN44
JNB P1.3,SURE
AJMP WAT44

JN4:
LCALL DELAY2
JN04:
LCALL FENLI
LCALL DISPLAY
JNB P1.0,JN44
JNB P1.3,SURE
JNB P1.1,GADDMIN
JNB P1.2,GSUBMIN
AJMP JN04
GADDMIN:
MOV A,R6
MOV R4,A
LCALL ADD1
MOV R6,A
CJNE A,#60H,GADDMIN1
MOV R6,#00H
AJMP GADDMIN1
GSUBMIN:
MOV A,R6
MOV R4,A
LCALL SUB1

MOV R6,A
CJNE A,#00H,GADDMIN1
MOV R6,#59H
AJMP GADDMIN1
GADDMIN1:
MOV DS1302_ADDR,#82H
MOV DS1302_DATA,R6
LCALL WRITE



WAT4:
LCALL FENLI
LCALL DISPLAY
JNB P1.1,JN4
LCALL CALLJN44
JNB P1.2,JN4
JNB P1.3,SURE
AJMP WAT4

SURE: 
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H
LCALL WRITE
LJMP READOUT



INIT_18B20:
SETB DQ
NOP
CLR DQ
MOV R0,#0FBH
TSR1:
DJNZ R0,TSR1
SETB DQ
MOV R0,#25H
TSR2:JNB DQ,TSR3
DJNZ R0,TSR2
TSR3:
SETB FLAG1
AJMP TSR5
TSR4:
CLR FLAG1
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6
TSR7:SETB DQ
RET

RE_CONFIG:
JB FLAG1,RE_CONFIG1
RET


RE_CONFIG1:
MOV A,#0CCH
LCALL WRITE_18B20
MOV A,#4EH
LCALL WRITE_18B20
MOV A,#23H
LCALL WRITE_18B20
MOV A,#00H
LCALL WRITE_18B20
MOV A,#1FH
LCALL WRITE_18B20
RET

GET_TEMPER:
SETB DQ
LCALL INIT_18B20
JB FLAG1,TSS2
RET
TSS2:
MOV A,#0CCH
LCALL WRITE_18B20
MOV A,#44H
LCALL WRITE_18B20
LCALL DELAY
LCALL INIT_18B20
MOV A,#0CCH
LCALL WRITE_18B20
MOV A,#0BEH
LCALL WRITE_18B20
LCALL READ2_18B20
RET

WRITE_18B20:
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23H
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET

READ2_18B20:
MOV R4,#2
MOV R1,#29H
RE00: MOV R2,#8
RE01:CLR C
SETB C
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23H
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET


CHANGE:
MOV A,29H
MOV C,28H.0
RRC A
MOV C,28H.1
RRC A
MOV C,28H.2
RRC A
MOV C,28H.3
RRC A
MOV 29H,A
MOV A,29H
MOV B,#100
DIV AB
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
MOV 29H,A
RET


SET1302:
CLR RST
CLR SCLK
SETB RST
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H
LCALL WRITE
SETB SCLK
CLR RST
MOV R0,#SECOND
MOV R7,#7
MOV R1,#80H
S13021:
CLR RST
CLR SCLK
SETB RST
MOV B,R1
LCALL RTINPUTBYTE
MOV A,@R0
MOV B,A
LCALL RTINPUTBYTE
INC R0
INC R1
INC R1
SETB SCLK
CLR RST
DJNZ R7,S13021
CLR RST
CLR SCLK
SETB RST
MOV B,#8EH
LCALL RTINPUTBYTE
MOV B,#80H
LCALL RTINPUTBYTE
SETB SCLK
CLR RST
RET
RTINPUTBYTE:
MOV R4,#8
INBIT1:
MOV A,B
RRC A
MOV B,A
MOV IO,C
SETB SCLK
CLR SCLK
DJNZ R4,INBIT1
RET
WRITE:
CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1:
RRC A
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
NOP
NOP								   
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,DS1302_DATA
MOV R4,#8
WRITE2:
RRC A
NOP
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
RET

RTOUTPUTBYTE:
MOV R4,#8
OUTBIT1: MOV C,IO
RRC A
SETB SCLK
CLR SCLK
DJNZ R4,OUTBIT1
RET

READ:
CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
READ1:
RRC A
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2:
CLR SCLK
NOP
NOP
NOP
MOV C,IO
NOP
NOP
NOP
NOP
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
RET

DIVIDE:
MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET

ADD1:
MOV A,R4
ADD A,#01H
DA A
RET

SUB1:
MOV A,R4
MOV B,#10H
DIV AB
MOV R4,B
MOV B,#10
MUL AB
ADD A,R4
CLR C
SUBB A,#01H
MOV B,#100
DIV AB
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET

DELAY:
MOV R3,#80
DJNZ R3,$
RET

ADD_DATA:
MOV DS1302_ADDR,R5
LCALL READ
MOV R5,DS1302_DATA

MOV DS1302_ADDR,R6
LCALL READ
MOV R6,DS1302_DATA

MOV DS1302_ADDR,R7
LCALL READ
MOV R7,DS1302_DATA

RET
 

FENLI:
MOV A,R5
MOV R0,A
LCALL DIVIDE
MOV 50H,R1
MOV 51H,R2
MOV A,R6
MOV R0,A
LCALL DIVIDE
MOV 52H,R1
MOV 53H,R2
MOV A,R7
MOV R0,A
LCALL DIVIDE
MOV 54H,R1
MOV 55H,R2
RET



DISPLAY:
LCALL BCD
MOV R0,#50H
MOV R2,#06H
LOOP:
MOV SBUF,@R0
JNB TI,$
CLR TI
INC R0
DJNZ R2,LOOP
RET



BCD:
MOV R0,#50H
MOV R2,#06H
MOV DPTR,#TABL
TAB:
MOV A,@R0
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R2,TAB
RET




TABL:
DB 88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,0BH


END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -