Pull-up resistors are required on
SDA and SCL lines. See the
I2C
spec. for details.
The subroutine, I2CInit, needs to be called during
initialization, preferable after the I/O ports are initialized but
before calling any I2C read or write routines. I2CInit will
set up the I2C I/O pins and initialize the bus.
The EEPROM code needs to be customized to deal with the I/O pins being
used and the processor clock speed in each particular
application. All constants and registers that need to be modified are
found in
the I2C Memory Driver section. Check and if necessary, change the I/O
assignments to I2CPORT, I2CDDR, I2CPIN, bSDA, and
bSCL
in the I2C Memory Driver sect
Delays to accommodate various bus speed
and processor clock rates
are
controlled by the constant I2CDelayConstant.
The device address constant (ADDR24LC64 in this case) needs to match
that of the EEPROM being used. The 24LC64, 24LC128. and 24LC256 use
address
A0 when their address pins are tied low.
There are two main subroutines of interest.
WriteI2Mem writes the byte contained in register "I2WData" into the
EEPROM location pointed to by ZH,ZL.
ReadI2Mem reads the byte at the EEPROM location pointed to by ZH,ZL and
returns the byte in register "temp".
There are no provision within the subroutines to check for invalid
addresses.
Rights
The code, as far as I know, is in
the public domain.