You have a few obvious problems here.
if (Serial.available()) { int data_rcvd = Serial.read() << 7; //get Higher 7 bits int data_rcvd += Serial.read() & 0x7F; //get and add Lower 7 bits
You are testing that one byte is available on the serial port and then reading two bytes. Too soon. Test for two bytes if you are planning to read two.
if (data_rcvd == '0') digitalWrite(3, LOW); // switch LED Off
Why the quotes? Why not: if (data_rcvd == 0) ?
How are you intending to synchronize the sending and receiving?
Your sender is sending HLHLHLHL - what if the receiver starts while the low byte is being sent? You will receive LHLHLH which means your received data will be meaningless.
You are better off sending "readable" data, like "1500" rather than 1500, terminating with a newline, and structuring your receiving code to read until it hits a newline. That will synchronize the receiver (after the first reading, anyway).
For more tips about reading serial data see: How does serial communications work on the Arduino?
Also my post about serial data on my forum has code for buffering incoming serial data and waiting for a newline.