고객센터

세계적인 기업으로 발돋움하는 코노텍

통신포맷에서 온도 습도 데이타 변환방법

페이지 정보

작성일 11-01-26 15:12

본문

반갑습니다.
당사의 통신프로토콜은 각 제품의 설명서에 기본적인 내용이 설명되어 있습니다.

그중, 온도와 습도데이타를 호스트에서 수신하였을때 4바이트로 표시되나, 이를
십진수 형태로 변환하여야 합니다.

방법은 아래와 같습니다.

수신온도 데이타 : 0x30, 0x34, 0x44, 0x32 일때, 이것을 16진수로 변환합니다.
//--------------------------------------------------
unsigned char fAscii2Hex(unsigned char data)
{
if(data < 0x40) data = data - 0x30;
else data = data - 0x37;
return data;
}
//--------------------------------------------------
unsigned int temp;
temp = (unsigned int)fAscii2Hex(0x30) << 12;
temp = temp | ((unsigned int)fAscii2Hex(0x34) << 8);
temp = temp | ((unsigned int)fAscii2Hex(0x44) << 4);
temp = temp | (unsigned int)fAscii2Hex(0x32);

위와 같이 했을때 temp변수에는 0x04D2가 입력됩니다.
0x04D2를 십진수로 표현하면, 1234가 되겠지요..
여기서 소수점이 있는 포맷이면 온도는 123.4도가 되고,
소수점이 없는 포맷이면 1234도가 됩니다.

그러면, 수신데이타가 0x46, 0x42, 0x32, 0x45일때는 어떻게 계산이 되는지 보겠습니다.
temp = (unsigned int)fAscii2Hex(0x46) << 12;
temp = temp | ((unsigned int)fAscii2Hex(0x42) << 8);
temp = temp | ((unsigned int)fAscii2Hex(0x32) << 4);
temp = temp | (unsigned int)fAscii2Hex(0x45);
위 과정을 거치면 temp변수에는 0xFB2E가 저장됩니다.
이때 temp의 최상위 비트가 1이므로, 음수를 의미합니다.
(음수계산은 2의 보수형태로 계산합니다.)

따라서 0xFB2E는 소수점이 있는 포맷의 경우 -123.4도가 됩니다.

이상입니다.