Реализация фрагмента контактной схемы программным методом
Рисунок 1. Функциональная схема устройства Состояние бита соответствует разомкнутому состоянию реле, т. е. напряжение на зажимах 1−2 катушки реле отсутствует. Такому состоянию реле соответствует разомкнутое состояние () нормальноразомкнутого контакта 3−4 и замкнутое состояние () нормальнозамкнутого контакта 5−6. При подаче напряжения на обмотку катушки реле (контакты 1−2) () состояние его… Читать ещё >
Реализация фрагмента контактной схемы программным методом (реферат, курсовая, диплом, контрольная)
- 1. Типовое задание
- 1.1 Задание по варианту
- 2. Выполнение
- 2.1 Анализ поставленной задачи
- 2.2 Блок-схема 1
- 2.3 Описание алгоритма реализации программы 1
- 2.4 Программа 1 на языке Ассемблера
- 2.5 Блок-схема 2
- 2.6 Описание алгоритма реализации программы 2
- 2.7 Программа 2 на языке Ассемблера
- 2.9 Блок-схема 3
- 2.10. Описание алгоритма реализации программы 3
- 2.11. Программа 3 на языке Ассемблера
- 2.8 Карта памяти микропроцессорной системы
- 2.9 Анализ временных характеристик
- 2.9.1 Расчет времени выполнения программы 1
- 2.9.2 Расчет времени выполнения программы 2
- 2.9.3 Расчет времени выполнения программы 3
- 3. Вывод
- 4. Список литературы
1. Типовое задание
1. Выполнить анализ поставленной задачи, согласно варианту задания. Определить методы ее решения.
2. Разработать общий алгоритм реализации задания и провести анализ временных и точностных параметров предлагаемого решения задачи.
3. Выполнить инициализацию переменных в общем алгоритме архитектурным элементам микропроцессора КР580ВМ80А и портам ввода-вывода. Составить карту памяти микропроцессорной системы для реализации программы.
4. С учетом архитектурных особенностей микропроцессора КР580ВМ80А и заданных методов адресации доступа к операндам разработать подробные алгоритмы реализации задачи.
5. На языке Ассемблера микропроцессора КР580ВМ80А разработать программы реализации задачи.
6. Выполнить анализ соответствия временных и точностных характеристик разработанного устройства заданным.
7. Вывод.
1.1 Задание по варианту
Программным способом реализовать фрагмент контактной схемы.
Текущие состояния реле поступают в порт ввода № 1 непрерывно во времени в виде байта информации:
X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
Номер бита соответствует номеру реле.
Рисунок 1. Функциональная схема устройства Состояние бита соответствует разомкнутому состоянию реле, т. е. напряжение на зажимах 1−2 катушки реле отсутствует. Такому состоянию реле соответствует разомкнутое состояние () нормальноразомкнутого контакта 3−4 и замкнутое состояние () нормальнозамкнутого контакта 5−6. При подаче напряжения на обмотку катушки реле (контакты 1−2) () состояние его контактов меняется на противоположное: нормальноразомкнутый контакт 3−4 замыкается (его состояние становится равным), а нормальнозамкнутый контакт 56 размыкается (его состояние становится равным).
Рисунок 2. Разомкнутое (а) и замкнутое (б) состояние реле Согласно логического состояния цепей управления (контактов) в разрабатываемом устройстве необходимо управлять состоянием реле. Управляющее слово состоянием реле выводится микропроцессором в порт вывода № 2 в виде байта информации, где номер бита также соответствует номеру реле. Если в соответствии с текущим состоянием реле реле в данный момент должно быть замкнуто, то выводится логическая «1» .
Логический контроллер, реализуемый на микропроцессоре, работает непрерывно во времени, и управляет состоянием реле в зависимости от текущего состояния реле. Время между изменением состоянием реле и изменением состояния должно быть минимальным. Данное требование должно быть учтено при разработке алгоритмов системы управления.
Рисунок 3 — Контакторная схема по варианту алгоритм микропроцессор программный память
2. Выполнение
2.1 Анализ поставленной задачи
Необходимо реализовать фрагмент контактной схемы программным методом.
Я применил метод решения задачи, который позволяет реализовать работу данной схемы при использовании лабораторного стенда. Лабораторные стенды сопряжены с учебным микропроцессорным комплектом (УМК) на базе микропроцессора К580ВМ80А. Стенд подключен через внешний разъем, объединяющий шину адреса, шину данных и шину управления УМК. На лицевую панель стенда выведены линии шины адреса и шины управления. Стенд представляет собой набор микросхем, из которых при помощи внешних проводников собирается нужная схема. Часть соединений выполнена внутри стенда.
Следует сказать несколько слов о вводе-выводе данных. Ввод-вывод данных — это режим, при котором микропроцессор принимает данные из внешнего устройства или передает их во внешнее устройство. Для организации обмена данными используются три шины: адреса, данных и управления. На шину адреса микропроцессор выставляет адрес внешнего устройства, по шине данных передаются данные, шина управления управляет внешними устройствами в соответствии с их временными диаграммами.
Подключение устройств ввода-вывода к микропроцессорной системе осуществляется через порты ввода-вывода. В общем случае порт ввода — это обычный буфер, а порт вывода — буферный регистр. Активизация портов происходит при выставлении адреса порта и управляющем сигнале «чтение» или «запись» .
Ввод данных будет происходить следующим образом: входные сигналы будут подаваться непосредственно на шину данных путем подачи на контакты напряжения с уровнем логической 1 или 0 (земля) с помощью проводников. Этим я обеспечил непрерывность подачи текущих состояний реле. Во время подачи соответствующего сигнала процессору эти данные будут считываться и сохраняться в одном из регистров.
Соответствие номера реле и разряда бита шины адреса:
х | X6 | X5 | X4 | X3 | X2 | X1 | X0 | |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
х — незначащий бит.
Обычно при чтении данных, прежде всего, микропроцессором выставляется адрес устройства, данные которого будут прочитаны; на управляющем выходе DBIN микропроцессор выставляет сигнал чтения (приема) данных; по сигналу чтения внешнее устройство выставляет на шину данных данные, которые считываются микропроцессором; микропроцессор снимает сигнал чтения, внешнее устройство снимает данные с шины; микропроцессор снимает адрес внешнего устройства. Стоит отметить, что нам не важен ни адрес, выставляемый микропроцессором, ни сигнал на управляющем выходе, так как процессор только считывает данные, которые непосредственно выставляются с помощью проводников.
Далее идет обработка сигнала, сохраненного в регистре. В программе 1 применяется сдвиг аккумулятора вправо и влево для того, чтобы сигналы использовали одинаковый разряд, что позволяет производить над ними нужные мне логические операции. Так как данную схему можно представить в виде логической схемы, то при реализации метода я использовал операции логического сложения, умножения, а также инвертирование аккумулятора, которое использовалось для описания логики работы нормальнозамкнутых контактов. Также применялось маскирование данных во избежание ошибки при выводе выходных данных.
При выводе предполагалось применить несколько способов, в том числе запись результатов в оперативное запоминающее устройство (ОЗУ). ОЗУ предназначено для хранения оперативной (изменяемой) информации. Для ОЗУ предусмотрено три режима работы: режим хранения данных при отсутствии обращения к ОЗУ, режим чтения данных и режим записи новых данных. Каждое запоминающее устройство включает в себя средства адресации, накопитель информации и устройство управления. Накопитель информации состоит из запоминающих элементов (элементов памяти), число которых равняется емкости запоминающего устройства. Под элементами памяти подразумеваются элементарные схемы, предназначенные для приема, хранения и выдачи одного бита информации. Для подключения ОЗУ к микропроцессорной системе используют шины: адреса, данных и управления. При подключении памяти необходимо учесть нагрузочную способность микропроцессора и применяемых ОЗУ. При необходимости для согласования нагрузочной способности между МП и памятью включают схемы согласования (буферы). В общем случае схемы согласования используются для всех трех шин. При подключении блока ОЗУ к микропроцессорной системе необходимо также учитывать временные параметры используемых микросхем. Во избежание сбоев в чтении или записи данных временные параметры микросхем ОЗУ должны соответствовать временным параметрам работы микропроцессора. Использование схем согласования увеличивает временные задержки между сигналами управления. Обычно при записи данных микропроцессором выставляется адрес устройства, в которое будут записываться данные; микропроцессором выставляются данные на шину данных; на управляющем выходе «запись» микропроцессор выставляет сигнал записи данных; микропроцессор снимает сигнал записи; микропроцессор снимает данные с шины данных и адрес с шины адреса.
Программа 2 составлена на основе таблицы 1, которая, в свою очередь, составлена на основе исходной контакторной схемы.
Таблица 1 — Таблица истинности.
X6 | X5 | X4 | X3 | X2 | X1 | X0 | Y1 | Y2 | |
x | x | x | х | ||||||
x | x | x | х | ||||||
x | x | x | x | х | |||||
x | x | x | x | x | х | ||||
x | x | x | x | х | |||||
x | x | x | x | х | |||||
х — незначащий бит.
Следует отметить, что при реализации данной таблицы истинности, был учтен тот факт, что значения Y1 и Y2 могут одновременно равняться единице.
Программа 3 составлена для минимизации времени выполнения поставленной задачи. Для этого между шиной данных и портом ввода данных в микропроцессорный комплект необходимо установить гальваническую развязку, благодаря которой входное слово будет иметь следующий вид:
х | X0 | X1 | X2 | X3 | X4 | X5 | X6 | |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
Данное действие позволяет уменьшить время выполнения программы, которое будет зависеть от состояний реле. Например, если состояния реле Х6 и Х2 равны нулю, то цикл программы будет иметь наименьшее время выполнения.
2.2 Блок-схема 1
Ниже приведена подробная блок-схема алгоритма решения поставленной задачи.
2.3 Описание алгоритма реализации программы 1
1. Входные данные загружаются в аккумулятор.
2. Для последующего использования данные сохраняются в регистре В.
3. Сдвиг аккумулятора на один разряд вправо, Х1 в нулевом разряде.
4. Сохранение Х1 в регистре D.
5. Сдвиг аккумулятора на один разряд вправо, инвертирование аккумулятора, в нулевом разряде.
6. Происходит логическое сложение аккумулятора и данных в регистре D, результат операции «» записывается в регистр D.
7. После загрузки данных из регистра В происходит инвертирование аккумулятора, в нулевом разряде .
8. Происходит логическое умножение аккумулятора и данных в регистре D, результат операции «» записывается в регистре С.
9. После загрузки данных из регистра В происходит сдвиг аккумулятора вправо на три разряда для установки Х3 в нулевой разряд.
10. Происходит логическое сложение аккумулятора и данных в регистре С, результат операции «» записывается в регистре С.
11. После загрузки данных из регистра В происходит сдвиг аккумулятора вправо на четыре разряда для установки Х4 в нулевой разряд.
12. Происходит логическое умножение аккумулятора и данных в регистре С, результат операции «» записывается в регистре С.
13. После загрузки данных из регистра В происходит сдвиг аккумулятора влево на три разряда и инвертирование аккумулятора для установки в нулевой разряд.
14. Происходит логическое умножение аккумулятора и данных регистра С, результат Y1
операции «» записывается в регистре С.
15. После загрузки данных из регистра В происходит сдвиг аккумулятора вправо на один разряд и инвертирование аккумулятора для установки в нулевом разряде, сохранение в регистре D.
16. После загрузки данных из регистра В происходит сдвиг аккумулятора влево на три разряда для установки Х5 в нулевой разряд.
17. Происходит логическое умножение аккумулятора и данных в регистре D, результат операции «» сохраняется в регистре D.
18. После загрузки данных из регистра В происходит сдвиг аккумулятора вправо на три разряда для установки Х3 в нулевой разряд, сохранение аккумулятора в регистре L.
19. Происходит сдвиг аккумулятора на еще один разряд для установки в нулевом разряде Х4, сохранение аккумулятора в регистре Н.
20. После загрузки в аккумулятор данных из регистра L происходит инвертирование аккумулятора для установки в нулевом разряде.
21. Происходит логическое умножение аккумулятора и содержимого регистра Н, результата операции «» сохраняется в аккумуляторе.
22. Происходит логическое сложение аккумулятора и данных регистра D, результат операции «» записывается в регистр D.
23. После загрузки данных из регистра В происходит сдвиг аккумулятора вправо для установки Х2 в нулевой разряд.
24. Происходит логическое умножение аккумулятора и данных в регистре D, результат Y2 операции «» записывается в регистре D.
25. Загружается маска в регистр Е.
26. После загрузки в аккумулятор данных из регистра D происходит логическое умножение аккумулятора и данных регистра Е, тем самым обнуляются незначащие биты числа.
27. Происходит сдвиг аккумулятора влево на один разряд, для установки Y2 в первом разряде, сохранение аккумулятора в регистре D.
28. После загрузки в аккумулятор данных из регистра С, происходит логическое умножение аккумулятора и данных регистра Е, тем самым обнуляются незначащие биты числа.
29. Происходит логическое сложение аккумулятора и данных регистра D.
30. Выходные данные Y1 и Y2 выводятся соответственно через нулевой и первый разряды шины данных.
31. После указанных операций происходит безусловный переход к началу программы, в результате получается бесконечный цикл ввода, преобразования и вывода данных.
2.4 Программа 1 на языке Ассемблера
Ниже приведена таблица, в которой дано подробное описание программы 1 на языке Ассемблера в машинных кодах, а также мнемокод, описание и комментарий к каждой команде.
Таблица 2.
Метки | Адрес | Данные | Мнемокод | Описание команды | Комментарий к команде | |
М1 | DB | IN 01 | (A) (01) | Ввод в порт по адресу 01h входных данных | ||
MOV B, A | (B) (A) | сохранение аккумулятора в регистре В | ||||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
MOV D, A | (D) (A) | сохранение аккумулятора в регистре D | ||||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
2F | CMA | (A) () | Инвертирование аккумулятора | |||
B2 | ORA D | (A) (A) (D) | логическое сложение аккумулятора и данных в D | |||
MOV D, A | (D) (A) | сохранение аккумулятора в регистре D | ||||
MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | ||||
080A | 2F | CMA | (A) () | Инвертирование аккумулятора | ||
080B | A2 | ANA D | (A) (A) (D) | логическое умножение аккумулятора и данных в регистре D | ||
080C | 4F | MOV C, A | © (A) | сохранение аккумулятора в регистре C | ||
080D | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
080E | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
080F | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
B1 | ORA C | (A) (A) (C) | логическое сложение аккумулятора и данных в C | |||
4F | MOV C, A | © (A) | сохранение аккумулятора в регистре C | |||
MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | ||||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
A1 | ANA C | (A) (A) (C) | логическое умножение аккумулятора и данных в регистре C | |||
4F | MOV C, A | © (A) | сохранение аккумулятора в регистре C | |||
081A | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | |||
081B | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | |||
081C | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | |||
081D | 2F | CMA | (A) () | инвертирование аккумулятора | ||
081E | B1 | ORA C | (A) (A) (C) | логическое сложение аккумулятора и данных в C | ||
081F | 4F | MOV C, A | © (A) | сохранение аккумулятора в регистре C | ||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | ||||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | ||||
A1 | ANA C | (A) (A) (C) | логическое умножение аккумулятора и данных в регистре C | |||
4F | MOV C, A | © (A) | сохранение аккумулятора в регистре C | |||
MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | ||||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
2F | CMA | (A) () | инвертирование аккумулятора | |||
MOV D, A | (D) (A) | сохранение аккумулятора в регистре D | ||||
MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | ||||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | ||||
082A | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | |||
082B | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | |||
082C | A2 | ANA D | (A) (A) (D) | логическое умножение аккумулятора и данных в регистре D | ||
082D | MOV D, A | (D) (A) | сохранение аккумулятора в регистре D | |||
082E | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
082F | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
6F | MOV L, A | (L) (A) | загрузка данных с аккумулятора в регистор L | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
MOV H, A | (H) (A) | загрузка данных с аккумулятора в регистор H | ||||
7D | MOV A, L | (A) (L) | загрузка данных с регистра L в аккумулятор | |||
2F | CMA | (A) () | инвертирование аккумулятора | |||
A4 | ANA H | (A) (A) (H) | логическое умножение аккумулятора и данных в регистре H | |||
B2 | ORA D | (A) (A) (D) | логическое сложение аккумулятора и данных в D | |||
MOV D, A | (D) (A) | загрузка данных с аккумулятора в регистор D | ||||
083A | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
083B | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
083C | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
083D | A2 | ANA D | (A) (A) (D) | логическое умножение аккумулятора и данных в регистре D | ||
083E | MOV D, A | (D) (A) | загрузка данных с аккумулятора в регистор D | |||
083F | 1E | MVI E, 01 | (E) (01) | запись данных 01h в регистр E | ||
7A | MOV A, D | (A) (D) | загрузка данных с регистра D в аккумулятор | |||
A3 | ANA E | (A) (A) (E) | логическое умножение аккумулятора и данных в регистре E | |||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора на один разряд влево | ||||
MOV D, A | (D) (A) | загрузка данных с аккумулятора в регистор D | ||||
MOV A, C | (A) (C) | загрузка данных с регистра C в аккумулятор | ||||
A3 | ANA E | (A) (A) (E) | логическое умножение аккумулятора и данных в регистре E | |||
B2 | ORA D | (A) (A) (D) | логическое сложение аккумулятора и данных в D | |||
D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | |||
084A 084B 084C | C3 | JMP M1 | (PC) (0800) | безусловный переход на адрес 0800h | ||
2.5 Блок-схема 2
2.6 Описание алгоритма реализации программы 2
М1 — 1. Входные данные загружаются в аккумулятор.
2. Для последующего использования данные сохраняются в регистре В.
3. Загружается маска 52h в регистор Е, происходит логическое умножение данных регистра Е на аккумулятор (маскирование).
4. Происходит логическое вычитание аккумулятора и данных регистра Е, результат сохраняется в регистре С.
5. Обнуление аккумулятора. Сравнение данных регистра С с аккумулятором.
6. Переход на метку М2 если результат не равен нулю.
7. Если в результате действий регистор С равен нулю, то аккумулятору присваивается значение 01h, что соответствует Y1=1.
8. Загрузка данных аккумулятора в регистор Н, после происходит переход на метку М5.
М2 — 9. После загрузки данных из регистра В в аккумулятор, загружается маска 50h в регистр Е, происходит логическое умножение данных регистра Е на аккумулятор (маскирование).
10. Происходит логическое вычитание аккумулятора и данных регистра Е, результат сохраняется в регистре С.
11. Обнуление аккумулятора. Сравнение данных регистра С с аккумулятором.
12. Переход на метку М3 если результат не равен нулю.
13. Если в результате действий регистор С равен нулю, то аккумулятору присваивается значение 01h, что соответствует Y1=1.
14. Загрузка данных аккумулятора в регистор Н, после происходит переход на метку М5.
М3 — 15. После загрузки данных из регистра В в аккумулятор, загружается маска 58h в регистр Е, происходит логическое умножение данных регистра Е на аккумулятор (маскирование).
16. Происходит логическое вычитание аккумулятора и данных регистра Е, результат сохраняется в регистре С.
17. Обнуление аккумулятора. Сравнение данных регистра С с аккумулятором.
18. Переход на метку М4 если результат не равен нулю.
19. Если в результате действий регистор С равен нулю, то аккумулятору присваивается значение 01h, что соответствует Y1=1.
20. Загрузка данных аккумулятора в регистор Н, после происходит переход на метку М5.
М4 — 21. После загрузки данных из регистра В в аккумулятор, загружается маска 40h в регистр Е, происходит логическое умножение данных регистра Е на аккумулятор (маскирование).
22. Происходит логическое вычитание аккумулятора и данных регистра Е, результат сохраняется в регистре С.
23. Обнуление аккумулятора. Сравнение данных регистра С с аккумулятором.
24. Переход на метку М5 если результат не равен нулю.
25. Если в результате действий регистор С равен нулю, то аккумулятору присваивается значение 01h, что соответствует Y1=1.
26. Загрузка данных аккумулятора в регистор Н.
М5 — 27. После загрузки данных из регистра В в аккумулятор, загружается маска 13h в регистр Е, происходит логическое умножение данных регистра Е на аккумулятор (маскирование).
28. Происходит логическое вычитание аккумулятора и данных регистра Е, результат сохраняется в регистре С.
29. Обнуление аккумулятора. Сравнение данных регистра С с аккумулятором.
30. Переход на метку М6 если результат не равен нулю.
31. Если в результате действий регистор С равен нулю, то аккумулятору присваивается значение 02h, что соответствует Y2=1.
32. Происходит логическое сложение аккумулятора и данных регистра Н, результат сохраняется в аккумуляторе, в нулевом и первом разряде которого сохраняются состояния Y1 и Y2 соответственно.
33. Выходные данные Y1 и Y2 выводятся соответственно через нулевой и первый разряды шины данных, после чего происходит безусловный переход на начало программы.
М6 — 34. После загрузки данных из регистра В в аккумулятор, загружается маска 23h в регистр Е, происходит логическое умножение данных регистра Е на аккумулятор (маскирование).
35. Происходит логическое вычитание аккумулятора и данных регистра Е, результат сохраняется в регистре С.
36. Обнуление аккумулятора. Сравнение данных регистра С с аккумулятором.
37. Переход на метку М7 если результат не равен нулю.
38. Если в результате действий регистор С равен нулю, то аккумулятору присваивается значение 02h, что соответствует Y2=1.
39. Происходит логическое сложение аккумулятора и данных регистра Н, результат сохраняется в аккумуляторе, в нулевом и первом разряде которого сохраняются состояния Y1 и Y2 соответственно
40. Выходные данные Y1 и Y2 выводятся соответственно через нулевой и первый разряды шины данных, после чего происходит безусловный переход на начало программы.
М7 — 41. После загрузки данных из регистра Н в аккумулятор, данные выводятся на шину данных.
42. Происходит безусловный переход на начало программы, в результате получается бесконечный цикл ввода, преобразования и вывода данных.
2.7 Программа 2 на языке Ассемблера
Ниже приведена таблица, в которой дано подробное описание программы 2 на языке Ассемблера в машинных кодах, а также мнемокод, описание и комментарий к каждой команде.
Таблица 3.
Метки | Адрес | Данные | Мнемокод | Описание команды | Комментарий к команде | |
М1 | MVI H, 01 | (H) (00) | запись данных 00h в регистор Н | |||
DB | IN 01 | (A) (01) | Ввод в порт по адресу 01h входных данных | |||
MOV B, A | (B) (A) | сохранение аккумулятора в регистре В | ||||
1Е | MVI E, 52 | (E) 52h | запись данных 52h в регистр E | |||
A3 | ANA Е | (A) (A) (Е) | логическое умножение аккумулятора и данных в регистре Е | |||
SUB E | (A) (A) — (Е) | Вычитание из аккумулятора содержимого регистра Е | ||||
4F | MOV С, A | © (A) | сохранение аккумулятора в регистре C | |||
080A 080B | 3Е | MVI A, 00 | (A) 00h | запись данных 00h в аккумулятор | ||
080C | В9 | CMP C | If (А) = © then | Сравнение содержимого регистраС с аккумулятором | ||
080D 080E 080F | C2 | JNZ M2 | JMP if Z=0 | Переход при выполнении условия Z=0 | ||
MVI H, 01 | (H) 01h | запись данных 01h в регистор Н | ||||
CA | JZ M5 | JMP if Z=1 | Переход при выполнении условия Z=1 | |||
M2 | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
1Е | MVI E, 50 | (E) 00h | запись данных 50h в регистр E | |||
A3 | ANA Е | (A) (A) (Е) | логическое умножение аккумулятора и данных в регистре Е | |||
SUB E | (A) (A) — (Е) | Вычитание из аккумулятора содержимого регистра Е | ||||
081A | 4F | MOV С, A | © (A) | сохранение аккумулятора в регистре C | ||
081B 081C | 3Е | MVI A, 00 | (A) 00h | запись данных 00h в аккумулятор | ||
081D | В9 | CMP C | If (А) = © then | Сравнение содержимого регистраС с аккумулятором | ||
081E 081F | C2 | JNZ M3 | JMP if Z=0 | Переход при выполнении условия Z=0 | ||
MVI Н, 01 | (Н) 01h | запись данных 01h в регистор Н | ||||
CA | JZ M5 | JMP if Z=1 | Переход при выполнении условия Z=1 | |||
M3 | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
1Е | MVI E, 58 | (E) 58h | запись данных 58h в регистр E | |||
A3 | ANA Е | (A) (A) (Е) | логическое умножение аккумулятора и данных в регистре Е | |||
082A | SUB E | (A) (A) — (Е) | Вычитание из аккумулятора содержимого регистра Е | |||
082B | 4F | MOV С, A | © (A) | сохранение аккумулятора в регистре C | ||
082C 082D | 3Е | MVI A, 00 | (A) 00h | запись данных 00h в аккумулятор | ||
082E | В9 | CMP C | If (А) = © then | Сравнение содержимого регистраС с аккумулятором | ||
082F | C2 | JNZ M4 | JMP if Z=0 | Переход при выполнении условия Z=0 | ||
MVI Н, 01 | (Н) 01h | запись данных 01h в регистор Н | ||||
CA | JZ M5 | JMP if Z=1 | Переход при выполнении условия Z=1 | |||
M4 | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
1Е | MVI E, 40 | (E) 40h | запись данных 40h в регистр E | |||
083A | A3 | ANA Е | (A) (A) (Е) | логическое умножение аккумулятора и данных в регистре Е | ||
083B | SUB E | (A) (A) — (Е) | Вычитание из аккумулятора содержимого регистра Е | |||
083C | 4F | MOV С, A | © (A) | сохранение аккумулятора в регистре C | ||
083D 083E | 3Е | MVI A, 00 | (A) 00h | запись данных 00h в аккумулятор | ||
083F | В9 | CMP C | If (А) = © then | Сравнение содержимого регистраС с аккумулятором | ||
C2 4E | JNZ M5 | JMP if Z=0 | Переход при выполнении условия Z=0 | |||
MVI Н, 01 | (Н) 01h | запись данных 01h в регистор Н | ||||
M5 | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
1Е | MVI E, 13 | (E) 13h | запись данных 13h в регистр E | |||
A3 | ANA Е | (A) (A) (Е) | логическое умножение аккумулятора и данных в регистре Е | |||
SUB E | (A) (A) — (Е) | Вычитание из аккумулятора содержимого регистра Е | ||||
084A | 4F | MOV С, A | © (A) | сохранение аккумулятора в регистре C | ||
084B 084C | 3Е | MVI A, 00 | (A) 00h | запись данных 00h в аккумулятор | ||
084D | В9 | CMP C | If (А) = © then | Сравнение содержимого регистраС с аккумулятором | ||
084E 084F | C2 | JNZ M6 | JMP if Z=0 | Переход при выполнении условия Z=0 | ||
3E | MVI A, 02 | (A) 02h | запись данных 02h в аккумулятор | |||
В4 | ORA H | (A) (A) (H) | логическое сложение аккумулятора и данных в H | |||
D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | |||
C3 | JMP M1 | JMP | Безусловный переход на метку М1 | |||
M6 | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
085A 085B | 1Е | MVI E, 23 | (E) (23) | запись данных 23h в регистр E | ||
085C | A3 | ANA Е | (A) (A) (Е) | логическое умножение аккумулятора и данных в регистре Е | ||
085D | SUB E | (A) (A) — (Е) | Вычитание из аккумулятора содержимого регистра Е | |||
085E | 4F | MOV С, A | © (A) | сохранение аккумулятора в регистре C | ||
085F | 3Е | MVI A, 00 | (A) 00h | запись данных 00h в аккумулятор | ||
В9 | CMP C | If (А) = © then | Сравнение содержимого регистраС с аккумулятором | |||
C2 6D | JNZ M7 | JMP if Z=0 | Переход при выполнении условия Z=0 | |||
3E | MVI A, 02 | (A) 02h | запись данных 02h в аккумулятор | |||
В4 | ORA H | (A) (A) (H) | логическое сложение аккумулятора и данных в H | |||
D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | |||
086A 086B 086C | C3 | JMP M1 | JMP if Z=1 | Безусловный переход на начало программы | ||
M7 | 086D | 7C | MOV A, H | (A) (H) | загрузка данных с регистра H в аккумулятор | |
086E 086F | D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | ||
C3 | JMP M1 | JMP | Безусловный переход на начало программы | |||
2.9 Блок-схема 3
2.10. Описание алгоритма реализации программы 3
1. Входные данные загружаются в аккумулятор.
2. Для последующего использования данные сохраняются в регистре В.
3. Сдвиг аккумулятора на один разряд вправо, значение бита Х6 сохраняется в регистре признаков С.
4. Переход на метку М1 если С=0, иначе сдвиг аккумулятора вправо на один разряд, значение бита Х5 сохраняется в регистре признаков С.
5. Переход на метку М2 если С=0, иначе сдвиг аккумулятора вправо на один разряд, значение бита Х4 сохраняется в регистре признаков С.
6. Переход на метку М1 если С=0, иначе сдвиг аккумулятора вправо на один разряд, значение бита Х3 сохраняется в регистре признаков С.
7. Переход на метку М2 если С=1, иначе сдвиг аккумулятора вправо на три разряда, значение бита Х0 сохраняется в регистре признаков С.
8. Переход на метку М1 если С=1, иначе сдвиг аккумулятора влево на три разряда, значение бита Х2 сохраняется в регистре признаков С.
9. Переход на метку М2 если С=0, иначе сдвиг аккумулятора вправо на два разряда, значение бита Х1 сохраняется в регистре признаков С.
10. Переход на метку М2 если С=1.
М1 — 11. В регистр D загружаются данные 00h (Y1=0).
12. Происходит безусловный переход на метку М3.
М2 — 13. В регистр D загружаются данные 01h (Y1=1).
М3 — 14. В аккумулятор загружаются данные из регистра В.
15. Происходит сдвиг аккумулятора на 4 разряда влево, значение бита Х2 сохраняется в регистре признаков С.
16. Переход на метку М4 если С=0, иначе сдвиг аккумулятора влево на один разряд, значение бита Х3 сохраняется в регистре признаков С.
17. Переход на метку М5 если С=1, иначе сдвиг аккумулятора влево на один разряд, значение бита Х4 сохраняется в регистре признаков С.
18. Переход на метку М5 если С=0.
19. В аккумулятор загружаются данные 02h (Y2=1).
20. Происходит логическое сложение данных аккумулятора и данных регистра D, результат операции сохраняется в аккумуляторе.
21. Данные аккумулятора выводятся на шину данных, происходит безусловный переход на начало программы.
М5 — 22. В аккумулятор загружаются данные из регистра В.
23. Происходит сдвиг аккумулятора на 2 разряда вправо, значение бита Х5 сохраняется в регистре признаков С.
24. Переход на метку М4 если С=0, иначе сдвиг аккумулятора вправо на четыре разряда, значение бита Х1 сохраняется в регистре признаков С.
25. Переход на метку М4 если С=1.
26. В аккумулятор загружаются данные 02h (Y2=1).
27. Происходит логическое сложение данных аккумулятора и данных регистра D, результат операции сохраняется в аккумуляторе.
28. Данные аккумулятора выводятся на шину данных, происходит безусловный переход на начало программы.
29. В аккумулятор загружаются данные 00h (Y2=0).
30. Происходит логическое сложение данных аккумулятора и данных регистра D, результат операции сохраняется в аккумуляторе.
31. Данные аккумулятора выводятся на шину данных, происходит безусловный переход на начало программы. В результате получается бесконечный цикл ввода, преобразования и вывода данных.
2.11. Программа 3 на языке Ассемблера
Ниже приведена таблица, в которой дано подробное описание программы 3 на языке Ассемблера в машинных кодах, а также мнемокод, описание и комментарий к каждой команде.
Таблица 4.
Метки | Адрес | Данные | Мнемокод | Описание команды | Комментарий к команде | |
М6 | DB | IN 01 | (A) (01) | Ввод в порт по адресу 01h входных данных | ||
MOV B, A | (B) (A) | сохранение аккумулятора в регистре В | ||||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
D2 | JNС M1 | JMP if С=0 | Переход при выполнении условия С=0 | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
080А | D2 | JNС M2 | JMP if С=0 | Переход при выполнении условия С=0 | ||
080В | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
080С 080D 080E | D2 | JNС M1 | JMP if С=0 | Переход при выполнении условия С=0 | ||
080F | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
DA | JС M2 | JMP if С=1 | Переход при выполнении условия С=1 | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
DA | JС M1 | JMP if С=1 | Переход при выполнении условия С=1 | |||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | ||||
081A | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | |||
081B | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | |||
081C 081D 081E | D2 | JNС M2 | JMP if С=0 | Переход при выполнении условия С=0 | ||
081F | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
DA | JС M2 | JMP if С=1 | Переход при выполнении условия С=1 | |||
М1 | MVI D, 00h | (D) 00h | запись данных 00h в аккумулятор | |||
C3 2A | JMP M3 | JMP | Безусловный переход на метку М3 | |||
М2 | MVI D, 01h | (D) 01h | запись данных 10h в аккумулятор | |||
M3 | 082A | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | ||
082B | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | |||
082C | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | |||
082D | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | |||
082E | RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | |||
082F | D2 | JNС M4 | JMP if С=0 | Переход при выполнении условия С=0 | ||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | ||||
DA | JС M5 | JMP if С=1 | Переход при выполнении условия С=1 | |||
RLC | СДВИГ ВЛЕВО | сдвиг аккумулятора влево на один разряд | ||||
D2 | JNС M5 | JMP if С=0 | Переход при выполнении условия С=0 | |||
083A 083B | 3Е | MVI A, 02h | (A) 02h | запись данных 02h в аккумулятор | ||
083C | B2 | ORA D | (A) (A) (D) | логическое сложение аккумулятора и данных в D | ||
083D 083E | D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | ||
083F | C3 | JMP M6 | JMP | Безусловный переход на начало программы | ||
M5 | MOV A, B | (A) (B) | загрузка данных с регистра В в аккумулятор | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
D2 | JNС M4 | JMP if С=0 | Переход при выполнении условия С=0 | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | |||
084A | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
084B | 0F | RRC | СДВИГ ВПРАВО | сдвиг аккумулятора вправо на один разряд | ||
084C 084D 084E | DA | JС M4 | JMP if С=1 | Переход при выполнении условия С=1 | ||
084F | 3Е | MVI A, 02h | (A) 02h | запись данных 02h в аккумулятор | ||
B2 | ORA D | (A) (A) (D) | логическое сложение аккумулятора и данных в D | |||
D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | |||
C3 | JMP M6 | JMP | Безусловный переход на начало программы | |||
М4 | 3Е | MVI A, 00h | (A) 00h | запись данных 00h в аккумулятор | ||
B2 | ORA D | (A) (A) (D) | логическое сложение аккумулятора и данных в D | |||
085A 085B | D3 | OUT 80 | (80) (A) | Вывод в порт по адресу 80h выходных данных | ||
085C 085D 085E | C3 | JMP M6 | JMP | Безусловный переход на начало программы | ||
2.8 Карта памяти микропроцессорной системы
УМК содержит ПЗУ объемом 2 кбайт и ОЗУ объемом 1 кбайт. Первый кбайт ПЗУ использован для хранения программы «системный монитор», а второй кбайт ПЗУ зарезервирован за пользователем. Третий кбайт памяти УМК используется для адресации ОЗУ. Необходимо отметить, что последние 54 ячейки памяти ОЗУ используются программой «системный монитор» для хранения оперативных данных.
Для удобства пользования информация о распределении адресного поля сводится в карту памяти.
Рисунок 4. Карта памяти Пояснения к рисунку 4:
1 — программа «системный монитор» занимает 756 байт в адресном поле 0000…02FF ПЗУ;
2 — дополнительная область программы «системный монитор» занимает 256 байт в адресном поле 0300…03FF ПЗУ;
3 — программа объемом 52 байт и оставшаяся свободная память ОЗУ объемом 924 размешены в адресном поле 0800…08С6;
4 — рабочая область программы «системный монитор» объемом 57 байт в адресном поле 08С7…08FF ПЗУ
2.9 Анализ временных характеристик
В данном курсовом проекте были предложены две программы реализации контакторной схемы на программном уровне. Для выбора наиболее подходящей программы проведем анализ временных характеристик двух программ.
Необходимо рассчитать время выполнения одного цикла каждой программы. Расчет будем вести учитывая, что частота микропроцессора 2 МГц.
2.9.1 Расчет времени выполнения программы 1
Число тактов за которые выполняются команды:
IN port — 10 тактов;
OUT port — 10 тактов;
MOV d, S — 5 тактов;
RRC — 4 такта;
RRL — 4 такта;
CMA — 4 такта;
ANA S — 4 такта;
ORA S — 4 такта;
MVI d, data — 7 тактов;
JMP addr — 10 тактов.
Время одного цикла программы 1:
с.
2.9.2 Расчет времени выполнения программы 2
Число тактов за которые выполняются команды:
IN port — 10 тактов;
OUT port — 10 тактов;
MOV d, S — 5 тактов;
SUB S — 7 тактов;
СМР S — 7 тактов;
JNZ, JZ — 10 тактов;
ANA S — 4 такта;
MVI d, data — 7 тактов;
JMP addr — 10 тактов.
Время одного цикла программы 2:
с.
2.9.3 Расчет времени выполнения программы 3
Следует отметить, что в программе 3 будут рассчитаны минимальное и максимальное время выполнения программы.
Минимальное время программы будет при выполнении следующих команд:
IN port — 10 тактов;
OUT port — 10 тактов;
MOV d, S — 5 тактов;
JNС — 10 тактов;
MVI d, data — 7 тактов;
RRC, RLC — 4 такта;
ORA S — 4 такта;
JMP addr — 10 тактов.
с.
Максимальное время программы будет при выполнении следующих команд:
IN port — 10 тактов;
OUT port — 10 тактов;
MOV d, S — 5 тактов;
JNС — 10 тактов;
JС — 10 тактов;
MVI d, data — 7 тактов;
RRC, RLC — 4 такта;
ORA S — 4 такта;
JMP addr — 10 тактов.
3. Вывод
В данном курсовом проекте была разработана реализация фрагмента контактной схемы программным методом с использованием учебного микропроцессорного комплекта и лабораторного стенда с сохранением выходных данных в память.
В курсовом приведено три программы с помощью которых возможно реализовать данную схему. Анализируя временные характеристики выполнения программ можно сделать вывод, что программа 3 максимально подходит для решения задачи курсового проекта. Время выполнения программы 3 на порядок меньше чем у программ 1 и 2.
Для упрощения программы 2 рациональным выглядит использование подпрограммы, но данное действие привело бы к увеличению времени выполнения программы. Это не соответствует условию, что время между изменением состоянием реле и изменением состояния должно быть минимальным.
Для реализации программы 3 между шиной данных и портом ввода ставиться гальваническая развязка. Именно благодаря этой операции удается на порядок снизить время выполнения программы.
Также следует отметить, что говоря о времени выполнения программы, имеется ввиду время выполнения одного цикла программы.
В конце цикла каждой программы на шину данных выводится слово, в котором биты имеют следующее значение:
x | x | x | x | x | x | Y2 | Y1 | |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
где х — незначащий бит.
4. Список литературы
1. Лукьянов С. И., Панов А. Н., Сидельникова Е. И., Васильев А. Е. Микропроцессоры: Учебное пособие. — Магнитогорск: МГТУ, 2004.
2. Лукьянов С. И., Панов А. Н., Сидельникова Е. И., Васильев А. Е. Лабораторный практикум по курсу «Электронные промышленные устройства»: Учебное пособие. — Магнитогорск: МГТУ, 2004.
3. Лукьянов С. И., Швидченко Д. В., Суспицын Е. С. Курсовое проектирование по дисциплинам «Машинные языки программирования» и «Основы микропроцессорной техники»: Учебное пособие. Магнитогорск: МГТУ, 2005.
4. Токхайм Р. Микропроцессоры: Курс и упражнения. — Москва: Энергоатомизат, 1988.