Курсовая работа: Разработка микропроцессорной системы
Используя
СКНФ, СДНФ и теорему де Моргана, запишем логические функции:
, .
Очевидно, что
демультиплексор активируется, когда происходит цикл обращения к внешним
устройствам ( ) и хотя бы
один из сигналов или равен нулю.
.
Сокращённая
схема подключения устройств ввода\вывода изображена на рис. 3.
Общий вид МПС
достигается совмещением рис. 1–3 на одном и соединением магистралей (шины
данных, адреса и управления).

Рисунок
3. Проектирование устройств ввода\вывода
Разработка
программного обеспечения
В
соответствии с заданием программа разрабатывается на Ассемблере с
использованием системы команд выбранного процессора.
Логически
программа состоит из двух частей:
·
основная
часть программы для задания констант;
·
программа
обработки прерывания – получения входного шестнадцатибитного кода, выполнение
математической операции и выдача шестнадцатибитного кода – результата
математической операции:
. (1)
Интеграл
и дифференциал
Интеграл и
дифференциал считаются по приближённым формулам:
·

·
.
В данных
выражениях – период внешнего
синхросигнала. В расчётах этот множитель участвовать не будет, а результат
будет выдаваться пропорционально его значению.
В системе
команд процессора Z80 нет операции умножения, поэтому умножение осуществляется с
помощью операций сложения и сдвига. Операция умножения восьмибитных чисел в
тексте программы выполнена в виде процедуры MUL8_8. В данной процедуре
представлен один из вариантов умножения байтов – умножение младшими разрядами вперёд
со сдвигом частичной суммы вправо.
Расположение
операндов:
– множимое, –
множитель, – двухбайтный результат,
используется в качестве счётчика регистр L.
Операция
умножения шестнадцатибитных чисел построена на операции умножения восьмибитных
чисел и выполнена в виде процедуры MUL16_16. Метод вычисления 32‑х битного
результата представлен на рис. 4.

Рисунок
4. Схема умножения 16-битных чисел
Т.к. входной
код, равно как и константы, могут быть отрицательным числом, записанным в
дополнительном коде, необходимо контролировать знак произведения. При этом все
отрицательные сомножители входят в произведение по модулю, а знак произведения
изменяется на противоположный, если сумма минусов, стоявших перед сомножителями,
равна 1 (младший бит равен 1).
Расположение
операндов в памяти:
– множимое, – множитель, причём
коэффициент всегда располагается на месте множителя.
Четырёхбитный
результат помещается в память, начиная с адреса, указанного перед процедурой в
парном регистре H-L.
Поскольку
коэффициенты ПИД-регулятора по заданию постоянны, то нет смысла хранить их со
знаком и при каждой операции умножения заново выделять знак и инвертировать при
необходимости. Целесообразно хранить модули коэффициентов в одних ячейках
памяти (KP, KI, KD), а знаки – в специальной ячейке памяти (далее «знаковой
ячейке»), устройство которой представлено на рис. 5. Старшая тетрада
является незначащей. Младшие четыре бита отвечают за отрицательность
соответсвующего элемента, причём 1 означает, что соответсвующий коэффициент
изначально отрицательный. В изображённом случае все коэффициенты положительны,
кроме KP. Биты трёх коэффициентов остаются постоянными с момента запуска
программы.

Рисунок
5. Организация знаковой ячейки
Значение же
коэффициента E
( ) изменяется не только при поступлении
нового значения. Эта ячейка отвечает также за знак разности при приблизительном
подсчёте дифференциала. Поэтому дифференциал целесообразно считать в последнюю
очередь.
Проверка
знака произведения осуществляется в самой процедуре умножения. Т.к. множимое
представляет собой либо , либо разность , то ему однозначно
соотстветствует младший бит ячейки памяти SIGN. С другой стороны
необходимо знать, какой именно из коэффициентов участвует в произведении, чтобы
потом определить его знак. Для этого используется другая ячейка памяти «ячейка
номера» – NUMBER. В неё вносится номер: 1 соответствует КР, 2 – KI, 3 – KD. Во время процедуры
значение этой ячейки полностью определяет, какой именно из коэффициентов
участвует в произведении, поэтому перед выполнением процедуры умножения
необходимо присвоить какое-либо значение из трёх.
Программа для
вычисления (1) требует обращения к ОЗУ. Расположение данных в ОЗУ представлено в
табл. 4.
Таблица
4. Использование ОЗУ
№
|
Адрес
|
Переменная
|
Примечание
|
1 |
8003: 8002:
8001: 8000
|
INT_SUM |
Интегральная сумма |
2 |
8004 |
Sign |
Знаковая ячейка |
3 |
8005 |
Number |
Ячейка номера |
4 |
8007: 8006 |
PE |
Предыдущее значение (число со знаком)
|
5 |
8009: 8008 |
СE |
Текущее значение (число со знаком)
|
6 |
800B: 800A |
KP |
Модуль 
|
7 |
800D: 800C |
KI |
Модуль 
|
8 |
800F: 800D |
KD |
Модуль 
|
WC (Work cell) – рабочие ячейки, необходимые для временного хранения
результатов процедуры MUL16_16 и
отдельных частей суммы (1). Далее записывается смещение относительно ячейки WC с адресом 8010. |
9 |
8011: 8010 |
WC+1: WC+0 |
Множимое (блок 2: 1 на рис. 4):
текущее значение , разность 
|
10 |
8013: 8012 |
WC+3: WC+2 |
Множитель (блок 4: 3):
коэффициент |
11 |
none |
WC+4 |
Умерший товарищ |
12 |
8015: 8014 |
WC+6: WC+5 |
Блок 1×3 |
13 |
8017: 8016 |
WC+8: WC+7 |
Блок 2×3 |
14 |
8019: 8018 |
WC+10: WC+9 |
Блок 1×4 |
15 |
801B: 801A |
WC+12: WC+11 |
Блок 2×4 |
16 |
801F: 801E:
801D: 801C
|
WC+16: WC+15:
WC+14: WC+13
|
Результат умножения 
|
17 |
8023: 8022:
8021: 8020
|
WC+20: WC+19:
WC+18: WC+17
|
Результат умножения и 
|
18 |
9FFF |
ST_PT |
Вершина стека |
Страницы: 1, 2, 3, 4, 5 |