на всякий случай...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено xc164 08 марта 2004 г. 12:16
В ответ на: Подскажите как сделать преобразование в десятичную систему на AVR без соманды десятичной коррекции. отправлено ANT 08 марта 2004 г. 03:51


5.7. Перевод чисел из Д-кода в двоичный и из двоичного в Д-код

Пусть задано 4-х разрядное число в коде Д1 A = a4a3a2a1, каждая десятичная цифра которого должна быть представлена в виде
ai = {4 3 2 1 }i . В данном случае i = 1, 2, 3, 4. Как нам уже известно, изображение числа А можно представить в следующем виде:

A = a4103 + a3102 + a2101 + a1100 ,

Как видно из этой формулы, при переводе из кода Д1 в двоичный код каждый i-тый разряд кода Д1 надо умножать на 10I-1 , т.е.
a11 , a210 , a3100 , a41000 .
В то же время 10 = 8 + 2 = 23 + 21 , значит
a1 = {4 3 2 1 }1
a2 = {4 3 2 1 }2 (23 + 21)
a3 = {4 3 2 1 }3 (23 + 21) (23 + 21)
a4 = {4 3 2 1 }4 (23 + 21) (23 + 21) (23 + 21)

Таким образом, первая тетрада не умножается. Вторая тетрада сдвигается на 3 разряда влево и сохраняется, затем эта же тетрада сдвигается на 1 разряд влево и добавляется к сохраненной и опять сохраняется. Далее с третьей тетрадой выполняются те же процедуры, но последовательно 2 раза, а с четвертой - 3 раза. Все полученные результаты потетрадно складываются и получается число в двоичном коде.
Например, переведем 2510 = 0010 0101 в двоичную систему счисления. Вторую тетраду (0010) сдвигаем на 3 разряда влево, получаем 0001 0000. Эту же тетраду сдвигаем на 1 разряд влево и складываем с полученной:

0001 0000
+0000 0100
0001 0100
+0000 0101 (первая тетрада)
0001 1001 = 2510

Перевод из двоичной системы в код Д1 может осуществляться разными способами. В частности, для ряда последовательных операций над двоичным изображением числа может быть использована процедура деления на
10102= 1010 целых двоичных чисел. Десятичные цифры получаются последовательно одна за другой, начиная со старшего десятичного разряда. При дробных числах эта операция видоизменяется таким образом, чтобы при умножении на число 1010 можно было получить соответствующие цифры десятичных дробей.
Есть более простой способ перевода - это сдвиг влево двоичного числа столько раз, сколько разрядов в двоичном числе. Необходимо предусмотреть коррекцию в тех тетрадах, значение которых превысит 1010, или произойдет потетрадный перенос.
Например, 1100012 = 4910 переведем в код Д1.


110001
1) Сдвиг 1 10001
2) Сдвиг 1 1 0001
3) Сдвиг 1 1 0 001
4) Сдвиг и коррекция +0110 1 0 1 1 0 1 0 0 01
Рез.-т после корр. 1 0 0 1 0 01
5) Сдвиг 1 0 0 1 0 0 1
6) Сдвиг 1 0 0 1 0 0 1

Ответ 0100 1001D = 4910.

Алгоритмы перевода чисел из двоичной системы счисления в Д-код и обратно могут быть реализованы схемными или программными способами.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru