Смекни!
smekni.com

Вычислительная система обработки данных в реальном времени (стр. 2 из 4)

DI7-DI0 - вход/выход линий данных. В зависимости от состояния входа Т они могут быть входными, если на Т сигнал высокого уровня, и выходными, если на Т сигнал низкого уровня;

DО7-DО0 - вход/выход линий данных. Они являются входными, если на Т сигнал низкого уровня, и выходными, если на Т сигнал высокого уровня;

Т - вход управления направлением передачи. При Т=0 осуществляется передача от DO к DI, при Т=1 - от DI к DO;

- вход разрешения передачи. При
=0 снимается Z- состояние с выхода формирователя, выбранного по входу Т.

Микросхема К1810ГФ84.

Рис.4. Шинный формирователь

Генератор тактовых импульсов предназначен для управления ЦП К1810ВМ86 и периферийными устройствами. Графическое изображение микросхемы приведено на рис.5. Опишем используемые ее выводы.

Х1 и Х2 - выводы для подключения кварцевого резонатора;

- вход для подключение RC- цепи, обеспечивающий автоматическое формирование сигнала сброса при включении источника питания;

- вход используется для выбора задающего генератора. При
=0 соответствует внутреннему генератору (кварцевый резонатор), а при
=1 - внешнему генератору импульсов, подключаемый на вход ЕFI;

RDY1 - вход сигнала готовности от устройств, подключаемых к каналу системы;

- вход разрешения адресации для сигнала готовности RDY1;

СLK- выход тактовых импульсов, их частота равна 5Мгц и образуется делением частоты задающего генератора на 3 (его частота 15Мгц);

READY- выход сигнала готовности, синхронизированный с задним фронтом сигнала CLK. Он позволяет обеспечить сопряжение во времени работы МП с работой внешних устройств, имеющих меньшее быстродействие;

RESET- выход сигнала сброса, синхронизированного с задним фронтом сигнала СLK. После поступления сигнала RESET МП прекращает работу и остается в режиме ожидания до окончания этого импульса. Затем начинается процесс инициализации МП, который длится 10 тактов.

Микросхема К580ВВ55.

БИС параллельного интерфейса предназначена для организации ввода/вывода параллельной информации различного формата. Структурная схема микросхемы приведена на Рис.6. Опишем используемые ее выводы.

D7-D0 - вход/выход данных;

- чтение. Низкий уровень сигнала разрешает считывание информации из регистра, адресуемого по входам А0, А1 на шину D7. D0;

- запись. Низкий уровень сигнала разрешает запись информации с шины D7. D0 в порт микросхемы, адресуемый по входам А0 и А1;

A0 и A1 - входы для адресации внутренних регистров.00 - порт А, 01 - порт В, 10 - порт С, 11 - порт управляющего слова, которое устанавливает работу микросхемы в один из трех режимов;

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

RS- сброс, высокий уровень сигнала обнуляет регистр управляющего слова и устанавливает все порты в режим ввода;

РА7-РА0 - вход/выход канала А;

РВ7-РВ0 - вход/выход канала В;

РС7-РС0 - вход/выход канала С.

Микросхема КР556РТ17.

Рис.6. Параллельный порт

ППЗУ представляет собой микросхему, предназначенную для хранения программы, которую пользователь может самостоятельно записать в нее. Операция программирования заключается в разрушении плавких перемычек на поверхности кристалла импульсами тока. Матрица до программирования, то есть в исходном состоянии, содержит однородный массив проводящих перемычек, соединяющих строки и столбцы во всех точках их пересечений. Программу в ППЗУ мы записывать не будет, предполагаем, что она уже находится там. Эта микросхема содержит 512 байт, а время выборки адреса 50нс, что на много меньше 200нс (время одного такта). Микросхема представлена на рис.7. Опишем используемые выводы.

А0-А8 - входы, по которым выбирается адрес в микросхеме ППЗУ;

DО0-DО7 - выходы, по которым передаются данные, содержащиеся в заданной ячейке памяти;

СS1, CS2,

и
- выводы выбора микросхемы, которые свидетельствует и одновременно и о считывании информации из нее. Каждый из них должен иметь соответствующее активное состояние, то есть CS1=CS2=1 и
=
=0. Нарушение этого условия хотя бы для одного из входов исключает доступ к накопителю для считывания. В этом случае микросхема будет находится в состоянии хранения, в котором выходы принимают Z- состояние.

Разработка программного обеспечения

Программа, находящаяся в ПЗУ, состоит из следующих блоков: непосредственное тестирование ПЗУ, обработка заданной функции и программирование параллельного порта. Блок - схема программы представлена на рисунке 8. Далее более детально будут рассмотрен каждый из блоков.


Рис.7. Программируемое ПЗУ


Тест ПЗУ

Тестирование ПЗУ заключается в суммировании содержимого всех мнемокодов программы, иными словами значений, находящихся по адреса ПЗУ. Каждый адрес содержит 16 - разрядный код, который соответствует определенной команде процессора. Вначале устанавливается начальный адрес кода программы. Перебор всех адресов делается в цикле, в котором проверяется достигнут ли адрес последний ячейки памяти, если это не так, то цикл вновь возобновляется. В противном случае, если достигнута последняя ячейка памяти, полученный результат суммы сравнивается со значением находящимся в определенном адресе ПЗУ за пределами основной программы. Это число должно быть получено ранее, путем ручного подсчета или же самой программой, которая тестирует ПЗУ. Это производится несколько раз для правильности результата, так как от него в дальнейшем будет зависеть: программа продолжит свое выполнение или же перейдет на участок, в которой будет находиться команда останова. Если тестирование ПЗУ закончилось не успешно, то до останова микропроцессора, он посылает сигнал в порт вывода - параллельный порт, в котором устанавливает значение, свидетельствующее об ошибки.

Здесь приводим участок кода программы, тестирующей ПЗУ.

movsi, ADDR_OF_BEGINING_OF_ROM

movax, 0

loop:

add ax, [si]

incsi

cmpsi, ADDR_OF_END_OF_ROM;

jneloop

cmpax, CONTROL_SUM_OF__ROM

jeALL_GOOD

jmpERROR_ROM

ALL_GOOD:

; участок кода реализуемой функции

ERROR_ROM:

mov al,02h

out 02h,al

hlt

Последние три строчки означают следующее: посылается во второй бит порта 2 значение 1 (это порт С параллельного порта речь о котором пойдет ниже), которое свидетельствует об ошибке в программе и выполняется команда останова. Она необходима для остановки всей системы и анализа ее состояния. Это позволит отследить ошибку в системе.

Алгоритм вычисления функции

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

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

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

Особенностью команды умножения MUL является то, что множимое непосредственно не указывается, оно находится в аккумуляторе. Результат операции будет находиться в двух регистрах DX и AX соответственно старшая и младшая часть 32 - разрядного результат. После этого производим деление: в команде DIV непосредственно указывается только один операнд - это делитель, а делимое находится в регистрах AX и DX. Результат помещается в AX- частное и в DX- остаток, который будет являться результатом функции. Но это еще не конец программы, так как необходимо полученный результат переслать в порт вывода. Для этого помещаем его в аккумулятор, младшую часть которого записываем в порт 00, а старшую часть вначале пересылаем в младшую, а затем выводим в порт 01 параллельного интерфейса.