Понадобилось мне выводить данные о температуре на дисплей в привычном для человека виде - десятичном.
Машинный код - бинарный - ( или шестнадцатеричный ) очень удобный, но не привычен обычному смертному.
Как же конвертировать ?
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