- •6. Проектирование микропроцессорных систем
- •6.1. Представление системы как объекта проектирования
- •6.2. Основные этапы проектирования
- •6.3. Разработка архитектуры системы
- •6.4. Проектирование аппаратных средств
- •6.4.1. Схемотехническое проектирование процессора
- •6.4.2. Схемотехническое проектирование памяти
- •Банкирование памяти
- •Организация банков памяти
- •Проектирование запоминающих устройств
- •6.4.3. Схемотехническое проектирование интерфейса
- •Организация ввода/вывода данных
- •6.4.4. Тестирование и настройка аппаратных средств
- •Тестирование статическими сигналами
- •Свободный прогон микропроцессора
- •6.5. Проектирование программных средств
- •6.5.1. Этапы жизненного цикла программы
- •6.5.2. Точная постановка задачи и формулировка требований к программе
- •Постановка задачи ввода данных в озу
- •6.5.3 Проектирование программы
- •Декомпозиция общей задачи
- •Декомпозиция задачи ввода данных в озу
- •Структуры данных
- •Разработка структуры данных программы для ввода данных в озу
- •Алгоритмизация программы
- •Подходы к алгоритмизации
- •Иерархическая организация алгоритма
- •Алгоритмизация программы для ввода данных в озу
- •1. Модуль "Тестовый контроль озу по шд" (dTstContr)
Разработка структуры данных программы для ввода данных в озу
Пример 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-ричная клавиатура имеет матричную организацию размером 44. Нажатая клавиша изображается в этом наборе нулевым битом, а ненажатые клавишиединичными (см. рис.6.15). Таким образом, состояние набора данных KbdImage в табл.6.4 соответствует цифре "6".
Набор данных "Очередная цифра" содержит двоичный код очередной цифры, введенной с клавиатуры. Пусть этот код располагается в младшей тетраде байта NextDig, а его старшая тетрада будет обнулена.
Набор данных "Адрес" содержит адрес ячейки памяти для записи или считывания данных. В режиме ввода адреса содержимое этого набора формируется из цифр, вводимых с клавиатуры. При этом для отображения адреса в режиме бегущей строки справа налево очередная цифра включается в его младшую тетраду со сдвигом всех предыдущих цифр на тетраду влево. Этот факт отражен включением введенной цифры "6" в младшую тетраду набора Addr. Символ "" в наборе "Адрес" обозначает произвольное значение двоичной цифры. Таким образом, адрес может принимать значения из диапазона 0...FFFFh. При модификации адреса содержимое этого набора инкрементируется или декрементируется в соответствии с указанием.
Набор "Буферные данные" содержит некоторые данные. В режиме ввода данных содержимое этого набора формируется аналогично набору "Адрес" в режиме ввода адреса. В режиме просмотра данных в набор BufData включается байт из ячейки памяти с адресом, содержащимся в наборе Addr.
Набор "Данные в ОЗУ" содержит массив введенных данных объемом до 64 кбайт, формирование которого является основной целью решаемой задачи.
Набор данных "Массивы отображения" включает в себя массивы "Отображение данных" и "Отображение адреса". Каждый байт этих массивов содержит распакованный код цифры, отображаемой в соответствующем разряде знакосинтезирующего дисплея. Отображаемая цифра находится в младшей тетраде этих байтов, старшая тетрада которых равна нулю. Этот факт отражен в младшем байте массивов DataDisp и AddrDisp, остальные байты которых имеют тот же формат, но представлены в обобщенном виде.
Набор данных "Итоговые ошибки" содержит сообщение о состоянии клавиатуры (Пустая/Непустая), необходимое для предотвращения сдвига цифр в режиме ввода при ее пассивном состоянии (при отсутствии нажатых клавиш), а также сообщения об ошибке ввода с клавиатуры и ошибках тестового контроля ОЗУ по шинам адреса и данных. Очевидно, что все они могут иметь лишь два значения, что позволяет представить их флаговыми байтами EmpKbd, KbdErr, RAMErrA и RAMErrD соответственно.
Символьные имена всех наборов данных фактически являются адресами, по которым они расположены в памяти. Выбранные имена отображают содержательный смысл соответствующих наборов.
Дальнейшее проектирование программы заключается в переходе от ее статической модели к динамической, то есть к ее алгоритмическому описанию.
