1: /* I2C test program that writes & reads data to an I2C EEPROM device. */ 2: 3: #include 4: #include "delay.h" 5: #include "i2c.h" 6: 7: #define ROM 0xA0 /* I2C EEPROM */ 8: 9: void flashled(void) { /* flash a led on RB0 */ 10: while(1) { 11: RB0 = 1; 12: DelayMs(200); 13: RB0 = 0; 14: DelayMs(200); 15: } 16: } 17: 18: 19: void WriteByte(unsigned char addr, unsigned char byte) { 20: i2c_WriteTo(ROM); 21: if (i2c_PutByte(addr)==I2C_ERROR) 22: flashled(); 23: if (i2c_PutByte(byte)==I2C_ERROR) 24: flashled(); 25: } 26: 27: int ReadByte(unsigned char addr) { 28: i2c_WriteTo(ROM); 29: if (i2c_PutByte(addr)==I2C_ERROR) 30: flashled(); 31: i2c_ReadFrom(ROM); 32: return i2c_GetByte(I2C_LAST); 33: } 34: 35: void main(void) { 36: unsigned char count,val; 37: 38: TRISB=0; /* use a led on RB0 - set as output */ 39: PORTB=0; 40: RB0=0; 41: 42: /* initialize i2c */ 43: #ifdef I2C_MODULE 44: SSPMode(MASTER_MODE); 45: SSPEN = 1; 46: CKP = 1; 47: #else 48: SCL_DIR = I2C_OUTPUT; 49: SDA_DIR = I2C_OUTPUT; 50: SDA = 0; 51: SCL = 0; 52: #endif 53: 54: 55: while(1) { 56: for(count=0; count < 10; ++count) { 57: WriteByte(count,count); /* write to I2C EEPROM */ 58: val = ReadByte(count); /* read back value */ 59: if (val != count) /* verify */ 60: flashled(); 61: } 62: DelayMs(200); 63: } 64: } 65: 66: