Académique Documents
Professionnel Documents
Culture Documents
;I use this code for i2c devices such as LM75,DS1307,24C256 ;For defining any i2c device you must only consider hardwired addressing and address inputs ;So you can extend this code with limited changes ;Example:
;MOV DPTR,#125H ;MOV DYTA,#79H ;LCALL EEPROM_WRITE ;IN ADDRESS 125H DATA IS 79H
I2C_READ: MOV R7,#8 GFD: SETB SDA SETB SCL MOV C,SDA RLC A CLR SCL DJNZ R7,GFD MOV DYTA,A RET
DJNZ R7,WRITING
RET
I2C_START: SETB SCL SETB SDA CLR SDA CLR SCL RET
I2C_STOP: SETB SCL CLR SDA SETB SDA CLR SCL RET
;synchronizing clock
NO_ACK: SETB SDA CLR SCL JNB SDA,$ SETB SCL RET
;write in to eeprom
LCALL EEPROM_WRITE_ADDR LCALL ACK MOV A,DPH LCALL I2C_WRITE LCALL ACK
MOV A,DPL LCALL I2C_WRITE LCALL ACK MOV A,DYTA LCALL I2C_WRITE LCALL ACK LCALL I2C_STOP LCALL DELAY_STOP RET
LCALL EEPROM_WRITE_ADDR LCALL ACK MOV A,DPH LCALL I2C_WRITE LCALL ACK MOV A,DPL LCALL I2C_WRITE LCALL ACK LCALL I2C_START LCALL EEPROM_READ_ADDR LCALL ACK LCALL I2C_READ LCALL NO_ACK
DELAY_STOP:
MOV TMOD,#00000001B MOV TH0,#0EEH MOV TL0,#00H SETB TR0 SAC: JNB TF0,SAC CLR TR0 CLR TF0 RET