Четверг, 21.09.2017, 22:23
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | BCD формат на Assembler в AVR Atmega. hex > dec - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ВитГо 
Форум » Разработка электронных устройств » Справочная » BCD формат на Assembler в AVR Atmega. hex > dec (конвертор HEX числа для вывода его на экран в DEC виде)
BCD формат на Assembler в AVR Atmega. hex > dec
uwrteyДата: Воскресенье, 08.11.2015, 01:43 | Сообщение # 1
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
Понадобилось мне выводить данные о температуре на дисплей в привычном для человека виде - десятичном.
Машинный код - бинарный - ( или шестнадцатеричный ) очень удобный, но не привычен обычному смертному.
Как же конвертировать ?

0) Wiki Двоично-десяттичный код https://ru.wikipedia.org/wiki....E%D0%B4 .

1) http://www.evileg.ru/baza-zn....ga.html .

2) http://we.easyelectronics.ru/AVR/matematika-na-assemblere-v-avr.html .

примеры кода:

Работа производится в этих программах с четырьмя регистрами: r0, r1, r16, r17.
Целевым регистром в данном случае выступает регистр r16.
Также эти программки работают с числами от 0 до 99

Код

;======= Преобразование из BCD в HEX ===================================================
BCD_to_HEX:
     push  r16                  ; Помещаем преобразуемую величину в стек
     andi  r16,0b11110000    ; Маскируем регистр r16, как старший разряд
     swap  r16                  ; Меняем тетрады местами
     ldi    r17,10              ; Записываем во вспомогательный регистр значение 10
     mul    r16,r17             ; Умножаем значение регистра r16 на 10, результат сохраняется
                    ; в регистры r1, r0
     pop    r16                  ; Изымаем сохраненную величину из стека
     andi  r16,0b00001111    ; Маскируем регистр r16, как младший разряд
     add    r16,r0              ; Производим сложение регистра r16 с регистром r0,
                    ; в результате получаем двоичное число от 0 до 99
     ret


Код


;======= Преобразование из HEX в BCD ====================================================
HEX_to_BCD:
     clr    r17                  ; Очищаем регистр help
HEX_to_BCD_l:
     subi  r16,10              ; temp = temp — 10
     brcs  HEX_to_BCD_2      ; Прервать, если перенос установлен
     inc    r17                  ; Инкрементируем r17    
     rjmp  HEX_to_BCD_l      ; Проходим по циклу проверки заново
HEX_to_BCD_2:
     subi  r16,-10             ; компенсируем отрицательное значение в r16
     swap  r17                  ; Меняем тетрады местами
     or     r16,r17             ; Объединяем полученные значения в Упакованный BCD
     ret


в прикрепленном файле подпрограмма для работы с десятичными числами до 999
автор Acl ( Ижевск ) http://radiokot.ru/forum....2535819
Прикрепления: HEXtoBCD.txt(1Kb)


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Воскресенье, 08.11.2015, 01:46
 
uwrteyДата: Вторник, 22.11.2016, 02:07 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
bin16BCD5- преобразование 16-битного двоичного значения в упакованный BCD формат
имеем 5 символов
максимум 65535
взял тут http://we.easyelectronics.ru/AVR/matematika-na-assemblere-v-avr.html
Прикрепления: bin16bcd.asm(3Kb)


что то я не успеваю за своими мыслями......
 
Форум » Разработка электронных устройств » Справочная » BCD формат на Assembler в AVR Atmega. hex > dec (конвертор HEX числа для вывода его на экран в DEC виде)
Страница 1 из 11
Поиск:


Copyright MyCorp © 2017
Сделать бесплатный сайт с uCoz