AVR Assembler Преобразование типов

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

AVR Assembler Преобразование типов

Сообщение sx386 »

AVR
Assembler
Есть переменная типа BYTE
Как её преобразовать в STRING

Например:

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

  VarIn:        .byte 1
  VarOut:      .byte 3

Есть
VarIn = 156 (0x9c)

Нужно
VarOut [1 баит] = 1 (или ASCII код этого символа)
VarOut [2 баит] = 5 (или ASCII код этого символа)
VarOut [3 баит] = 6 (или ASCII код этого символа)
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: AVR Assembler Преобразование типов

Сообщение ChipKiller »

sx386 писал(а):...Как её преобразовать в STRING
это что то новое :). В ассемблере все зависит от вашей фантазии - если нужно записать символ - пишите 'a','b' и т.д. Нужно организовать С-строку - поставьте в конце 0.
Реклама
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: AVR Assembler Преобразование типов

Сообщение sx386 »

Перефразирую:
Есть переменная типа BYTE
Необходимо значение этой переменой записать в 3 переменные типа BYTE таким образом, чтобы получилось
1 переменная BYTE будет содержать сотни
1 переменная BYTE будет содержать десятки
1 переменная BYTE будет содержать еденицы
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: AVR Assembler Преобразование типов

Сообщение ChipKiller »

Перефразирую:.....
и причем тут STRING, когда это называется отображение числа в кодировке ASCII - похоже Вам нужно преобразование. Для этого к сотням, десяткам и единицам прибавьте код 0x30 (ASCII код '0')
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: AVR Assembler Преобразование типов

Сообщение Ser60 »

Разделите переменную на 100 нацело - будут сотни. Например 756 / 100 = 7. Остаток разделите на 10 - будут десятки. В примере выше остаток равен 56, и 56 / 10 = 5. Остаток от последнего деления будет единицы.
Реклама
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: AVR Assembler Преобразование типов

Сообщение sx386 »

А как разделить ?
Микроконтроллеры, на сколько я понял из прочитанного в книге, не поддерживают операцию деления

Собственно нужно число, находящиеся в переменной вывести в LCD
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: AVR Assembler Преобразование типов

Сообщение Ser60 »

Для деления на 100, вычитайте из числа 100 пока результат не станет отрицательным. Число вычетов будет равно целой части частного при делении. Вообще, почитайте книги про программированию на AVR. Это стандартная задача, изложенная практически в любой книге.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: AVR Assembler Преобразование типов

Сообщение ILYAUL »

..не поддерживают операцию деления
Опреция деления - это последовательное вычитание одного числа из другого , источник - математика начальной школы. А любой проц это умеет.
Вложения
AVR204.zip
(84.24 КБ) 532 скачивания
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: AVR Assembler Преобразование типов

Сообщение GP1 »

ILYAUL
+1
тоже пользуюсь AVR204 и не парюсь :)))
Чем дальше, тем больше становлюсь занудой...
Изображение
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: AVR Assembler Преобразование типов

Сообщение Alexeyslav »

Где-то эта тема уже обсуждалась.
Это называется BIN-2-BCD преобразованием. В результате которого из двоичного числа получается двоично-десятичное, у которого каждая половина байта - это одна цифра. Такое число несложно разобрать на строку.

Самый простой способ такого преобразования "влоб" это крутить два счетчика - один это исходное число, а второй - это двоично-десятичный счетчик результата. Исходное число декрементируется до нуля, а в это время результат инкрементируется с учетом десятичной коррекции разрядов.

Но метод этот жутко неэффективный, для одного байта в худшем случае надо проделать 255 итераций, для 16-битного числа - более 65000.

Поэтому сначала прокручивают счетчики тысячами, потом сотнями, десятками и единицами. Причем не прокручивают, а используют операции суммирования-вычитания. основная проблема это учет десятичной коррекции, но если на "байтах" не экономить, то можно выделить под каждый разряд результата(5 разрядов для 16 бит) один байт и сильно упростить себе задачу.

для PIC-контроллеров видел эффективные алгоритмы с применением математических трюков, которые преобразуют 32-бит число за максимум 200 машинных циклов. Для других контроллеров таких алгоритмов не встречал...
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: AVR Assembler Преобразование типов

Сообщение ILYAUL »

С появлением команд mul - стало значительно легче
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»