реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> hex в символы
vts
сообщение Dec 15 2014, 11:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 19-01-10
Из: Ярославль
Пользователь №: 54 915



нужно 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. Заранее спасибо.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Dec 15 2014, 15:27
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



намудрили на ровном месте

пробуйте так

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' );
}


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Палыч
сообщение Dec 15 2014, 15:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Э-э-э-э....
Что-то Вы намудрили...
Код
// Преобразование числа 0-15 в шестнадцатиричный символ
char BinToHex(char B)
{
  static char * Symbol= "0123456789ABCDEF";
  return Symbol[B & 0x0F];
}

........
  printf("%c%c\n",  BinToHex(Byte >> 4), BinToHex(Byte & 0x0F));
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Dec 17 2014, 03:42
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



сорри, что то я мудрил, не проснулся еще....

Сообщение отредактировал alexeyv - Dec 17 2014, 03:44
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 23:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016