Vous êtes sur la page 1sur 6

;****************************** ;I2C ROUTINS ***

;Published By Mehdi N.Rahni *** ;******************************

;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

;MOV DPTR,#125H ;LCALL EEPROM_READ ;MOV A,DYTA ;NOW ACC IS 79H

SDA SCL DYTA ADRES

EQU P2.6 EQU P2.7 EQU 50H EQU 51H

I2C_READ: MOV R7,#8 GFD: SETB SDA SETB SCL MOV C,SDA RLC A CLR SCL DJNZ R7,GFD MOV DYTA,A RET

;reading 8 bits from i2c device

I2C_WRITE: MOV R7,#8 WRITING: RLC A MOV SDA,C LCALL CLOCK

;writing 8 bits in to i2c device

DJNZ R7,WRITING

RET

I2C_START: SETB SCL SETB SDA CLR SDA CLR SCL RET

;start of i2c routine

I2C_STOP: SETB SCL CLR SDA SETB SDA CLR SCL RET

;end of i2c routine

CLOCK: SETB SCL CLR SCL RET

;synchronizing clock

ACK: SETB SDA

;acknowledge from transmitter or receiver

SETB SCL JB SDA,$ CLR SCL RET

NO_ACK: SETB SDA CLR SCL JNB SDA,$ SETB SCL RET

;no acknowledge from transmitter or receiver

;************************* ;SERIAL EEPROM PACKAGE**** ;*************************

EEPROM_WRITE: LCALL I2C_START

;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

EEPROM_READ: LCALL I2C_START

;read from eeprom

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

LCALL I2C_STOP RET

EEPROM_READ_ADDR: MOV A,#10100001B LCALL I2C_WRITE RET

;A2,A1,A0 are zero

EEPROM_WRITE_ADDR: ;A2,A1,A0 are zero MOV A,#10100000B LCALL I2C_WRITE RET

DELAY_STOP:

;terminating write process

MOV TMOD,#00000001B MOV TH0,#0EEH MOV TL0,#00H SETB TR0 SAC: JNB TF0,SAC CLR TR0 CLR TF0 RET

Vous aimerez peut-être aussi