📄 时钟.asm
字号:
MOV ACC.7,C
MOV P1,A
CLR P3.0
ACALL DL01MS
SETB P3.0
MOV A,@R0
INC R0
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.1
ACALL DL01MS
SETB P3.1
JB FLAG01,SHAI03
MOV A,@R0
INC R0
ADD A,#0AH
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.4
ACALL DL01MS
SETB P3.4
MOV A,@R0
INC R0
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.5
ACALL DL01MS
SETB P3.5
SETB FLAG01
JMP SHAI04
SHAI03:MOV A,@R0
INC R0
ADD A,#0AH
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
ACALL DL01MS
SETB P3.4
MOV A,@R0
INC R0
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
ACALL DL01MS
SETB P3.5
CLR FLAG01
SHAI04: RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; T1中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INTERT1 : NOP
MOV TH1,#3CH
MOV TL1,#0B0H
PUSH ACC
PUSH PSW
CLR ET0
CLR ET1
MOV A,NUMT1
INC A
MOV NUMT1,A
CJNE A,#5,ENDINTERT1
MOV A,KEYNUMT1
INC A
MOV KEYNUMT1,A
MOV NUMT1,#00H
ENDINTERT1: SETB ET1
SETB ET0
POP PSW
POP ACC
RETI
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ***整点报时***
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ZDBS: MOV A,MBUFF
JNZ ZDBSEND
MOV A,SBUFF
CJNE A,#3CH,ZDBSEND
CLR P3.3
ACALL DL0FIVE
SETB P3.3
ZDBSEND: RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ***晚上显示子程序************
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NIGHTDISPLAY:NOP
MOV A,HBUFF2
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.0
ACALL DL1MS
SETB P3.0
ACALL DL1MS
ACALL DL1MS
MOV A,HBUFF1
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.1
ACALL DL1MS
SETB P3.1
ACALL DL1MS
ACALL DL1MS
MOV A,MBUFF2
ADD A,#0AH
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.4
ACALL DL1MS
SETB P3.4
ACALL DL1MS
ACALL DL1MS
MOV A,MBUFF1
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.5
ACALL DL1MS
SETB P3.5
ACALL DL1MS
ACALL DL1MS
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ******显示子程序******
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DISPLAY:
MOV A,HBUFF2
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.0
ACALL DL1MS
SETB P3.0
MOV A,HBUFF1
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.1
ACALL DL1MS
SETB P3.1
MOV A,MBUFF2
ADD A,#0AH
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.4
ACALL DL1MS
SETB P3.4
MOV A,MBUFF1
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.5
ACALL DL1MS
SETB P3.5
RET
TAB: DB 040H,079H,024H,030H,19H
DB 12H,02H,078H,00H,10H
DB 040h,04fh,024h,06h,0bh,12h,1h,047h,00h,03h
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ******延时子程序*******
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DL1MS: MOV R6,#20
DL11: MOV R7,#25
DL12: DJNZ R7,DL12
DJNZ R6,DL11
RET
D1MS: MOV R6,#10
D11: MOV R7,#10
D12: DJNZ R7,D12
DJNZ R6,D11
RET
DL01MS: MOV R6,#30
DL01: MOV R7,#35
DL02: DJNZ R7,DL02
DJNZ R6,DL01
RET
DL100MS: MOV R6,#200
DL100MS1: MOV R7,#250
DL100MS2: DJNZ R7,DL100MS2
DJNZ R6,DL100MS1
RET
DL11S: MOV R5,#10
DL1S0: MOV R6,#200
DL1S1: MOV R7,#250
DL1S2: DJNZ R7,DL1S2
DJNZ R6,DL1S1
DJNZ R5,DL1S0
RET
DL0FIVE: MOV R5,#5
DL0: MOV R6,#200
DL1: MOV R7,#250
DL2: DJNZ R7,DL2
DJNZ R6,DL1
DJNZ R5,DL0
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; *******T0中断程序********
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INTERT0:PUSH ACC
PUSH PSW
CLR ET0
MOV A,SBUFF
CJNE A,#028H,SET1
MOV R4,#0DCH
SET1: DJNZ NUM,END0
MOV NUM,#8
CPL DP
CLR P3.3
NOP
SETB P3.3
DJNZ SBUFF,END0
SETB P3.7
MOV SBUFF,#03CH
MOV R4,#0DBH
ACALL ADDBUFF0
END0: MOV A,NUM
CJNE A,#04H,END1
CPL DP
CLR P3.7
END1: POP PSW
POP ACC
SETB ET0
RETI
RDTMP: PUSH A
PUSH PSW
LCALL RESET ;调用复位子程序
MOV A,#0CCH ;写跳过ROM命令
LCALL WRITE ;调用写一个字节子程序
MOV A,#44H ;启动温度转化
LCALL WRITE
LCALL RESET
MOV A,#0CCH
LCALL WRITE
MOV A,#0BEH ;发读存储器命令
LCALL WRITE
LCALL READ
MOV A,51H
MOV 4EH,A
LCALL READ
MOV A,51H
MOV 4FH,A
ANL 4FH,#0FH ;将温度值转化成BCD码
ANL 4EH,#0F0H
CLR A
ADD A,4EH
ADD A,4FH
SWAP A
N0: MOV 55H,#00H
AA: MOV B,#10
DIV AB
ANL A,#0FH
ANL B,#0FH
MOV 52H,A
MOV 53H,B
MOV R0,#200 ;显示温度
HUI001: MOV A,52H ;温度十位
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.0
ACALL DL1MS
SETB P3.0
MOV A,53H ;温度个位
MOVC A,@A+DPTR
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.1
ACALL DL1MS
SETB P3.1
MOV A, #70H ;温度符号
MOV C,DP
MOV ACC.7,C
MOV P1,A
CLR P3.4
ACALL DL1MS
SETB P3.4
DJNZ R0 ,HUI001
POP PSW
POP A
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; DS18B20的复位程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RESET: NOP
L0: CLR P3.5
MOV R2,#100
L1: NOP
DJNZ R2,L1
SETB P3.5
MOV R2,#15
L4: DJNZ R2,L4
CLR C
ORL C,P3.5
JC L3
MOV R6,#40
L5: ORL C,P3.5
JC L3
DJNZ R6,L5
SJMP L0
L3: MOV R2,#125
L2: DJNZ R2,L2
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;写入DS18B20
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WRITE: MOV R3,#8
WR1: SETB P3.5
MOV R4,#3
RRC A
CLR P3.5
WR2: DJNZ R4,WR2
MOV P3.5,C
MOV R4,#10
WR3: DJNZ R4,WR3
DJNZ R3,WR1
SETB P3.5
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 读一个字节子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
READ: MOV R6,#8
RE1: CLR P3.5
MOV R4,#3
NOP
SETB P3.5
RE2: DJNZ R4,RE2
MOV C,P3.5
RRC A
MOV R5,#15
RE3: DJNZ R5,$
DJNZ R6,RE1
MOV 51H,A
SETB P3.5
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -