Witam, napisal pod assemblerem, obsluge i2c, ale cos nie moze mi wyjsc odczytanie pamieci,
czy ktos moglby zucic okiekiem na moj kod i powiedziec co niby jest nie tak?
Z goryu dzieki za pomoc.
JAk powinienem zabrac sie za odczytanie pierwszej komorki pamieci ?
czy ktos moglby zucic okiekiem na moj kod i powiedziec co niby jest nie tak?
Z goryu dzieki za pomoc.
;****************
i2c_start:
SETB SDA
SETB SCL
CALL delay_5us
CLR SDA
call delay_5us
RET
;*****************************************************
i2c_stop:
CLR SDA
SETB SCL
CALL delay_5us
SETB SDA
call delay_5us
RET
;*****************************************************
i2c_write: ; transmisja od MSB
MOV R1,#8
CLR SCL
CLR SDA
CALL delay_5us
write: RLC A ; wyslanie bajtu: 8bitow
MOV SDA,C
call delay_5us
SETB SCL
call delay_5us
CLR SCL
call delay_5us
DJNZ R1,write
SETB SDA ;linia sda w stanie wysokim
call delay_5us
SETB SCL ; read ACK
call delay_5us
MOV C,SDA
MOV F0,C
CLR SCL
call delay_5us
CLR SDA
call delay_5us
RET
;*****************************************************
i2c_read_ack:
MOV R1,#8
CLR SCL
SETB SDA
CALL delay_5us
read: SETB SCL
CALL delay_5us
MOV C,SDA
RLC A
call delay_5us
CLR SCL
call delay_5us
DJNZ R1,read
CLR SDA
call delay_5us
SETB SCL
call delay_5us
CLR SCL
CALL delay_5us
ret
;******************************************************
i2c_read_nack:
MOV R1,#8
CLR SCL
SETB SDA
CALL delay_5us
read2: SETB SCL
CALL delay_5us
MOV C,SDA
RLC A
call delay_5us
CLR SCL
call delay_5us
DJNZ R1,read2
SETB SDA
call delay_5us
SETB SCL
call delay_5us
CLR SCL
CALL delay_5us
clr SDA
call delay_5us
ret
;******************************************************
JAk powinienem zabrac sie za odczytanie pierwszej komorki pamieci ?