Finally it's working thanks everyone for their help and support without your help it would not been possible and i am posting the working code if in case anyone wants to refer it for their future use....
Thanks...
const int CLOCK_PIN = 2;
const int DATA_PIN = 4;
const int PACKET_BITS = 256;
const int PREAMBLE_LEN = 6;
const int DATA_LEN = ((PACKET_BITS / 4) - PREAMBLE_LEN);
enum {
PRE_0, PRE_1, PRE_2, PRE_3, PRE_4, PRE_5, DATA
} states;
byte preamble [] = {0x0C,0x0A,0x0A,0x0C,0x01,0x0F};
char hexAsciiVals[] = "0123456789ABCDEF";
byte state = PRE_0;
byte nibble;
int nibble_count = 0;
byte firstval;
void setup() {
pinMode(CLOCK_PIN, INPUT);
pinMode(DATA_PIN, INPUT);
Serial.begin(9600);
}
void loop() {
nibble = getNibble();
//nibble_count++;
switch (state) {
case PRE_0:
// if (nibble_count > PREAMBLE_LEN + DATA_LEN) {
// // we've read 32 bytes and still not found a match
// // for the preamble so skip a clock pulse
// while (digitalRead(CLOCK_PIN) == LOW);
// while (digitalRead(CLOCK_PIN) == HIGH);
// nibble_count = 0;
// } else
// {
// firstval = 12;
// Serial.write(hexAsciiVals[firstval]);
state = (nibble == preamble[0]) ? PRE_1 : PRE_0;
// Serial.write(hexAsciiVals[nibble]);
// }
break;
case PRE_1:
// Serial.write (hexAsciiVals[firstval]);
// Serial.print(hexAsciiVals[12]);
Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[1]) ? PRE_2 : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
break;
case PRE_2:
Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[2]) ? PRE_3 : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
break;
case PRE_3:
Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[3]) ? PRE_4 : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
break;
case PRE_4:
Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[4]) ? PRE_5 : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
break;
case PRE_5:
Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[5]) ? DATA : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
// nibble_count = 0;
break;
case DATA:
Serial.print(hexAsciiVals[nibble]);
if (nibble_count == DATA_LEN) {
// all done, start again
state = PRE_0;
nibble_count = 0;
Serial.println(' ');
Serial.print(hexAsciiVals[12]);
}
nibble_count++;
//Serial.println();
break;
}
// delay(10);
}
byte getNibble() {
byte val = 0;
for (byte bit_count = 0; bit_count < 4; bit_count++) {
while (digitalRead(CLOCK_PIN) == HIGH);
while (digitalRead(CLOCK_PIN) == LOW);
val <<= 1;
val |= digitalRead(DATA_PIN);
}
return (val &= 0x0F);
}