Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Преобразование кодов из одной системы счисления в другую



Преобразование кода из одной позиционной системы счисления в другую осуществляется делением исходного числа на основание новой системы счисления. При этом деление должно выполняться по правилам исходной системы счисления. Например, для преобразования двоичного числа в двоично-десятичное исходное двоичное число должно быть поделено на 10. Деление должно осуществляться по правилам двоичной арифметики.

Пусть требуется выполнить преобразования 8-битного двоичного числа в двоично-десятичное. Исходный двоичный код хранится в аккумуляторе. Результат преобразования состоит из 12 бит: младшие
4 бита – единицы, представляют собой остаток от деления исходного числа на 10; следующее 4 бита – десятки, представляют собой остаток от деления на 10 полученного частного; старшие 4 бита – сотни, являются частным от второго деления. Листинг 4.29 содержит программу преобразования однобайтового двоичного кода в двоично-десятичный.

Листинг 4.29 – Программа преобразования однобайтового двоичного кода в двоично-десятичный

  .ORG 0000h ; Адрес начала программы
  MOV A, #255   MOV B, #10   DIV AB MOV DPL, B   MOV B, #10   DIV AB MOV DPH, A   MOV A, B SWAP A ORL A, DPL MOV DPL, A ... ; Загрузка в аккумулятор ; преобразуемого числа (255) ; Загрузка в регистр B ; делителя ; Деление A на B ; Сохранение остатка от ; деления (единиц) в регистре ; DPL. Регистр A содержит ; частное от первого деления ; Загрузка в регистр B ; делителя ; Деление A на B ; Сохранение частного от ; второго деления в DPH ; Сохранение остатка от ; второго деления в старшей ; тетраде регистра DPL

Результат выполнения программы сохраняется в регистре DPTR. Формат результата приведен на рисунке 4.19.

DPTR
DPH DPL
                               
Незначащие Сотни Десятки Единицы
                               

Рисунок 4.19 – Формат результата преобразования

Обратное преобразование (из двоично-десятичного кода в двоичный) заключается в расчёте суммы:

«единицы» + «десятки» × 10 + «сотни» × 100…

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

В приведённой программе исходное значение хранится в младших двенадцати битах регистра DPTR. Результат сохраняется в аккумулятор.

Листинг 4.30 – Программа преобразования двухзначного
двоично-десятичного кода в двоичный

  .ORG 0000H ; Адрес начала программы
  … MOV A, DPL SWAP A ANL A, #0FH MOV B, #10 MUL AB   PUSH A   MOV A, DPL ANL A, #0FH MOV DPL, A   POP A   ADD A, DPL   MOV DPL, A MOV A, DPH ANL A, #0FH   MOV B, #100 MUL AB ADD A, DPL   … ; Выделение десятков ; Умножение десятков на 10 ; Сохранение в стек ; результата умножения ; Выделение единиц ; Восстановление из стека ; Сложение единиц и ; результата умножения ; Выделение сотен ; Умножение сотен на 100 ; Сложение результата умножения ; с числом «единицы»+«десятки»×10

Кроме рассмотренного способа преобразования чисел из одной системы счисления в другую, можно воспользоваться более медленным, но зато и более простым способом «двух счетчиков». При этом способе из исходного кода вычитается, а к новому коду прибавляется по единице до обнуления исходного кода, причем вычитание осуществляется «в старой», а прибавление – в «новой» системе счисления. Пример программы преобразования двоичного числа в двоично-десятичное методом двух счетчиков приводится ниже (листинг 4.31).
В приведенной программе исходный двоичный код должен находиться в аккумуляторе, двоично-десятичный код – в регистре DPTR.

Листинг 4.31 – Программа преобразования двоичного числа
в двоично-десятичное методом двух счетчиков

.ORG 0000h ; Адрес начала программы
NEXT: EXIT: MOV A, #200 MOV DPTR, #0000H JZ EXIT MOV R0, A MOV A, DPL ADD A, #01H DA A MOV DPL, A MOV A, DPH ADDC A, #00H DA A MOV DPH, A DJNZ R0, NEXT ; в A преобразуемое число ; Обнуление регистра DPTR ; Выход из подпрограммы ; преобразования, если ; преобразуемое число 0 ; В регистр-счётчик ( R 0) ; преобразуемое число ; Увеличение регистра DPL ; на единицу и его ; двоично-десятичная ; коррекция ; Увеличение регистра DPH ; на единицу, если возник ; перенос при увеличении ; регистра DPL и ; двоично-десятичная коррекция ; результата ; Уменьшение счетчика циклов ; ( R 0) и переход на начало цикла, ; если R 0 не равно 0

4.4.4 Преобразование данных из параллельного кода
в последовательный и обратно

Наиболее распространенным применением процедур преобразования параллельной формы в последовательную и обратно является связь с удаленными датчиками, исполнительными механизмами и другими МК по однопроводным и двухпроводным линиям передачи информации.

Для этих целей удобно использовать аппаратные средства микроконтроллера – последовательный порт (см. п. 1.3.4). Порт может работать в двух режимах: в режиме сдвигающего регистра и режиме универсального асинхронного приёмопередатчика.

Работа последовательного порта в режиме сдвигающего регистра предполагает синхронную выдачу и приём битов информации (рисунок 4.20).

Внешнее устройство, принимающее информацию, должно «защёлкивать» биты по переднему фронту сигнала на выходе TXD, выдающее – устанавливать данные по заднему фронту.

Выдача информации в этом режиме может быть реализована следующим образом (листинг 4.32).

   
Рисунок 4.20 – Организация последовательного синхронного обмена между микроконтроллером и периферийным устройством

Листинг 4.32 – Программа выдачи информации микроконтроллером

  ORG 0000H ; Адрес начала программы
  NEXT: MOV IE, #00H MOV SCON, #00H     MOV P0, #FFH MOV A, P0 SETB P1.0   MOV SBUF, A     JNB TI, $ CLR P1.0   CLR TI JMP NEXT ; Запрет всех прерываний ; Настройка последовательного ; порта контроллера на режим ; синхронной передачи ; Настройка порта P0 на ввод ; Чтение данных из порта P0 ; Разрешение внешнему ; устройству приёма данных ; Запись данных в регистр SBUF ; (при этом автоматически ; начинается выдача данных) ; Ожидание завершения передачи ; Запрет внешнему устройству ; приёма данных ; Сброс флага конца передачи ; Переход на начало цикла

Процедура приёма данных аналогична процедуре выдачи (листинг 4.33).

Листинг 4.33 – Программа приёма информации микроконтроллером

  ORG 0000H ; Адрес начала программы
    NEXT: MOV IE, #00H MOV SCON, #10H     SETB P1.0   JNB RI, $ MOV A, SBUF MOV P0, A CLR P1.0   CLR RI JMP NEXT … ; Запрет всех прерываний ; Настройка последовательного ; порта контроллера на режим ; синхронного приёма ; Разрешение внешнему ; устройству на передачу данных ; Ожидание завершения приёма ; Чтение данных из регистра SBUF ; и их выдача в P0 ; Запрет внешнему устройству ; передачи данных ; Сброс флага конца приёма ; Переход на начало цикла

Режим универсального приёмопередатчика удобно использовать для асинхронной выдачи и асинхронного приёма информации по последовательному каналу связи (например, по интерфейсу RS-232). Описание работы последовательного порта в режиме универсального приёмопередатчика приведено в п. 1.3.4.

Программа, реализующая прием байта данных, его инвертирование и выдачу обратно (подобная процедура часто используется для тестирования физических линий связи), реализована следующим образом (листинг 4.34).

Листинг 4.34 – Программа, демонстрирующая асинхронный обмен
информации через последовательный порт





Дата публикования: 2014-11-03; Прочитано: 784 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...