Перевод числа в СИ

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

В случае с константой вам везет
При чём периодически, от формы записи :)
Реклама
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Не уходите. Возможно когда я прошью и исправлю, то что вы сказали, я скажу вам БОЛЬШОЕ человеческое спасибо.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Всяко бывает, тут результат непредсказуем так просто :)))
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Для подобных вещей существуют средства отладки, с помощью которых можно пошагово проследить за ходом программы и переменными. Учитесь пользоваться ими, иначе всегда будете гадать - "работает, не работает"...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Я уж давно про AVR почти все забыл, но мега8 без jtag может пошагово отлаживаться?
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

Не может работать с 0xAA (как правильно заметил BCluster).
Что с 0xAA, что с 170 - на выходе будет 42 = 0x2A.
Реклама
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Получилось по всякому передавать. ( цикл до i<8 исправил)
Спасибо Вам всем огромное.
P.S.
Хвала! Хвала учителю!
Учителю-творителю,
Идейно воспитателю
И нас образователю!
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Рад что смог помочь. Успехов :)
Контактная информация:
c2n
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1193
Зарегистрирован: Ср июл 25, 2012 21:40:09
Откуда: Самара

Сообщение c2n »

К вопросу перевода числа в HEX....

а я бы тупо массив бы заюзал.... 2 штука! За код прошу линейкой по пальцам не бить..

Код: Выделить всё

ChMass = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
// тоесть массив представляет из себя набор значений в десятичной системе [48, 49, 50, 51, 53, 54, 55, 56, 57,65, 66, 67, 68, 69, 70] Нужен для соспоставления символ-число.

Далее:

Массив для вывода
OutChMass = [0...n] // n -  количество символов к выводу.

int InputVarible = ВАШЕ_ЗНАЧЕНИЕ.

int DigCount = 1;
int DivCount = 0;
Цикл{
DivCount = InputVarible div 16 // 8, 2, 10 - в зависимости от системы исчисления - определяем число разрядов
DigCount++;
} пока DivCount >0

////////// получили количество знаков в числе. DigCount
Цикл от 0 до DigCount
{
DivCount = InputVarible div 16//В зависимости от системы счисления
OutChMass[DigCount] = ChMass[InputVarible-DivCount];
InputVarible = DivCount;
}
В результате - на выходе мы имеем массив заполненый соответствиями.

Например:
Основание системы - 16 //hex
Входное число : 198
выходной массив: ['C','6'] или [67, 54]....

Ну далее дело техники :) вывести число в порт поочереди из массива....

А. ну да! к чему это я... Строка - это массив UNSIGNED Char. - где каждая буква - элемент массива, представлен в виде числа от 0 до 255 //В случае если ASCII кодировки.

В прочем, весь латинский алфавит во всех системах соответствует кодировке 0-127 ASCII.

PS. код писал на весу, без компиляторов и проч. так что после сборки тщательно обработать напильником.
Последний раз редактировалось c2n Чт ноя 14, 2013 11:24:37, всего редактировалось 1 раз.
Контактная информация:
c2n
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1193
Зарегистрирован: Ср июл 25, 2012 21:40:09
Откуда: Самара

Сообщение c2n »

BCluster писал(а): мега8 без jtag может пошагово отлаживаться?
Может. DebugWire.
нужен программатор, типа Dragon.

на ISP-MKII фирменном у меня DW не получилось почему то завести, хотя вроде как уметь должен.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

c2n писал(а):а я бы тупо массив бы заюзал.... 2 штука! За код прошу линейкой по пальцам не бить..
...............
В результате - на выходе мы имеем массив заполненый соответствиями.
.
Можно и без массива:

Код: Выделить всё

.............
OutChMass[DigCount] = InputVarible + ((InputVarible<10) ? '0' : 'A'-10);
.............
Не думаю, что код будет выполняться дольше, да и памяти тратить на массив не нужно.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

debugWire в атмега8 вроде не помню. Даташит кстати тоже. в 48/88 есть.
Контактная информация:
c2n
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1193
Зарегистрирован: Ср июл 25, 2012 21:40:09
Откуда: Самара

Сообщение c2n »

Причем, можно да.. просто константное значение прибавлять...

N + 48 такой конструкцией получаем ASCII код чисел
N + 65 Получаем букву... При этом! буквы то у нас применяются только в HEX...

Тогда да... тупо ИФ и 2 константы.


Просто с массивами удобно, когда 7 сегментники прицеплены... массив хранит не символы, а последовательность для высвечивания...


Ну в общем это суть BCD преобразователя. Сейчас какраз делать себе такие намылился
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

К вопросу перевода числа в HEX....

а я бы тупо массив бы заюзал.... 2 штука!
А я делаю так:

Код: Выделить всё

//вспомогательная функция
char NibbleToChar(unsigned char n)
{
    if ((n>=0) && (n<=9))
        return n | 0x30;

    if ((n>=10) && (n<=15))
        return (n-10)+'A';

    return '?';
}

//Преобразование числа в шестнадцатеричную строку.
//Аргументы - число, стартовая позиция, с которой писать в строку, указатель на строку, флаг - использовать префикс "0x" или нет
void NumToHex(unsigned char num,unsigned char StartPos,char hexstr[],char UsePrefix)
{
    if (UsePrefix)
    {
        hexstr[StartPos]='0';
        hexstr[StartPos+1]='x';
        StartPos+=2;
    }

    hexstr[StartPos]=NibbleToChar((num & 0xF0) >> 4);
    hexstr[StartPos+1]=NibbleToChar(num & 0x0F);
}
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Ответить

Вернуться в «AVR»