📄 h1820.asm
字号:
$INCLUDE(C8051F020.INC)
DAT3 DATA 030H
DAT4 DATA 031H
BIT1 DATA 032H
BIT2 DATA 033H
BIT3 DATA 034H
BIT4 DATA 035H
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
CLOCK: MOV OSCXCN,#067H
CLR A
DJNZ ACC,$
DJNZ ACC,$
WAIT: MOV A,OSCXCN
JNB ACC.7,WAIT
ORL OSCICN,#80H
ORL OSCXCN,#80H
SETT: MOV XBR2,#40H
MOV P1MDOUT,#0FFH
MOV P2MDOUT,#0FFH
MOV TMOD,#10H
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
MAIN: LCALL RESET //reset
JNB PSW.1,MAIN
MOV DATIN,#0CCH //skip rom
LCALL WRITE
CONVERT: LCALL RESET //RESET
JNB PSW.1,CONVERT
MOV DATIN,#0CCH //SKIP ROM
LCALL WRITE
MOV DATIN,#044H //convert
LCALL WRITE
LCALL READ //read time
CNVTWAIT: JNB P2.0,CNVTWAIT
RST: LCALL RESET // RESET
JNB PSW.1,RST
MOV DATIN,#0CCH //skip rom
LCALL WRITE
MOV DATIN,#0BEH //read code
LCALL WRITE
LCALL READT
SST: JNB P2.0,SST
LCALL READ //read data(dat4,dat3)
MOV DAT3,DATOUT
LCALL READ
MOV DAT4,DATOUT
MOV A,DAT3
ANL A,#0FH
MOV DAT1,#01H
MOV DAT2,A
LCALL SEND
MOV A,DAT3
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV DAT1,#02H
MOV DAT2,A
LCALL SEND
MOV A,DAT4
ANL A,#0FH
MOV DAT1,#03H
MOV DAT2,A
LCALL SEND
MOV A,DAT4
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV DAT1,#04H
MOV DAT2,A
LCALL SEND
ENDD: LJMP MAIN
//************************************************//RESET DS18B20
RESET: SETB P2.0
MOV R0,#01H
LCALL DELAY2US
CLR P2.0
MOV R1,#50 //500 US
LCALL DELAY10US
SETB P2.0
MOV R1,#06H //60 US
LCALL DELAY10US
JNB P2.0,RETT
SETB PSW.1
MOV R1,#24 //240 US
LCALL DELAY10US
RETT: RET
//************************************************//READ DS18B20 DATA
READ: MOV R2,#08H
READLOOP: CLR P2.0 //P2.0=0
MOV R0,#02H
LCALL DELAY2US //4 US
SETB P2.0 //P2.0=1
MOV R0,#02H //4 US
LCALL DELAY2US
CLR C
MOV C,P2.0 //START READ
MOV DATOUT.7,C
MOV A,DATOUT
RR A
MOV DATOUT,A
MOV R1,#06H //60 US
LCALL DELAY10US
DJNZ R2,READLOOP
SETB P2.0
MOV R0,#01H //2 US
LCALL DELAY2US
RET
//*************************************************//写数据 P2.0=1
WRITE: MOV R3,#08H
WRITELOOP:CLR P2.0 //P2.0=0
MOV R0,#01H //2 US
LCALL DELAY2US
MOV C,DATIN.0
MOV P2.0,C //START WRITE
MOV A,DATIN
RR A
MOV DATIN,A
MOV R1,#06H //60 US
LCALL DELAY10US
DJNZ R3,WRITELOOP
SETB P2.0
MOV R0,#01H //2 US
LCALL DELAY2US
RET
//**************************************************//读时间间隙
READT: CLR P2.0 //P2.0=0
MOV R0,#01H
LCALL DELAY2US //2 US
SETB P2.0 //P2.0=1
MOV R0,#02H //4 US
LCALL DELAY2US
MOV R1,#06H
LCALL DELAY10US
RET
//**************************************************//MAX7219SEND
SEND: MOV R0,#08H //7219 SEND
CLR LOAD
MOV 050H,A
PUSH 050H
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
POP 050H
MOV A,050H
RET
//*****************************************************//DELAY 2 US
DELAY2US: MOV TH0,#0FFH //2US
MOV TL0,#0FFH
SETB TR0
LOOP1: JBC TF0,LOOP2
SJMP LOOP1
LOOP2: CLR TR0
CLR TF0
DJNZ R0,DELAY2US
RET
//******************************************************//DELAY 10 US
DELAY10US:MOV TH1,#0FFH //10US
MOV TL1,#0F7H
SETB TR1
LOOP3: JBC TF1,LOOP4
SJMP LOOP3
LOOP4: CLR TR1
CLR TF1
DJNZ R1,DELAY10US
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -