Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

нужна программа перевода DEC. в HEX в CVAVR

Непрочитано 25.04.2016, 00:40  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Сообщение от begun Посмотреть сообщение
одинаковые строки
они не одинаковые.
Сообщение от Paul74s Посмотреть сообщение
dec1-'0';
Сообщение от Paul74s Посмотреть сообщение
dec2-'0';
Выходная переменная - одна hex, а входные - decx
В каждой строке идет преобразование байта из ASCII в BCD-цифру и суммирование ее с содержимым переменной. Потом (если цифра не последняя), умножение переменной на 10.
В Вашем случае будет цикл с одной входной переменной - результатом чтения из УАРТа.
Реклама:
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 25.04.2016 в 09:54.
akegor вне форума  
Сказали "Спасибо" akegor
begun (25.04.2016)
Непрочитано 25.04.2016, 01:14  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

спасибо akegor
будем разбиратся
begun вне форума  
Непрочитано 25.04.2016, 09:52  
AlexPi
Прописка
 
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
AlexPi на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Сообщение от begun Посмотреть сообщение
в ПРОТЕУС -е в регистр записывается в виде
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'9'
Добрый день!
Судя по всему Вы как раз строку и отправляете.
Да действительно можно воспользоваться atoi(). Но я ею стараюсь меньше пользоваться, жрет много памяти. Но имейте в виду строка 1234567899 преобразуется к типу uint32_t, а вот 9987654321 уже не получится, будет переполнение, в CV тип uint64_t не поддерживается.
Ниже текст функции:


//Перевод из строки символов в двоичное число ф-ция возвращает результат типа unsigned lond int
// lgth - Требуемая длинна маcсива ка правило 10 но не длиннее и не 0 !!!
// *b - указатель на маcсив где должна быть строка
uint32_t bcd_bin (uint8_t lgth, uint8_t *b)
{
uint8_t i; //
uint32_t result=0; //
b=b+(lgth-1); // переместим указатель на конец масcива
result = result+((*b--)&0x0f) ; // прибавим старший разряд

for (i = lgth-1; i!=0; i--)
{
result = result*10; //
result = result+((*b--)&0x0f) ; // прибавить очередное число
}

return (result);
}
AlexPi вне форума  
Сказали "Спасибо" AlexPi
begun (26.04.2016)
Непрочитано 25.04.2016, 10:49  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

AlexPi большое за отзыв но я немного растерялся .
разрешите попытатся яснне выразить задачу а не в общих чертах.

с одного микроконтроллера avr через uart посылается информация на другой в виде:
(к примеру 3-х значное десятичное -999)

putchar(0x39);
putchar(0x39);
putchar(0x39);

на"avr data memory" другого (приемного) коттроллера в протеусе получаем следующую запись по ячейкам

39 39 39

HEX эквивалент числа по калькулятору XP равно 3E7.
------------------------------------------------------------------------
если передать из первого микроконтроллера число 3E7 в виде:

putchar(0x33);
putchar(0x45);
putchar(0x37)

то в дата мемори получаем:

39 45 37
--------------------------------
вот нужно преобразовать

39 39 39 в 39 45 37 на приемной стороне.

может на этом примере легче будет мне понятно если проясните?
begun вне форума  
Непрочитано 25.04.2016, 10:53  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Всем, кому не нравится данный метод, можно посоветовать написать свой велосипед, который будет выглядеть так:
uint64_t Value;
uint8_t text[20]; // Обязательно, нуль-терминированая строка
uint8_t i = 0;
Value = 0;
while (text[i]) {
Value = Value * 10 + (text[i] - '0');
i++;
};
Как бы... Всё. Долго. Без оптимизации. Надёжно как чугунный утюг.
После этого в Value будет точное значение. Всевозможные исключения типа отрицательных чисел и точки не обрабатываются, а приводят к очень весёлым последствиям.
-Alan- вне форума  
Непрочитано 25.04.2016, 11:20  
shyub
Прописка
 
Регистрация: 20.08.2008
Сообщений: 259
Сказал спасибо: 305
Сказали Спасибо 76 раз(а) в 42 сообщении(ях)
shyub на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Принятое число помещаете в массив (младшие цифры - в младшие элементы массива), например char M[10], число в формате HEX формируете в int X и ещё одна локальная переменная int a.
I=0;
a=1;
for (n=0; n‹10; n++)
{
I=I+(M[n]-0x30)*a;
a=a*10;
}
shyub вне форума  
Непрочитано 25.04.2016, 11:37  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

shyub, Вы бы прошли по шагам, просчитали свой алгоритм, хотя бы, для двух - трех разрядов.
Зачем так завернули и навернули?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 25.04.2016, 11:50  
shyub
Прописка
 
Регистрация: 20.08.2008
Сообщений: 259
Сказал спасибо: 305
Сказали Спасибо 76 раз(а) в 42 сообщении(ях)
shyub на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Допустим число 1234, следовательно M[0]=0x34, M[1]=0x33, M[2]=0x32, M[3]=0x31.
После 1-го цикла: I=0x00 00 00 04;
После 2-го цикла: I=0x00 00 00 22;
После 3-го цикла: I=0x00 00 00 EA;
После 4-го цикла: I=0x00 00 04 D2;
Если M[4]-M[9]=0x30, т.е. нули (это я упустил) или количество циклов ограничивать кол-вом принятых знаков, то итоговое число не изменитс: 0x00 00 04 D2 = 1234.
shyub вне форума  
Непрочитано 25.04.2016, 12:00  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Может, что-то и недосмотрел...
Гораздо проще результат умножать на десять и прибавлять к нему очередную цифру.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 25.04.2016, 12:27  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: нужна программа перевода DEC. в HEX в CVAVR

Сообщение от akegor Посмотреть сообщение
Может, что-то и недосмотрел...
Гораздо проще результат умножать на десять и прибавлять к нему очередную цифру.
Собственно, то же, что я и написал. Умножаем, прибавляем.

ТС: Между прочим, именно так число и будет выглядеть в памяти. Если нужно будет его куда-то ЕЩЁ передать в HEX-формате, то потом проходитесь по байтам и передаёте их куда-то ещё.
Вот таким видом:
Код:
	// v - переменная байт, в ней хранится тот байт, который сейчас нужно перевести в HEX-строку.
	char rs[3];
// В начале - верхний ниббл
	if ((v ›› 4) › 9) {
		rs[0] = ('7' + (s ›› 4));
	} else {
		rs[0] = ('0' + (s ›› 4));
	};
// Затем - нижний
	if ((v & 0x0F) › 9) {
		rs[1] = ('7' + (s & 0x0F));
	} else {
		rs[1] = ('0' + (s & 0x0F));
	};
	rs[2] = 0; // Нуль-терминированая строка.
У меня лично вот таким образом преобразовывает побайтно любые данные и выводит их в консоль.
-Alan- вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна программа для анализа протокола russo_turisto Микроконтроллеры, АЦП, память и т.д 10 21.03.2009 06:50
Программа перевода чисел. FOLKSDOICH Микроконтроллеры, АЦП, память и т.д 5 17.08.2008 14:12
Нужна программа Энергетик-2 или подобная ndreich Информация по радиокомпонентам 0 12.10.2007 00:49


Часовой пояс GMT +4, время: 16:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.