📄 h.asm
字号:
$INCLUDE(C8051F020.INC)
DAT3 DATA 030H
DAT4 DATA 031H
BIT1 DATA 032H
BIT2 DATA 033H
BIT3 DATA 034H
BIT4 DATA 035H
C1 DATA 036H
CC DATA 037H
C2 DATA 038H
RESULT DATA 039H
DATIN DATA 021H
DATOUT DATA 022H
DAT1 DATA 023H
DAT2 DATA 024H
DIN BIT P1.1
LOAD BIT P1.2
CLK BIT P1.3
ORG 0000H
AJMP START
ORG 0100H
START: MOV WDTCN,#0DEH
MOV WDTCN,#0ADH
CLR EA
CLOCK: MOV OSCXCN,#67H
CLR A
DJNZ ACC,$
DJNZ ACC,$
WAIT: MOV A,OSCXCN
JNB ACC.7,WAIT
ORL OSCICN,#08H
ORL OSCXCN,#80H
SETT: MOV XBR2,#40H
MOV P1MDOUT,#0FFH
MOV P2MDOUT,#0FFH
MOV TMOD,#11H
MOV DAT1,#09H //硬件译码
MOV DAT2,#0FFH
LCALL SEND
MOV DAT1,#0AH //强度5
MOV DAT2,#04H
LCALL SEND
MOV DAT1,#0BH //限扫4
MOV DAT2,#03H
LCALL SEND
MOV DAT1,#0CH// 启动
MOV DAT2,#01H
LCALL SEND
CLR PSW.1
MAIN: LCALL RESET //reset
JNB PSW.1,MAIN
CLR PSW.1
MOV DAT1,#01H//
MOV DAT2,#01H
LCALL SEND
MOV DAT1,#02H//
MOV DAT2,#00H
LCALL SEND
MOV DAT1,#03H//
MOV DAT2,#00H
LCALL SEND
MOV DAT1,#04H
MOV DAT2,#01H
LCALL SEND
MOV C2,#20
LCALL DEL50M
MOV DATIN,#0CCH //skip rom
LCALL WRITE
CONVERT: MOV DATIN,#044H //convert
LCALL WRITE
WAT: MOV C2,#12 //WAIT FOR CONVERTING
LCALL DEL50M
CNVTOK: CLR PSW.1
LCALL RESET // RESET
JNB PSW.1,MAIN
CLR PSW.1
MOV DATIN,#0CCH //skip rom
LCALL WRITE
MOV DATIN,#0BEH //read code
LCALL WRITE
; CALL READT //READ TIME
;SST: JNB P2.0,SST
LCALL READ //read data(dat4,dat3)
MOV DAT3,DATOUT
LCALL READ
MOV DAT4,DATOUT
MOV A,DAT4
ANL A,#0F0H
CLR C
ADD A,#010H //P or N,
JC NEG
POSITIVE: MOV A,DAT3 //positive 小数位
ANL A,#0FH
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV R7,A
MOV A,B
CLR C
CJNE A,#08,POS1
POS1: JC POS2
INC R7
MOV DAT1,#01H
MOV DAT2,R7
LCALL SEND
SJMP POS3
POS2: MOV DAT1,#01H
MOV DAT2,R7
LCALL SEND
POS3: MOV A,DAT3
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV R6,A
MOV A,DAT4
ANL A,#00FH
RL A
RL A
RL A
RL A
ORL A,R6
ADD A,#00H
CLR C
DA A
MOV BIT3,A
ANL BIT3,#00FH
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV BIT4,A
MOV DAT1,#02H
MOV DAT2,BIT3
ORL DAT2,#80H
LCALL SEND
MOV DAT1,#03H
MOV DAT2,BIT4
LCALL SEND
JNC ENDD
MOV DAT1,#04H
MOV DAT2,#01H
LCALL SEND
ENDD: LJMP MAIN
NEG: CLR C
MOV A,DAT3
CPL A
ADD A,#01H
MOV A,DAT4
CPL A
ADDC A,#00H
MOV DAT1,#04H
MOV DAT2,#0AH
LCALL SEND
JMP POSITIVE
//************************************************//RESET DS18B20
RESET: SETB P2.0
MOV CC,#7
R2US1: DJNZ CC,R2US1 //2 US
CLR P2.0
MOV C1,#8 //480 US
LCALL DEL60US
SETB P2.0
MOV C1,#03H //60 US
LCALL DEL60US
JBC P2.0,RETT
SETB PSW.1 // OK PSW.1=1;
RETT: MOV C1,#6 //480 US
LCALL DEL60US
RET
//************************************************//READ DS18B20 DATA
READ: MOV R2,#08H
READLOOP: CLR P2.0 //P2.0=0
MOV CC,#04H
R1US1: DJNZ CC,R1US1
SETB P2.0
MOV CC,#04H //1.4 US
R1US2: DJNZ CC,R1US2
CLR C
MOV C,P2.0 //START READ
MOV DATOUT.7,C
MOV A,DATOUT
RR A
MOV DATOUT,A
MOV C1,#01H
LCALL DEL60US //60US
DJNZ R2,READLOOP
SETB P2.0
MOV CC,#04H //1.4 US
R1US3: DJNZ CC,R1US3
RET
//*************************************************//写数据 P2.0=1
WRITE: MOV R3,#08H
WRITELOOP:CLR P2.0 //P2.0=0
MOV CC,#04H //***************** ALMOST *******************//
W1US1: DJNZ CC,W1US1 //***************** 1.4 US *******************//
JNB DATIN.0,WRT0
WRT1: SETB P2.0 //START WRITE
MOV C1,#001H
LCALL DEL60US //60 US
MOV CC,#030H
W1US4: DJNZ CC,W1US4 //10 US
SJMP WRLOP
WRT0: MOV C1,#001H
LCALL DEL60US //60 US
MOV CC,#030H
W1US3: DJNZ CC,W1US3 //10 US
WRLOP: MOV A,DATIN
RR A
MOV DATIN,A
DJNZ R3,WRITELOOP
SETB P2.0
MOV CC,#04H
W1US2: DJNZ CC,W1US2 //1.4 US
RET
//**************************************************//读时间间隙
;READT: CLR EA
; CLR P2.0 //P2.0=0
;R1US4: MOV CC,#04H
; DJNZ CC,R1US1
; SETB P2.0 //P2.0=1
;R1US5: MOV CC,#55H
; DJNZ CC,R1US5
; SETB P2.0
; RET
//**************************************************//MAX7219SEND
SEND: MOV R0,#08H //7219 SEND
CLR LOAD
SENDLOOP: CLR CLK
MOV C,DAT1.7
MOV DIN,C
SETB CLK
MOV A,DAT1
RL A
MOV DAT1,A
DJNZ R0,SENDLOOP
SEND1: MOV R3,#08H
SENDLOOP1:CLR CLK
MOV C,DAT2.7
MOV DIN,C
SETB CLK
MOV A,DAT2
RL A
MOV DAT2,A
DJNZ R3,SENDLOOP1
SETB LOAD
RET
//******************************************************//50MS
DEL50M: MOV TH1,#03CH
MOV TL1,#0B1H
SETB TR1
LOOP3: JBC TF1,LOOP4
SJMP LOOP3
LOOP4: CLR TR1
CLR TF1
DJNZ C2,DEL50M
RET
//*******************************************************//delay 60us
DEL60US: MOV TH0,#0FFH
MOV TL0,#0C5H
SETB TR0
LOOP5: JBC TF0,LOOP6
SJMP LOOP5
LOOP6: CLR TF0
CLR TR0
DJNZ C1,DEL60US
RET
EX:
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -