Mấy ngày nay loay hoay với con 24c02 này, datasheet thì đọc đi đọc lại nhiều lần mấy cái giản đồ xung cách gửi với nhận của nó.tìm hiểu code trên mạng và viết ra 1 đoạn code như bên dưới.mô phỏng với con 24c02( 24c02C trên proteus) thì không chạy được, nhưng khi mình đổi địa chỉ sang mô phỏng con ds1307 thì lại chạy ok,không hiểu tại sao sao?không biết code của em có bị sai chỗ nào không nữa. có bác nào giao tiếp với con này rồi giúp đỡ cho em với.(Bác nào có code và mô phỏng với con này thì cho em tham khảo được không)
[code]
SDA EQU P3.7
SCL EQU P3.6
ORG 0000H
JMP MAIN
ORG 0030H
MAIN:
CALL I2C_INIT
CALL I2C_START
MOV A,#0A0H ; DIA CHI SLAVE
CALL I2C_SEND
CALL I2C_ACK
MOV A,#20H ; DIA CHI CAN GUI
CALL I2C_SEND
CALL I2C_ACK
MOV A,#11 ;GIA TRI CAN GUI
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_STOP
//
CALL I2C_INIT
CALL I2C_START
MOV A,#0A0H
CALL I2C_SEND
CALL I2C_ACK
MOV A,#20H; DIA CHI CAN DOC
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_RSTART
MOV A,#0A1H
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_RECEIVE
CALL I2C_NACK
CALL I2C_STOP
MOV P1,A
KT:
JMP KT
JMP MAIN
//--
I2C_ACK:
CLR SDA
SETB SCL
CLR SCL
SETB SDA
RET
//-
I2C_NACK:
SETB SDA
SETB SCL
CLR SCL
SETB SCL
RET
;CAC THIET LAP I2C
I2C_INIT:
SETB SDA
SETB SCL
RET
I2C_START:
SETB SDA
SETB SCL
CLR SDA
RET
I2C_RSTART:
CLR SCL
SETB SDA
SETB SCL
CLR SDA
RET
I2C_STOP:
CLR SCL
CLR SDA
SETB SCL
SETB SDA
RET
I2C_SEND:
MOV R7,#08
LOOP:
CLR SCL
RLC A
MOV SDA,C
SETB SCL
DJNZ R7,LOOP
CLR SCL ;KIEM TRA ACK HOAC NACK
SETB SDA ;
SETB SCL ;( doan cho nao van con thac mac chua hieu ho lam gi)
MOV C,SDA;
CLR SCL ;
RET
I2C_RECEIVE:
MOV R7,#08
LOOP1:
CLR SCL
MOV C,SDA
SETB SCL
RLC A
DJNZ R7,LOOP1
CLR SCL
SETB SDA
RET
END
[/code]
[code]
SDA EQU P3.7
SCL EQU P3.6
ORG 0000H
JMP MAIN
ORG 0030H
MAIN:
CALL I2C_INIT
CALL I2C_START
MOV A,#0A0H ; DIA CHI SLAVE
CALL I2C_SEND
CALL I2C_ACK
MOV A,#20H ; DIA CHI CAN GUI
CALL I2C_SEND
CALL I2C_ACK
MOV A,#11 ;GIA TRI CAN GUI
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_STOP
//
CALL I2C_INIT
CALL I2C_START
MOV A,#0A0H
CALL I2C_SEND
CALL I2C_ACK
MOV A,#20H; DIA CHI CAN DOC
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_RSTART
MOV A,#0A1H
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_RECEIVE
CALL I2C_NACK
CALL I2C_STOP
MOV P1,A
KT:
JMP KT
JMP MAIN
//--
I2C_ACK:
CLR SDA
SETB SCL
CLR SCL
SETB SDA
RET
//-
I2C_NACK:
SETB SDA
SETB SCL
CLR SCL
SETB SCL
RET
;CAC THIET LAP I2C
I2C_INIT:
SETB SDA
SETB SCL
RET
I2C_START:
SETB SDA
SETB SCL
CLR SDA
RET
I2C_RSTART:
CLR SCL
SETB SDA
SETB SCL
CLR SDA
RET
I2C_STOP:
CLR SCL
CLR SDA
SETB SCL
SETB SDA
RET
I2C_SEND:
MOV R7,#08
LOOP:
CLR SCL
RLC A
MOV SDA,C
SETB SCL
DJNZ R7,LOOP
CLR SCL ;KIEM TRA ACK HOAC NACK
SETB SDA ;
SETB SCL ;( doan cho nao van con thac mac chua hieu ho lam gi)
MOV C,SDA;
CLR SCL ;
RET
I2C_RECEIVE:
MOV R7,#08
LOOP1:
CLR SCL
MOV C,SDA
SETB SCL
RLC A
DJNZ R7,LOOP1
CLR SCL
SETB SDA
RET
END
[/code]

Comment