nalrawahi said:
Some people say, you have to make both microcontrollers to have the same oscillator if you want both of them to get communicated through TTL (I2C). But that's not true all the time.
It's not true ANY of the time - unless you deliberately wrote it to be that way! - which would be rather stupid, and I've not seen anything done that way?.
Basically you can use either syncronous or asyncronous connections, with asyncronous (like RS232) the clock speed is inherent in the data stream, it's sent as a fixed known rate, with start and stop bits, which allows easy syncronisation. So the speed is dependent on the serial transfer speed, and both ends simply employ that - irrespective of clock rates.
With syncronous transfer you have seperate clock and data lines, with one of the devices generating the clock that controls the transfer of data. In this case there's no need for a fixed speed, and speed can vary from byte to byte, even bit to bit, I2C is an example of this type of transfer.
There are obviously other ways, but those are really the main two, both independent of processor speed.
A similar way (rather like a bit of both systems?) is Manchester coding, this is an asyncronous system (just a data line), but the data is coded in such a way that you can easily recover the clock from the data stream, and use it to receive the data - quite clever really?.