你好!
建议你加一个 24C系列的存储芯片,这样更灵活使用
coun1 EQU 20H
coun2 EQU 21H
coun3 EQU 22H
NUM1 EQU 7EH
NUM2 EQU 7FH
FLAG BIT 0F0H
DQ BIT P2.7
DELAY60US: MOV R6,#15;1EH
DJNZ R6,$
RET
;********* 读 DATA程序**************
READ_T: CALL INT;DS18B20_INIT
MOV A,#0CCH ;JAMP OUT 64 BIT
CALL WRBYTE
CALL DELAY60US
CALL DELAY60US
MOV A,#44H
CALL WRBYTE
CALL DELAY60US
READ_T1: CALL INT ;DS18B20_INIT
;MOV A,#0CCH
;CALL WRBYTE
;CALL DELAY60US
MOV A,#0B8H ;EEPROM TO 3-4 BYTE
CALL WRBYTE
CALL DELAY60US
CALL INT ;DS18B20_INIT
MOV A,#0CCH
CALL WRBYTE
CALL DELAY60US
MOV A,#0BEH ;READ 9 BYTE
CALL WRBYTE
CALL DELAY60US
CALL RDBYTE ;存温度 TL ->7CH
MOV 7CH,A
CALL RDBYTE ;存温度 TH ->7DH
MOV 7DH,A
CALL RDBYTE ;读设置1 TL1->7EH
MOV NUM1,A
CALL RDBYTE ;读设置2 TH1->7FH
MOV NUM2,A
RET
;************写 DATA程序***************
SAVE_T: CALL INT;DS18B20_INIT
MOV A,#0CCH ;JAMP 64 BIT
CALL WRBYTE
CALL DELAY60US
MOV A,#4EH ;WRITE 3-4 BYTE
CALL WRBYTE
CALL DELAY60US
MOV A,NUM1 ;写设置1 7EH->TL1
CALL WRBYTE
CALL DELAY60US
MOV A,NUM2 ;写设置2 7FH->TH1
CALL WRBYTE
CALL DELAY60US
CALL INT ;DS18B20_INIT
MOV A,#48H ;SAVE 3-4 BYTE TO EEPROM
CALL WRBYTE
CALL DELAY60US
ret
;*************************************
; 初始化DS18B20 6MHZ
;*************************************
;----------INIT 18B20-----------------------
INT: CLR EA
L0: CLR DQ
MOV R2,#120
DJNZ R2,$ ;480us
SETB DQ
MOV R2,#15
DJNZ R2,$ ;60us
CLR C
ORL C,DQ
JC L0
MOV R6,#10
L5: ORL C,DQ
JC L3
DJNZ R6,L5
SJMP INT
L3: MOV R2,#120
DJNZ R2,$ ;480us
RET
;----------WRITE 1 BYTE 18B20----------------------
;*****************************************
; 写DS18B20程序 6MHZ
;*****************************************
WRBYTE: CLR EA
MOV R3,#8
WR1: SETB DQ
MOV R4,#4
RRC A
CLR DQ
MOV R4,$ ;WAIT 16us
MOV DQ,C
MOV R4,#10
MOV R4,$ ;WAIT 40us
DJNZ R3,WR1
SETB DQ
RET
;----------READ 1 BYTE 18B20-----------------------
;**************************************
; 读DS18B20一个字节程序 6MHZ
;**************************************
RDBYTE: CLR EA
MOV R6,#8
RE1: CLR DQ
MOV R4,#2
NOP
SETB DQ
MOV R4,$ ;WAIT 8us
MOV C,DQ
RRC A
MOV R5,#15
MOV R5,$ ;WAIT 60us
DJNZ R6,RE1
SETB DQ
RET
;----------GET_SEG 读18B20序列号---------------------
GET_SEG: MOV R7,#8
MOV R0,#30H
LCALL INT
MOV A,#33H
LCALL WRBYTE
GET_S: LCALL RDBYTE
MOV @R0,A
INC R0
DJNZ R7,GET_S
RET
END
专门的地址存储,看看数据手册上面讲的很明白。
可以按时序图写入。