If you need some detailed info about I2C, please, look into application notes on the Silabs (Cygnal) site. Few moths ago, I wrote some 8051F01x I2C code based on these documents.
As I remembered, l also googled some nice document made by Michrochip which includes waveforms, detailed description of this topic and discussing some details about procedure, how to wait for an answer from slave. Maybe, I could find it somewhere if you really need it.
IMHO, I2C is my contemprorary favourite for short - up to 30 cm - distance, because I am really tired to solve an arbitration by software itself - for example, by 9-th bit of RS232, as mentioned above. I2C makes it by the HW and SW together and if you lost the arbitration, you can easily wait for free I2C link - of course, it is supported by HW on Cygnals too -, and try to "win" next time. All code is then interrupt driven state diagram which is "half duplex", but allows you to recognize Tx and Rx states. Broadcasting - aka general calling address - is also possible.
Last but not least,there is also Philips's application note AN255 about I2C describing a long distance I2C link (hunderds of meters). Very interesting reading at all. (But now, I am trying to build low cost duplex optical link - <20$ - up to 10 meters & 3Mb/s, so I have not time to try now.)
Jan