Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кормилин_2003_Устрой.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
576 Кб
Скачать
☆
      1. Команды передачи данных

Команды передачи данных не влияют на флаги результата.

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

Рисунок 4.19 - Граф путей передачи данных в МК51

Большую часть команд данной группы (таблица 4.14) составляют команды передачи и обмена байтами. Столбец «Байты» показывает количество байтов в команде, а «Циклы» - это количество машинных циклов на выполнение команды.

Таблица 4.14 - Команды передачи данных

      1. Арифметические команды

В данную группу команд (таблица 4.15) входят команды сложения, вычитания, умножения и деления байтов. Имеются команды десятичной коррекции результата сложения, увеличения на единицу как 8-битовых, так и 16-битовых операндов, уменьшения на единицу для 8-битовых операндов.

Таблица 4.15 - Группа арифметических операций

Все команды этой группы используют АЛУ и влияют на состояние флагов.

      1. Логические команды

В данную группу (таблица 4.16) входят команды, выполняющие логические операции вида «И», «ИЛИ», «Исключающее ИЛИ» над операндом в аккумуляторе и в любом байте РПД или в регистрах специальных функций. Сюда же входят команды сдвига аккумулятора влево и вправо, а также сброса и инверсии аккумулятора.

Таблица 4.16 - Группа логических операций

Все команды этой группы используют АЛУ и влияют на состояние флагов.

      1. Команды операций с битами

Данные команды (таблица 4.17) оперируют с однобитовыми операндами. Биты расположены в области битовой адресации (128 битов пользователя) и в области регистров специальных функций. Для адресации бит используется прямой 8-битовый адрес (bit). Косвенная адресация бит невозможна.

Таблица 4.17 - Битовые операции

      1. Команды передачи управления

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

Таблица 4.18 - Группа команд передачи управления

В приложении А приведена система команд МК51 в табличной форме. По номеру строки (старшая тетрада) и столбца (младшая тетерада) можно определить байт кода операции любой команды.

В приложении Б система команд МК51 разделена на функциональные группы и представлена в списочной форме с описанием команд.

    1. Пример составления простейших программ для оэвм кр1816ве51

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

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

Таблица 4.19 - Фрагмент программы сброса флагов пользователя

Использование команд передачи управления. Одной из типовых для микропроцессорной системы является задача обработки поступающей с внешних источников информации.

Допустим, во внешней памяти данных с некоторого датчика порциями по 60 байтов записывается информация. После записи последнего байта, на вывод Р1.2 порта Р1 поступает положительный импульс длительностью около 10·10-6 с, что гарантирует его обнаружение в МК. Требуется обнаружить входной импульс и, по его окончанию, перенести массив из ВПД в РПД с очисткой исходной области во внешней памяти.

Для обнаружения импульса готовности данных в программе (таблица 4.20) сначала выполняется поиск положительного фронта импульса. Команда условного перехода опрашивает значение заданного бита и выполняет переход на саму себя. Другая условная команда предназначена для обнаружения спада импульса. Две условные команды последовательно позволят обнаружить импульс управления.

Таблица 4.20 - Перенос массива из ВПД в РПД

Использование арифметических и битовых команд. Использование арифметических и битовых команд удобно показать на примере подпрограммы табличного вычисления функции sin(x). В памяти программ записана таблица значений синуса от 0º до 89º в виде байтов дробных значений. Значение угла в градусах задается старшей частью в регистре В, а младшей - в аккумуляторе.

Значения синуса угла в 3 и 4 квадранте отличается только знаком от значения угла 1 и 2 квадрантов. Значения из 2 квадранта соответствуют дополнительным значениям из 1 квадранта. Поэтому при преобразовании значения угла использовались следующие формулы:

При вычислении функции (таблица 4.21) для определения значения угла, превышающего 180º, старший бит значения угла из регистра В копируется во флаг переноса. Затем этот бит вдвигается в аккумулятор. Полученное половинное значение угла сравнивается с половинным значением от 180. Далее, при необходимости, вычитаем 180 для перехода в 1, 2 квадрант. Аналогично происходит переход в 1 квадрант. Затем значение берется из таблицы.

Таблица 4.21 - Табличное вычисление sin(x)

Использование подпрограмм. Одной из типовых задач является процедура формирования программной задержки. Примером такой задачи является фрагмент программы (таблица 4.22), выполняющей задержку на 1 секунду. Во фрагменте задана подпрограмма DELAY, выполняющая задержку примерно на 0,1 сек. За счет повторных вызовов подпрограммы задержка доводится до 1 сек.

Таблица 4.22 - Фрагмент программы формирования задержки

Коэффициенты для счетчиков подбирались исходя из требуемого числа машинных циклов. При тактовой частоте 12 МГц длительность машинного цикла равна 1·10-6 с. С учетом длительности команд и повторения циклов получается около 100 тысяч машинных циклов. Это приближенно дает задержку в 0,1 секунды.

Безусловно, задачу можно решать с использованием таймера / счетчика. При этом нужно использовать режим 16 битового делителя. Максимальный интервал задержки от таймера можно получить около 0,05 сек.

Если на внешний вход таймера подавать низкочастотные импульсы, можно с помощью больших коэффициентов деления получать огромные длительности задержки. Это решение потребует наличия внешнего генератора, что весьма неудобно. Вышеприведенный программный вариант не требует больших затрат, позволяет перестраивать задержку в больших пределах и достаточно привлекателен.