Goovaerts, read the I2C spec, and understand what needs to be done before attempting to implement it. If you do that, you'll be able to work out how other people's I2C code works. > RELEASEBUS its not an instruction, it is a macro to release the bus. The I2C spec requires 4.7 us between signal events. This is so short you can make do with goto $+1 ; 2us nop! goto $+1 ; 2us nop! on a 4MHz PIC. > Clock stretching Is in the spec. Thus obligatory. It's not hard to do, so why deliberately make your code non-spec. Do it properly, and you'll never worry about whether doing it wrong is causing your bug. I already posted you some working commented code snippets. If that didn't get you working, what will?