нужно 8-разрядное значение АЦП передать в символьном виде в аски коде. Написал две функции для старшего и младшего полубайта.
u08 CharToMSBConverter(u08 bvByte)
{
u08 a, b, c, d, e;
a = bvByte>>4;
b = a%10;
c = a-9*b;
d = b<<4;
e = c+d+0x30;
return e;
}
u08 CharToLSBConverter(u08 bvByte)
{
u08 a, b, c, d, e;
a = bvByte&0x0f;
b = a%10;
c = a-9*b;
d = b<<4;
e = c+d+0x30;
return e;
но принимающая сторона это не понимает, а когда передаю непосредственно символами то все нормально. Подскажите в чем я ошибся, на бумаге вроде все правильно. Пишу в IAR для ATmega32. Заранее спасибо.
megajohn
Dec 15 2014, 15:27
намудрили на ровном месте
пробуйте так
u8 src = 0x12;
u8 dst[2];
dst[0] = bin2asciihex( src >> 4 );
dst[1] = bin2asciihex( src & 0x0F );
//------------------------------------------------------------------------------
u8fast bin2asciihex( u8fast bin )
{
if( bin > 9 )
return( bin + 'A' - 10 );
else
return( bin + '0' );
}
и для принимающей стороны
//------------------------------------------------------------------------------
u8fast asciihex2bin( u8fast hex )
{
if( hex >= 'A' )
return( hex - 'A' + 10 );
else
return( hex - '0' );
}
Э-э-э-э....
Что-то Вы намудрили...
Код
// Преобразование числа 0-15 в шестнадцатиричный символ
char BinToHex(char B)
{
static char * Symbol= "0123456789ABCDEF";
return Symbol[B & 0x0F];
}
........
printf("%c%c\n", BinToHex(Byte >> 4), BinToHex(Byte & 0x0F));
alexeyv
Dec 17 2014, 03:42
сорри, что то я мудрил, не проснулся еще....