51单片机:如何将数据写入到DS18B20的eeprom中?

2024-11-01 04:23:26
有4个网友回答
网友(1):

你好!
建议你加一个 24C系列的存储芯片,这样更灵活使用

网友(2):


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

网友(3):

专门的地址存储,看看数据手册上面讲的很明白。

网友(4):

可以按时序图写入。