Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС2 Проектирование аппаратного и программного...doc
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
2.77 Mб
Скачать

Разработка структуры данных программы для ввода данных в озу

Пример 3.3.

Разработать структуру данных программы работы устройства для ввода данных в ОЗУ.

Из статической модели этой программы (см. примеры 3.1, 3.2 и рис. 3.14, 3.15) следует, что данные в ней представлены следующими наборами:

1) "Сообщения о режимах";

2) "Образ клавиатуры";

3) "Очередная цифра";

4) "Адрес";

5) "Буферные данные";

6) "Данные в ОЗУ";

7) "Массивы отображения";

8) "Итоговые ошибки".

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

Результаты разработки структуры данных программы для ввода данных в ОЗУ, полученные с учетом этого, приведены в табл. 3.1.

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

Очевидно, что информация о режиме может иметь лишь два значения ("Ввод"/"Просмотр"), что позволяет представить ее в виде флагового байта Mode с указанным кодированием.

Таблица 3.1

Структура данных программы для ввода данных в ОЗУ

Наименова-

Символь-

Формат

Кодирование данных

Примечание

ние данных

ное имя

данных

D7

D6

D5

D4

D3

D2

D1

D0

Сообщения

о режимах:

Режим

Mode

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

"Ввод"

"Просмотр"

Тип ввода

InType

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

"Адрес"

"Данные"

Инкремент

адреса

AddrInc

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Пассивно

"+1"

Декремент

адреса

AddrDec

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Пассивно

"1"

Образ

клавиатуры

KbdImage

Массив

байтов

1

1

1

1

1

0

1

1

1

1

1

1

1

1

1

1

строка 0

строка 1

строка 2

строка 3

Очередная

цифра

NextDig

Байт

0

0

0

0

0

1

1

0

Цифра "6"

Адрес

Addr

Слово

0

1

1

0

Младший байт

Cтарший байт

Буферные

данные

BufData

Байт

0

1

1

0

Данные

RAMData

Массив

Объём

в ОЗУ

байтов

64

Кбайт

Массивы

отображения:

Отображение

DataDisp

Массив

0

0

0

0

0

1

1

0

Младшая цифра

данных

байтов

0

0

0

0

Старшая цифра

Отображение

AddrDisp

Массив

0

0

0

0

1

1

1

1

Младшая цифра

адреса

байтов

0

0

0

0

Средняя цифра

0

0

0

0

Средняя цифра

0

0

0

0

Старшая цифра

Итоговые

ошибки:

Пустая

клавиатура

EmpKbd

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Непустая

Пустая

Ошибка ввода с клавиатуры

KbdErr

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Нет ошибки

Ошибка

Ошибка

ОЗУ по ШД

RAMErrD

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Нет ошибки

Ошибка

Ошибка

ОЗУ по ША

RAMErrA

Флаговый

байт

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Нет ошибки

Ошибка

Аналогично, информация о типе ввода также может иметь лишь два значения ("Адрес"/"Данные") и представлена флаговым байтом InType. При одновременном нажатии кнопок "Адрес" и "Данные" на пульте (см. рис. 3.5) будем считать режим ввода неизменяющимся.

Информация о модификации адреса может иметь три значения: сохранение, инкрементирование и декрементирование адреса. Поэтому эта информация представлена в табл. 3.1 двумя флаговыми байтами AddrInc и AddrDec. При пассивном значении обоих флагов адрес не изменяется. При активном значении одного из флагов выполняется соответствующая модификация адреса. При одновременном нажатии кнопок "+1" и "1" на пульте (см. рис. 3.5) будем считать адрес неизменяющимся.

Набор данных "Образ клавиатуры" содержит информацию о состоянии клавиатуры. Предположим, что 16-ричная клавиатура имеет матричную организацию размером 4 4. Нажатая клавиша изображается в этом наборе нулевым битом, а ненажатые клавиши единичными (см. рис. 3.44). Таким образом, состояние набора данных KbdImage в табл.3.1 соответствует цифре "6".

Набор данных "Очередная цифра" содержит двоичный код очередной цифры, введенной с клавиатуры. Пусть этот код располагается в младшей тетраде байта NextDig, а его старшая тетрада будет обнулена.

Набор данных "Адрес" содержит адрес ячейки памяти для записи или считывания данных. В режиме ввода адреса содержимое этого набора формируется из цифр, вводимых с клавиатуры. При этом для отображения адреса в режиме бегущей строки справа налево очередная цифра включается в его младшую тетраду со сдвигом всех предыдущих цифр на тетраду влево. Этот факт отражен включением введенной цифры "6" в младшую тетраду набора Addr. Символ "" в табл. 3.1 обозначает произвольное значение двоичной цифры. Таким образом, адрес может принимать значения из диапазона 0...FFFFh. При модификации адреса содержимое этого набора инкрементируется или декрементируется в соответствии с указанием.

Набор "Буферные данные" содержит некоторые данные. В режиме ввода данных содержимое этого набора формируется аналогично набору "Адрес" в режиме ввода адреса. В режиме просмотра данных в набор BufData включается байт из ячейки памяти с адресом, содержащимся в наборе Addr.

Набор "Данные в ОЗУ" содержит массив введенных данных объемом до 64 Кбайт, формирование которого является основной целью решаемой задачи.

Набор данных "Массивы отображения" включает в себя массивы "Отображение данных" и "Отображение адреса". Каждый байт этих массивов содержит распакованный код цифры, отображаемой в соответствующем разряде знакосинтезирующего дисплея. Отображаемая цифра находится в младшей тетраде этих байтов, старшая тетрада которых равна нулю. Этот факт отражен в младшем байте массивов DataDisp и AddrDisp, остальные байты которых имеют тот же формат, но представлены в обобщенном виде.

Набор данных "Итоговые ошибки" содержит сообщение о состоянии клавиатуры (Пустая/Непустая), необходимое для предотвращения сдвига цифр в режиме ввода при ее пассивном состоянии (при отсутствии нажатых клавиш), а также сообщения об ошибке ввода с клавиатуры и ошибках тестового контроля ОЗУ по шинам адреса и данных. Очевидно, что все они могут иметь лишь два значения, что позволяет представить их флаговыми байтами EmpKbd, KbdErr, RAMErrA и RAMErrD соответственно.

Символьные имена всех наборов данных фактически являются адресами, по которым они расположены в памяти. Выбранные имена отображают содержательный смысл соответствующих наборов.

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