Очень редко может возникнуть необходимость в преобразовании чисел, представленных в рефлексном коде (коде Грея) в позиционный код. В приложениях на основе микроконтроллеров данные в коде Грея могут поступать от некоторых датчиков старого типа.
Для преобразования числа B, представленного в позиционном двоичном коде, в число G записанное в двоичном рефлексном коде необходимо произвести операцию “исключающее ИЛИ” между самим числом B и частным, полученным от деления B/2:
G = B ^ (B/2) = bn-1*2n-1 + (bn-2^bn-1)*2n-2 + … + (b2^b1)*21 + b1^b0
Преобразование из рефлексного кода в позиционный (сводится к последовательному определению разрядов bn двоичного числа). Как видно, старший коэффициент bn-1 в позиционном двоичном и рефлексном кодах всегда совпадают. Для определения bn-2 необходимо произвести битовую операцию bn-1^(bn-2^bn-1). Точно также по известному bn-2 определяется bn-3 = bn-2^(bn-3^bn-2) и т.д. Подпрограмма преобразования 16-разрядного числа в коде Грея в его двоичный эквивалент:
; R17:R16 <- R17:R16 ; R17:R16 – число в рефлексном коде при входе ; и в двоичном позиционном коде при выходе ; R18,R19 – вспомогательные регистры gr16_pos16: ldi R18,0x80 ldi R19,16 ;инициализируем счётчик сдвигов clc ;обнуляем флаг C при входе в цикл gr1: rol R16 ;сдвигаем число R17:R16 на 1 разряд влево rol R17 brcc PC+2 ;находим очередной разряд bn eor R17,R18 dec R19 brne gr1 ;повторяем операцию n раз rol R16 rol R17 ret
Перейти к следующей части: Вычисление функций - Вычисление функций с помощью разложения в степенной ряд
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация