> "colder head"
"Cool head", same in English.
There are two ways to represent the Slave Address. It is a seven bit field in an 8 bit register, and is 8 bits on the I2C bus when drawn on paper or on a CRO.
So you can either use the 7 bit value in the Data Sheets and in code or you can use the 8 bit value. I'm looking at an Atmel AT24C32 Data Sheet, and it represents the address on the bus as:
------------------------------------------| 1 | 0 | 1 | 0 | A2 | A1 | A0 | rw |------------------------------------------
So it's your choice (as a programmer) whether to call that "0xA0 - 0xAE" or "0x70 - 0x77".
If you've chosen the "more correct" 7 bit value, then at some point in your code you have to convert from the 7-bit address to the 8-bit register value. If you really want to make the code hard to follow you have different parts of the code using different representations, or you hide the conversion in a macro somewhere.
Of course if you're starting with someone else's code you have to unpick what they did.
There are ways to make this clear, by using good comments and sensible naming conventions. You could even declare typedefs for the 7-bit and 8-bit representations and have explicit conversion functions, but that would be way too professional for low level driver code like this
.
I don't think I've ever seen "professional looking" I2C code. It is usually "hacked into shape" and left alone when it first seems to work, leaving confusion in its wake for the next programmer to work on it.
Welcome to the club 
> slaveAddress &=0XFE should be slaveAddress=(slaveadress<<1)|I2C_Status
You're assuming it is passed in in 7 bit form. You're then converting a 7-bit-represented address into an 8-bit-represented address in the same variable witout a warning stating "must be 7 bits above here and is 8 bits below here".
The definition of that function should contain proper header comments detailing EXACTLY what each argument is.
I'd guess in not only doesn't detail this, but it doesn't have any description of the interface at all.
It is likely the shift is being done in the calling function, or (more likely) the original definition (or magic hex number) used to call that function was already shifted into "8 bit format".
Tom