Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Проектирование МП систем (ч 1).doc
Скачиваний:
158
Добавлен:
08.03.2015
Размер:
2.92 Mб
Скачать

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

Пример 6.6:

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

Из статической модели этой программы (см. примеры 6.4, 6.5 и рис. 6.27, 6.28) следует, что данные в ней представлены следующими наборами:

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

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

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

4) "Адрес";

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

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

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

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

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

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

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

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

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

Таблица 6.4

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

Наименова-

Символь-

Формат

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

Примечание

ние данных

ное имя

данных

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

Нет ошибки

Ошибка

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

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

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

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

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

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

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

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

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

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