#include <p18f452.h>
#include "i2c.h"
#pragma config WDT = OFF, LVP = OFF, OSC = HS
unsigned char buffer;
unsigned char data;
void WriteEEB(unsigned char deviceHard,unsigned char block,unsigned char address,unsigned char data);
void ReadEEB(unsigned char deviceHard,unsigned char block,unsigned char address,unsigned char *buff);
void main(void)
{
data = 'A';
OpenI2C(MASTER, SLEW_ON);// Initialize I2C module
//SLEW_ON = 400kHz Baud is using 5v
//SLEW_OFF = 100kHz Baud if under 5v
WriteEEB(0x00,0x00,0x00,data);
ReadEEB(0x00,0x00,0x00,&buffer);
while(1) ;
}
void WriteEEB(unsigned char deviceHard,unsigned char block,unsigned char address,unsigned char data)
{
char DevAddr;
DevAddr = ((deviceHard << 4) | block) | 0b10000000;
StartI2C(); // initiate START condition
WriteI2C( DevAddr );
while(SSPCON2bits.ACKSTAT);
WriteI2C( address );
while(SSPCON2bits.ACKSTAT);
WriteI2C( data );
while(SSPCON2bits.ACKSTAT);
StopI2C();
}
void ReadEEB(unsigned char deviceHard,unsigned char block,unsigned char address,unsigned char *buff)
{
char DevAddrR, DevAddrW;
DevAddrR = ((deviceHard << 4) | block) & 0b01111111;
DevAddrW = ((deviceHard << 4) | block) | 0b10000000;
StartI2C();
WriteI2C( DevAddrW );
while(SSPCON2bits.ACKSTAT);
WriteI2C( address );
while(SSPCON2bits.ACKSTAT);
StartI2C();
WriteI2C( DevAddrR );
while(SSPCON2bits.ACKSTAT);
*buff = ReadI2C();
NotAckI2C();
StopI2C();
}