Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
26.12.2011, 14:15
|
|
Прописка
Регистрация: 24.08.2005
Сообщений: 140
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Преобразование числа
народ подскажите с помощью какой функции для ARM STM32 преобразовать число из двоичной системы в двоично десятичную и какой билиотеке она лижит
|
|
|
|
26.12.2011, 14:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,139
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: преобразование числа
В родных бульбах такого не встречал, ни в стм-омвских ни в гцц шных.
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
26.12.2011, 14:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,139
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: преобразование числа
Сами напишите - сиё не сложно.
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
26.12.2011, 14:19
|
|
Вид на жительство
Регистрация: 21.11.2009
Сообщений: 342
Сказал спасибо: 4
Сказали Спасибо 149 раз(а) в 66 сообщении(ях)
|
Re: преобразование числа
Код:
|
U32 bin2bcd_U32_soft(U32 data, U8 result_bytes) {
U32 result = 0; /*result*/
for (U8 cnt_bytes=(4 - result_bytes); cnt_bytes; cnt_bytes--) /* adjust input bytes */
data ‹‹= 8;
for (U8 cnt_bits=(result_bytes ‹‹ 3); cnt_bits; cnt_bits--) { /* bits shift loop */
/*result BCD nibbles correction*/
result += 0x33333333;
/*result correction loop*/
for (U8 cnt_bytes=4; cnt_bytes; cnt_bytes--) {
U8 corr_byte = result ›› 24;
if (!(corr_byte & 0x08)) corr_byte -= 0x03;
if (!(corr_byte & 0x80)) corr_byte -= 0x30;
result ‹‹= 8; /*shift result*/
result += corr_byte; /*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);
}
U32 bcd2bin_U32_soft(U32 data, U8 input_bytes) {
U32 result = 0; /*result*/
for (U8 cnt_bits = (input_bytes ‹‹ 3); cnt_bits; cnt_bits--) {
/*shift next bit*/
result ››= 1;
if (((U8)(data)) & (U8)0x01) result |= 0x80000000;
data ››= 1;
/* result BCD correction */
for (U8 cnt_bytes = 4; cnt_bytes; cnt_bytes--) {
U8 tmp_byte = (data ›› 24);
if (tmp_byte & 0x80) tmp_byte -= 0x30;
if (tmp_byte & 0x08) tmp_byte -= 0x03;
data ‹‹= 8;
data |= tmp_byte;
}
}
/*adjust result bytes*/
for (U8 cnt_bits = (4 - input_bytes); cnt_bits; cnt_bits--)
result ››= 8;
return(result);
} |
|
|
|
Эти 2 пользователя(ей) сказали Спасибо qwerky за это сообщение:
|
|
|
26.12.2011, 14:33
|
|
Прописка
Регистрация: 24.08.2005
Сообщений: 140
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: преобразование числа
вот уж недумал что сие есть проблема для STM
для AVR -- tBCD0 = bin2bcd(temper_iv_2);вот фукция стандартная
это так к примеру
qwerky вот здесь U32 bin2bcd_U32_soft(U32 data, U8 result_bytes) немного непонял почему два входных значения (просто сейчас разбиратся некогда)
дело в том надо просто разложить 16 разрядное число на состовные значения
|
|
|
|
26.12.2011, 14:48
|
|
Вид на жительство
Регистрация: 21.11.2009
Сообщений: 342
Сказал спасибо: 4
Сказали Спасибо 149 раз(а) в 66 сообщении(ях)
|
Re: преобразование числа
Цитата:
|
для AVR -- tBCD0 = bin2bcd(temper_iv_2);вот фукция стандартная
это так к примеру
|
в стандарте С нет такой функции, то что вы привели это нюансы конкретного компилятора и его библиотеки. Зато есть более-менее стандартная функция itoa , на выходе - String вместо BCD
Сообщение от vvkka
|
немного непонял почему два входных значения
|
второе значение - количество байт результата, для 16-битного числа равно 3
Последний раз редактировалось qwerky; 26.12.2011 в 14:53.
|
|
|
|
26.12.2011, 15:18
|
|
Прописка
Регистрация: 24.08.2005
Сообщений: 140
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: Gреобразование числа
Сообщение от qwerky
|
общение от vvkka
немного непонял почему два входных значения
второе значение - количество байт результата, для 16-битного числа равно 3
|
если входное значение постоянное 16-разряд можно это значение вогнать как локальную переменную. чтобы не путала
|
|
|
|
26.12.2011, 15:54
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Преобразование числа
В библиотеке С отсутствуют еще и функции для работы с этими BCD числами, поэтому зачем нужно такое преобразование - большой вопрос. Правильнее будет все считать в обычном формате, а в конц преобразовывать число в обучныю строку.
|
|
|
|
26.12.2011, 16:23
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,986
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Преобразование числа
BIN2BCD, ИМХО , больше нужны для 7сегментных LED дисплеев .
Вам наверное, как выше и сказали, нужно ITOA ?
Целое в строку ...
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
26.12.2011, 17:05
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,828
Сказал спасибо: 919
Сказали Спасибо 4,301 раз(а) в 2,570 сообщении(ях)
|
Re: Преобразование числа
Надо бы отдельную тему с конкертированиями закрепить. Постоянно чего-то не хватает, приходится искать.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:46.
|
|