Binary10 bit to BCD

Десятиразрядное число  — результат АДК (аналого-цифровой конвертации). При опорном напряжении 1,024в, итоговый результат будет определяться – 1 мв – один шаг дискретизации. Т.е. – прямо в милливольтах. Атмел и Микрочип в своих AVR204 и AN526 приводят этот же алгоритм для 16-битных чисел. К средней тетраде – прибавляют 30 – в формате 8-битового числа. Косвенная адресация в PIC16  требует определенных корректировок кода Mid Range to Enhanced  инструкция MOVF FSR -> MOVWI FSR  и обратно MOVIW FSR.  Пример кода в d_s PIC16F1509 (page16  надо разобраться  пошагово в отладке с чтением регистров). Для PIC24/32 предпочтителен код из AVR204 –  косвенной адресации с указанием регистров.  FSR —  регистров нет.     Переход по числу 5 – этот статус регистр – переход из младшей тетрады в старшую в байте – бит 1 – DC btfsc Status,1  или  Status, DC; переполнение старшей тетрады  бит 0 – параметр С  btfsc Status, 0  или Status,C.  При C/DC =1, выполняется команда  ADDWF (W=3 или 0x30). Код опубликую по-позже. Всем хорошего дня!!! – День знаний – как полагается – с арифметики начинаем!) 01.09.2021

Цитата по источнику.

Алгоритм 2.1. Перевод целого двоичного числа в 2/10 число (2/10 арифметика) последовательным умножением на 2 в 2/10 арифметике. Умножение осуществляется как 2А = А + А с использованием 2/10 сумматора (по алгоритму сложения 2/10 чисел). Может использоваться алгоритм BIDEC (binary to decimal).

BIDEC — один из существующих алгоритмов перевода двоичного числа в двоично-десятичное.

Для каждого двоичного разряда:

  1. производится сдвиг влево исходного двоичного числа и числа, хранящего результат. Старший разряд двоичного числа переносится в младший разряд результата.
  2. Для каждой тетрады результата: если больше или равна 5, прибавляется три.

 

Пример для числа 73210 = 10110111002.

такт результат           двоичное число         комментарий

0 0000 0000 0000      1011011100               начальная установка

1 0000 0000 0001      0110111000               первый сдвиг влево

2 0000 0000 0010      1101110000               второй сдвиг влево

 

3 0000 0000 0101      1011100000              сдвиг  B’0101’ =D5; B’0011’=D3;5+3=8
B’1000’

3’ 0000 0000 1000                                         младшая тетрада результата +3

 

4 0000 0001 0001      0111000000 сдвиг

5 0000 0010 0010      1110000000 сдвиг

6 0000 0100 0101      1100000000 сдвиг

мл. тетрада +3//B’0101’+ B’0011’ =D8 (B’1000’)

6’ 0000 0100 1000

7 0000 1001 0001      1000000000 сдвиг

7’ 0000 1100 0001     первая   средняя тетрада +3 //B’1001’D9
+B’0011’D3=D12(B’1100’)

Это 0х30 (B’0011 0000) ADDWF

B’1001 0001’ H91(D145)+B’0011 0000’H30 (D48)=  B’1100 0001’ C1(D193)

 

8 0001 1000 0011      0000000000 сдвиг

8’ 0001 1011 0011     первая средняя  тетрада +3 (1000 +0011 = 1011) D11

 

9 0011 0110 0110      0000000000 сдвиг

9’ 0011 1001 1001     0 и 1 тетрады +3 (B’0 110’D6 +B’0011D3 = B’1001’ D9)

10 0111 0011 0010    0000000000 последний сдвиг, коррекция не требуется

Спасибо авторам :

Арифметические и логические основы вычислительной техники. ВШИССТ СПбПУ 2020

BIDEC – A Binary-to-Decimal or Decimal-to-Binary Converter, J. F. Couleur, IRE Transactions on Electronic Computers, Vol. EC-7, pp. 313-316, IRE, 1958.

http://lib.gen.in/next/MTAuMTEwOS90ZWMuMTk1OC41MjIyNjY1/couleur1958.pdf

http://vgsemenov.wordpress.com/2011/11/08/алгоритмы-двоично-десятичного-преоб/