📄 温度万年历.asm
字号:
;*********************************
;* 闪动程序 *
;*********************************
INTT1: PUSH ACC
PUSH PSW
GFLASH: CPL 0FH
JB 0FH,GFLASH1
MOV 7CH,4CH
MOV 7BH,4BH
MOV 7AH,4AH
MOV 79H,49H
MOV 78H,48H
MOV 77H,47H
MOV 76H,46H
MOV 75H,45H
MOV 74H,44H
MOV 73H,43H
MOV 72H,42H
MOV 71H,41H
MOV 70H,40H
GFLASHOUT: POP PSW
POP ACC
RETI
GFLASH1: JB 0AH,GFLASH2
MOV 7CH,#0AH
MOV 7BH,#0AH
AJMP GFLASHOUT
GFLASH2: JB 0BH,GFLASH3
MOV 7AH,#0AH
MOV 79H,#0AH
AJMP GFLASHOUT
GFLASH3: JB 0CH,GFLASH4
MOV 77H,#0AH
MOV 76H,#0AH
AJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5
MOV 78H,#0AH
AJMP GFLASHOUT
GFLASH5: JB 0EH,GFLASH6
MOV 75H,#0AH
MOV 74H,#0AH
AJMP GFLASHOUT
GFLASH6:
MOV 73H,#0AH
MOV 72H,#0AH
AJMP GFLASHOUT
;*********************************
;* 加1程序 *
;*********************************
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
;*********************************
;* 分离程序 *
;*********************************
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
;*********************************
;* 写1302程序 *
;*********************************
WRITE: CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1: RRC A ;送地址给1302
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 ;送数据给1302
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
RET
;*******************************
;* 读1302程序 *
;*******************************
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
SETB IO
MOV C,IO
NOP
NOP
NOP
NOP
NOP
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; REST DS18B20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INITDS1820: SETB TEMPDIN
NOP
NOP
CLR TEMPDIN
MOV R6, #0A0H
DJNZ R6, $
MOV R6, #0A0H
DJNZ R6, $
SETB TEMPDIN
MOV R6, #32H
DJNZ R6, $
MOV R6, #3CH
LOOP1820: MOV C, TEMPDIN
JC INITDS1820OUT
DJNZ R6, LOOP1820
MOV R6, #064H
DJNZ R6, $
SJMP INITDS1820
RET
INITDS1820OUT: SETB TEMPDIN
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 读DS18B20的程序,从中读出一个字节的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READDS1820: MOV R7, #08H
SETB TEMPDIN
NOP
NOP
READDS1820LOOP: CLR TEMPDIN
NOP
NOP
NOP
SETB TEMPDIN
MOV R6, #07H
DJNZ R6, $
MOV C, TEMPDIN
MOV R6, #3CH
DJNZ R6, $
RRC A
SETB TEMPDIN
DJNZ R7, READDS1820LOOP
MOV R6, #3CH
DJNZ R6, $
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 写DS18B20的 程序,从中写一个字节的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITEDS1820: MOV R7, #08H
SETB TEMPDIN
NOP
NOP
WRITEDS1820LOP: CLR TEMPDIN
MOV R6 , #07H
DJNZ R6,$
RRC A
MOV TEMPDIN, C
MOV R6, #34H
DJNZ R6,$
SETB TEMPDIN
DJNZ R7, WRITEDS1820LOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ TEMP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READTEMP:
LCALL INITDS1820
MOV A, #0CCH
LCALL WRITEDS1820
MOV R6, #34H
DJNZ R6, $
MOV A, #44H
LCALL WRITEDS1820
MOV R6, #34H
DJNZ R6, $
RET
READTEMP1: LCALL INITDS1820
MOV A,#0CCH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV A,#0BEH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV R5,#09H
MOV R0,#TEMPHEAD
MOV B,#00H
READTEMP2: LCALL READDS1820
MOV @R0,A
INC R0
READTEMP21: LCALL CRC8CAL
DJNZ R5,READTEMP2
MOV A,B
JNZ READTEMPOUT
MOV A,TEMPHEAD+0
MOV TEMPL,A
MOV A,TEMPHEAD+1
MOV TEMPH,A
READTEMPOUT: RET
;********************************
;处理温度BCD码子程序
;********************************
CONVTEMP: MOV A,TEMPH
ANL A,#80H
JZ TEMPC1
CLR C
MOV A,TEMPL
CPL A
ADD A,#01H
MOV TEMPL,A
MOV A,TEMPH
CPL A
ADDC A,#00H
MOV TEMPH,A
MOV TEMPHC,#0BH
SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
MOV DPTR,#TEMPDOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A
MOV A,TEMPL
ANL A,#0F0H
SWAP A
MOV TEMPL,A
MOV A,TEMPH
ANL A,#0FH
SWAP A
ORL A,TEMPL
LCALL HEX2BCD1
MOV TEMPL,A
ANL A,#0F0H
SWAP A
ORL A,TEMPHC
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
SWAP A
ORL A,TEMPLC
MOV TEMPLC,A
MOV A,R7
JZ TEMPC12
ANL A,#0FH
SWAP A
MOV R7,A
MOV A,TEMPHC
ANL A,#0FH
ORL A,R7
MOV TEMPHC,A
TEMPC12: RET
;*********************************
;* 显示程序 *
;*********************************
DISPLAY: MOV 7EH,#02H
MOV 7DH,#00H
MOV R0,#76H
MOV R1,#70H
MOV R2,79H
MOV R3,#79H
MOV R5,#0FEH
PLAY1: MOV A,#0FFH
MOV P2,A
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,@R1
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,R2
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
INC R1
INC R3
MOV A,R3
SETB PSW.4
MOV R0,A
MOV A,@R0
CLR PSW.4
MOV R2,A
MOV A,R0
CJNE A,#78H,PLAY2
MOV R0,#50H
PLAY2: CJNE A,#54H,PLAY3
MOV R0,#78H
PLAY3: MOV A,R5
MOV P2,A
LCALL DL1MS
MOV A,R5
JNB ACC.6,PLAYOUT
RL A
MOV R5,A
LJMP PLAY1
PLAYOUT: SETB P2.6
RET
YS100: MOV R6,#99
L100: LCALL YS10
NOP
DJNZ R6,L100
NOP
NOP
RET
YS10: MOV R7,#250
L1: DJNZ R7,L1
RET
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
TAB1: ;DB 0C0H,0F9H,0A4H,0B0H
; DB 99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
DB 03H,9FH,25H,0DH,99H
DB 49H,41H,1FH,01H,09H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -