Ah ha! The 'data' portion of the transfer needs brackets. Otherwise the compiler accepts them as good but doesn't issue the I2C stop condition.

Another "feature" of PBP, a silent compile error.


Bob:

On the 16F88, PortB.1 and PortB.4 are used for I2C . (Datasheet!) B1 is the data line and B.4 is the clock line.
That would be true if PBP used the internal hardware for I2C. It doesn't, it just bit bangs the ports (well, actually the tris registers so it can do open collector type outputs). If you skim down a disasembly listing or memory listing (something MPLAB will get for you if you load both the hex and cod files) you'll see it doing this.

I did not used the hardware I2C for several reasons, mainly I don't want hardware I2C support to be a PIC choice requirement.