+7(495)926-7456
+7(495)926-7456
Электронные компоненты  Мануалы 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [ 72 ] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

стБИЯ МПВУ с внешними устройствами. Как показывает практика, при программировании нередко возникают различного рода ошибки. Поэтому написанная программа не считается свободной от ошибок до тех пор, пока не будет доказана ее безошибочность. Это еще раз подчеркивает важность этапа отладки программы, за которым следует этап совместной отладки программных и аппаратных средств МПВУ.

Выполнение перечисленных шагов проектирования устройств на основе МП проиллюстрируем на следующем примере.

Пример 7.9. Спроектировать МПВУ, получающее входные сигналы Х{1) и Y(t) и вырабатывающее выходной сигнал Z(t) в соответствии с выражением

2 Г W (/) X (t) + КХ (t - N), если X (t) < Х„; \W{t)X{t). если Х(0>Х„,

где W{t) - весовой коэффициент , зависящий от значения сигнала Y{t): W{t) - = flYd)]; пусть указанная зависимость задана с помощью таблицы, содержащейся в ПЗУ; К - константа, которую для конкретности примем равной 0,75; Хо - константа, характеризующая некоторый пороговый уровень сигнала X{t); t - такты, характеризующие темп поступления входных сигналов и соответственно темп выработки выходного сигнала; N - длина очереди данных, измеряемая в тактах t.

Считаем, что все числа, кроме константы К, являются целыми положительными числами. Эти числа представлены в двоичном коде без знака с числом разрядов, равным восьми для X{t), Y{t) и W{t) и соответственно равным шестнадцати для Z(t).

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

Отметим, что очередь, в отличие от стека, организуется по следующему принципу: первыми считываются данные, которые были первыми при записи. В данном примере очередь содержит значения KX(t-i) и имеет постояную длину Л. Аппаратным аналогом очереди является сдвиговый регистр соответствующей значности и длины. При программной реализации очереди необходимо организовать указатель очереди, в котором будет храниться текущее значение адреса ячейки ОЗУ, из которой будет производиться считывание очередных данных. После считывания данных в эту же ячейку будут записаны данные, поступившие последними, и затем указатель очереди будет перемещен на следующую ячейку. Таким образом, ячейки ОЗУ, образующие очередь, оказываются замкнутыми в кольцо, по которому перемещаются начало и конец очереди.

Выполняя первый шаг проектирования, убеждаемся, что в данном случае можно использовать типовую структурную схему МПВУ (см. рис. 7.10). Дли ввода сигналов X{t) и Y(t) предусмотрим порты PORTX и FORTY, 8 для вывода сигнала Z(i) - порт PORTZ. Каждый порт выполним на основе одного МБР типа К589ИР12, полагая, что вывод значений Z(t) осуществляется в два приема: сначала выводят младший байт, затем - старший.

Определим состав блоков памяти. В ПЗУ необходимо хранить таблицу значений W(i), состоящую из 256 байтов, подпрограмму умножения, занимающую 16 байтов (см. пример 7.5), и собственно программу. Программа работы проекти руемого устройства не является сложной и предварительно можно оценить, что для ее хранения потребуется не более 100 ячеек. Однако с учетом возможного расширения функций данного МПВУ, выберем объем ПЗУ равным 512 ячейкам. В ОЗУ требуется выделить N байтов для формирования очереди данных, две ячейки для организации указателя очереди и ряд ячеек для организации стека. Учитывая целесообразность создания запаса по емкости памяти, выберем емкость ОЗУ равной I/c байтам. Для реализации блока памяти используем БИС ЗУ серии К541, отличающиеся достаточным быстродействием, повышенной степенью



Ндуало

I Организация стека

интеграции и малым потреблением мощности. Тогда достаточно использовать 4 БИС ППЗУ типа К541РТ1 с организацией 256X4 и 2 БИС статического ОЗУ типа К541РУ2 с организацией 1024x4.

При выполнении шага 2 выделим 9 адресных линий Л8-ЛО для адресации ПЗУ и 10 линий Л9-ЛО для адресации ОЗУ. Различие в адресации ПЗУ и ОЗУ обеспечим с помощью значений О и 1 линии Л15. Таким образом, получаем следующий диапазон изменения адресов ячеек:

ПЗУ: начало - 0000 0000 0000 0000 - 0000 конец -0000 0001 1111 1111 -01FF

ОЗУ: начало - 1000 0000 0000 0000 - 8000 конец- 1000 ООП 1111 1111-83ff

Указанные адреса начальных и конечных ячеек ЗУ представлены здесь как в двоичной, так и в шестнадцатиричной системах счисления. В последней системе, применяемой для обеспечения компактной записи чисел, первые десять цифр обозначаются так же, как и в десятичной системе, а оставшиеся шесть цифр обозначаются буквами следующим образом: 10-Л, И-В, 12-С, 13-D, 14 - Е, 15 - F. В дальнейшем все значения адресов, как правило, будут указываться в 16-ричном коде.

Присвоим портам PORTX, FORTY и PORTZ адреса 01, 02 и 04. Тогда при обращении к портам PORTX или PORTY будет возбуждаться адресная линия Л О или Л1, в сочетании с управляющим сигналом ВВОД = 1, а при обращении к порту PORTZ - линия Л2 в сочетании с сигналом ВЫВ0Д=1.

Программу будем записывать в ПЗУ начиная с нулевой ячейки, а таблицу значений W(t) разместим во второй половине ПЗУ, т. е. в ячейках с адресами от 0100 до 01FF. Тогда при обращении к таблице. W(t) старший байт адреса всегда будет оставаться постоянным, а младший байт будет равен значению Y{t). Подпрограмму умножения, имеющую символический адрес MULT, поместим в ПЗУ непосредственно после основной программы.

В ОЗУ выделим Л ячеек для хранения очереди. При организации очереди необходимо осуществлять счет, для чего удобно использовать команды DCR и JNZ. Поэтому целесообразно начало очереди расположить в Л/-й ячейке и далее заполнять соседние ячейки в порядке уменьшения их адресов. После заполнения ячейки ОЗУ, имеющей адрес 8001, необходимо снова вернуться к N-u ячейке. Отметим, что нулевая ячейка ОЗУ остается при этом свободной. В этой ячейке можно было бы хранить, например, значение младшего байта, указателя очереди, старший байт которого содержит константу. Однако для удобства организации пересылок будем хранить в ОЗУ оба байта указателя очереди и выделим для этого две ячейки, следующие непосредственно за Л-й ячейкой. Адресу первой из этих ячеек присвоим символическое обозначение LINE.

Область стека расположим в последних ячейках ОЗУ, для чего в качестве начального состояния указателя стека SP запишем адрес ячейки 8400 Распределение регистров общего назначения производим по ходу написания программы.

Организация и обнупе-ние очереди

Ввод Y(t) и вы1Горкашп) из таблицы

Вдод X(t) и вычисление W(t)X(t)

Вычисление KX(t)

Обраиние к оисреди

Модификация значения указателя ovepedu


X(t)Xo

Суммирование W(t)X(U*KX(t-N)

Вывод Zft) I

Конец

Рис. 7.13. Блок-схема алгоритма к примеру 7.10



п оейдем к выполнению шага 3. Составим укрупненную блок-схему реше НИЯ поставленной задачМрнс. 7.13). Н "

их номера, ниями. LX1 LXI

XRA MOV DCR

Приведем

SP, H.

A M, L

13). Ha рис. 7.13 рядом с блоками приведены соответствующую программу с необходимыми примеча-

ФФ ФФ

JNZ Ml

LXI SHLD

IN MOV MVI MOV

MVI IN

PUSH CALL XCHG ANA

RAR MOV ANA RAR ADD LHLD

MOV MOV DCR

LINE PORTY

Ь ФФ A

L, H, E,

PORTX

MULT

B, A A

LINE

B, M, L

JNZ M2

M2: SHLD

XCHG

POP CPl JNC MOV MVI

DAD MOV

OUT MOV OUT JMP

M3 £, D,

D A,

PORTZ A, H PORTZ МЗ

8 ФФ A LINE

Блок 1. Организация стека.

Блок 2. Загрузка адреса начала очереди

для N = 10-

Обнуление аккумулятора. Обнуление ячейки очереди. Счет ячеек очереди и подготовка адреса следующей ячейки очереди. Переход, если обнуление очереди не закончено.

Повторная загрузка начала очереди. Заполнение в ОЗУ содержимого указателя очереди.

Блок 3. Ввод нового значения Y (t). Загрузка младшего байта адреса W (<). Загрузка старшего байта адреса W (t). Выборка W (О из таблицы и пересылка в Е.

Обнуление D.

Блок 4. Ввод Нового значения X{f).

Засылка X (t) в стек.

Вызов подпрограммы умножения.

Пересылка W (t) X (t) из Н - L ъ D - Е.

Блок 5. Обнуление CY; в А остается значение X (t).

Получение 0,5 X в А. Пересылка 0,5 Х (О в В. Обнуление CY. Получение 0,25 X (t) в А. Формирование 0,75Х(0 в А. Блок 6. Загрузка текущего значения указателя очереди из ОЗУ в Я - L. Выборка 0,75 X (t - N) из очереди в 6. Запись 0,7 X (t) в конец очереди. Блок 7. Подготовка следующего значения указателя очереди.

Переход, если заполнение очереди не дошло до нулевой ячейки. Перескок к начальному состоянию указателя очереди.

Запоминание нового значения указателя очереди в ячейке LINE. Блок 8. Возвращение W {t) Z (<) из D - £ в Н ~L

Восстановление X (i) в А. Сравнение X (J) с ХО.

Переход к выводу Z (t), если X (i) > ХО. Блок Э. Пересылка 0,75 X {t - N) в Е: Формирование старшего байта числа 0,75 X(t-N).

Формирование Значения Z (t) в Н - L. Блок 10. Пересылка в А младшего байта Z(t).

Вывод младшего байта Z (t). Пересылка в А старшего байта Z (t) Вывод старшего байта Z (t). Переход к новому циклу реализации алгоритма вычисления Z (t).



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [ 72 ] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105