При чём периодически, от формы записиВ случае с константой вам везет
Перевод числа в СИ
- Реклама
- Сообщения: 55
- Зарегистрирован: Чт май 30, 2013 15:05:07
Не уходите. Возможно когда я прошью и исправлю, то что вы сказали, я скажу вам БОЛЬШОЕ человеческое спасибо.
Всяко бывает, тут результат непредсказуем так просто 
Для подобных вещей существуют средства отладки, с помощью которых можно пошагово проследить за ходом программы и переменными. Учитесь пользоваться ими, иначе всегда будете гадать - "работает, не работает"...
Я уж давно про AVR почти все забыл, но мега8 без jtag может пошагово отлаживаться?
- Реклама
Не может работать с 0xAA (как правильно заметил BCluster).
Что с 0xAA, что с 170 - на выходе будет 42 = 0x2A.
Что с 0xAA, что с 170 - на выходе будет 42 = 0x2A.
- Сообщения: 55
- Зарегистрирован: Чт май 30, 2013 15:05:07
Получилось по всякому передавать. ( цикл до i<8 исправил)
Спасибо Вам всем огромное.
P.S.
Хвала! Хвала учителю!
Учителю-творителю,
Идейно воспитателю
И нас образователю!
Спасибо Вам всем огромное.
P.S.
Хвала! Хвала учителю!
Учителю-творителю,
Идейно воспитателю
И нас образователю!
Рад что смог помочь. Успехов 
К вопросу перевода числа в HEX....
а я бы тупо массив бы заюзал.... 2 штука! За код прошу линейкой по пальцам не бить..
В результате - на выходе мы имеем массив заполненый соответствиями.
Например:
Основание системы - 16 //hex
Входное число : 198
выходной массив: ['C','6'] или [67, 54]....
Ну далее дело техники
вывести число в порт поочереди из массива....
А. ну да! к чему это я... Строка - это массив UNSIGNED Char. - где каждая буква - элемент массива, представлен в виде числа от 0 до 255 //В случае если ASCII кодировки.
В прочем, весь латинский алфавит во всех системах соответствует кодировке 0-127 ASCII.
PS. код писал на весу, без компиляторов и проч. так что после сборки тщательно обработать напильником.
а я бы тупо массив бы заюзал.... 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 раз.
Может. DebugWire.BCluster писал(а): мега8 без jtag может пошагово отлаживаться?
нужен программатор, типа Dragon.
на ISP-MKII фирменном у меня DW не получилось почему то завести, хотя вроде как уметь должен.
Можно и без массива:c2n писал(а):а я бы тупо массив бы заюзал.... 2 штука! За код прошу линейкой по пальцам не бить..
...............
В результате - на выходе мы имеем массив заполненый соответствиями.
.
Код: Выделить всё
.............
OutChMass[DigCount] = InputVarible + ((InputVarible<10) ? '0' : 'A'-10);
.............
debugWire в атмега8 вроде не помню. Даташит кстати тоже. в 48/88 есть.
Причем, можно да.. просто константное значение прибавлять...
N + 48 такой конструкцией получаем ASCII код чисел
N + 65 Получаем букву... При этом! буквы то у нас применяются только в HEX...
Тогда да... тупо ИФ и 2 константы.
Просто с массивами удобно, когда 7 сегментники прицеплены... массив хранит не символы, а последовательность для высвечивания...
Ну в общем это суть BCD преобразователя. Сейчас какраз делать себе такие намылился
N + 48 такой конструкцией получаем ASCII код чисел
N + 65 Получаем букву... При этом! буквы то у нас применяются только в HEX...
Тогда да... тупо ИФ и 2 константы.
Просто с массивами удобно, когда 7 сегментники прицеплены... массив хранит не символы, а последовательность для высвечивания...
Ну в общем это суть BCD преобразователя. Сейчас какраз делать себе такие намылился
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
А я делаю так:К вопросу перевода числа в 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);
}
Разница между теорией и практикой на практике гораздо больше, чем в теории.


