AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
26.04.2016, 11:54
|
|
Прописка
Регистрация: 23.11.2009
Адрес: РФ, Воронеж
Сообщений: 175
Сказал спасибо: 537
Сказали Спасибо 95 раз(а) в 59 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
Сообщение от begun
|
I=I+(M[n]+0x30)*a;
|
Из кода символа надо ВЫЧИТАТЬ 30, чтобы получить цифру числа
|
|
|
|
26.04.2016, 12:18
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
Сообщение от begun
|
вот строка фиксированной длины M[3]=('9','9','9')
|
Если по шагам и на пальцах
uint16_t data = 0;
data = (M[0] - 0x30) * 100;
data += (M[1] - 0x30) * 10;
data += (M[2] - 0x30);
Последний раз редактировалось STM32F0; 26.04.2016 в 12:25.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
26.04.2016, 17:24
|
|
Частый гость
Регистрация: 19.05.2014
Сообщений: 48
Сказал спасибо: 5
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
Вот так из текста М появится значение в переменной I
Код:
|
char M[10]={'1','2','3','4','5','6','7','8','9','9'};
char n;
int I=0;
for(n=0;n‹10;n++)
{
I=I*10;
I=I+(M[n]-0x30);
} |
Последний раз редактировалось Paul74s; 26.04.2016 в 17:28.
|
|
|
Сказали "Спасибо" Paul74s
|
|
|
26.04.2016, 17:47
|
|
Частый гость
Регистрация: 19.05.2014
Сообщений: 48
Сказал спасибо: 5
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
А так преобразовываем I=1234567899 к тексту в виде HEX
Код:
|
char I, J;
char H[8], a, n;
J=I; // это на случай сохранения значения в переменной I
for (n=0; n‹8; n++) {
a=J&0x0F;
if (a‹10) H[7-n]=a+'0'; else H[7-n]=a+'7';
J››=4;
} |
Результат должен быть "499602DB"
|
|
|
Сказали "Спасибо" Paul74s
|
|
|
26.04.2016, 21:52
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 874
Сказал спасибо: 234
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
доргие друзья,родные,
прежде всего, еще раз огромное спасибо за ваше терпение.
дело было в протеусе.
он не показывал правильно значения переменных и сам cvavr действительно не работает выше 32 бит что меня и путало.
в общем, вроде все выиснил для себя.
еще раз огромное спасибо всем за все.
|
|
|
|
26.04.2016, 22:07
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 874
Сказал спасибо: 234
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
Разрешите особую благодарность высказать Paul74s
|
|
|
|
27.04.2016, 09:55
|
|
Частый гость
Регистрация: 24.11.2006
Сообщений: 27
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: нужна программа перевода DEC. в HEX в CVAVR
Код:
|
#ifndef BCD_H
#define BCD_H
#include "bcd.h"
#include "main_def_func.h"
//================================================== ======================
extern char num_str_buf [];
extern char tmp_num_str_buf [];
//================================================== ======================
//================================================== ======================
void char_to_str (u08 value);
void int_to_str (u16 value);
void long_to_str (u32 value);
u16 str_to_int (void);
u32 str_to_long (void);
//================================================== ======================
//================================================== ======================
void clr_tmp_num_str_buf (void);
void clr_num_str_buf (void);
//================================================== ======================
#endif //BCD_H |
Код:
|
//================================================== ======================
#include "bcd.h"
//================================================== ======================
//================================================== ======================
char num_str_buf [11];
char tmp_num_str_buf [11];
//================================================== ======================
//================================================== ======================
void clr_tmp_num_str_buf (void)
{
char *ptr = tmp_num_str_buf;
u08 cnt = 10;
while (cnt)
{
*ptr++ = ' ';
cnt--;
}
*ptr = 0;
}
//================================================== ======================
//================================================== ======================
void clr_num_str_buf (void)
{
char *ptr = num_str_buf;
u08 cnt = 10;
while (cnt)
{
*ptr++ = ' ';
cnt--;
}
*ptr = 0;
}
//================================================== ======================
//================================================== ======================
u08 __flash tab_10_08 [] =
{
100U,
10U,
};
//------------------------------------------------------------------------
void char_to_str (u08 value)
{
clr_num_str_buf ();
char *ptr = num_str_buf + 7;
u08 a;
u08 cnt_1;
u08 cnt_2;
u08 __flash *ptr_f = tab_10_08;
cnt_1 = 2;
while (cnt_1)
{
a = *ptr_f;
cnt_2 = 0;
while (value ›= a)
{
value -= a;
cnt_2++;
}
*ptr++ = (cnt_2 | 0x30);
ptr_f++;
cnt_1--;
}
*ptr++ = (value | 0x30);
*ptr = 0 | 0x30;
}
//================================================== ======================
//================================================== ======================
u16 __flash tab_10_16 [] =
{
10000U,
1000U,
100U,
10U,
};
//------------------------------------------------------------------------
void int_to_str (u16 value)
{
clr_num_str_buf ();
char *ptr = num_str_buf + 5;
u16 a;
u08 flags = 0;
u08 cnt_1;
u08 cnt_2;
u16 __flash *ptr_f = tab_10_16;
cnt_1 = 4;
while (cnt_1)
{
a = *ptr_f;
cnt_2 = 0;
while (value ›= a)
{
value -= a;
cnt_2++;
}
if (!(flags & (1‹‹0)))
{
if (cnt_2 == 0)
{
*ptr++ = ' '; // Гашение незначащих нулей.
}
else
{
*ptr++ = (cnt_2 | 0x30);
set_bit (flags, 0);
}
}
else
{
*ptr++ = (cnt_2 | 0x30);
}
ptr_f++;
cnt_1--;
}
*ptr++ = (value | 0x30);
*ptr = 0;
}
//================================================== ======================
//================================================== ======================
u16 str_to_int (void)
{
char *ptr_num = tmp_num_str_buf + 5;
u16 __flash *ptr_tab_10 = tab_10_16;
u16 a;
u08 cnt = 0;
u16 tmp_value = 0;
while (cnt ‹ 4)
{
if ((*ptr_num › 0x30) && (*ptr_num ‹ 0x3A))
{
a = (*ptr_num - 0x30);
while (a)
{
tmp_value += *ptr_tab_10;
a--;
}
}
*ptr_num++;
ptr_tab_10++;
cnt++;
}
return tmp_value += (*ptr_num - 0x30);
}
//================================================== ======================
//================================================== ======================
u32 __flash tab_10_32 [] =
{
1000000000U,
100000000U,
10000000U,
1000000U,
100000U,
10000U,
1000U,
100U,
10U,
};
//------------------------------------------------------------------------
void long_to_str (u32 value)
{
clr_num_str_buf ();
char *ptr = num_str_buf;
u32 a;
u08 flags = 0;
u08 cnt_1;
u08 cnt_2;
u32 __flash *ptr_f = tab_10_32;
cnt_1 = 9;
while (cnt_1)
{
a = *ptr_f;
cnt_2 = 0;
while (value ›=a)
{
value -= a;
cnt_2++;
}
if (!(flags & (1‹‹0)))
{
if (cnt_2 == 0)
{
*ptr++ = ' '; // Гашение незначащих нулей.
}
else
{
*ptr++ = (cnt_2 | 0x30);
set_bit (flags, 0);
}
}
else
{
*ptr++ = (cnt_2 | 0x30);
}
ptr_f++;
cnt_1--;
}
*ptr++ = (value | 0x30);
*ptr = 0;
}
//================================================== ======================
//================================================== ======================
u32 str_to_long (void)
{
char *ptr_num = tmp_num_str_buf;
u32 __flash *ptr_tab_10 = tab_10_32;
u32 a;
u08 cnt = 0;
u32 tmp_value = 0;
while (cnt ‹ 9)
{
if ((*ptr_num › 0x30) && (*ptr_num ‹ 0x3A))
{
a = (*ptr_num - 0x30);
while (a)
{
tmp_value += *ptr_tab_10;
a--;
}
}
*ptr_num++;
ptr_tab_10++;
cnt++;
}
return tmp_value += (*ptr_num - 0x30);
}
//================================================== ====================== |
Последний раз редактировалось Insector; 27.04.2016 в 09:58.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:20.
|
|