A long time ago Bruce helped me with I2C comms between chips. I was having problems because it was so easy. As an example here is the slave code. I built a board with an address selector switch connected to port C so that I could place them on a Bus without having to reprogram them. The Slaves are monitoring inputs from Volt Free Contacts conected to Port B.

Code:
' PicBasic Pro I2C slave program - PIC16F72/PIC-X1
    ' bootloader and OSC settings
'DEFINE LOADER_USED 1 ' bootloader
DEFINE osc 20
INCLUDE "modedefs.bas"

' Alias pins
scl     VAR     PORTC.3         ' I2C clock input
sda     VAR     PORTC.4         ' I2C data input


' Define used register flags
SSPIF   VAR     PIR1.3          ' SSP (I2C) interrupt flag
BF      VAR     SSPSTAT.0       ' SSP (I2C) Buffer Full
R_W     VAR     SSPSTAT.2       ' SSP (I2C) Read/Write
D_A     VAR     SSPSTAT.5       ' SSP (I2C) Data/Address
CKP     VAR     SSPCON.4        ' SSP (I2C) SCK Release Control
SSPEN   VAR     SSPCON.5        ' SSP (I2C) Enable
SSPOV   VAR     SSPCON.6        ' SSP (I2C) Receive Overflow Indicator
WCOL    VAR     SSPCON.7        ' SSP (I2C) Write Collision Detect



' Allocate RAM
result	VAR		BYTE			' ADC result
datain 	VAR     BYTE			' Data in 
readcnt	VAR     BYTE            ' I2C read count
I2Caddress	VAR		BYTE			' Our address	


' Initialize ports and directions
        TRISA = %11111111
		TRISB = %11111111
		TRISC = %11111111
' Initialize I2C slave mode reading inputs from hardware address settings
        I2Caddress=0
        IF PORTC.0=0 Then I2Caddress=I2Caddress+1
        IF PORTC.1=0 Then I2Caddress=I2Caddress+2
        IF PORTC.2=0 Then I2Caddress=I2Caddress+4
        IF PORTC.5=0 Then I2Caddress=I2Caddress+8
        
        
        SSPADD = I2Caddress		' Set our address
        SSPCON = $36			' Set to I2C slave with 7-bit address
        

While 1>0
      
        While NOT SSPIF
        Wend			' Check for I2C interrupt flag

		SSPIF = 0				' Clear interrupt flag
        IF D_A = 0 Then
        readcnt = 0		' Mark as first read
        EndIF
      
	
        SSPBUF = PORTB	' Get data from array
        CKP = 1                 	' Release SCL line
        readcnt = readcnt + 1   	' Move along read count
 Wend
Steve