I2C-ATMEGA328p as Master and 24LC256 as slave
The value you are setting in send_address() function is one bit off. Chip address 0x50 is 7bit number, which has to be shifted 1 bit up when sending on I2C bus (lowest bit is read/write flag). So you should use send_address(0xa0) (that is 0x50&lt;&lt;1) in your code, or do the shift inside send_address() function.

By "when i send the Address+/W, i neither get ACK nor NACK" you mean that your code hangs in while (!(TWCR &amp;(1&lt;&lt;TWINT))); loop inside send_address()? If so, than it is different issue unrelated to the address mentioned above.