Преобразование кодов
Описание файла
Файл "Преобразование кодов" внутри архива находится в папке "Преобразование кодов". Документ из архива "Преобразование кодов", который расположен в категории "". Всё это находится в предмете "цифровые устройства и микропроцессоры (цуимп)" из 8 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "цифровые устройства и микропроцессоры" в общих файлах.
Онлайн просмотр документа "Преобразование кодов"
Текст из документа "Преобразование кодов"
Преобразование кодов
-
1. Простейшие преобразования
-
2. Преобразование параллельных и последовательных кодов
-
3. Цифро-аналоговые и аналого-цифровые преобразования
В задачах управления может возникнуть необходимость преобразования информации из одной формы представления в другую. Это связано с тем, что обработка данных в МК осуществляется в параллельном двоичном коде, а поступать в МК и выводиться из него информация может в иной форме представления.
Наиболее распространены в задачах логического управления следующие преобразования: из унитарного кода в двоичный (при вводе информации с клавиатуры или от оцифрованных переключателей) и из двоичного в унитарный; из одной системы счисления в другую (при работе со специальными клавиатурами); специальные преобразования (для организации индикации и при выводе информации на периферийные устройства); из последовательного кода в параллельный (при вводе) и из параллельного в последовательный (при выводе) ; из аналоговой формы представления в цифровую и наоборот (для связи с аналоговыми датчиками и исполнительными механизмами) .
1. Простейшие преобразования
Преобразование унитарного кода в двоичный позиционный. Двоичный эквивалент унитарного кода равен номеру бита, в котором находится единственная единица. Поэтому преобразование унитарного кода в двоичный позиционный удобно осуществлять путем сдвига исходного унитарного кода в сторону младших бит с одновременным подсчетом числа сдвигов. При "выдвигании" из младшего бита значения 1 сдвиги прекращаются, а в счетчике сдвигов будет содержаться двоичный эквивалент унитарного кода.
Преобразование двоичного позиционного кода в унитарный. Необходимость такого преобразования возникает, например, при выборке одного из исполнительных устройств, мультиплексирующих шину BUS (Р0) по его номеру.
Пусть, например, требуется преобразовать 3-битный двоичный код из регистра R4 в 8-битный унитарный:
;версия для МК48
DECODE: CLR A ;сброс аккумулятора
CLR C ;сброс флага переноса
CPL C ;установка флага переноса
ROTATE: RLC A ;сдвиг унитарного кода
DJNZ R4, ROTATE ;декремент и цикл, пока не нуль
Преобразование осуществляется путем "вдвигания" единицы из флага переноса. Результат формируется в аккумуляторе за N сдвигов (где N - эквивалент исходного двоичного кода). Недостатком приведенной программы является то,что для преобразования N=0 понадобится 256 сдвигов. Избежать этого можно, "модифицировав программу DECODE следующим образом:
DECODE: |
|
|
Преобразование в этом случае осуществляется за N + 1 сдвигов.
Преобразование кодов из одной системы счисления в другую. Преобразование кода из одной позиционной системы счисления в другую осуществляется делением исходного числа на основание новой системы счисления. При этом деление должно выполняться по правилам исходной системы счисления. Например, для преобразования двоичного числа в двоично-десятичное исходное двоичное число должно быть поделено на 10. Деление должно осуществляться по правилам двоичной арифметики.
Пусть требуется выполнить преобразования 8-битного двоичного числа в двоично-десятичное. Исходный двоичный код хранится в аккумуляторе. Результат преобразования состоит из 12 бит: младшие 4 бита - единицы, представляют собой остаток от деления исходного числа на 10; следующее 4 бита - десятки, представляют собой остаток от деления на 10 полученного частного; старшие 4 бита - сотни, являются частным от второго деления:
;версия для МК48
BBD: |
|
|
В результате выполнения процедуры в младшей тетраде R1 хранятся сотни, в аккумуляторе - десятки и единицы двоично-десятичного эквивалента исходного двоичного числа.
Обратное преобразование (из двоично-десятичного кода в двоичный) осуществляется делением исходного числа на 16 по правилам десятичной арифметики. Программа преобразования приведена ниже. Исходный двоично-десятичный код хранится в аккумуляторе. После окончания работы программы в A находится двоичный эквивалент исходного двоично-десятичного числа.
Программа универсальна и может выполняться в МК48 и в МК51, так как команда DIV AB (МК51) не может быть использована для деления чисел по правилам десятичной арифметики:
BDB: |
|
|
Кроме рассмотренного способа преобразования чисел из одной системы счисления в другую можно воспользоваться более медленным, но зато и более простым способом "двух счетчиков". При этом способе из исходного кода вчитается, а к новому коду прибавляется по единице до обнуления исходного кода, причем вычитание осуществляется "в старой", а прибавление - в "новой" системе счисления. Пример программы преобразования двоичного числа в двоично-десятичное методом двух счетчиков приводится ниже. Для упрощения программы принято, что исходное двоичное число, заданное в A, не превышает его десятичного эквивалента 99:
;версия для МК48
BBD: |
|
|
После выхода из процедуры в A находится двоично-десятичный эквивалент исходного двоичного кода.
2. Преобразование параллельных и последовательных кодов
Преобразование данных из параллельного кода в последовательный. Наиболее важным применением процедур преобразования формы представления данных "параллельный/последовательный" является связь с удаленными датчиками, исполнительными механизмами и другими МК по однопроводным линиям передачи информации. Обычно при передаче байта данных в прямом последовательном коде для обеспечения согласования работы приемника и передатчика используют старт-стопный (асинхронный) режим обмена. Передача последовательного кода байта предваряется посылкой старт-бита (0) и завершается выдачей стоп-бита (1).
Процедура выдачи одного бита последовательного кода реализуется выдачей в линию передачи статического сигнала 0 или 1 и вызовом подпрограммы временной задержки заданной длительности:
;версия для МК48
| ANL P1,#0F7H | ;выдача старт-бита |
В МК51 имеются средства аппаратурного преобразования параллельного кода в последовательный с использованием УАПП. Вся программа преобразования параллельного кода в последовательный сводится при этом к одной команде передачи байта в буфер УАПП: MOV SBUF,A.
Преобразование данных из последовательного кода в параллельный. Эта процедура является составной частью процедуры приема информации в последовательном коде. При обмене информацией в последовательном коде необходима предварительная настройка приемника на начало слова. При асинхронном обмене процедура настройки сводится к ожиданию старт-бита.
После обнаружения старт-бита на входе приемника начинается преобразование кода, совмещенное с процедурой в вода последовательного кода. Схема алгоритма процедуры SPCONV, реализуемой в МК48, представлена на рис.6.11. МК48 обеспечивает прием бита последовательного кода и его распознавание (конкретный вид этого блока зависит от способа представления бита информации в последовательном коде). При длине слова не более 8 бит для формирования параллельного кода удобно воспользоваться аккумулятором; тогда дешифрированный бит "вдвигается" в аккумулятор через флаг переноса. Поскольку последовательный код принимается младшими битами вперед, сдвиг параллельного кода осуществляется вправо. Аккумулятор предварительно сбрасывается, а после N сдвигов (где N - разрядность слова, передаваемого в последовательном коде) в нем фиксируется параллельный код принятого слова данных.
Для обеспечения временного согласования работы приемника и передатчика, а также для снижения вероятности неправильного прочтения сигнала при вводе стартовый бит после его обнаружения необходимо стробировать в середине интервала его представления. С этой целью программа повторяет анализ старт-бита через время, равное половине периода бита, и если старт-бит не подтвердился, то процедура ожидания повторяется.