Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

и использовать функцию div (ldiv, lldiv) - возвращает и результат и остаток, а еще лучше - сдвигами и десятичной коррекцией

Отправлено ыфефт 10 июля 2007 г. 17:43
В ответ на: Лучше с младших разрядов и в цикле (делить на 10), заодно от передних нулей избавишься отправлено CD_Eater 10 июля 2007 г. 17:05

вот функция - преобразует число в упакованный BCD, из него сдвигами и добавлением '0' легко получить ASC :

u32 bin2bcd_u32(u32 data, u8 result_bytes)
{u32 result = 0; /*result*/
u8 u8_1;
for (u8_1 = (4 - result_bytes); u8_1; u8_1--) data <<= 8; /*adjust input bytes*/
for (u8_1 = (result_bytes << 3); u8_1; u8_1--) /*bit shift loop*/
{u8 u8_2, u8_3;
/*result BCD nibbles correction*/
result += 0x33333333;
/*result correction loop*/
for (u8_3 = 4; u8_3; u8_3--)
{u8_2 = result >> 24;
if (!(u8_2 & 0x08)) u8_2 -= 0x03;
if (!(u8_2 & 0x80)) u8_2 -= 0x30;
result <<= 8; /*shift result*/
result |= u8_2; /*set 8 bits of result*/
}
/*shift next bit of input to result*/
result <<= 1;
if (((u8)(data >> 24)) & 0x80) result |= 1;
data <<= 1;
}
return(result);
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 85:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru