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 код этого символа)
это что то новое . В ассемблере все зависит от вашей фантазии - если нужно записать символ - пишите 'a','b' и т.д. Нужно организовать С-строку - поставьте в конце 0.
Перефразирую: Есть переменная типа BYTE Необходимо значение этой переменой записать в 3 переменные типа BYTE таким образом, чтобы получилось 1 переменная BYTE будет содержать сотни 1 переменная BYTE будет содержать десятки 1 переменная BYTE будет содержать еденицы
и причем тут STRING, когда это называется отображение числа в кодировке ASCII - похоже Вам нужно преобразование. Для этого к сотням, десяткам и единицам прибавьте код 0x30 (ASCII код '0')
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Разделите переменную на 100 нацело - будут сотни. Например 756 / 100 = 7. Остаток разделите на 10 - будут десятки. В примере выше остаток равен 56, и 56 / 10 = 5. Остаток от последнего деления будет единицы.
Для деления на 100, вычитайте из числа 100 пока результат не станет отрицательным. Число вычетов будет равно целой части частного при делении. Вообще, почитайте книги про программированию на AVR. Это стандартная задача, изложенная практически в любой книге.
Где-то эта тема уже обсуждалась. Это называется BIN-2-BCD преобразованием. В результате которого из двоичного числа получается двоично-десятичное, у которого каждая половина байта - это одна цифра. Такое число несложно разобрать на строку.
Самый простой способ такого преобразования "влоб" это крутить два счетчика - один это исходное число, а второй - это двоично-десятичный счетчик результата. Исходное число декрементируется до нуля, а в это время результат инкрементируется с учетом десятичной коррекции разрядов.
Но метод этот жутко неэффективный, для одного байта в худшем случае надо проделать 255 итераций, для 16-битного числа - более 65000.
Поэтому сначала прокручивают счетчики тысячами, потом сотнями, десятками и единицами. Причем не прокручивают, а используют операции суммирования-вычитания. основная проблема это учет десятичной коррекции, но если на "байтах" не экономить, то можно выделить под каждый разряд результата(5 разрядов для 16 бит) один байт и сильно упростить себе задачу.
для PIC-контроллеров видел эффективные алгоритмы с применением математических трюков, которые преобразуют 32-бит число за максимум 200 машинных циклов. Для других контроллеров таких алгоритмов не встречал...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения