|
10bit 그레이코드를 바이너리 값으로 변환할려고 있는데... 뭐가 잘 안되네요....
아래 변환공식이 틀렸나요.
Gray[0] = (Bit1 & 0x01) ? 1 : 0;
Gray[1] = (Bit2 & 0x02) ? 1 : 0;
Gray[2] = (Bit3 & 0x04) ? 1 : 0;
Gray[3] = (Bit4 & 0x08) ? 1 : 0;
Gray[4] = (Bit5 & 0x10) ? 1 : 0;
Gray[5] = (Bit6 & 0x20) ? 1 : 0;
Gray[6] = (Bit7 & 0x40) ? 1 : 0;
Gray[7] = (Bit8 & 0x80) ? 1 : 0;
Gray[8] = (Bit9 & 0x100) ? 1 : 0;
Gray[9] = (Bit10 & 0x200) ? 1 : 0;
for(int i = 0; i++; i < 10) Binary[i] = 0;
for(int i = 0; i++; i < 10) Angle[i] = 0;
Binary[9] = Gray[9];
for(int i = 8; i--; i >= 0) {
Binary[i] = (Binary[i+1] == Gray[i]) ? 0 : 1; //exclusive OR
}
Angle[9] = (Binary[9] == 1) ? 512 : 0;
Angle[8] = (Binary[8] == 1) ? 256 : 0;
Angle[7] = (Binary[7] == 1) ? 128 : 0;
Angle[6] = (Binary[6] == 1) ? 64 : 0;
Angle[5] = (Binary[5] == 1) ? 32 : 0;
Angle[4] = (Binary[4] == 1) ? 16 : 0;
Angle[3] = (Binary[3] == 1) ? 8 : 0;
Angle[2] = (Binary[2] == 1) ? 4 : 0;
Angle[1] = (Binary[1] == 1) ? 2 : 0;
Angle[0] = (Binary[0] == 1) ? 1 : 0;
total_angle = 0;
for(int i = 0; i < 10; i++) {
total_angle += Angle[i];
}
Memo1->Lines->Add(AnsiString().sprintf("%.1f", total_angle));
|