본문 바로가기

개발자/Algorithm

I2C 2 byte unsigned char pointer의 데이터를 unsigned integer로 변환

반응형



아래 코드는 I2C unsinged int 값을 2 byte unsigned char로 변환하여 나눠서 저장. address pointer=하위바이트,

 * address pointer+1=상위바이트 순으로 저장하는 코드 역으로 작업하는 코드는 그 아래~ 


주석 참고하시고, Atmega 2560에서 사용하는 코드입니다.


/**

* I2C unsinged int 값을 2 byte unsigned char로 변환하여 나눠서 저장. address pointer=하위바이트,

 * address pointer+1=상위바이트 순으로 저장.
 * @param 	integer			unsigned int, 변환할 정수값
 * @param 	pchar			unsigned char *, 변환하여 return하는 문자열 포인터
 * @return 	
 */

void Int2Char(unsigned int integer, unsigned char *pchar)
{
	
	*pchar = (unsigned char) ((integer>>8)&0xFF);
	*(pchar+1) = (unsigned char) (integer&0xFF);
	return;
}

void IntToChar(unsigned int integer, unsigned char *pchar, unsigned char pc_opt) {
	if (pc_opt) {
		*pchar = (unsigned char) ((integer>>8)&0xFF);
		*(pchar+1) = (unsigned char) (integer&0xFF);
	} else {
		*(pchar+1) = (unsigned char) ((integer>>8)&0xFF);
		*pchar = (unsigned char) (integer&0xFF);
	}
}

/**
 * I2C 2 byte unsigned char pointer의 데이터를 unsigned integer로 변환
 * @param 	pchar			unsigned char *, 변환할 문자열 포인터
 * @return 					unsigned int, 변환하여 return하는 정수값
 */

unsigned int Char2Int(unsigned char *pchar)
{
/*	
	unsigned int lui_temp;
	lui_temp = ((unsigned int )*(pchar+1)<<8)+ *(pchar);
	return lui_temp;
*/
	return ((((unsigned int)*(pchar))<<8)+ *(pchar + 1));
}

unsigned int CharToInt(unsigned char *pchar, unsigned char pc_opt)
{
	
	unsigned int lui_temp;
	if (pc_opt) {
		lui_temp = ((unsigned int )*(pchar)<<8)+ *(pchar + 1);
	} else {
		lui_temp = ((unsigned int )*(pchar+1)<<8)+ *(pchar);
	}
	return lui_temp;

}




반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^