- •1 Анализ технического задания
- •1.1 Представление устройства в виде «черного ящика»
- •2 Разработка архитектуры системы
- •2.1 Архитектура процессора
- •2.2 Архитектура памяти
- •2.3 Архитектура ввода/вывода
- •3.6 Интерфейс вв51а
- •4 Представление программы устройства в виде «черной сферы»
- •5 Статическая модель программы
- •6 Структура данных
- •7 Алгоритмы
- •7.1 Алгоритмы макроуровня
- •7.2 Алгоритмы исполнителей
- •8 Исходный текст программы
3.6 Интерфейс вв51а
По условиям технического задания устройство должно включать в себя интерфейс для вывода информации на большое информационное табло. Для этого была выбрана микросхема КР580ВВ51А – универсальный синхронно-асинхронный приемопередатчик, предназначенный для аппаратной реализации последовательного протокола обмена. Микросхема преобразует параллельный код, получаемый от центрального процессора в последовательный поток символов. Условное графическое обозначение приведено на рис. 3.1
Рисунок 3.1 – Условное графическое обозначение КР580ВВ51А
Микросхема может работать в двух режимах синхронном и асинхронном. Для нашего случая выбираем асинхронный режим, т.к. он характеризуется одиночными посылками информации, инициализация которых определяется микропроцессором системы.
Подключение выводов мс КР580ВВ51А показано на рисунке 3.2
Рисунок 3.2 – Подключение выводов мс КР580ВВ51А
Адресация интерфейса осуществляется подачей на вход CO/D адресного выхода AB4. Соответсвенно адрес при записи инструкции COM_CO_Out = 0010h (0001 0000b), при передаче данных COM_D_Out = 0000h (0000 0000b).
Программирование интрерфейса осуществляется следующим образом:
1) Записываем инструкцию режима:
Для этого подаем следующие сигналы на вход мс:
CO/D = 1(записываем инструкцию), WR = 0 (активируем вход записи), CS=0, SR=0. И по шине данных передаем код инструкции режима, в нашем случае:
биты D7D6=01 – устанавливаем длину стоп-бита 1;
биты D5D4=00 – нет контроля четности;
биты D3D2=11 – длина слова 8 бит;
биты D1D0=10 – асинхронный режим работы 1:1.
2) Записываем инструкцию команды:
Для этого подаем следующие сигналы на вход мс:
CO/D = 1(записываем инструкцию), WR = 0 (активируем вход записи), CS=0, SR=0. И по шине данных передаем код инструкции команды, в нашем случае:
бит D0=1 – передача информации возможна;
бит D2=0 – прием информации невозможен(т.к. нам необходимо только передавать информацию);
остальные биты =0 – нас в данном случае не интересуют.
Код программирования интерфейса:
mov al,01001101b
out COM_CO_Out,al
mov al,00000001b
out COM_CO_Out,al
Код вывода данных:
mov al,VKZImages[bx]
out COM_D_Out,al
4 Представление программы устройства в виде «черной сферы»
Представление программы проектируемой МПС в виде «черной сферы» приведено на рисунке 4.1.
Рисунок 4.1 – Представление программы в виде «черной сферы».
5 Статическая модель программы
Первый этап декомпозиции приведен в приложении Д;
Второй этап декомпозиции приведен в приложении Е;
Третий этап декомпозиции приведен в приложении Ж;
Статическая модель системы приведена в приложении З.
6 Структура данных
Наименование данных |
Символьное имя |
Формат данных |
Кодирование данных |
Примечание |
|||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
||||
Адрес порта для активации матр. индикатора |
Nind |
Слово |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1й индикатор |
Адрес порта для активации строки в матр. индикаторе |
Nstr |
Слово |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1я строка |
Адрес порта для активации столбца в матр. индикаторе |
Nstolb |
Слово |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1й столбец |
Переменная для хранения признака нажата ли кнопка "Следующая фамилия" |
OldSledFam |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Не нажата |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
Нажата |
|||
Переменная для хранения признака нажата ли кнопка "Старт" |
OldStart |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Не нажата |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Нажата |
|||
Номер текущей вводимой фамилии |
NumTekInd |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1я фамилия |
Образы 8ми фамилий для вывода на матричные индикаторы |
ImageInd11 |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные 1го индикатора |
… |
* |
* |
* |
* |
* |
* |
* |
* |
… |
||
ImageInd88 |
* |
* |
* |
* |
* |
* |
* |
* |
Данные 64го индикатора |
||
Время спортсменов |
Vremya1 |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Время 1го спортсмена |
… |
* |
* |
* |
* |
* |
* |
* |
* |
… |
||
Vremya8 |
* |
* |
* |
* |
* |
* |
* |
* |
Время 8го спортсмена |
||
Флаг остановки времени спортсменов |
FlagVremya1 |
Массив байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Выводится Время |
… |
|||||||||||
FlagVremya8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Выводится Результат |
||
Номера дорожек |
NumberDorog |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные о номерах дорожек |
Номера мест |
NumberMesto |
Массив байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1е место |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
8е место |
|||
Флаг финиша всех спортсменов |
FlagCheckFin |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Еще не все финишировали |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Все финишировали |
|||
Номер заплыва |
VKZZnach |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
2 байта для вывода цифр на индикаторы |
Код клавиатуры цифр |
VKZKeyboard |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Код клавиатуры цифр |
Предыдущее значение клавиши из клавиатуры цифр |
VKZOldZnach |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные о предыдущем значении клавиши из клавиатуры цифр |
Код клавиатуры букв |
VKFKeyboard |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные клавиатуры букв |
Смещение для нажатой клавиши |
VKFKodKlav |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Код смещения буквы "А" |
Предыдущее значение нажатой клавиши |
VKFOldZnach |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные о предыдцщем значении нажатой клавиши |
Образы для букв русского алфавита |
VKFImage1 |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные образа букв русского алфавита |
… |
* |
* |
* |
* |
* |
* |
* |
* |
|||
VKFImage32 |
* |
* |
* |
* |
* |
* |
* |
* |
|||
Образы для вывода одной фамилии на 8 матр. индикаторов |
VKFImageInd1 |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные образы для вывода одной фамилии на 8 матр. индикаторов |
… |
* |
* |
* |
* |
* |
* |
* |
* |
|||
VKFImageInd8 |
* |
* |
* |
* |
* |
* |
* |
* |
|||
Адрес текущей введенной буквы |
VKFAddrTekBukv |
Слово |
* |
* |
* |
* |
* |
* |
* |
* |
Данные об адресе текущей введенной буквы |
Таймер |
Taimer |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
Данные о текущем времени таймера |
Переменная для обмена данными для первого спортсмена |
ChangeNum1 |
байт |
* |
* |
* |
* |
* |
* |
* |
* |
|
Переменная для обмена данными для второго спортсмена |
ChangeNum2 |
байт |
* |
* |
* |
* |
* |
* |
* |
* |
|
Переменная для обмена данных времени |
VremyaX |
Массив байт |
* |
* |
* |
* |
* |
* |
* |
* |
|
Переменная для обмена данных дорожек |
NumberDorogX |
байт |
* |
* |
* |
* |
* |
* |
* |
* |
|
Переменная для обмена данных фамилий |
ImageIndX |
байт |
* |
* |
* |
* |
* |
* |
* |
* |
|
Коды цифр для 7сегментного индикатора |
VKZImages |
Массив байт |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Цифра "0" |
Коды цифр для 7сегментного индикатора |
VKZImagesT |
Массив байт |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
Цифра "0." |
Флаг нажатия кнопки "Старт" |
FlagStart |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Кнопка "Старт" не нажата |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Кнопка "Старт" нажата |
|||
Флаг нажатия кнопки "Проанализировать и отсортировать" |
FlagPA |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Кнопка "Проанализировать и отсортировать" не нажата |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Кнопка "Проанализировать и отсортировать" нажата |
|||
Флаг окончания программы Сотрировки |
FlagSortEnd |
байт |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Сортировки не было |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Сортировка была |
|||
