Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Задание: Сигналы поступают в контроллер в виде 8-разрядных параллельных кодов по 4 каналам с интервалом 1 мс. Осуществить поочередный прием информации в память емкостью 1К. После заполнения памяти найти среднее арифметическое и выдать полученное значение в виде 8-разрядного последовательного кода. При нулевом результате включить постоянно горящий индикатор. После завершения очередного цикла работы, автоматически переходить к началу нового.
При включении контроллера должна осуществляется аппаратно программная проверка памяти и устройств ввода вывода. При наличии неполадок в любом из этих устройств должен включатся мигающий индикатор с частотой 1 Гц.
Описание структурной схемы
В самом общем виде контроллер можно представить в виде структурной схемы, изображенной на рисунке 1. В ней приведены три основных элемента - центральный процессор, память и устройство ввода/вывода. Эти три блока входят в состав любого контроллера.
Центральный процессор - самый сложный элемент. Он представляет собой программно-управляемое устройство, обрабатывающее информацию и осуществляющее обмен ею между основными компонентами контроллера. В качестве центрального процессора в проектируемом контроллере используем большую интегральную схему (БИС) микропроцессора КР580ВМ80А.
Память контроллера состоит из постоянного запоминающего устройства (ПЗУ), допускающего только считывание хранимой информации, и оперативного запоминающего устройства (ОЗУ), работающего как в режиме чтения информации из ОЗУ, так и записи в него новых данных. Фактически памятьэто совокупность однотипных ячеек, в каждой из которых хранится закодированная информация. Единицей измерения ее объема является бит. Для хранения 1 бита достаточно иметь одноразрядную ячейку, в которую может быть записан 0 или 1. Разрядность ячейки памяти микроЭВМ определяется разрядностью шины данных микропроцессора (для микропроцессора КР580ВМ80А составляет 8 бит, или 1 байт).
Каждая ячейка памяти имеет свой номер- адрес. Число непосредственно адресуемых ячеек определяется разрядностью адреса, формируемого микропроцессором. В нашем случае это 16 разрядов, что позволяет иметь максимальный объем адресуемой памяти 65535 ячеек.
Обмен информацией с внешними устройствами осуществляется через порты ввода/вывода. К микропроцессору КР580ВМ80А можно подключить в общей сложности 256 таких устройств.
Объем используемой памяти, число устройств ввода/вывода определяют конфигурацию контроллера, его возможности и стоимость.
Шины - это совокупность проводов, объединенных между собой по функциональному признаку. Восемь проводов образуют шину данных, шестнадцать - шину адреса, пять - шину управления. Такая архитектура позволяет легко наращивать различные периферийные устройства, присоединяя их к проектируемому устройству.
В контроллере передаваемые сигналы представлены двумя уровнями напряжения - логическими «0» и «1». Сигнал, который вызывает выполнение некоторого действия, называют активным. Активное состояние может быть при логической единице либо при логическом нуле. В частности, на шине управления сигналы активны при уровне логического «0». Таких управляющих сигналов пять: RD чтение памяти; WR запись в память; IORDчтение порта ввода/вывода; IOWRзапись в порт ввода/вывода; INTAподтверждение прерывания. Шина управления используется лишь для вывода сигналов управления, то есть она однонаправленная. Основная причина введения активных сигналов низкого уровня (они помечены чертой сверху) состоит в простоте объединения их по ИЛИ. Кроме того, выходной каскад с таким сигналом большую часть времени находится в выключенном состоянии и потребляет меньше энергии от источника питания.
Как и шина управления, шина адреса лишь передает выходные сигналы микропроцессора. Отдельные линии шины адреса имеют обозначение от А0 до А15.
В отличие от шин управления и адреса, шина данных двунаправленная. Передача данных здесь может производиться как от процессора, так и к процессору. Однако в каждый данный момент времени она осуществляется только в одном направлении. Отдельные линии шины данных обозначаются от D0 до D7. По шинам контроллера информация передается в двоичном коде.
Все внешние устройства контроллера могут быть подключены к микропроцессору только при выполнении двух условий: на них должен быть подан управляющий сигнал с шины управления и это устройство должно быть выбрано соответствующим адресом. Формирование сигналов выборки кода адреса осуществляют селекторы адреса САУВВ и САУП, дешифрируя сигналы шины адреса.
Для повышения нагрузочной способности использованы: буфер адресной шины и буфер данных.
Генератор тактовой частоты предназначен для формирования тактовых импульсов и строба состояния STB.
Программируемый таймер ПТ служит для генерации сигнала прерывания и частоты мигания индикатора.
Описание работы процессора
Микросхема КР580ВМ80А - функционально законченный однокристальный микропроцессор с фиксированной системой команд. Применяется в устройствах обработки данных и управления.
Микропроцессор имеет раздельные 16-разрядный канал адреса и 8-разрядный канал данных. Канал адреса обеспечивает прямую адресацию к внешней памяти объемом до 65 536 байт и 256 устройствам ввода и вывода.
Восьмиразрядное арифметико-логическое устройство микропроцессора выполняет арифметические и логические операции над двоичными числами, представленными в дополнительном коде, а также обработку двоично-десятичных упакованных чисел.
В состав блока регистров входят: 16-разрядный регистр адреса команды (IP), 16-разрядный регистр указателя стека (SP), 16-разрядный регистр временного хранения (WZ), 16-разрядная схема инкремента-декремента и шесть 8-разрядных регистров общего назначения (В, С, D, Е. Н, L), которые могут использоваться и как три 16-разрядных регистра (ВС, DE, HL).
Микропроцессор выполняет команды по машинным циклам. Число циклов, необходимое для выполнения команды, зависит от ее типа и может быть от одного до пяти. Машинные циклы выполняются по машинным тактам. Число тактов в цикле определяется кодом выполняемой команды и может быть от трех до пяти. Длительность такта равна периоду тактовой частоты и при частоте 2,0 МГц составляет 500 наносекунд.
В начале каждого машинного цикла микропроцессор вырабатывает сигнал синхронизации SYN, который в сочетании с другими сигналами может быть использован для организации различных режимов работы процессора.
На рисунке 2 показана диаграмма состояний типичного машинного цикла, показывающая последовательность перехода от такта к такту в машинном цикле и влияние внешних сигналов RDY, HLD и INT на его выполнение. После подачи на вывод SR сигнала высокого уровня микропроцессор устанавливается в исходное состояние.
В такте Т1 микропроцессор выдает на адресный канал адрес ячейки, в которой хранится команда программы, а через канал данных - информацию состояния. В такте Т2 анализируются состояния сигналов на входе RDY, «Подтверждение останова», и в зависимости от состояния этих сигналов микропроцессор переходит в состояние ожидания, останова или приступает к выполнению такта ТЗ. В такте ТЗ при наличии сигнала высокого уровня на входе RDV микропроцессор принимает информацию по каналу данных, анализирует состояние сигнала на входе HLD, и если этот сигнал высокого уровня, то после окончания такта ТЗ переходит в состояние захвата. В зависимости от кода выполняемой команды машинный цикл завершается после выполнения тактов ТЗ, Т4 или Т5.
В конце машинного цикла снова анализируется состояние сигнала на входе HLD. При низком уровне сигнала проверяется, окончено ли выполнение команды. Если команда не закончена, то микропроцессор выполняет следующий машинный цикл команды, начиная с такта Т1. В конце каждой команды микропроцессор анализирует состояние сигнала на входе INT. Если сигнал высокого уровня и прерывание ранее было разрешено командой Е1, то микропроцессор переходит к выполнению машинного цикла «Прерывание», начиная с такта Т1. В противном случае первый машинный цикл новой команды начинается с такта Т1.
Действия, выполняемые микропроцессором в конкретном машинном цикле, определяются 8-разрядной информацией состояния, которая выдается через канал данных в такте Т1 каждого машинного цикла. Эта информация может использоваться для выработки сигналов обращения к микросхемам памяти, устройствам ввода/вывода и для организации различных режимов работы микропроцессора.
В зависимости от сочетания сигналов состояния, выдаваемых в конкретном цикле, машинные циклы можно разделить на 10 типов:
1. Цикл М1 - прием первого байта команды в регистр команд.
2. Цикл чтения ЗУ (запоминающего устройства) по содержимому программного счетчика или содержимому одного из регистров ВС, DE,HL.
3. Цикл записи в ЗУ - запись в ЗУ по содержимому одного из регистров ВС,DE, HL.
4. Цикл чтения стека- чтение ЗУ по содержимому указателя стека.
5. Цикл записи в стек- запись в ЗУ по содержимому указателя стена.
6. Цикл ввода-ввода информации в регистр результата (аккумулятор) из внешнего устройства.
7. Цикл вывода-вывода информации из регистра результата во внешнее устройство.
8. Цикл прерывания - прием кода команды RST или CALL из контроллера прерываний.
9. Цикл останова.
10. Цикл прерывания при останове - прием кода команды RST или CALL при выводе микропроцессора из режима «Останов» по прерыванию.
При выполнении команд микропроцессор может переходить в одно из трех состояний: «ожидание», «захват» или «останов», длительность которых определяется внешними управляющими сигналами.
Сигнал высокого уровня на входе RDY обеспечивает автоматическое выполнение команд программы микропроцессором с частотой тактовых сигналов. Если на выводе RDY установлен сигнал низкого уровня, то микропроцессор переходит в режим «Ожидание" и формирует выходной сигнал WI высокого уровня.
Сигнал RDY может быть использован для согласования работы микропроцессора с работой медленно действующих устройств, если длительность их цикла обращения составляет более одного периода тактовой частоты, а также для организации пошагового (по циклам) выполнения команды или покомандного выполнения программы.
При подаче на вход HLD сигнала высокого уровня микропроцессор переходит в состояние “захват” и подтверждает переход в это состояние формированием сигнала высокого уровня на выходе HLDA. Буферные схемы канала адреса и данных микропроцессора переключаются в высокоомное (высокоимпедансное) состояние, а выходные управляющие сигналы - в состояние низкого уровня (за исключением сигналов TR и HLDA). Микропроцессор переходит в состояние "захват» в такте ТЗ, если выполняется цикл чтения и на входе RDY сигнал высокого уровня, и в такте, следующем за ТЗ, если выполняется цикл записи. Сигналы HLD и HLDA позволяют организовать режим прямого доступа к памяти для любого внешнего устройства, формирующего сигнал HLD.
При выполнении команды HLT микропроцессор переходит в состояние “останов” и переводит буферные схемы канала адреса и данных в высокоомное состояние. Из состояния «останов» микропроцессор выходит при наличии сигнала высокого уровня на одном из его входов:
на входе SR - микропроцессор начинает работать с такта Т1 цикла М1;
на входе HLD микропроцессор переходит в состояние: “захват”, а после перехода сигнала HLD на низкий уровень возвращается в состояние «останов»;
на входе INT - микропроцессор переходит к выполнению цикла прерывания при останове с такта Т1, если команде HLT предшествовала команда EI «разрешение прерывания», иначе он остается в состоянии «останов».
Сигнал высокого уровня на выводе INT позволяет прерывать выполнение текущей программы и переводить микропроцессор на выполнение подпрограммы обслуживания устройства, выдавшего запрос прерывания (например, часов). При поступлении сигнала INT микропроцессор (после окончания текущей команды) переходит с такта Т1 к выполнению машинного цикла «Прерывание» в том случае, если прерывание было разрешено ранее командой EI. При выполнении цикла «Прерывание" в такте Т1 микропроцессор выдает по шине данных сигнал состояния «Подтверждение прерывания». По окончании подпрограммы прерывания происходит возврат к прерванной программе.
Сигнал высокого уровня на входе SR (длительность которого должна быть не менее трех периодов тактовой частоты) устанавливает микропроцессор в исходное состояние: триггеры разрешения прерывания и захвата, регистры команд, признаков и адреса команды устанавливаются в нулевое состояние. После окончания действия сигнала SR микропроцессор производит первое обращение за чтением команды к ячейке памяти по адресу ООООН.
Система команд микропроцессора состоит из 78 базовых команд, которые можно разделить на пять групп:
команды передачи данных - используются для передачи данных из регистра в регистр, из регистра в память;
арифметические команды- используются для сложения, вычитания, инкремента или декремента содержимого регистров или ячейки памяти;
логические команды - И, ИЛИ, сравнение, сдвиги;
команды переходов - используются для условных или безусловных переходов, вызова подпрограмм и возврата из них;
команды управления, ввода/вывода и работы со стеком - используются для управления регистром признаков, ввода и вывода информации.
В микропроцессоре КР580ВМ80А принят формат информационного слова, представляющего собой 8-разрядное двоичное слово (байт). Формат информационного слова (данных):
D7 D6 D5 D4 D3 D2 Dl DO,
где D7старший разряд слова, а DOмладший. Отрицательные числа хранятся в памяти в дополнительном коде.
Формат команды зависит от типа операции - может быть одно, двух- и трехбайтовым. Байты двух- и трехбайтовых команд должны храниться в ячейках памяти, следующим одна за другой. Адрес первого байта всегда является адресом кода операции.
Наиболее общие закономерности использования команд процессора:
1. Арифметические и логические операции разрешены только между аккумулятором и байтом данных или между аккумулятором и любым регистром.
2. Аккумулятор и регистровая пара HL являются единственными регистрами, которые могут быть непосредственно загружены в память.
3. Аккумулятор является единственным регистром, который может быть инвертирован, сдвинут, косвенно загружен в память с использованием регистровых пар ВС и DE или использован в командах ввода/вывода (IN, OUT).
4. Регистровая пара HL является единственной, содержимое которой может быть передано в счетчик команд (команда PCHL) или указатель стека (команда SPHL).
5. Регистровая пара НL может использоваться как аккумулятор двойной длины при сложении 16-разрядных чисел (команда DAD)
6. Содержимое регистровых пар HL и DE можно менять местами (команда HCHG).
7. Отдельные команды могут применяться для специальных функций. Команды XRAA или CMP A обнуляют аккумулятор. Команды ANA или ORA А очищают флаг переноса, а команда ADD A выполняет логический сдвиг аккумулятора влево.
8. Команды увеличения (уменьшения) на 1 регистров (INR, DCR) действуют на все флаги, за исключением флага переноса. Команды увеличений (уменьшения) на 1 регистровых пар (INX, DCX) не оказывают влияния на флаги.
9. В стек или из стека могут быть переданы только регистровые пары. Одной из таких регистровых пар является слово состояния микропроцессора, которое содержит аккумулятор (старший байт) и флаги (младший байт). Команды CALL и R ЕТ передают адрес в стек и обратно.
10. При записи 16-разрядных адресов младший байт записывается первым.
Операнды команд могут храниться в программно доступных регистрах микропроцессора или памяти. Для указания операнда в регистре используются регистровая и регистровая неявная адресации, для указания операнда в памяти - непосредственная, прямая, косвенная регистровая и стековая адресации.
Регистр признаков микропроцессора используется для хранения пяти битов признаков, которые вырабатываются в результате выполнения некоторых операций:
S- бит знака; равен 1, если старший значащий разряд результата операции равен 1 (то есть результат операции - отрицательное число);
Z- бит нуля; равен 1, если результат операции равен нулю;
АС- бит вспомогательного переноса; равен 1, если при выполнении операции был перенос из третьего разряда сумматора в четвертый;
С - бит переноса; равен 1, если при выполнении операции был перенос из седьмого разряда сумматора или заем в седьмой разряд сумматора;
Р - бит четности; равен 1, если число единиц результата четное.
Распределение разрядов в регистре признаков следующее:
D7 D6 D5 D4 D3 D2 Dl DO
S Z 0 АС 0 Р 1 С
Адреса портов и распределение памяти
таблица 1
номер |
Адрес |
номер |
адрес |
номер |
адрес |
номер |
адрес |
||||
DD20 |
DD21 |
Таймер |
Доп. порт |
0FFFh |
|||||||
1 |
00h |
4 |
04h |
C0 |
08h |
6 |
0Ch |
ОЗУ |
|||
2 |
01h |
5 |
05h |
C1 |
09h |
2Кб |
|||||
3 |
02h |
6 |
06h |
C2 |
0Ah |
0800h |
|||||
РУС |
03h |
РУС |
07h |
РУС |
0Bh |
07FFh |
|||||
ПЗУ |
|||||||||||
2Кб |
|||||||||||
0000h |
|||||||||||
Описание принципиальной схемы
Блок центрального процессора выполнен на микросхемах DD1, DD2, DD3, DD4, DD5. Микросхема DD1 - микропроцессор КР580ВМ80А. Микросхема DD2 КР580ГФ24 предназначена для формирования двух последовательностей тактовых импульсов с требуемыми временными и амплитудными параметрами. Она содержит задающий генератор, стабилизированный кварцевым резонатором Z0 с частотой 16МГц.
Адресная шина подключается ко многим устройствам. Выходы же микропроцессора выдерживают лишь нагрузку одного входа ТТЛ микросхем. Поэтому для повышения нагрузочной способности к шине адреса подключены двунаправленные 8-разрядные шинные формирователи DD4, DD5 КР580ВА86. Так как шина адреса является однонаправленной, то на входах Т микросхем DD4, DD5 присутствует лог. 1 (вывод).
Увеличение нагрузочной способности двунаправленной шины данных выполнено с помощью микросхемы системного контроллера DD3 КР580ВК28. Она формирует управляющие сигналы по сигналам состояния процессора при обращении к ЗУ: RD и WR, при обращении к УВВ: IORD и IOWR, INTA, а также обеспечивает прием и передачу 8-разрядной информации между процессором и шиной данных. Вывод INTA микросхемы подсоединен к напряжению +12В через резистор 1КОм, что бы во время действия сигнала RC буферная схема данных формировала код команды RST7 и передавала на канал данных микропроцессора. Таким образом, микросхема обеспечивает единственный вектор прерываний с номером 7 без дополнительных компонентов.
Микросхема DD6 КР573РФ5 является ПЗУ контроллера, и предназначена для хранения управляющей программы. ПЗУ буферизировано микросхемой DD7 КР580ВА86. Так как из ПЗУ возможно только чтение, то на входе Т микросхемы DD7 присутствует лог. 1.
Микросхема DD8 КР537РУ10 является ОЗУ контроллера, и предназначена для хранения принимаемой и служебной информации. ОЗУ буферизировано микросхемой DD9 КР580ВА86. Так как из ОЗУ возможно не только чтение, но и запись, то на вход Т микросхемы DD9 заведен сигнал WR от системного контроллера. Таким образом, когда будет происходить чтение из ОЗУ сигнал WR будет равен лог.1 и DD9 будет настроена на вывод (от ОЗУ к ШД), а когда запись, то сигнал WR будет равен лог.0 и DD9 будет настроена на ввод (от ШД к ОЗУ).
На микросхемах DD18.1, DD12.1, DD11.1 совместно с микросхемами DD17.1, DD17.2, DD17.3, DD17.4, DD18.2, которые запрещают доступ к памяти при наличии адреса выше 0FFFh, выполнен Селектор Адреса Устройств Памяти. Он выполняет следующие функции:
1. При активном сигнале RD (лог. 0) и адреса в диапазоне 0000h-07FFh разрешает чтение из ПЗУ и запрещает доступ к ОЗУ.
САУП в этом режиме работает следующим образом. При появлении на адресной шине адреса в диапазоне 0000h-07FFh, разряды А11, А12, А13, А14, А15 шины адреса равны лог. 0. Следовательно, на входе DD18.1 (ИЛИ) присутствуют два лог. 0, устанавливающие выход DD18.1 в лог. 0, который в свою очередь приходит на один из входов DD18.2 (ИЛИ). На втором входе DD18.2 так же присутствует лог. 0, так как лог. 0 по входам DD17.1, DD17.2 дают на их выходах так же лог.0. Соответственно и на выходе DD17.3 тоже лог. 0. Лог. 0 на выходе DD18.2 поступает на вывод CS микросхем DD6 (ПЗУ) и DD7 (буфер) выводя их высокоомного состояния, что позволяет считывать с них информацию. В это же время сигнал WR равен лог. 1, которая по входу DD12.1 (исключающее ИЛИ) на выходе ее дает лог. 1. Эта лог. 1 поступает на вход DD11.1 (И-НЕ). На другом входе присутствует лог. 0 с А11 адресной шины. Следовательно на выходе DD11.1 (И-НЕ) лог. 1, которая подается на DD17.4. Одной лог. 1 на входе DD17.4 достаточно что бы на выходе была тоже лог. 1, которая, попадая на выводы CS микросхем DD8 (ОЗУ) и DD9 (буфер), перевела их в третье (высокоомное) состояние не позволяющее считывать с них информацию.
2. При активном сигнале RD (лог. 0) и адреса в диапазоне 0800h-0FFFh разрешает чтение из ОЗУ и запрещает доступ к ПЗУ.
САУП в этом режиме работает следующим образом. При появлении на адресной шине адреса в диапазоне 0800h-0FFFh, разряды А12, А13, А14, А15 шины адреса равны лог. 0. Следовательно на одном входе DD18.1 (ИЛИ) присутствует лог. 1 с А11 шины адреса и лог. 0 сигнала RD, устанавливающие выход DD18.1 в лог. 1, которая в свою очередь приходит на один из входов DD18.2 (ИЛИ). На втором входе DD18.2 присутствует лог. 0, так как лог. 0 по входам DD17.1, DD17.2 дают на их выходах так же лог.0. Соответственно и на выходе DD17.3 тоже лог. 0. Одной лог. 1 на входе DD18.2 достаточно, что бы на выходе тоже была лог. 1, которая поступает на вывод CS микросхем DD6 (ПЗУ) и DD7 (буфер) вводя их в высокоомное состояние, что не позволяет считывать с них информацию. В это же время сигнал WR равен лог. 1, которая по входу DD12.1 (исключающее ИЛИ) на выходе ее дает лог. 1. Эта лог. 1 поступает на вход DD11.1 (И-НЕ). На другом входе то же присутствует лог. 1 с А11 адресной шины. Следовательно, на выходе DD11.1 (И-НЕ) лог. 0, который подается на DD17.4. Два лог. 0 на входе DD17.4 дают на ее выходе была тоже лог. 0, который, попадая на выводы CS микросхем DD8 (ОЗУ) и DD9 (буфер) вывел их из высокоомного состояния, разрешая считать информацию. Выбор направления передачи данных описан выше.
3. При активном сигнале WR и адреса в диапазоне 0800h-0FFFh разрешает запись в ОЗУ и запрещает доступ к ПЗУ.
Работа САУП в этом режиме аналогична предыдущей за исключением направления передачи данных, которая поменяет свое направление за счет того, что на вывод выбора направления передачи поступит лог. 0 сигнала WR.
4. При активном сигнале WR или RD и адреса в диапазоне выше 0FFFh запрещает доступ и к ПЗУ и к ОЗУ.
САУП в этом режиме работает следующим образом. При появлении на адресной шине адреса в диапазоне выше 0FFFh, один из разрядов А12, А13, А14, А15 шины адреса всегда будет равен лог. 1. Одной лог.1 по входам DD17.1, DD17.2 дают на их выходах так же лог.1. Соответственно и на выходе DD17.3 тоже лог. 1. Одной лог. 1 на входе DD18.2 и DD17.4 достаточно, что бы на выходе тоже была лог. 1, которая поступает на вывод CS микросхем DD6 (ПЗУ), DD7 (буфер), DD8 (ОЗУ) и DD9 (буфер) вводя их в высокоомное состояние, что не позволяет считывать с них информацию.
На микросхеме DD14 K555ИД7 совместно с микросхемами DD10.1 и DD12.2, которые запрещают доступ к УВВ при наличии адреса выше 1Fh, выполнен Селектор Адреса Устройств Ввода Вывода. Адресация происходит согласно таблицы 1.
Работа САУВВ. При считывании с любого порта имеющего адрес ниже 1FH разряды А5, А6, А7 шины адреса равны лог. 0 следовательно лог. 0 на входах DD10.1 дадут на выходе лог. 0, который совместно с лог. 0 разряда А7 шины адреса и лог. 1 с выхода DD12.2 (исключающее ИЛИ), установленной одним из сигналов IORD или IOWR, выведут DD14 из третьего состояния, что в свою очередь позволит подключать один из существующих портов подачей лог. 0 с одного из выводов дешифратора (в зависимости от адреса активным будет только один вывод) на вывод CS микросхем DD15, DD20, DD21 или на один из выводов DD10.2, DD10.4 образующих порт №6. Если адрес будет выше 1FH, то не активность DD14 не позволит обращаться к портам ввода вывода.
Микросхема DD15 КР580ВИ53 представляет собой трехканальное программируемое устройство (таймер). Канал 1 совместно с микросхемой DD11.4, которая является инвертором сигнала, используется для генерации сигнала прерывания с интервалом 1 мс. Работает в режиме одиночного аппаратного стробирующего сигнала и запускается при наличии управляющего сигнала на выводе СЕ0 DD15, который формируется элементами DD13.3 и DD13.2 (И-НЕ с открытым коллектором) при записи в порт №6 числа, устанавливающего вывод D2 шины данных в состояние лог.1. Например 04h.
Каналы 2 и 3 используются для генерации частоты 1 Гц, используемой при выдаче мигающего сигнала светодиода VD2, причем выход второго канала OUT1 подается на счетный вход третьего канала С2 (получается делитель частоты). Каналы 2 и 3 работают в режиме генератора меандра. Поэтому для зацикливания счета на выводах СЕ1 и СЕ2 этих каналов присутствует лог.1.
Частота 1 Гц получается следующим образом. В канал 2 DD15 записано число 1000 (03E0h). На выходе этого канала получим прямоугольный сигнал с периодом 500нс (длительность периода процессора)*1000*2(режим генератора меандра)= 1мс (1КГц). Эта частота подается на счетный вход канала 3, в который записано число 500 (01F4h), тогда на выходе OUT2 третьего канала получим прямоугольный сигнал с периодом 1мс*500*2=1с (1 Гц).
На микросхемах DD16, DD10.3 и DD13.1 собран и подключен к порту №6 блок индикатора, который при записи в порт определенного числа выполняет следующие функции:
1. При записи числа 00h VD2 не горит
2. При записи числа 02h VD2 мигает с заданной частотой
3. При записи числа 03h VD2 горит постоянно
Происходит это следующим образом.
При записи в порт №6 на входах DD10.2 присутствуют 2 лог. 0 (Y3 DD14 и IOWR DD3), которые на выходе DD10.2 дают лог. 0, инвертируемый в лог.1 DD11.2 и подаваемый на вывод C (разрешение записи) триггеров DD16.1 и DD16.2. В это же время по шине данных (DB0, DB1) приходит информация на входы D триггеров, устанавливая их выходы в состояние лог 1. или лог. 0. Если в порт №6 записали 00h, то у триггера DD16.2 по выходу установится лог.0, который по входу DD13.1 (И-НЕ с открытым коллектором) даст на выходе лог.1 не зависимо от состояния второго входа. Следовательно, VD2 гореть не будет.
При записи в порт №6 числа 02h, после разрешения записи в триггера, описанной выше, у триггера DD16.2 по выходу установится лог.1, поступающая на вход DD13.1 (И-НЕ с открытым коллектором). Триггер же DD16.1 по выходу будет иметь лог. 0, который в сочетании с выходом OUT2 таймера DD15 дадут на выходе DD10.3 прямоугольный сигнал с указанной в задании частой. Тогда, имея на одном входе DD13.1 лог.1 а на другом прямоугольный сигал на выходе получим сигнал той же частоты, что в свою очередь приведет к миганию VD2.
При записи в порт №6 числа 03h, после разрешения записи в триггера, описанной выше, у триггера DD16.2 по выходу установится лог.1, поступающая на вход DD13.1 (И-НЕ с открытым коллектором). Триггер же DD16.1 по выходу будет иметь то же лог. 1. Следовательно, на входе DD10.3 всегда будет присутствовать лог.1, которая игнорируя сигнал с выхода OUT2 таймера DD15 даст на выходе DD10.3 лог. 1. Тогда, имея на входах DD13.1 лог.1, на выходе получим лог. 0, что в свою очередь приведет к постоянному свечению VD2.
Микросхема DD12.3 при общем сбросе устанавливает DD16 в исходное состояние (VD2 не горит).
Устройства ввода вывода представлены двумя микросхемами DD20, DD21 КР580ВВ55А являющимися программируемыми устройствами ввода вывода параллельной информации. В данном случае все работают в режиме 0, обеспечивая возможность синхронной программно управляемой передачи данных через два независимых 8-разрядных канала ВА и ВВ и два 4-разрядных канала ВС. Младший бит порта 5 (ВВ0) использован для вывода последовательной информации (программным способом). Адреса портов приведены в таблице 1.
Разъем Х1 подключается к контроллеру для проверки УВВ и соединяет между собой контакты 1 и 2, порты: 1 и 4; 2 и 5; 3 и 6. Замыкание контактов 1 и 2 является признаком того, что необходимо проверить устройства ввода вывода при включении или перезапуске. Происходит это следующим образом. При включении, после теста ОЗУ, контроллер считывает информацию с порта №6 и если Х1 не подключен, то на выходе DD19.1 и линии D3 шины данных будет лог.0, что будет являться признаком игнорировать тест УВВ. Если же Х1 подключен, то при считывании информации с порта №6 +5В через контакты 1и2 дадут лог.1 на выходе DD19.1. и линии D3 шины данных, что будет являться признаком проводить тест УВВ. Во всех остальных случаях (кроме чтения с порта 6) выход DD19.1 будет находиться в высокоомном (третьем) состоянии, что не будет влиять на информацию, передаваемую по шине данных.
Список используемой литературы
1. Микропроцессоры и микропроцессорные комплекты интегральных микросхем: Справочник. В 2 т.-М.: Радио и связь, 1988. - Т.1.-368 с.
2. Логические ИС КР1533, КР1554. Справочник в 2 частях.
Сбоку справо!!!
Адрес |
Код |
Метка |
Текст |
Пояснения |
1E 00 |
MVI E,00 |
Подпрограмма OIIO |
||
26 04 |
MVI H,04 |
Число пар микросхем +1 |
||
3E 03 |
MVI A,03 |
Адрес РУС в нечетной микросхеме текущей пары |
||
32 01 08 |
MOI |
STA 0801 |
Записать адрес РУС в память по адресу 0801Н |
|
57 |
MOV D,A |
|||
3A 07 08 |
LDA 0807 |
Считать управляющее слово для РУС нечетной микросхемы |
||
CD 00 08 |
CALL 0800 |
Записать управляющее слово в РУС нечетной микросхемы |
||
7A |
MOV A,D |
|||
C6 04 |
ADI 04 |
Вычислить адрес РУС четной микросхемы |
||
32 01 08 |
STA 0801 |
Записать адрес РУС в память по адресу 0801Н |
||
3A 08 08 |
LDA 0808 |
Считать управляющее слово для РУС четной микросхемы |
||
CD 00 08 |
CALL 0800 |
Записать управляющее слово в РУС четной микросхемы |
||
67 |
MOV H,A |
|||
C8 |
RZ |
Если все микросхемы запрограммированы, то выйти |
||
3E 08 |
MVI A,08 |
Вычислить адрес РУС нечетной микросхемы след. пары |
||
83 |
ADD E |
|||
5F |
MOV E,A |
|||
|
C3 MOI |
|
JMP MOI |
|
Подпрограмма IN |
||||
26 04 |
MVI H,04 |
Счетчик портов в микросхеме +1 |
||
2E 04 |
MVI L,04 |
Счетчик пар микросхем +1 |
||
3A 06 08 |
LDA 0806 |
Считать контрольное слово из памяти |
||
4F |
MOV C,A |
|||
AF |
XRA A |
Вычислить адрес первого порта |
||
83 |
ADD E |
|||
|
||||
|
||||
|
||||
|
||||
7A |
MI2 |
MOV A,D |
||
32 04 08 |
STA 0804 |
Записать адрес порта в память |
||
CA MI1 |
JZ MI1 |
|||
3E 03 |
MVI A,03 |
Если не совпадает, то включить мигающий индикатор |
||
D3 1C |
OUT 1C |
|||
76 |
HLT |
|||
14 |
MI1 |
INR D |
Вычислить адрес следующего порта в этой микросхеме |
|
57 |
MOV D,A |
|||
25 |
DCR H |
Уменишить счетчик портов а микросхеме на 1 |
||
67 |
MOV H,A |
|||
C2 MI2 |
JNZ MI2 |
Если не все порты перебраны, то продолжить считывание |
||
2D |
DCR L |
Если все, то уменьшить счетчик пар на 1 |
||
C8 |
RZ |
Если все пары перебраны, то выйти |
||
6F |
MOV L,A |
|||
3E 08 |
MVI A,08 |
Вычислить адрес следующей пары |
||
83 |
ADD E |
|||
5F |
MOV E,A |
|||
|
C3 MI3 |
|
JMP MI3 |
|
Подпрограмма OUT |
||||
26 04 |
MVI H,04 |
Счетчик портов в микросхеме +1 |
||
2E 04 |
MVI L,04 |
Счетчик пар микросхем +1 |
||
3A 06 08 |
LDA 0806 |
Считать контрольное слово из памяти |
||
4F |
MOV C,A |
|||
AF |
XRA A |
Вычислить адрес первого порта |
||
83 |
ADD E |
|||
57 |
MO2 |
MOV D,A |
||
7A |
MO1 |
MOV A,D |
||
32 01 08 |
STA 0801 |
Записать адрес порта в память |
||
CD 00 08 |
CALL 0800 |
Вывести в порт контрольное слово |
||
14 |
INR D |
Вычислить адрес следующего порта в этой микросхеме |
||
57 |
MOV D,A |
|||
25 |
DCR H |
Уменишить счетчик портов а микросхеме на 1 |
||
67 |
MOV H,A |
|||
C2 MO1 |
JNZ MO1 |
Если не все порты перебраны, то продолжить вывод |
||
2D |
DCR L |
Если все, то уменьшить счетчик пар на 1 |
||
C8 |
RZ |
Если все пары перебраны, то выйти |
||
6F |
MOV L,A |
|||
3E 08 |
MVI A,08 |
Вычислить адрес следующей пары |
||
83 |
ADD E |
|||
5F |
MOV E,A |
|||
C3 MO2 |
JMP MO2 |
Программа управляющая работой контроллера |
||||
Адрес |
Код |
Метка |
Текст |
Пояснения |
0000 |
FB |
|
DI |
Запретить прерывания |
0001 |
3E 3A |
|
MVI A,3A |
Программирование таймера |
0003 |
D3 0B |
|
OUT 0B |
Установка канала (0) в режим (5) |
0005 |
3E 7E |
|
MVI A,76 |
|
0007 |
D3 0B |
|
OUT 0B |
Установка канала (1) в режим (3) |
0009 |
3E BE |
|
MVI A,BE |
|
000B |
D3 0B |
|
OUT 0B |
Установка канала (2) в режим (3) |
000D |
3E D0 |
|
MVI A,D0 |
Загрузить канал (0) таймера на время 1 мс числом 2000 (07D0H) |
000F |
D3 08 |
|
OUT 08 |
|
0011 |
3E 07 |
|
MVI A,07 |
|
0013 |
D3 08 |
|
OUT 08 |
|
0015 |
3E D0 |
|
MVI A,E8 |
Загрузка канала 1 числом 1000 (03E8H) |
0017 |
D3 09 |
|
OUT 09 |
|
0019 |
E3 07 |
|
MVI A,03 |
|
001B |
D3 09 |
|
OUT 09 |
|
001D |
3E F4 |
|
MVI A,F4 |
Загрузка канала 2 числом 500 (01F4H) |
001F |
D3 0A |
|
OUT 0A |
|
0021 |
E3 01 |
|
MVI A,01 |
|
0023 |
D3 0A |
|
OUT 0A |
|
0025 |
21 00 08 |
|
LXI H,0800 |
Тест ОЗУ |
0028 |
36 55 |
M3 |
MVI M,55 |
Записать в ячейку памяти контрольное число (55Н) |
002A |
3E 55 |
|
MVI A,55 |
|
002C |
AE |
|
XRA M |
Проверка записи в ячейку памяти контрольного числа (55Н) |
002D |
CA M1 |
|
JZ M1 |
|
0030 |
3E 02 |
|
MVI A,02 |
При не правильной записи включить мигающий индикатор |
0032 |
D3 0C |
|
OUT 0C |
|
0034 |
C3 M4 |
|
JMP M4 |
Обход адреса прерывания (0038Н) |
0037 |
00 |
|
NOP |
|
0038 |
C3 INT |
|
JMP INT |
Переход на программу обработки прерывания |
003A |
76 |
M4 |
HLT |
Останов процессора |
003B |
36 AA |
M1 |
MVI M,AA |
Записать в ячейку памяти контрольное число (AAН) |
|
3E AA |
|
MVI A,AA |
|
|
AE |
|
XRA M |
Проверка записи в ячейку памяти контрольного числа (AAН) |
|
CA M2 |
|
JZ M2 |
|
|
3E 02 |
|
MVI A,02 |
При не правильной записи включить мигающий индикатор |
|
D3 0C |
|
OUT 0C |
|
|
76 |
|
HLT |
Останов процессора |
|
23 |
M2 |
INX H |
Переход к следующему адресу |
|
3E 10 |
|
MVI A,10 |
Проверить вся ли память протестирована |
|
AC |
|
XRA H |
|
|
C2 M3 |
|
JNZ M3 |
|
|
3E 00 |
|
MVI A,00 |
Инициализация буфера индикатора |
|
32 09 08 |
|
STA 0809 |
Сохранить в ОЗУ |
|
31 FF 0F |
|
LXI SP,0FFF |
Установка стека |
|
DB 0C |
|
IN 0C |
Тест УВВ |
|
06 08 |
|
MVI B,08 |
Проверить подключен ли тестовый разъем (Х1) |
|
A0 |
|
ANA B |
|
|
CA PRG |
|
JZ PRG |
Если нет, то перейти к выполнению основной программы |
|
21 00 08 |
|
LXI H,0800 |
Записать в память подпрограмму вывода в порт (с адреса 0800Н) |
|
36 D3 |
|
MVI M,D3 |
Будет записана команда OUT |
|
23 |
|
INX H |
Место под номер порта |
|
23 |
|
INX H |
|
|
36 C9 |
|
MVI M,C9 |
Будет записана команда RET |
|
23 |
|
INX H |
Записать в память подпрограмму чтения из порта (с адреса 0803Н) |
|
36 DB |
|
MVI M,DB |
Будет записана команда IN |
|
23 |
|
INX H |
Место под номер порта |
|
23 |
|
INX H |
|
|
36 C9 |
|
MVI M,C9 |
Будет записана команда RET |
|
3E 80 |
|
MVI A,80 |
Записать по адресу 0807Н управляющее слово 80Н (все порты на вывод) |
|
32 07 08 |
|
STA 0807 |
|
|
3E 9B |
|
MVI A,9B |
Записать по адресу 0808Н управляющее слово 9BН (все порты на ввод) |
|
32 08 08 |
|
STA 0808 |
|
|
CD OIIO |
|
CALL OIIO |
Установить нечетные микросхемы на вывод, а четные на ввод |
|
3E 55 |
|
MVI A,55 |
Записать по адресу 0806Н тестовое слово 55Н |
|
32 08 06 |
|
STA 0806 |
|
|
1E 00 |
|
MVI E,00 |
Указатель на нечетные микросхемы пар |
|
CD OUT |
|
CALL OUT |
Вывести во все порты нечетных микросхем число 55Н |
|
1E 04 |
|
MVI E,04 |
Указатель на четные микросхемы пар |
|
CD IN |
|
CALL IN |
Прочитать со всех портов четных микросхем число 55Н |
|
3E AA |
|
MVI A,AA |
Записать по адресу 0806Н тестовое слово AAН |
|
32 08 06 |
|
STA 0806 |
|
|
1E 00 |
|
MVI E,00 |
Указатель на нечетные микросхемы пар |
|
CD OUT |
|
CALL OUT |
Вывести во все порты нечетных микросхем число AAН |
|
1E 04 |
|
MVI E,04 |
Указатель на четные микросхемы пар |
|
CD IN |
|
CALL IN |
Прочитать со всех портов четных микросхем число 55Н |
|
3E 9B |
|
MVI A,9B |
Записать по адресу 0807Н управляющее слово 9BН (все порты на вывод) |
|
32 08 07 |
|
STA 0807 |
|
|
3E 80 |
|
MVI A,80 |
Записать по адресу 0808Н управляющее слово 80Н (все порты на ввод) |
|
32 08 08 |
|
STA 0808 |
|
|
CD OIIO |
|
CALL OIIO |
Установить четные микросхемы на вывод, а нечетные на ввод |
|
1E 04 |
|
MVI E,04 |
Указатель на четные микросхемы пар |
|
CD OUT |
|
CALL OUT |
Вывести во все порты четных микросхем число AAН |
|
1E 00 |
|
MVI E,00 |
Указатель на нечетные микросхемы пар |
|
CD IN |
|
CALL IN |
Прочитать со всех портов нечетных микросхем число AAН |
|
3E 55 |
|
MVI A,55 |
Записать по адресу 0806Н тестовое слово 55Н |
|
32 08 06 |
|
STA 0806 |
|
|
1E 04 |
|
MVI E,04 |
Указатель на четные микросхемы пар |
|
CD OUT |
|
CALL OUT |
Вывести во все порты четных микросхем число 55Н |
|
1E 00 |
|
MVI E,00 |
Указатель на нечетные микросхемы пар |
|
CD IN |
|
CALL IN |
Прочитать со всех портов нечетных микросхем число 55Н |
|
3E 9B |
PRG |
MVI A,9B |
Записать по адресу 0807Н управляющее слово 80Н (все порты на ввод) |
|
32 08 07 |
|
STA 0807 |
|
|
3E 80 |
|
MVI A,80 |
Записать по адресу 0808Н управляющее слово 80Н (все порты на ввод) |
|
32 08 08 |
|
STA 0808 |
|
|
CD OIIO |
|
CALL OIIO |
Установить четные и нечетные микросхемы на ввод |
|
3E 99 |
|
MVI A,99 |
Настроить порт 5 на вывод |
|
D3 07 |
|
OUT 07 |
|
|
21 00 09 |
ST |
LXI H,0900 |
Адрес начала блока принимаемых данных |
|
FB |
|
EI |
Разрешить прерывания |
|
3A 09 08 |
INT |
LDA 0809 |
Запустить таймер, не изменив состояние светодиода |
|
C6 04 |
|
ADI 04 |
|
|
D3 0C |
|
OUT 0C |
|
|
DB 00 |
|
IN 00 |
Считать информацию с 1 порта |
|
77 |
|
MOV M,A |
Записать в память |
|
23 |
|
INX H |
Увеличить счетчик адреса на 1 |
|
3E 0D |
|
MVI A,0D |
Проверить на заполнение 1К памяти |
|
AC |
|
XRA H |
|
|
CA P2 |
|
JZ P2 |
Если заполнен, то перейти к суммированию |
|
DB 01 |
|
IN 01 |
Считать информацию со 2 порта |
|
77 |
|
MOV M,A |
Записать в память |
|
23 |
|
INX H |
Увеличить счетчик адреса на 1 |
|
3E 0D |
|
MVI A,0D |
Проверить на заполнение 1К памяти |
|
AC |
|
XRA H |
|
|
CA P2 |
|
JZ P2 |
Если заполнен, то перейти к суммированию |
|
DB 02 |
|
IN 02 |
Считать информацию с 3 порта |
|
77 |
|
MOV M,A |
Записать в память |
|
23 |
|
INX H |
Увеличить счетчик адреса на 1 |
|
3E 0D |
|
MVI A,0D |
Проверить на заполнение 1К памяти |
|
AC |
|
XRA H |
|
|
CA P2 |
|
JZ P2 |
Если заполнен, то перейти к суммированию |
|
DB 04 |
|
IN 04 |
Считать информацию с 4 порта |
|
77 |
|
MOV M,A |
Записать в память |
|
23 |
|
INX H |
Увеличить счетчик адреса на 1 |
|
3E 0D |
|
MVI A,0D |
Проверить на заполнение 1К памяти |
|
AC |
|
XRA H |
|
|
CA P2 |
|
JZ P2 |
Если заполнен, то перейти к суммированию |
|
76 |
|
HLT |
Цикл опроса закончен до следующего прерывания |
|
F3 |
P2 |
DI |
Запретить прерывания (Суммирование 1К) |
|
AF |
|
XRA A |
Обнулить ячейки памяти отведенные под сумму |
|
32 0A 08 |
|
STA 080A |
|
|
32 0B 08 |
|
STA 080B |
|
|
32 0C 08 |
|
STA 080C |
|
|
21 00 09 |
|
LXI H,0900 |
Адрес начала блока суммируемых данных |
|
11 0C 08 |
|
LXI D,080C |
Адрес младшего байта суммы |
|
70 |
S3 |
MOV B,M |
К младшему байту суммы прибавить число из текущей ячейки памяти |
|
1A |
|
LDAX D |
|
|
80 |
|
ADD B |
|
|
12 |
|
STAX D |
Сохранить новое значение младшего байта суммы |
|
D2 S1 |
|
JNC S1 |
|
|
1B |
S2 |
DCX D |
Если был перенос, перейти к следующему байту суммы |
|
1A |
|
LDAX D |
|
|
CE 00 |
|
ACI 00 |
Увеличить его на 1 |
|
12 |
|
STAX D |
Сохранить |
|
DA S2 |
|
JC S2 |
Если был перенос, повторить еще раз |
|
11 0C 08 |
|
LXI D,080C |
Восстановить адрес младшего байта суммы |
|
23 |
S1 |
INX H |
Перейти к следующему байту памяти |
|
3E 0D |
|
MVI A,OD |
Проверить вся ли память просуммирована |
|
AC |
|
XRA H |
|
|
C2 S3 |
|
JNZ S3 |
Если не вся, то продолжить суммирование |
|
AF |
|
XRA A |
Нахождение среднего арифметического блока памяти 1К |
|
21 0D 08 |
|
LXI H,080D |
Адрес частного |
|
11 0B 08 |
|
LXI D,080B |
Адрес второго байта суммы |
|
77 |
|
MOV M,A |
Обнулить частное |
|
1A |
D3 |
LDAX D |
Загрузить второй байт суммы в аккумулятор |
|
D6 04 |
|
SUI 04 |
Вычесть делитель |
|
12 |
|
STAX D |
Сохранить новое значение второго байта суммы |
|
D2 D1 |
|
JNC D1 |
|
|
1B |
|
DCX D |
Если при вычитании был перенос, то перейти к первому байту суммы |
|
1A |
|
LDAX D |
Загрузить первый байт суммы в аккумулятор |
|
4F |
|
MOV C,A |
Запомнить первый байт суммы в регистре С |
|
EE 00 |
|
XRI 00 |
Проверить первый байт суммы на ноль |
|
CA D2 |
|
JZ D2 |
Если ноль, то деление окончено |
|
34 |
|
INR M |
Увеличить частное на 1 |
|
|
|
MOV A,C |
Восстановить первый байт суммы |
|
3D |
|
DCR A |
Уменьшить его на 1 |
|
12 |
|
STAX D |
Сохранить новое значение первого байта суммы |
|
13 |
|
INX D |
Восстановить адрес второго байта суммы |
|
C3 D3 |
|
JMP D3 |
Продолжить деление |
|
34 |
D1 |
INR M |
Увеличить частное на 1 |
|
C3 D3 |
|
JMP D3 |
Продолжить деление |
|
AF |
D2 |
XRA A |
Проверить равно ли частное нулю |
|
A6 |
|
ANA M |
|
|
C2 E1 |
|
JNZ E1 |
|
|
3E 03 |
|
MVI A,03 |
Если равно, то включить светодиод (горит постоянно) |
|
D3 0C |
|
OUT 0C |
|
|
32 09 08 |
|
STA 0809 |
Сохранить состояние светодиода |
|
CD OUTSE |
|
CALL OUTSE |
Вывести значение частного в порт 5 |
|
D3 16 |
|
OUT 16 |
|
|
C3 ST |
|
JMP ST |
Перейти на заполнение следующего килобайта памяти |
|
3E 00 |
E1 |
MVI A,00 |
Если не равно, то выключить светодиод |
|
D3 0C |
|
OUT 0C |
|
|
32 09 08 |
|
STA 0809 |
Сохранить состояние светодиода |
|
CD OUTSE |
|
CALL OUTSE |
Вывести значение частного в порт 5 |
|
C3 ST |
|
JMP ST |
Перейти на заполнение следующего килобайта памяти |
|
1E 00 |
OIIO |
MVI E,00 |
Подпрограмма OIIO |
|
26 01 |
|
MVI H,01 |
Число пар микросхем |
|
3E 03 |
|
MVI A,03 |
Адрес РУС в нечетной микросхеме текущей пары |
|
32 01 08 |
MOI |
STA 0801 |
Записать адрес РУС в память по адресу 0801Н |
|
57 |
|
MOV D,A |
|
|
3A 07 08 |
|
LDA 0807 |
Считать управляющее слово для РУС нечетной микросхемы |
|
CD 00 08 |
|
CALL 0800 |
Записать управляющее слово в РУС нечетной микросхемы |
|
7A |
|
MOV A,D |
|
|
C6 04 |
|
ADI 04 |
Вычислить адрес РУС четной микросхемы |
|
32 01 08 |
|
STA 0801 |
Записать адрес РУС в память по адресу 0801Н |
|
3A 08 08 |
|
LDA 0808 |
Считать управляющее слово для РУС четной микросхемы |
|
CD 00 08 |
|
CALL 0800 |
Записать управляющее слово в РУС четной микросхемы |
|
25 |
|
DCR H |
Уменишить счетчик пар на 1 |
|
C8 |
|
RZ |
Если все микросхемы запрограммированы, то выйти |
|
3E 08 |
|
MVI A,08 |
Вычислить адрес РУС нечетной микросхемы след. пары |
|
83 |
|
ADD E |
|
|
5F |
|
MOV E,A |
|
|
C3 MOI |
|
JMP MOI |
|
|
26 03 |
IN |
MVI H,03 |
Счетчик портов в микросхеме (Подпрограмма IN) |
|
2E 01 |
|
MVI L,01 |
Счетчик пар микросхем |
|
3A 06 08 |
|
LDA 0806 |
Считать контрольное слово из памяти |
|
4F |
|
MOV C,A |
Запомнить контрольное слово |
|
AF |
|
XRA A |
Вычислить адрес первого порта |
|
83 |
|
ADD E |
|
|
57 |
MI3 |
MOV D,A |
|
|
7A |
MI2 |
MOV A,D |
|
|
32 04 08 |
|
STA 0804 |
Записать адрес порта в память |
|
CD 03 08 |
|
CALL 0803 |
Считать из порта контрольное слово |
|
A9 |
|
XRA C |
Сравнить с образцом |
|
CA MI1 |
|
JZ MI1 |
|
|
3E 02 |
|
MVI A,02 |
Если не совпадает, то включить мигающий индикатор |
|
D3 0C |
|
OUT 0C |
|
|
76 |
|
HLT |
Останов процессора |
|
14 |
MI1 |
INR D |
Вычислить адрес следующего порта в этой микросхеме |
|
25 |
|
DCR H |
Уменишить счетчик портов а микросхеме на 1 |
|
C2 MI2 |
|
JNZ MI2 |
Если не все порты перебраны, то продолжить считывание |
|
2D |
|
DCR L |
Если все, то уменьшить счетчик пар на 1 |
|
C8 |
|
RZ |
Если все пары перебраны, то выйти |
|
3E 08 |
|
MVI A,08 |
Вычислить адрес следующей пары |
|
83 |
|
ADD E |
|
|
5F |
|
MOV E,A |
|
|
26 03 |
|
MVI H,03 |
|
|
C3 MI3 |
|
JMP MI3 |
|
|
26 03 |
OUT |
MVI H,03 |
Счетчик портов в микросхеме (Подпрограмма OUT) |
|
2E 01 |
|
MVI L,01 |
Счетчик пар микросхем |
|
3A 06 08 |
|
LDA 0806 |
Считать контрольное слово из памяти |
|
4F |
|
MOV C,A |
Запомнить контрольное слово |
|
AF |
|
XRA A |
Вычислить адрес первого порта |
|
83 |
|
ADD E |
|
|
57 |
MO2 |
MOV D,A |
|
|
7A |
MO1 |
MOV A,D |
|
|
32 01 08 |
|
STA 0801 |
Записать адрес порта в память |
|
79 |
|
MOV A,C |
Вспомнить контрольное слово |
|
CD 00 08 |
|
CALL 0800 |
Вывести в порт контрольное слово |
|
14 |
|
INR D |
Вычислить адрес следующего порта в этой микросхеме |
|
25 |
|
DCR H |
Уменишить счетчик портов а микросхеме на 1 |
|
C2 MO1 |
|
JNZ MO1 |
Если не все порты перебраны, то продолжить вывод |
|
2D |
|
DCR L |
Если все, то уменьшить счетчик пар на 1 |
|
C8 |
|
RZ |
Если все пары перебраны, то выйти |
|
3E 08 |
|
MVI A,08 |
Вычислить адрес следующей пары |
|
83 |
|
ADD E |
|
|
5F |
|
MOV E,A |
|
|
26 03 |
|
MVI H,03 |
|
|
C3 MO2 |
|
JMP MO2 |
|
|
3E 08 |
OUTSE |
MVI A,01 |
Последовательный вывод частного (Подпрограмма OUTSE) |
|
D3 05 |
|
OUT 05 |
Установить младший бит порта 5 в 1 |
|
3A 0D 08 |
|
LDA 080D |
Считать частное из памяти |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
16 0B |
|
MVI D,0B |
Запомнить величину задержки в регистре D |
|
3E 00 |
|
MVI A,00 |
Генерация синхроимпульса запуска |
|
D3 05 |
|
OUT 05 |
|
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z1 |
DCR B |
|
|
C2 Z1 |
|
JNZ Z1 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести первый бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z2 |
DCR B |
|
|
C2 Z2 |
|
JNZ Z2 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести второй бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z3 |
DCR B |
|
|
C2 Z3 |
|
JNZ Z3 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести третий бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z4 |
DCR B |
|
|
C2 Z4 |
|
JNZ Z4 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести четвертый бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z5 |
DCR B |
|
|
C2 Z5 |
|
JNZ Z5 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести пятый бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z6 |
DCR B |
|
|
C2 Z6 |
|
JNZ Z6 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести шестой бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z7 |
DCR B |
|
|
C2 Z7 |
|
JNZ Z7 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести седьмой бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z8 |
DCR B |
|
|
C2 Z8 |
|
JNZ Z8 |
|
|
79 |
|
MOV A,C |
Восстановить частное из С |
|
0F |
|
RRC A |
Подготовка следующего бита к выводу |
|
4F |
|
MOV C,A |
Запомнить частное в регистре С |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести восьмой бит частного в порт 5 |
|
42 |
|
MOV B,D |
Задержка 0.104 мс (скорость 9600 бод) |
|
05 |
Z9 |
DCR B |
|
|
C2 Z9 |
|
JNZ Z9 |
|
|
AF |
|
XRA A |
Обнулить аккумулятор |
|
3C |
|
INR A |
Генерация стоп бита |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
00 |
|
NOP |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
4F |
|
MOV C,A |
Дополнение цикла задержки |
|
D3 05 |
|
OUT 05 |
Вывести стоп бит в порт 5 |
|
C9 |
|
RET |
|