Вот например, есть такая табличка, ASCII зовется. И у 16-ричных чисел есть десятичное значение. Типа 000h - 0d, а 0FFh - 255d. Мне нужно нужно как-то преобразовать байт в это значение, и получить его в виде 3 BCD-чисел. Че-то подзавис, и в книжках что-то не особо. Топорно Таблично это не тоже не получается. Есть какие способы преобразования?
Самый простой способ вычитанием. Из, допустим, слова $XXXX вычитаете 10'000 и складываете в регистр десятков тысяч, когда остаток становится меньше вычитаете 1'000 и складываете в регистр тысяч и т.д. Например Спойлер
TS -балуется- занимается наукой с очередным м.к ,но при этом лениво даж "пояндексить" ...
Ну от конкретного м.к. конечно зависит.
Вот пример : ( "заяндексился" за 1.5минуты )
Код:
; ---------- bin2bcd2: ; ---------- ; Преобразование однобайтного числа в упакованный BCD ; ---------- ; Вход : R24 - число от 0 до 255 ; Выход: R17:16 - BCD представление ; Изменяет: R18, R24, SREG ; ----------
ldi R16, 0 ; инициализация результата ldi R17, 0 ; ldi R18, 8 ; счетчик циклов loop: cpi R16, 0x05 ; сравнение разряда 0 brhs L1 ; если <= 4, продолжаем subi R16, 256-3 ; иначе увеличиваем разряд 0 на 3 L1: cpi R16, 0x50 ; сравнение разряда 1 brcs L2 ; если <= 4, subi R16, 256-(3*16); иначе увеличиваем разряд 1 на 3 L2: cpi R17, 0x05 ; сравнение разряда 2 brhs L3 ; если <= 4, продолжаем subi R17, -3 ; иначе, увеличиваем разряд 2 на 3 L3: lsl R24 ; сдвиг rol R16 rol R17 dec R18 ; цикл brne loop ret
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
А это что получается, обычное преобразование в BCD? Ну то легко, 8051 делить умеет. Чего-то мне показалось что тут как-то по другому надо. Извините, затупил.
.. обычное преобразование в BCD? Ну то легко, 8051 ..
А что ж Вы сразу не сказали, что всё ещё с "*51"-ым балуетесь ?
У него ж есть DAA ! , но поелику DAA корректно работает только с аргументами менее 19910==C7h ,то сначала проверяете аргумент в Acc и если он >(19910==C7h) , то вычитаете из Acc константу (10010==64h) и инкрементируете B( там должен быть заранее 00h ) ,после чего делаете DAA ,потом XCH B ,потом ADDC 00h . В итоге у Вас в B две младшие BCD-цифры , а в Acc старшая( или 0 или 1 или 2 ) . Сравните по байтам кода и по тактам/циклам выполнения , что лучше для Вашего варианта изполнения "*51"-ого м.к. - так или с делениями.
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Ну да, я собственно, только им и занимаюсь. Если берусь за какие-то другие, то это обычно, ненадолго.
Ваш способ сегодня попробую. А мне лично делением проще типа: mov A, #X ; X - наш байт. mov B, #00Ah ; - основание 10-ной системы div AB ;поделили, остаток деления в B - младший разряд десятичного. mov куда_ни_будь, B mov B, #00Ah ; - результат предыдущего деления опять делится на 10 div AB ; опять поделили. В B - средний разряд, в A старший.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения