ОСНОВНЫЕ СВЯЗИ И СТРУКТУРА ШИН
В микро-ЭВМ, построенных на базе микропроцессоров, все связи между отдельными функциональными блоками осуществляются, как правило, так называемыми шинами. Под шиной подразумевается физическая группа линий передачи сигналов, обладающих функциональной общностью (по каждой линии передается один двоичный разряд информации). Так, например, данные в машине обычно передаются к различным ее функциональным узлам параллельно по восьми линиям. Физически шины реализуются в виде параллельных проводящих полосок печатной платы или в виде связанных в жгут проводов. Соответствующая группа из восьми линий передачи данных называется 8-разрядной шиной данных. Кроме шины данных в микро-ЭВМ выделяют шину передачи адресов, или шину адреса, и шину управления. Микро-ЭВМ с такой организацией связей относят к системам, обладающим архитектурой с тремя шинами.

Рис. 4.2. Упрощенная архитектура ЭВМ с тремя шинами
Типовые связи в архитектуре ЭВМ с тремя шинами в общем случае будут иметь вид, представленный на рис. 4.2, если в качестве основных функциональных блоков машины использовать микропроцессорный блок (МБ), ОЗУ, ПЗУ и порты ввода/вывода. Линии шин адреса (ША) и управления (ШУ) являются однонаправленными [Здесь не рассматривается режим прямого доступа к памяти]. В них сигналы протекают в одном направлении — от центрального процессорного элемента ко всем остальным блокам. Шина адреса является 16-разрядной. Число линий шины управления определяется составом сигналов, формируемых системным контроллером.
Передаваемые по ША сигналы формируются в МП. Они необходимы для определения пути передачи внутри микро-ЭВМ, в том числе для выбора ячейки памяти, куда необходимо занести или откуда необходимо считать информацию. В определении тракта передачи данных могут принимать участие и управляющие сигналы, подсоединяющие или, напротив, блокирующие те или иные устройства микро-ЭВМ.
В отличие от ША и ШУ шина данных (ШД) является шиной двунаправленной.
Данные по линиям шины могут передаваться от микропроцессора к какому-нибудь устройству микро-ЭВМ либо пересылаться в МП от какого-то устройства, доступ к которому обеспечивают сигналы адресной шины.
Естественно, что в каждый момент времени данные могут передаваться лишь в одном направлении, определяемом режимом работы микропроцессора. К основным режимам работы МП можно отнести: запись данных в память машины; чтение данных из памяти машины; пересылку данных в устройство ввода/вывода; чтение данных с устройства ввода/вывода; выполнение операций с содержимым внутренних регистров микропроцессора.
При реализации последнего режима внешние по отношению к МП шины микро-ЭВМ не используются, т. е. все действия происходят внутри МП. Реализация первых четырех режимов оказывает определяющее влияние на работу шины данных.
Работа по реализации программы любой микро-ЭВМ, построенной по типу архитектуры с тремя шинами, состоит в выполнении следующих действий для каждой команды программы.
1. Микропроцессор формирует адрес, по которому хранится код операции команды, переводя в соответствующее состояние шину адреса.
2. Код операции считывается из памяти по сформированному адресу и пересылается в микропроцессор.
3. Команда дешифрируется (идентифицируется) микропроцессором.
4. Микропроцессор "настраивается" на выполнение одного из перечисленных выше пяти основных режимов в соответствии с результатами дешифрирования считанного из памяти кода команды.
Перечисленные выше пять режимов являются основными, но не единственно возможными. Существуют и другие, рассматриваемые в гл. 6.
Перейдем теперь к окончательному оформлению функциональной схемы ПМ-ЭВМ.
ПОДГОТОВКА ПМ-ЭВМ К РАБОТЕ
После того как проведенные проверки подтвердили работоспособность микро-ЭВМ, можно приступить к ее эксплуатации. От условий эксплуатации зависит окончательное конструктивное оформление ПМ-ЭВМ. В лабораторных условиях можно оставить все в таком виде, в каком производилась отладка, т. е. соединенные проводами или плоскими кабелями отдельные платы, клавиатуру и лабораторные источники питания, приведя только в порядок проводку и проверив все соединения.
Если предполагается эксплуатировать ПМ-ЭВМ в стационарных условиях класса или аудитории, то желательно конструктивно оформить ее в виде отдельного стенда, на котором должны быть жестко закреплены все узлы и устройства с аккуратно выполненными связями между ними с помощью кабелей наименьшей возможной длины. При этом можно пользоваться либо лабораторными источниками питания, либо встроенными в стенд автономными. ПМ-ЭВМ потребляет (без дополнительных периферийных устройств) от источника + 5 В примерно 1,3 А, от источника + 12 В примерно 30 мА и от источника -5 В примерно 30 мкА. Желательно иметь некоторый, например двукратный, запас по источникам питания, имея в виду подключение дополнительной памяти, периферийных микросхем и устройств. В переносном варианте ПМ-ЭВМ легко размещается вместе с источниками питания в небольшом чемоданчике размерами ЗбОх 250х 80 мм и массой не более 3 кг.
После включения ПМ-ЭВМ переведите переключатель К18 в положение АВТОМАТ и нажмите кнопку СБРОС. После отпускания кнопки СБРОС на индикаторах портов 001 и 000 высветится адрес начальной ячейки ОЗУ (014Q OOOQ), а на индикаторах порта 002 — содержимое этой ячейки. Нажимая кнопку И, убедитесь, что адрес, индицируемый портами 001 и 000, при каждом нажатии увеличивается на единицу. Снова нажмите кнопку СБРОС и убедитесь, что цифровые клавиши функционируют нормально, т. е. при каждом нажатии индицируемое портом 002 число сдвигается на три двоичных разряда влево и освободившееся место заполняется числом, соответствующим нажатой клавише.
Убедитесь также, что при нажатии кнопок СБ или МБ информация, индицируемая портом 002, перемещается в порты 001 или 000 соответственно. Снова нажмите и отпустите кнопку СБРОС и переведите переключатель К18 в положение ШАГ. Порт 002 индицирует состояние шины данных, соответствующее исполнению машинного цикла одной из команд программы-монитора от адреса OOOQ 220Q до OOOQ 251Q. При нажатии кнопки К17 МАШИННЫЙ ЦИКЛ последовательно исполняются команды между данными адресами. Этот процесс повторяется неограниченно долго — до тех пор, пока не будет нажата какая-либо из кнопок клавиатуры от К1 до К16, и тогда произойдет переход к подпрограмме временной задержки. Снова нажмите и отпустите кнопку СБРОС. Порт 002 индицирует код 303Q. Это код команды JMP М1, команды программы-монитора, находящейся по адресу OOOQ OOOQ. Последовательно нажимая кнопку К17 МАШИННЫЙ ЦИКЛ, можно проследить исполнение программы-монитора по машинным циклам. Просмотреть по шагам исполнение рабочей программы можно только в том случае, если она циклическая. Тогда переключатель К18 первоначально должен находиться в положении АВТОМАТ. Нажимаем и отпускаем кнопку СБРОС, вводим начальный адрес рабочей программы в соответствии с инструкцией (§ 7.4), нажимаем кнопку П и переключаем К18 в положение ШАГ. Порт 002 индицирует состояние шины данных, соответствующее исполнению машинного цикла одной из команд рабочей программы. При нажатии кнопки К17 последовательно исполняются команды рабочей программы. Правильность их исполнения проверяется по индикаторам порта 002. Не забывайте перед началом работы перевести переключатель К18 в положение АВТОМАТ и нажать кнопку СБРОС.
Появление микропроцессоров сыграло важную роль
Появление микропроцессоров сыграло важную роль в развитии вычислительной техники, средств обработки информации и управляющих устройств, являющихся основой автоматизации в различных сферах человеческой деятельности. Неослабевающий интерес к микропроцессорам объясняется такими их особенностями, как низкая стоимость, высокая надежность, компактность и значительные функциональные и вычислительные возможности, позволяющие применять их даже там, где использование средств цифровой обработки информации ранее считалось нецелесообразным. В настоящее время как у нас в стране, так и за рубежом издается весьма обширная литература по микропроцессорной технике и возможностям ее применения. И все же книг с описанием реально построенных конструкций и устройств на базе микропроцессоров явно недостаточно для удовлетворения постоянно растущего спроса на такие публикации. Именно это побудило авторов взять на себя смелость написать нечто вроде руководства, ориентированного на читателя, пожелавшего ознакомиться с работой простейшей микро-ЭВМ или заняться ее изготовлением.
Конечно, эта книга — не инструкция по изготовлению микро-ЭВМ в полном смысле этого слова, хотя в ней довольно подробно описываются конструкция вычислительной машины и ее работа. Основная цель книги — помочь разобраться в том, что такое микропроцессор, как он работает, как необходимо его программировать и как на его основе можно создавать разнообразные устройства, применяющиеся в технике, в быту, в повседневной практической деятельности.
Современный микропроцессор - довольно сложное устройство, работу которого не удается описать в деталях вне связи с системой, в составе которой он функционирует (в отличие от других более простых электронных приборов, таких например, как электронная лампа). К сожалению, в специальной литературе микропроцессор в подавляющем большинстве случаев описывается автономно. Из такого описания не всегда понятны детали его работы и особенности применения.
Предлагаемая читателям книга в некоторой степени восполняет этот пробел. Авторами описывается схема простейшей микро-ЭВМ как пример простейшей микропроцессорной системы. Будет или не будет читатель строить эту микро-ЭВМ — не так уж и важно. Важно, что на базе этой конкретной микропроцессорной системы он получит необходимые сведения о работе микропроцессора и сможет построить в дальнейшем аналогичные системы по своему выбору и вкусу.
Выступая в 1970 г. с докладом о перспективах развития и применения вычислительной техники на конференции в Московском физико-техническом институте, академик В. М. Глуш-ков говорил о том, что недалек тот день, когда вычислительная техника шагнет в повседневную жизнь и буквально каждая семья сможет получить доступ к вычислительным ресурсам. Во времена господства универсальных вычислительных машин-гигантов это высказывание представлялось по меньшей мере весьма смелым прогнозом. Но прошли годы и вот уже микроэлектроника стучится в двери наших квартир, появляется на рабочих местах в учреждениях, приближая тот день, когда вычислительные машины станут для нас столь же привычными в быту, как холодильники, стиральные машины и цветные телевизоры.
Отсюда ясно, как важна популяризация тех знаний, которые раньше были необходимы лишь специалистам. В особенности это касается знаний в следующих трех областях: математической логике, программировании и электронике. Но даже специалисты, равным образом ориентирующиеся в указанных трех областях, в настоящее время встречаются не так уж часто. Пользователи ЭВМ прошлых поколений практически никогда не сталкивались с аппаратной реализацией своих программ, а специалисты в области электроники, как правило, не занимались программированием. Поэтому широкая подготовка специалистов нового типа — насущная проблема сегодняшнего дня.
Данная книга вовсе не претендует на роль учебного пособия с изложением основ математической логики, электроники и программирования. Цель у книги другая — привлечь широкий круг читателей к относительно новому, увлекательному миру конструирования микроэлектронных устройств на базе микропроцессорной техники, сфера применения которых не ограничивается традиционными вычислительными задачами.
Создание программируемых устройств с широкими функциональными возможностями - микроэлектронных помощников ( пусть на первое время совсем простых), повышающих эффективность интеллектуальной деятельности на производстве и дома, - вот, может быть, самая интересная и многообещающая область исследований в наш век всеобщей компьютеризации.
Необходимо заметить, что авторы вовсе не хотели бы склонить будущих конструкторов к попытке воспроизвести копию промышленной микро-ЭВМ. Любительским конструкциям трудно тягаться с изделием, выпускаемым промышленностью. Тем не менее широкое привлечение любителей к микроэлектронному конструированию позволит в ряде случаев найти те оригинальные технические решения, которые в дальнейшем могут быть использованы целиком в конструкциях соответствующих промышленных изделий или положены в их основу. Для чтения книги не требуется специальных знании в области микропроцессорной техники. Тем не менее предполагается, что читатель сможет, пользуясь приведенными в книге рекомендациями самостоятельно собрать простую ЭВМ из малодефицитных деталей, отладить ее, проделать на ней ряд упражнении по программированию решения различных задач, а также изучить способы подсоединения дополнительных внешних устройств, значительно расширяющих возможности построенной машины. Хотя описываемая микро-ЭВМ построена по универсальной схеме, допускающей наращивание аппаратуры до широких пределов (скажем, до масштабов персональной ЭВМ), основное назначение ее - учебное, т. е. позволяющее в максимально короткое время получить навыки основ программирования и проектирования микропроцессорных систем. С этой целью читателю дается весь необходимый материал, приводятся реальные схемы с реальными характеристиками. В отличие от большинства подобных изданий в книге описываются не только отдельные узлы машины, но и целиком вся ее схема. Выводы всех микросхем промаркированы, и каждая микросхема описана в деталях. Поэтому читателю нет необходимости обращаться к зачастую труднодоступным справочным источникам.
Главы 1-4, а также приложение 1 (система команд микро-процессора КР580ВМ80А) написаны В.Н. Захаровым, гл. 5- 7 написаны А. Л. Дудко, а гл. 8-10 - Л. Н. Буреевым. Принципиальная электрическая схема описываемой микро-ЭВМ (приложение 2) разработана А. Л. Дудко, а описываемые схемы сопряжения микро-ЭВМ с дополнительными внешними устройствами (в том числе с бытовыми телевизором и магнитофоном) , а также схема статического аппаратного эмулятора разработаны Л. Н- Буреевым. Предисловие к книге написано авторами совместно.
Авторы позволяют себе надеяться, что книга окажется полезной не только будущим конструкторам микро-ЭВМ, но и всем тем, кто стремится расширить свои знания в области применения микропроцессорной техники.
Авторы выражают признательность рецензенту канд. техн. наук В. Ф. Корнюшко и редактору проф. Д. А. Поспелову за доброжелательную критику и замечания, которые способствовали улучшению содержания и стиля книги.
Все замечания по содержанию книги, методике изложения, а также все предложения по усовершенствованию схемы и конструкции описываемой машины авторы примут с благодарностью. Пожелания и замечания просьба направлять по адресу: 113114, Москва, М-114, Шлюзовая наб., 10, Энергоатомиздат.
Авторы
ПРОГРАММА-МОНИТОР
Программа-монитор (или просто монитор) — это программа, которая управляет работой микро-ЭВМ. Монитор выполняет следующие функции: подготовку к работе устройств микро-ЭВМ после включения питания и повторных перезапусков, обслуживание индикаторов и клавиатуры, выполнение указаний пользователя по реализации программы. Микро-ЭВМ выполняет программу-монитор все то время, когда она не выполняет какую-либо программу пользователя.
Ниже приведен полный текст программы-монитор. При первом прочтении можно пропустить дальнейший текст данного параграфа, но при отладке ПМ-ЭВМ и работе с нею необходимо четкое понимание функционирования монитора, для чего и приводится ее детальное описание.
Текст программы состоит из трех столбцов. Первый столбец содержит адреса ячеек памяти, второй столбец - содержимое этих ячеек в восьмеричном коде, а третий столбец — ассемблерную запись программы.
После подачи всех необходимых напряжений на микросхемы и микропроцессор микро-ЭВМ начинает работать. При этом содержимое всех регистров микропроцессора и ячеек ОЗУ устанавливается случайным образом. Поэтому в микро-ЭВМ происходит в этот момент неуправляемый и непредсказуемый процесс. Для того чтобы остановить его и пустить по вполне определенному руслу, в микропроцессоре КР580ИК80А имеется вход RESET (вывод 72). На этот вход подается высокий уровень, который вырабатывается при помощи специальной схемы сразу после включения питания (см. гл. 6) или при нажатии на кнопку СБРОС. По этому сигналу микропроцессор заносит в счетчик команд (PC) во все разряды нули. Это означает, что следующая команда будет считываться из ячеек с нулевым адресом. По этому адресу размещается первая команда монитора. Для того чтобы монитор уже находился в памяти микро-ЭВМ после ее включения, он помещается в ПЗУ. Кроме того что монитор занимает память ПЗУ, он, как и всякая программа, при своей работе использует ячейки ОЗУ и регистры микропроцессора. Какие ячейки ОЗУ и как он использует, будет ясно после разбора самой программы.
Итак, первая команда монитора, расположенная по адресу 000000Q, - команда безусловного перехода JMP Ml, которая передает управление команде, расположенной по адресу 000070Q. Команда JMP Ml занимает три байта. Байты с 000 003 Q по 000 067 Q не используются. Эту область ПЗУ следует оставить незапрограммированной, так как она может понадобиться для расширения возможностей микро-ЭВМ по работе с прерываниями. Под меткой Ml (по адресу 000070Q) находится команда LXI SP, 010000Q. Эта команда загружает константу 010000Q в указатель стека (SP), чтобы он указывал на первую несуществующую ячейку ОЗУ. Тогда при первом занесении данных в стек (ячейки которого располагаются в ОЗУ) SP будет увеличен на единицу и будет указывать последнюю ячейку физически существующего ОЗУ, куда и поместятся данные. При дальнейших обращениях стек будет "расти" от старших адресов памяти к младшим при записи в него и "уменьшаться" при считывании. Если пользователь далее будет правильно использовать команды записи и считывания (их число должно быть одинаковым), никогда не произойдет ошибки обращения к стеку. Обратим здесь внимание на то, что восьмеричная константа, записанная в ассемблерной строке под меткой Ml, приобрела другую кодировку при записи в память в ячейки 000071Q и 000 072 Q. Чтобы понять, что произошло при переходе от записи на ассемблере к реальному расположению константы в памяти, запишем сначала эту константу в двоичном коде: 010000Q равняется 0001000000000000В. Если теперь разбить это 16-разрядное двоичное число на два байта, то получится 00010000В и 00000000В, или в восьмеричной системе 020Q и OOOQ. Эти числа и записаны в ячейки с адресами 000 072 Q и 000071Q соответственно. Этот перевод константы от той формы, в которой она записана на ассемблере, к реальному расположению в памяти будет встречаться еще во многих командах монитора.
Следующая команда LXI Н, 006 000 Q загружает пару регистров H-L константой 006 000Q.
Эта константа является адресом первой ячейки ОЗУ. Загрузка SP и H-L начальными значениями выполняется только один раз при входе в монитор (после сигнала RESET). В дальнейшем эта пара регистров будет использоваться для хранения адреса ячейки памяти, с которой в данный момент работает программист.
Итак, SP установлен таким образом, что поле стека будет находиться в старших адресах ОЗУ, а в H-L находится адрес первой ячейки ОЗУ. Следующие семь команд, занимающие ячейки с 000076Q по 000110Q, служат для того, чтобы высветить на индикаторах адрес ячейки памяти, с которой в настоящее время работает программист, и ее содержимое. Команда М2: MOV С, М (адрес 000 076 Q) переписывает данные из ячейки, адрес которой хранится в H-L (при первом проходе данного места программы это адрес первой ячейки ОЗУ), в регистр С. Далее команда MOV A, H переписывает данные из регистра Н в аккумулятор, чтобы с помощью следующей команды OUT 001Q вывести ее на индикаторы с адресом 001Q. Данные переписываются в аккумулятор перед их выводом этой командой (в двух последующих аналогичных случаях применяется команда OUT OOOQ и OUT 002Q), потому что команда OUT может переслать в устройство вывода только содержимое аккумулятора. После выполнения команды OUT 001 Q на соответствующих индикаторах высветится содержимое регистра Н. Каждый светодиод, которому соответствует единица в каком-либо разряде регистра Н, загорится, а каждый светодиод, которому соответствует нуль в каком-либо разря-пе Н погаснет. Аналогично на светодиодах порта OOOQ высветится содержимое регистра L (команды MOV A, L и OUT OOOQ) и порта 002 Q - регистра С (команды МЗ: MOV А, С и OU 1 00?Q) После этого выполняется команда М4: CALL SKL, которая вызывает подпрограмму SKL, обслуживающую клавиатуру. Прежде чем переходить к описанию этой подпрограммы, опишем еще одну подпрограмму DL, которая вызывается из подпро-граммы SKL.
Подпрограмма DL служит для задержки выполнения программы на 10 мс.
Такие задержки часто необходимы при работе с внешними устройствами, быстродействие которых значительно меньше, чем у микро-ЭВМ. Поэтому эта подпрограмма, находящаяся и используемая в мониторе, написана таким образом что сохраняет значение всех регистров и ячеек памяти во время своей работы. Она может быть вызвана из других программ пользователя. Подпрограмма DL начинается с ячейки 000 277 Q Команды PUSH PSW и PUSH D переписывают в стек содержимое аккумулятора, регистра состояний и пары регистров D-E для того, чтобы освободить эти регистры и использовать далее для своей работы, а перед выходом из подпрограммы восстановить их старое содержание. Затем пара регистров D-E загружается с помощью команды LXI D, 001 016Q константой 001016Q. Следующие пять команд образуют цикл. Команда N:DCX D уменьшает содержимое пары регистров D-E, вычитая из хранящегося в них двоичного числа единицу. Затем старший байт пары D-E командой MOV A, D переписывается в аккумулятор Далее команда ORA E выполняет поразрядно логическую операцию ИЛИ над содержимым аккумулятора и регистра Е и результат этой операции записывается в аккумулятор, при этом если содержимое А и Е (или D и Е) не равно нулю, сбрасывается флаг признака нуля результата Z. Это приводит к тому что следующая команда JNZ N (адрес 000 307 Q) осуществляет переход к метке N (адрес 000304Q) и фрагмент программы от метки N до команды JNZ N (или, что то же самое, от адреса 000304Q до 000311Q) будет повторяться до тех пор пока в обоих регистрах D и Е не образуются нули. Следовательно этот фрагмент программы выполняется 001016Q раз. Обозначим буквой N с соответствующим индексом число машинных тактов определенной команды. Тогда число тактов при однократном выполнении этого фрагмента N0 =Ndcxd + + Nmova,d+Norae+Njnzn = 5 + 5 + 4+10= 19.
Так как длительность одного такта при использовании кварцевого резонатора на частоту 9 МГц равняется 1 мкс (см. гл. 6), время выполнения этого фрагмента 19 мкс, а чтобы выполнить его 001 016Q раз, нужно 9994 мкс.
Следовательно, выполнение этой программы задерживает выполнение программы, вызвавшей ее, примерно на 10 мс. После того как выполнено 001 016 Q циклов и содержимое D и Е равно нулю, флаг Z не устанавливается командой ОКА Е и командой JNZ N не передает управление к метке N. Тогда выполняются команды POP D и POP PSW, которые восстанавливают содержимое пары регистров D-E, аккумулятора и слова состояний. Затем команда RET передает управление команде, следующей за той командой CALL DL, которая вызвала эту подпрограмму.
Рассмотрим теперь подпрограмму SKL. Эта подпрограмма обеспечивает работу клавиатуры микро-ЭВМ. Она располагается в области ПЗУ с адресами 000 177Q - 000 276Q. При ее вызове командой CALL SKL управление передается команде, располагаемой по адресу 000177Q. Команда SKL: MVI А, 000Q загружает в аккумулятор OOOQ, а следующая команда OUT 003Q записывает содержимое младших четырех битов аккумулятора, т. е. 0000В, в четыре триггера микросхем К155ТМ7 (см. микросхему D22 на рис. 7.7). Следовательно, на выходах триггеров этой микросхемы (выводы 16, 15, 10, 9) устанавливаются нули. При этом если нажать хотя бы одну из кнопок К1 — К16, то на соответствующем входе микросхемы К589АП16 (D23) установится также нуль. Далее следующая команда М5: IN 003Q переписывает в четыре младших бита аккумулятора те логические состояния, которые в момент выполнения этой команды присутствуют на входах микросхемы D23. Затем команда ANI 017Q путем выполнения логической операции И записывает в старшие четыре разряда аккумулятора нули, а младшие четыре разряда оставляет такими, какие они были. После этого команда CPI 017Q сравнивает содержимое аккумулятора с константой 017Q (00001111В). В результате этого сравнения в регистре состояний процессора будет установлен флаг нулевого результата, если при выполнении команды М5: IN 003Q на входах микросхемы D23 (выводы 4, 7, 9, 12) были единицы, т. е. ни одна кнопка К1-К16 не была нажата. Если хотя бы одна из кнопок была нажата, то флаг нулевого результата после сравнения с 017 Q не будет установлен и следующая команда условного перехода JNZ М5 вызовет переход к метке М5.
Таким образом, фрагмент программы, начиная с метки М5 и кончая командой JNZ M5, будет выполняться до тех пор, пока все кнопки не будут отпущены. Этот фрагмент программы нужен потому, что после нажатия кнопки монитор выполняет все необходимые операции столь быстро, что пользователь еще не успевает отпустить кнопку, а программа уже готова обработать следующее нажатие кнопки. Поэтому если бы не было этого фрагмента, одно нажатие кнопки воспринималось бы как несколько нажатий, что приводило бы к неправильной работе монитора.
Прежде чем рассматривать дальше работу подпрограммы, обратим внимание на тот факт, что при нажатии кнопок К1-К16 происходит дребезг контактов, рассмотренный в гл. 6. Там же приводилась специальная схема, позволяющая устранить это явление. Дребезг контактов (см. рис. 6.14) приводит к тому, что на входе D23 вместо идеального перехода из нуля в единицу при размыкании контактов кнопки и из единицы в нуль при замыкании контактов кнопки имеется серия переходов. Каждый такой переход может быть воспринят как новое нажатие на кнопку, поэтому необходимо принять специальные меры, чтобы этого не произошло. Можно было бы снабдить каждую кнопку электронной схемой для подавления дребезга контактов (см. рис. 6.13), но можно воспользоваться программным методом, описываемым ниже. В подпрограмме для этого после команды JNZ M5 идет команда CALL DL, которая вызывает подпрограмму временной задержки. Выполнение программы задерживается на 10 мс. За это время дребезг контактов заканчивается.
Следующий фрагмент программы "ожидает" нажатия кнопки и вводит код нажатой кнопки в аккумулятор. В качестве рабочих регистров будут использоваться пара D-E и аккумулятор, поэтому командой PUSH D содержимое пары регистров D-E сохраняется в стеке. Следующие две команды М8: MVI D, 003Q и MVI Е, 376Q загружают в регистры D и Е коды 003 Q и 376Q соответственно. Затем команда М7: MOV A, E переписывает содержимое регистра Е в аккумулятор, а команда OUT 003Q переписывает четыре младших разряда аккумулятора в триггеры микросхемы D22.
После этого команда RLC сдвигает содержимое аккумулятора на один бит влево, а команда MOV Е, А переписывает его в регистр Е. Содержимое регистров и состояние выходов триггеров микросхемы D22 в двоичном коде в этот момент представлено в первой строке табл. 7.5.
Та б л и ц а 7.5
Номер строки, номер проход. |
Содержимое регистров |
Состояние выходов триггеров D22 |
||||||
|
D |
Е |
9 |
10 |
15 |
16 |
||
1 |
00 000 01 1 |
11 |
111 |
101 |
1 |
1 |
1 |
0 |
2 |
00 000 010 |
11 |
111 |
011 |
1 |
1 |
0 |
1 |
3 |
00 000 001 |
11 |
110 |
111 |
1 |
0 |
1 |
1 |
4 |
00 000 000 |
11 |
101 |
111 |
0 |
1 |
1 |
1 |
Во время четвертого прохода содержимое регистра станет равным 377Q и команда JNZ M7 (адрес 000 246Q) не осуществит переход к М7, а будет выполняться следующая за ней -команда безусловного перехода JMP M8, в результате чего команды М8: MVI D, 003Q и MVI E, 376Q загрузят регистры D и Е и фрагмент от М7: MOV A, E до JNZ M7 повторится опять 4 раза.
Этот процесс будет повторяться до тех пор, пока не нажата ни одна кнопка и на входах 4, 7, 9, 12 микросхемы D23 находятся высокие уровни, а следовательно, в аккумуляторе после выполнения команды ANI 017Q (адрес 000 233 Q) находится код 017Q. Если какая-либо кнопка нажата, то код в аккумуляторе не равен 017Q и команда JNZ Мб осуществляет переход к команде Мб: CALL DL, которая вызывает подпрограмму временной задержки для того, чтобы переждать дребезг контактов после нажатия кнопки. Значения кода в аккумуляторе после выполнения команды ANI 017Q в зависимости от кода на выходах триггеров микросхемы D22 и от того, какая нажата кнопка, приведены в табл. 7.6.
Таблица 7.6
|
Выход |
|
Вход мик- |
|
Номер строки |
триггера микро- Код в ре-схемы гистре D В22,на |
Нажатая кнопка |
росхемы D23, на котором низкий |
Код в аккумуляторе |
|
котором |
|
уровень |
|
|
низкий |
|
|
|
|
уровень |
|
|
|
1 |
9 00 000 000 |
К1 |
4 |
00001 ПО |
|
|
К5 |
7 |
00001 101 |
|
|
К9 |
9 |
00001 011 |
|
|
К13 |
12 |
00000 111 |
2 |
10 00000001 |
К2 |
4 |
00001 ПО |
|
|
Кб |
7 |
00 001 101 |
|
|
К10 |
9 |
00001 011 |
|
|
К14 |
12 |
00 000 1 1 1 |
3 |
15 00000010 |
КЗ |
4 |
00001 110 |
|
|
К7 |
7 |
00 001 101 |
|
|
К11 |
9 |
00001 011 |
|
|
К15 |
12 |
00 000 1 1 1 |
4 |
16 00000011 |
К4 |
4 |
00001 110 |
|
|
К8 |
7 |
00 001 101 |
|
|
К12 |
9 |
00001 011 |
|
|
К16 |
12 |
00000 111 |
Тогда следующая команда PUSH PSW сохраняет содержимое аккумулятора и слово состояний микропроцессора в стеке для того, чтобы можно было дальше использовать аккумулятор. Команда MOV A, D переписывает содержимое регистра D в аккумулятор, а команда ADI 004Q прибавляет к содержимому аккумулятора константу 004Q. После этого команда MOV D, А переписывает результат сложения в регистр D, а команда POP PSW восстанавливает содержимое аккумулятора и слово состояний микропроцессора, считывая их из стека. Далее команда безусловного перехода JMP M1C осуществляет переход к команде М10: RRC, т. е. повторяет фрагмент программы, начиная с М10. Теперь ясно, что в зависимости от кода в аккумуляторе (табл. 7.6) фрагмент программы от команды JNC M9 (адрес 000 260Q) до командь: JMP M10 (адрес 000 271Q) будет выполняться нуль раз для первой строки таблицы, 1 раз — для второй. 2 раза — для третьей и 3 раза — для четвертой. Это значит, что к коду в регистре (см, табл. 7.6} соответствующее число раз прибавится константа 004Q. Следовательно, в регистре D после выполнения команды JNC M9 будет содержаться код, зависящий от нажатой кнопки. Все возможные коды перечислены в табл. 7.7
Таблица 7.7
Нажатая кнопка |
Код в регистре D в двоичной системе |
Код в регистре D в восьмеричной системе |
Мнемоническое название кнопки |
К1 |
00 000 000 |
000 |
0 |
К2 |
00 000 001 |
001 |
i |
КЗ |
00000010 |
002 |
2 |
К4 |
00000011 |
003 |
3 |
К5 |
00000 100 |
004 |
4 |
Кб |
00 000 101 |
005 |
5 |
К7 |
00 000 110 |
006 |
6 |
К8 |
00 000 111 |
007 |
7 |
К9 |
00 001 000 |
010 |
СБ |
К10 |
00 001 001 |
011 |
МБ |
К11 |
00001 010 |
012 |
К |
К 12 |
00001 011 |
013 |
П |
К13 |
00 001 100 |
014 |
- |
К14 |
00001 101 |
015 |
= |
К15 |
00001 110 |
016 |
= |
К16 |
00 001 111 |
ОП |
= |
Затем командой POP Г восстанавливается то содержание регистра D, которое было до начала работы подпрограммы SKL. На этом работа подпрограммы заканчивается и команда RET загружает в счетчик команд адрес команды, следующей за той, которая вызвала переход к подпрограмме. Заметим, что подпрограммы SKL и DL не портят при своей работе содержимое каких-либо регистров. Результат своей работы — код, соответствующий нажатой кнопке, — подпрограмма SKL возвращает в аккумулятор. Итак, была нажата кнопка, подпрограмма SKL выработала код, соответствующий этой кнопке, и поместила его в аккумулятор. Работа монитора продолжается с команды CPI 010Q (адрес 000113Q). Эта команда сравнивает содержимое аккумулятора с константой 010Q. Это сравнение происходит путем вычитания из кода, хранящегося в аккумуляторе, кода 010Q (по правилам двоичного вычитания), хотя содержимое аккумулятора не портится. При этом если значение двоичного числа, которое выражено кодом, содержащимся в аккумуляторе, меньше 010Q (или 8D), то по правилам двоичного вычитания происходит заем и устанавливается флаг переноса С, если больше или равно 010Q - то флаг не устанавливается. Затем команда JNCM11 осуществляет переход к метке МП (адрес 000134Q), если код нажатой кнопки больше или равен 010Q, если нет, то выполняются команды, следующие за JNC МП. Коды, меньшие 010Q, соответствуют кнопкам К1-К8 и обрабатываются МОНИТОРОМ ПО-ОСОбому, потому что эти кнопки кодируют восьмеричные цифры от 0 до 7 (см. табл. 7.7) для ввода в микро-ЭВМ. Остальным кнопкам присвоены специальные функции, которые выполняются монитором (см. ниже).
Рассмотрим, как происходит ввод восьмеричного числа в микро-ЭВМ. Напомним, что регистр С используется для временного хранения введенного числа до того момента, как онс будет переписано в память по адресу, хранящемуся в паре регистров H-L. После того как была нажата одна из кнопок К1-К8, программа переходит к команде MOV В, А (адрес 000 120Q), которая переписывает код нажатой кнопки из аккумулятора в регистр В.
Затем код, содержащийся в регистре С ( этот код был высвечен на индикаторах порта OOOQ), переписывается в аккумулятор командой MOV А, С и сдвигается тремя командами RAL на три бита влево. После этого с помощью команды ANI 3 70Q очищаются три младших бита, а с помощью команды ORA В на эти места записываются новые трк разряда кода нажатой кнопки. В результате в аккумуляторе готов новый код для индикации на индикаторах порта OOOQ, Далее содержимое аккумулятора переписывается в регистр С командой MOV С5 А, а затем команда JMP M3 осуществляет переход к фрагменту программы, реализующему индикацию.
На индикаторе порта OOOQ пользователь видит следующее. Если до нажатия кнопки состояния индикаторов были ХО — Х7 (рис. 7.10,д), то после нажатия эти состояния сдвигаются на три индикатора влево (причем Х5 — XV пропадают), а на месте ХО, XI, Х2 высвечивается код вновь нажатой кнопки (рис. 7.10,6, табл. 7.8).

Рис. 7.10. Состояния индикаторов порта вывода с адресом OOOQ:
а - до нажатия какой-либо из кнопок 0-7; б - после нажатия какой-либо из кнопок 0 — 7
Следовательно, нажав три необходимые кнопки из кнопок К1-К8, пользователь может набрать на восьми индикаторах порта OOOQ любое нужное ему двоичное число длиной 1 байт.
Рассмотрим теперь, какие специальные функции и как выполняются монитором.
Таблица 7.8
Кнопка |
|
Код в разрядах |
|
Y2 |
Y1 |
YO |
|
К1 |
0 |
0 |
0 |
К2 |
0 |
0 |
1 |
КЗ |
0 |
1 |
0 |
К4 |
0 |
1 |
1 |
К5 |
1 |
0 |
0 |
Кб |
1 |
0 |
1 |
К7 |
1 |
1 |
0 |
К8 |
1 |
1 |
1 |
Смысл этих действий в том, что байт, хранящийся в регистре С, станет старшим байтом адреса той ячейки, с которой работает пользователь. Этот новый старший байт адреса высветится на индикаторах порта 002Q, а содержимое ячейки памяти с новым адресом, составленным из нового старшего байта и старого младшего байта адреса, высветится на индикаторах порта OOOQ. Таким образом, функция, выполняемая монитором при нажатии на кнопку К9 (СБ — старший байт), — это формирование старшего байта нового адреса. Его значение может быть предварительно введено с помощью кнопок К1 - К8 (цифры 0 — 7) в регистр С и высвечено на индикаторах порта OOOQ. На индикаторах пользователь видит следующее (рис. 7.11). Показания индикаторов порта OOOQ после нажатия СБ перемещаются на индикаторы порта 002Q (рис. 7.11,6), на индикаторах порта OOOQ после нажатия СБ высвечивается содержимое ячейки памяти с адресом, старший байт которого высвечен на индикаторах порта 002Q, а младший — порта 001Q.
Аналогичную функцию, только по формированию младшего байта адреса, выполняют кнопка К10 {МБ — младший байт) и связанный с ней фрагмент программы от команды М12: CPI 011Q до JMP M2. При нажатии на эту кнопку содержимое регистра С, высвеченное на индикаторах порта OOOQ, переписывается в регистр L, становясь младшим байтом адреса той ячейки, с которой работает пользователь, и высвечивается на индикаторах порта 001Q (рис. 7.12). На индикаторах порта OOOQ при этом высвечивается содержимое ячейки памяти с адресом, составленным из нового младшего байта и старого старшего байта.
Следующая кнопка К11 (И — индикация содержимого ячейки памяти и его изменение) выполняет две функции: просмотр содержимого ячеек памяти и изменение содержимого на новое в случае необходимости. При нажатии на эту кнопку подпрограмма SKL вырабатывает код 012Q, поэтому срабатывают команды условного перехода JNZ M12 и JNZ M13. После этого команда М13: CPI 012Q устанавливает флаг равенства нулю и команда JNZ M14 не осуществляет переход к М14.
Затем команда MOV M, С переписывает содержимое регистра С (это содер жимое пользователь видит на индикаторах порта OOOQ) в ячейку памяти, адрес которой содержится в паре регистров H-L (этот адрес пользователь видит на индикаторах портов 002Q и 001Q). Следующая команда INX Н увеличивает содержимое Н-Ьна единицу, а затем происходит безусловный переход (команда JMP М2) на фрагмент программы, который высвечивает на индикаторах адрес и содержимое следующей по порядку возрастания двоичных адресов ячейки памяти. Теперь ясно, что если нажимать только кнопку К11, то можно последовательно просматривать содержимое ячеек памяти в порядке возрастания их адресов (адрес высвечивается на индикаторах порта 002Q и 001Q, а содержимое — на OOOQ) ; но если между нажатием на кнопку К11 с помощью кнопок К1-К8 ввести в регистр С и на индикаторы порта OOOQ какое-либо двоичное число, то последующим нажатием на К11 можно переписать это число в текущую ячейку памяти и перейти к индикации адреса и содержимого следующей ячейки памяти.

Рис. 7.11. Состояния индикаторов портов вывода:
а - до нажатия кнопки СБ; б - после нажатия кнопки СБ
Кнопка К12 (П — пуск программы) выполняет функцию запуска программы, записанной пользователем в ОЗУ с адреса, который содержится в паре регистров H-L и высвечен на индикаторах портов 002Q и 001Q. При нажатии этой кнопки программа вырабатывает код 013Q и команды JNZ Ml2, JNZ M13, JNZ M14 осуществляют переход к М14: CPI 013Q. Эта команда устанавливает флаг равенства нулю, команда JNZ M4 не осуществляет переход к М4, и следующая команда PCHL загружает в счетчик команд содержимое пары регистров H-L, что вызывает переход к выполнению команды, расположенной по этому адресу.

Рис. 7.12. Состояния индикаторов портов вывода:
а - до нажатия кнопки МБ; б - после нажатия кнопки МБ
Кнопки К13-К16 не задействованы, и монитор не выполняет никаких функций при нажатии на них. Эти кнопки оставлены для дальнейшего расширения функций монитора.
Программа-монитор:
000000303 JMPM1
000 001 070
000 002 000
000070061 Ml: LXISP, 010 OOOQ
000071 000
000 072 020
000073041 LXIH.0060000
000 074 000
000 075 004
000076 116 М2: MOV С М
000077174 MOV A, M
000100323 OUT 0010
000 101 001
000102175 MOVA.L
000103323 OUT 0000
000 104 000
000105171 МЗ: MOV А, С
000106323 OUT 002Q
000 107 002
000110315 М4: CALL SKL
000 111 175
000112000
000113376 СР1 010Q
000 114 010
000115322 JNCM11
000 116 134
000117 000
000120107 MOVE, A
000121 171 MOV А, С
000122027 RAL
000 123 027 RAL
000124027 RAL
000125346 ANI 370Q
000 126 370
000127260 OR А В
000130117 MOV С, А
000 131 303 JMPM3
000 132 105
000 133 000
000134376 Mil: CPI 010Q
000 135010
000136302 JNZM12
000137 145
000 140 000
000 141 141 MOVH, С
000142303 JMPM2
000 143 076
000 144 000
000145376 M12: CPI011Q
000 146 Oil
000147302 JNZM13
000 150 156
000 151 000
000152151 MOVL, С
000153303 JMPM2
000 154 076
000 155 000
000156376 M13: CPI 012Q
000 157 012
000160302 JNZM14
000 161 170
000 162 000
000163161 MOVM, С
000 164 043 INX H
000 165 303 JMPM2
000 166 076
000 167 000
000170376 M14: CPI 013Q
000 171 013
000172302 JNZ M4
000 173 110
000 174 000
000175351 PCHL
000176000
000177076 SKL: MVI A, OOOQ
000 200 000
000201323 OUT003Q
000 202 003
000203333 M5: IN 003Q
000 204 003
000205346 ANI 017Q
000206 017
000207376 CPI017Q
000210 017
000 211 302 JNZM5
000 212 203
000 213 000
000214315 CALLDL
000 215 277
000 216 000
000217325 PUSH D
000 220 026 M8: MVI D, 003Q
000 221 003
000222036 MVIE, 376Q
000 223 376
000224173 M7: MOV A, E
000225323 OUT003Q
000 226 003
000 227 007 RLC
000230137 MOVE, A
000231333 IN003Q
000 232 003
000233346 ANI017Q
000 234 017
000235376 CPI017Q
000236 017
000 237 302 JNZ M6
000 240 254
000 241 000
000 242 025 DCR D
000 243 172 MOV A, D
000 244 376 CPI 377Q
000 245 377
000 246 302 JNZ M7
000 247 224
000 250 000
000251303 JMPM8
000 252 220
000 253 000
000254315 Мб: CALL DL
000 255 277
000 256 000
000257017 M10: RRC
000 260 322 JNC M9
000261 274
000 262 000
000 263 365 PUSH PSW
000264172 MOV A, D
000 265 306 ADI 004Q
000 266 004
000 267 127 MOV D, A
000270361 POP PSW
000271303 JMPM10
000 272 257 000 273 000
000274172 M9: MOV A, D
000275321 POP D
000276311 RET
000 277 365 DL: PUSH PSW
000 300 325 PUSH D
000301021 LXID, 0010160
000302016 000303 002
000 304 033 OCX D
000305 172 MOV A, D
000 306 263 ORA E
000 307 302 JNZ N
000310304 000311 000
000312321 POPD
000313361 POP PSW
000314311 RET
Теперь можно сформулировать инструкцию по работе на микро-ЭВМ.
ПРОГРАММИРОВАНИЕ ПМ-ЭВМ
Как уже отмечалось в гл. 3, ПМ-ЭВМ не имеет программного обеспечения, позволяющего пользоваться для решения задач языками высокого уровня. Поэтому запись программы для ПМ-ЭВМ осуществляется пользователем на машинном языке с применением команд описанных выше групп.
Полный перечень команд, приведенных в сжатой форме в табл. 4.1 — 4.3, должен быть хорошо известен пользователю, решающему свою задачу. Это даст ему возможность варьировать при составлении своих программ различными командами и способами их включения в программы с целью составления программ либо более коротких, либо экономящих используемую память, либо сокращающих время счета.
В ряде случаев способ решения той или иной задачи становится более понятным, если он представлен в виде специальной схемы, называемой схемой алгоритма решения и имеющей вид ориентированной сети с вершинами различных типов, соответствующими используемым операциям.
В качестве примера рассмотрим решение задачи суммирования первых 20 чисел натурального ряда, схема которой приведена на рис. 4.13,а.
Для реализации первых двух операторов (не считая Start) можно воспользоваться двухбайтовой командой MVI г, осуществляющей непосредственную загрузку в какой-либо регистр данных, содержащихся во втором байте команды (в данном случае - чисел OD). Для осуществления операции S = S + N можно воспользоваться командой ADD r, выполняющей суммирование содержимого какого-либо регистра с содержимым аккумулятора и запись результата в аккумулятор. Для выполнения операции N = N + 1 в машинном языке ПМ-ЭВМ предусмотрена специальная команда INR г, осуществляющая увеличение на единицу содержимого какого-либо регистра. Остается еще организовать в программе цикл с использованием условного оператора. Для этой цели подошла бы команда JNZ, осуществляющая переход в программе при отсутствии нуля в результате какой-либо предшествующей переходу операции (в нашем случае — операции вычитания: 21 — N).
Однако этого можно и не делать, построив несколько иначе схему решения задачи. Вместо того чтобы суммировать последовательно увеличивающиеся числа от О D до 20 D, можно суммировать последовательно уменьшающиеся числа от 20 D до OD. Тогда содержимое регистра, хранящего число N, на некотором шаге выполнения программы обратится в нуль и этот результат можно будет использовать при организации условного перехода.
Итак, новая схема алгоритма может быть построена следующим образом.
Шаг 1. Заносим число О D в аккумулятор (А).
Шаг 2. Заносим число 20 D в какой-нибудь регистр, например в регистр D.
Шаг 3. Суммируем содержимое регистров А и D.
Шаг 4. Уменьшаем содержимое регистра Она единицу.
Шаг 5. Если содержимое регистра Вне равно нулю, осуществляем переход к шагу 3; в противном случае переходим к следующему шагу.
Ш а г 6. Переписываем содержимое регистра А в какой-нибудь из портов вывода, например в порт Р0оо-
Ш а г 7. Конец работы программы.
Соответствующая схема представлена йа рис. 4.13,6.
Приступим к программированию этой схемы. Для этой цели нам понадобятся все указанные выше команды, за исключением команды INR г (увеличение содержимого регистра на единицу). Вместо нее следует взять команду DCR г (уменьшение содержимого регистра на единицу), которая будет использована применительно к регистру D. Кроме того, нам будут необходимы еще следующие две команды: OUT — двухбайтовая команда вывода данных из аккумулятора в порт вывода, определяемый адресом, содержащимся во втором байте команды, и однобайтовая команда HLT — останов программы. Коды всех используемых команд можно взять из таблицы, приведенной в приложении 1.
Для размещения всей программы нам понадобятся 12 ячеек памяти с номерами от 014QOOOQ до 014Q013Q. В первые две ячейки с номерами 014 000 и 014 001 поместим оба байта первой команды MVI A OOOQ загрузки аккумулятора (регистра А) числом OD. При этом в первую ячейку поместим восьмеричный код команды 076, а во вторую — содержимое второго байта этой команды — восьмеричный код числа OD (число 000).
В следующие две ячейки с номерами 014 002 и 014 003 поместим два байта следующей команды, загружающей регистр D десятичным числом 20. Восьмеричный код этой операции 026 будет находиться в первой ячейке, а восьмеричный код 024 десятичного числа 20 - во второй и т. д. В последнюю ячейку с номером 014 013 поместим восьмеричный код 166 команды HLT, осуществляющей останов программы. В табл. 4.5 приведен полный текст составленной программы вместе с комментарием. При организации цикла использована специальная метка Ml, указывающая на операцию, которую следует выполнить, если содержимое регистра D не равно нулю.

Рис. 4.13. Схемы алгоритмов для задачи сложения первых 20 чисел
Таблица 4.5
Адрес ячейки |
Код операции или содержимого второго или третьего байта |
Метка |
Мнемокод |
Комментарий |
014 000 |
076 |
|
MVI A OOOQ |
Загрузка регистра А числом OD |
014 001 |
000 |
|
|
Число OD |
014 002 |
026 |
|
MVI D 024Q |
Загрузка регистра D числом 20 D |
014003 |
024 |
|
|
Число 20 D |
014 004 |
202 |
Ml: |
ADDD |
Сложение содержимого регистров А и D |
014005 |
025 |
|
DCRD |
Уменьшение на единицу содержимого регистра D |
014 006 |
302 |
|
JNZM1 |
Переход к метке М 1 при отсутствии нуля |
014 007 |
004 |
|
|
Метка М 1 (адрес) |
014 010 |
014 |
|
|
Метка М 1 (адрес) |
014 011 |
323 |
|
OUT OOOQ |
Вывод данных из регистра А в порт рооо |
014 012 |
000 |
|
|
Номер порта |
014013 |
166 |
|
HLT |
Останов программы |
Перейдем теперь к рассмотрению работы конкретных схем отдельных функциональных блоков ПМ-ЭВМ, назначение которых было определено ранее.
ПРОСТОЙ ГРАФИЧЕСКИЙ ДИСПЛЕЙ
Запоминающее устройство на 256 слов по 8 бит позволяет отображать 2048 точек на экране в виде сетки 64x32 элемента. В этом случае знакогенератор не требуется, поскольку каждый бит из памяти прямо отображается без преобразования. Схема такого устройства индикации дана на рис. 10.9. Каждая точка формируется из восьми соседних горизонтальных строчек развертки.
Логика работы ТВ-дисплея довольно проста и может быть без труда реализована даже на такой простой вычислительной машине, как ПМ-ЭВМ. Вся сложность в том, что быстродействие ПМ-ЭВМ, да и многих других машин более высокого класса, недостаточно, чтобы уложиться в жесткие рамки телевизионного стандарта. Выход заключается либо в создании специализированного периферийного процессора — контроллера ЭЛТ, каковыми являются рассмотренные выше устройства (промышленностью выпускается специализированная микросхема КР580ВГ75 - программируемый контроллер ЭЛТ), либо в отступлении от стандарта, если требования к информационной емкости дисплея, как в нашем случае, не велики.
Покажем, что, не используя практически никакой дополнительной аппаратуры, можно реализовать вывод поля памяти объемом 256 байтов (сетка 64x32 элемента) на экран обычного осциллографа. Подключим к ПМ-ЭВМ схему, показанную на рис. 10.10. Здесь порт 000 служит для параллельной выдачи содержимого ячеек памяти. Сдвиговый регистр преобразует параллельный код в последовательный. Сигнал с выхода сдвигового регистра может быть подан непосредственно на вход Z модуляции яркости осциллографа. Порт 001 служит для вывода синхроимпульса строчной развертки Н, а порт 002 — для вывода синхроимпульса кадровой развертки V. Кадровая и строчная развертки могут быть сформированы с помощью простых пассивных цепей непосредственно из соответствующих синхроимпульсов. Выдаваемые портами 000, 001 и 002 сигналы формируются с помощью следующей программы:
014 000 176 Ml: MOV A, M 7 - количество тактов
014 001 323 OUT,OOOQ10 014 002 000
014 003 167 MOV M, А 7
014 004 000 NOP 4
014 005 054 INR L 5
014 006 035 DCRE 5
014 007 302 JNZ,M1 10
014 010 000
014 011 014
Итого: 48 тактов

Рис. 10.9. Схема приставки для формирования графической информации на экране ТВ
Эта часть программы выводит в порт 000 очередной байт из памяти. Команды MOV M, А и NOP вставлены, чтобы получить выраженную в тактах длительность этого фрагмента программы кратной восьми. В итоге получаем 48 тактов. Это значит, что стоящий на выходе сдвиговый регистр должен выдавать очередной разряд числа через каждые 6 тактов, чтобы завершить выдачу всех восьми разрядов за 48 тактов. После восьми циклов прохождения первого фрагмента программы содержимое регистра Е станет равным нулю и начнет исполняться следующий фрагмент программы, предназначенный для выдачи синхроимпульса строчной развертки, здесь же происходит и загрузка регистра Е:

Рис. 10.10. Схема приставки для формирования графической информации на экране осциллографа
014012257 XRAA 4
014013323 OUT.OOOQ 10
014 014 000
014015323 OUT,001Q 10
014016 001
014017036 MVIE, 010Q 7
014 020 010
014 021 000 NOP 4
014 022 000 NOP 4
014 023 000 NOP 4
014 024 000 NOP 4
014 025 000 NOP 4
014 026 000 NOP 4
014 027 000 NOP 4
014 030 000 NOP 4
014031000 NOP 4
014032057 СМА 4
014033323 OUT, 001Q Ю
014 034 001
014035025 DCRD 5
014036302 JNZ,M1 Ю
014037 000
014040014 ---------------
Итого: 56.тактов
Этот фрагмент программы имеет продолжительность 96 тактов, т. е. вдвое больше времени выдачи одного байта из памяти. Следовательно, общая продолжительность цикла строчной развертки составляет 48-8 + 96 = 480 тактов (т. е. 480 мкс). Количество строк определяется числом 32 (040Q), загружаемым в регистр D следующим фрагментом программы:
014041257 XRA, А 4
014042323 OUT, 002Q 10
014 043 002
014 044 026 MVI D, 040Q 7
014 045 040
014046041 LXIH, ADM 10
014 047 000
014050015
014051315 CALLINP 17
014 052 X
014053 Y
014 054 057 СМА 4
014055323 OUT, 002Q 10
014 056 002
014057303 JMP, Ml 10
014 060 000
014061 014
Итого: 72 + время исполнения ПП ввода IMP (3840 тактов)
В этом фрагменте происходит выдача синхроимпульса кадровой развертки и задается адрес начала массива информации, выводимой на дисплей. Отведя на обратный ход луча время, равное четверти длительности прямого хода луча для вертикальной развертки, получим период кадровой развертки, равный 480-32 + 480-8 = 19 200 мкс. Отсюда получаем частоту кадровой развертки, равную примерно 50 Гц, что нас вполне удовлетворяет. В последнем фрагменте программы, длящемся 3840 мкс, предусмотрен вызов ПП ввода информации в ОЗУ с клавиатуры или внешнего устройства для изменения картинки на экране дисплея. Эта ПП должна иметь строго определенную длительность, необходимую для стабильности параметров развертки. Если в этом промежутке времени исполняются другие программы неизвестной длительности, надо организовать систему с внешними прерываниями.
РЕАЛИЗАЦИЯ ДИАЛОГОВОГО РЕЖИМА
Диалоговый режим реализует
взаимодействие человека с вычислительной машиной. Наиболее употребительными техническими средствами, обеспечивающими обмен информацией между человеком и машиной в процессе диалога, являются клавишные устройства и устройства визуального отображения (дисплеи). Поскольку ПМ-ЭВМ имеет, хотя и ограниченные по своим возможностям, клавиатуру и светодиодную индикацию, можно попытаться организовать на ней диалоговый режим. Введем в ПМ-ЭВМ следующую программу, предназначенную для оценки реакции оператора в диалоговом режиме:
014000041 Ml: LXI H, TAB
014001 110
014002 014
014003257 М2: XRA А
014 004 323 OUT, OOOQ
014005 000
014006323 OUT.001Q
014007 001
014010323 OUT, 003Q
014011 003
014012107 MOV В, А
014 013 117 MOVC, A
014 014 057 CMA
014015323 OUT, 002Q
014 016 002
014017176 MOV A, M
014 020 267 ORA A
014021312 JZ,M1
014 022 000
014023014
0140243-15 M3: CALL DL
014025 277
014 026 000
014027075 DCRA
014030302 JNZ, M3
014031 024
014 032014
014033323 OUT, 002Q
014034 002
014035333 M4: IN, 003Q
014 036 003
014037057 CMA
014 040 267 ORA A
014041312 JZ.M6
014042061
014 043 014
014044171 MOV А, С
014045323 OUT, OOOQ
014 046 000
014047170 MOV А, В
014050323 OUT, 001Q
014051 001
014052333 M5: IN, 003Q
014 053 003
014 054 057 CMA
014055267 ORA A
014056302 JNZ,M5
014 057 052
014 060014
014061315 M6: CALLDL
014062277
014 063 000
014064171 MOV А, С
014 065 074 INR A
014 066 047 DAA
014067117 MOVC, A
014070170 MOV А, В
014071316 ACI, OOOQ
014 072 000
014073047 DAA
014074107 MOVB.A
014075376 CPI,005Q
014076005
014077332 JC, M4
014 100035
014 101 014
014102043 INXH
014 103 303 JMP, M2
014 104 003
014 105 014
014110377 TAB:
014 111 200
014 112300
014 113 330
014 114000
После ввода программы нажмем кнопки СБРОС и П. Порт 002 высветит число 377Q (все единицы), а индикаторы портов 001 и 000 погашены. Через неизвестный оператору интервал времени индикаторы порта 002 гаснут. В этот момент оператор должен нажать любую (кроме СБРОС) кнопку клавиатуры. В портах 001 и 000 высветится выраженное в двоично-десятичном коде время задержки между погасанием индикаторов порта 002 и нажатием кнопки.
Порт 001 индицирует десятки и единицы секунд (считая слева), а порт 000 — десятые и сотые доли секунды. После отпускания кнопки через заданный интервал времени индикаторы портов 001 и 000 гаснут, а индикаторы порта 002 снова загораются, чтобы погаснуть через неизвестный интервал времени. Если ни одна кнопка не нажата после погасания индикаторов порта 002, через заданный интервал времени они снова загорятся. Если кнопка нажата до погасания индикаторов, то портами 001 и 000 индицируется нулевая задержка, т. е. не загорается ни один индикатор.
Оценки времени реакции оператора (в секундах):
0,00 — 0,09 — ошибочное значение, Вы поторопились, попробуйте снова;
0,10 — 0,14 — исключительная, почти фантастическая реакция;
0,15 — 0,19 — очень хорошая;
0,20 — 0,24 -нормальная;
0,25 — 0,29 -посредственная;
0,30 — 0,34 — плохая;
0,35 — 5,00 - Вы, вероятно, уснули.
Программа может быть использована как для оценки, так и для тренировки реакции. Время задержки гашения индикаторов порта 002 задается количеством циклов задержки, начинающихся с метки МЗ. В аккумулятор при каждом замере заносятся последовательно числа из таблицы, хранящейся в ячейках памяти, начиная с адреса, задаваемого командой LXIH. Длина таблицы практически неограниченная. Если в таблице помещено число OOOQ, то при его занесении в аккумулятор на очередном шаге происходит возврат к началу программы и, следовательно, к началу таблицы. Цена младшего разряда, задающего задержку числа, равна задержке, вырабатываемой ПП DL, т. е. 10 мс. После того как индикаторы порта 002 погашены (команда по адресу 014Q 033Q) и до нажатия кнопки с помощью счетчика, организованного на регистровой паре В, подсчитывается количество циклов обращения к ПП DL (команды, начиная с метки Мб). В счетчиках используется команда DAA, поэтому результат получается в двоично-десятичном коде. При нажатии кнопки содержимое регистровой пары В выводится в порты 001 и 000. Счетчик циклов снова задействуется после отпускания кнопки, и после достижения заданного числа циклов происходит возврат к метке М2 программы, при этом регистровая пара Н инкрементируется, в результате чего при следующем замере в качестве параметра задержки извлекается следующее число из таблицы.Параметры, определяющие работу программы, помещаются по следующим адресам: 014Q 001Q, 014Q 002Q — адрес начала таблицы; 014Q 076Q — время, в течение которого индикаторы порта 002 погашены; цена младшего разряда — около 1 с.
Обратим внимание на то, что для ввода информации с клавиатуры не использована ПП SKL, так как при обращении к ней невозможно организовать счет времени (до нажатия кнопки процессор не выходит из ПП).
10
РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
1. Нестеров П. В. Микропроцессоры 1. Архитектура и ее оценка. М.: Высшая школа, 1984.
2. Вайда Ф., Чакань А. Микро-ЭВМ: Пер. с венгер./ Под ред. В. В. Ста-шина. М.: Энергая, 1980.
3 Шаньгин В. Ф., Костин А. Е. Микропроцессоры 2. Организация вычислительных процессов на микро-ЭВМ. М.: Высшая школа, 1984.
4. Горячев А. В., Шишкевич А. А. Микропроцессоры 6. Информационно-управляющие вычислительные системы. М.: Высшая школа, 1984.
5. Клингман Э. Проектирование микропроцессорных систем. М.:
Мир, 1980.
6. Вуд А. Микропроцессоры в вопросах и ответах: Пер. с англ./ Под ред. Д. А. Поспелова. М.: Энергоатомиздат, 1985.
7. Поспелов Д. А. Логические методы анализа и синтеза схем. М.: Энергия, 1974.
8. Трачик В. Дискретные устройства автоматики: Пер. с польск./ Под ред. Д. А. Поспелова. М.: Энергия, 1978.
9. Коффрон Дж. Технические средства микропроцессорных систем: Практический курс: Пер. с англ. М.: Мир, 1983.
10. Интегральные микросхемы: Справочник/ Под ред. Б. В. Тараб-рина. М.: Радио и связь, 1983.
11. Григорьев В. Л Программное обеспечение микропроцессорных систем. М.: Энергоатомиздат, 1984.
12. Назаров Н. А. Программатор для микросхем К556РЕ4// В помощь радиолюбителю. 1983. Вып. 83. С. 26-31.
13. Хоровиц П., Хилл У. Искусство схемотехники: Пер. с англ./ Под ред. М. В. Гальперина. М.: Мир, 1983. Т. 1, Т 2.
14. Алексенко А. Г., Галицын А. А., Иванников А. Д. Премирование радиоэлектронной аппаратуры на микропроцессорах: Программирование, типовые решения, методы отладки. М.: Радио и связь, 1984.
15. Иванов Б. Н. Самодельный блок питания// В помощь радиолюбителю. 1983. Вып. 84. С. 62-73.
16. Васильев Н. П., Горовой В. Р. Микропроцессоры 5. Аппаратурно-программные средства отладки. М.: Высшая школа, 1984.
ОГЛАВЛЕНИЕ
Предисловие
Глава 1. ЧТО ТАКОЕ МИКРО-ЭВМ?
1.1. Типы микро-ЭВМ и области их применения
1.2. Можно ли самому построить ЭВМ?
Глава 2. КАКУЮ МИКРО-ЭВМ МЫ БУДЕМ СТРОИТЬ?
2.1. Основные блоки микро-ЭВМ
2.2. Содержимое центрального блока
2.3. Какую микро-ЭВМ мы будем называть "простейшей"?
Глава 3. НЕКОТОРЫЕ ОБЩИЕ СВЕДЕНИЯ О РАБОТЕ МИКРО-ЭВМ
3.1. Данные и программы
3.2. Основные логические операции
3.3. Основные арифметические операции
Глава 4. АРХИТЕКТУРА ПМ-ЭВМ И КОМПОНЕНТОВ
4.1. Конструктивное оформление ПМ-ЭВМ
4.2. Основные связи и структура шин
4.3. Общая функциональная схема ПМ-ЭВМ
4.4. Функциональная схема микропроцессора
4.5. Как микропроцессор выполняет команду?
4.6. Система команд и способы адресации
4.6.1. Группа команд пересылки данных
4.6.2. Группа арифметических команд
4.6.3. Группа логических команд
4.6.4. Группа команд переходов
4.6.5. Группа команд управления и работы со стеком
4.7. Программирование ПМ-ЭВМ
Глава 5. ИСПОЛЬЗУЕМЫЕ МИКРОСХЕМЫ
5.1. Общие вопросы
5.2. ТТЛ-входы и ТТЛ-выходы
5.3. Временные диаграммы
5.4. Микросхемы, реализующие логические функции
5.5. Микросхемы, содержащие элементы памяти
Глава 6. СТРУКТУРА И ФУНКЦИОНИРОВАНИЕ МИКРОПРОЦЕССОРНОГО БЛОКА
6.1. Микропроцессор КР580ИК80А
6.2. Синхронизация
6.3. Шины адреса, данных и управления
6.4. Тактовый генератор и схема пошагового исполнения программ
Глава 7. СХЕМЫ И ОСОБЕННОСТИ РАБОТЫ ОСНОВНЫХ БЛОКОВ ПМ-ЭВМ
7.1. Общие положения
7.2. Структура памяти
7.3. Клавиатура и индикация
7.4. Программа-монитор
7.5. Инструкция по работе на микро-ЭВМ
Глава 8. СБОРКА И ОТЛАДКА ПМ-ЭВМ
8.1. Этапы сборки и проверки узлов
8.2. Статический аппаратный эмулятор
8.3. Отладка в рабочем режиме
8.4. Подготовка ПМ-ЭВМ к работе
Глава 9. РАБОТА С ПМ-ЭВМ
9.1. Программируемый калькулятор
9.2. Программируемое управляющее устройство
9.3. Сбор и обработка данных
9.4. Реализация диалогового режима
Глава 10. РАСШИРЕНИЕ ВОЗМОЖНОСТЕЙ ПМ-ЭВМ
10.1. Клавиатура и индикация
10.2. Внешняя память
10.3. Накопитель на базе бытового магнитофона
10.4. Дисплей на базе бытового телевизора или осциллографа
10.5. Простой графический дисплей
10.6. Звуковая сигнализация
10.7. Другие возможности ПМ-ЭВМ
Приложение 1. Система команд микропроцессора КР580ИК80А
Приложение 2. Схема ПМ-ЭВМ
Приложение 3. Таблица элементов, используемых в схеме ПМ-ЭВМ
Список рекомендуемой литературы
Научно-популярное издание
БУРЕЕВ ЛЕВ НИКОЛАЕВИЧ
ДУДКО АЛЕКСЕЙ ЛЬВОВИЧ
ЗАХАРОВ ВАЛЕРИЙ НИКОЛАЕВИЧ
Простейшая микро-ЭВМ. Проектирование. Наладка. Использование
Редактор Д. А. Поспелов Редактор издательства 3. И. Михеева
Художественные редакторы Т. А. Дворецкова, Ю. В. Созанская
Технические редакторы Я. Н. Хотулева, О. Д. Кузнецова
Корректор Л. С. Тимохова
ББК 32.97 Б 91 УДК 681.31-181.48
Рецензент В. Ф. Корнюшко
Буреев Л. Н. и др.
В 91 Простейшая микро-ЭВМ: Проектирование. Наладка. Использование/ Л. Н. Буреев, А. Л. Дудко, В. Н. Захаров. — М.: Энергоатомиздат, 1989. — 216 с.: ил. — (Научно-попул. б-ка школьника).
ISBN 5-283-01482-7
На примере простейшей микро-ЭВМ рассматриваются возможности микропроцессорной техники. Построение описываемой в книге микро-ЭВМ доступно радиолюбителям - участникам школьного кружка. Составляющие микропроцессорной техники рассматриваются комплексно и иллюстрируются примерами.
Для широкого круга читателей, не обладающих специальной подготовкой в области электроники, вычислительной техники.
2405000000- 269
Б ---------------------- 2о4-оо
051 (01)-89
ISBN 5-283-01482-7
ББК 32.97
ИБ № 1723
Набор выполнен в издательстве. Подписано в печать с оригинала-макета 18.11.88. Т-20630. Формат 84 х 108 1/32. Бумага офсетная № 1. Гарнитура Пресс Роман. Печать офсетная. Усл. печ. л. 11,34. Усл. кр.-отт. 45,99. Уч.-изд. л. 12,95. Тираж 160 000 экз. Заказ 99, Цена 85 к.
Энергоатомиздат, ИЗ 114, Москва, М-114, Шлюзовая наб., 10.
Предприятие малообъемной книги дважды ордена Трудового Красного Знамени Ленинградского производственного объединения «Типография имени Ивана Федорова» Союзполиграфпрома при Государственном комитете СССР по делам издательств, полиграфии и книжной торговли. 192007, Ленинград, ул.Боровая, 51.
OCR Pirat
ШИНЫ АДРЕСА, ДАННЫХ И УПРАВЛЕНИЯ
Шина адреса. Микропроцессор КР580ИК80А имеет 16-разрядную шину адреса А0-А15. Эта шина выполняет две функции. Первая функция состоит в передаче адреса ячейки памяти (стека) при обращении к памяти (стеку). С помощью 16 разрядов шины адреса можно адресовать 216 ячеек памяти (т. е. 64 Кбайта). Вторая функция шины адреса — это передача адреса внешнего устройства при выполнении команд IN и OUT. В этом случае адрес внешнего устройства появляется на линиях АО-А7 и дублируется на линиях А8-А15. Так как для передачи адреса внешнего устройства используется фактически только восемь разрядов, то можно адресовать 256 (2s) различных внешних устройств ввода/вывода.
Временная диаграмма работы шины адреса приведена на рис. 6.3. Адрес появляется на шине по фронту сигнала Ф2 в такте Т1 и поддерживается три такта до фронта сигнала Ф2 в такте ТХ. Такт ТХ может быть четвертым тактом (Т4) машинного цикла, если цикл имеет более трех тактов, и может быть тактом Т1 следующего машинного цикла, если данный цикл имеет три такта.

Рис. 6.3. Временная анаграмма работы шины адреса
Каждая линия шины адреса является ТТЛ-выходом с тремя состояниями и нагрузочной способностью, равной единице. Так как шину адреса необходимо подавать на многие блоки ПМ-ЭВМ, то необходимо буферизовать ее линии, т. е. увеличить их нагрузочную способность. Для этого каждая линия подключается к входу схемы, состоящей из двух последовательно включенных инверторов (рис. 6.4). В результате на выходе второго инвертора имеется сигнал такого же уровня, как и на входе первого, но выход инвертора микросхемы К155ЛН1 имеет нагрузочную способность, равную 10.
Шина данных. Микропроцессор КР580ИК80А имеет 8-разрядную двунаправленную шину данных DO — D7. Шина данных выполняет две функции. Первая функция — передача управляющего слова, вторая — обмен информацией между регистрами микропроцессора и блоками микро-ЭВМ. Шина данных — единственная двунаправленная шина микропроцессора. Ее выходы также являются выходами с тремя состояниями.
Рассмотрим функцию передачи управляющего слова. Известно (см. § 6.2), что микропроцессор КР580ИК80А имеет 10 типов машинных циклов. Информация о том, какого типа цикл будет выполняться, передается в начале каждого цикла по линиям шины данных и называется управляющим словом. Все управляющие слова перечислены в табл. 6.2. Управляющее слово или только его часть можно запомнить с помощью дополнительных триггеров и использовать затем для формирования сигналов шины управления. Как это делается, будет описано ниже.

Рис. 6.4. Шина адреса
Для того чтобы показать, что идет процесс передачи управляющего слова, используется выход микропроцессора SYNC. Временная диаграмма приводится на рис. 6.5. Из нее видно, что передача управляющего слова по шине данных начинается по фронту сигнала Ф2 в такте Т1 и заканчивается по тому же фронту сигнала Ф2 в такте Т2.

Рис. 6.5. Временная диаграмма процесса передачи управляющего слова
Рассмотрим вторую функцию шины данных — обмен информацией между регистрами микропроцессора и блоками микро-ЭВМ. Во время циклов ВЫБОРКА КОМАНДЫ, ЧТЕНИЕ ИЗ ПАМЯТИ, ЧТЕНИЕ ИЗ СТЕКА, ВВОД С ВНЕШНЕГО УСТРОЙСТВА, ПРЕРЫВАНИЕ информация передается по шине данных в один из внутренних регистров микропроцессора из какого-либо блока микро-ЭВМ, а во время циклов ЗАПИСЬ В ПАМЯТЬ, ЗАПИСЬ В СТЕК, ВЫВОД НА ВНЕШНЕЕ УСТРОЙСТВО - из внутреннего регистра в какой-либо блок.
Для указания направления передачи информации по шине данных микропроцессор имеет два выхода: DBIN и WR. Когда информация передается в микропроцессор, то в этом машинном цикле на выходе DBIN появляется высокий уровень (рис. 6.6,а). Сигнал DBIN появляется по фронту сигнала Ф2 в такте Т2 и снимается по фронту Ф2 в такте ТЗ. Именно в это время внешние схемы должны поместить на шину данных код, который должен быть записан в один из внутренних регистров. Когда информация передается из микропроцессора, то в этом машинном цикле вырабатывается сигнал WR низкого уровня (рис. 6.6,6). Этот сигнал вырабатывается по фронту сигнала Ф1 в такте Т2 и снимается по фронту Ф1 в такте Т4 этого же машинного цикла (если цикл состоит более чем из трех тактов) или в такте Т1 следующего машинного цикла (если данный цикл состоит из трех тактов).
На шине данных ЕЮ — D7 немного ранее появления сигнала WR микропроцессор помещает данные и снимает их позднее снятия сигнала WR, поэтому внешние схемы могут использовать этот сигнал для управления записью информации.

Рис. 6.6. Временная диаграмма работы шины данных
Каждая линия шины данных имеет единичную нагрузочную способность и поэтому нуждается в буферизации. Поскольку линии шины данных двунаправленны, необходим и двунаправленный буфер. Схема такого буфера, состоящая из двух микросхем К589АП16 (D9, D10), приводится на рис. 6.7. На входы 1 микросхем D9, D10 подан низкий уровень, и поэтому они работают все время в режиме передачи информации. Направление передачи определяется уровнем буферизованного сигнала DBIN, который подключен к входам 15 микросхем D9, D10. 3аметим, что направление передачи не управляется сигналами WR и SYNC .
Если уровень сигнала DBIN высокий, то шинные формирователи передают информацию в направлении к микропроцессору (от DBO — DB7 к DO — D7), если нет — то в обратном направлении (от ЕЮ — D7 к DBO — DB7), т. е. направление передачи шинных формирователей при низком уровне сигнала DBIN соответствует тому, которое должно быть при выработке сигналов WR и SYNC.

Рис. 6.7. Шина данных

Рис. 6.8. Шина управления
Шина управления. Микропроцессор КР580ИК80А не обладает готовой шиной управления, как шиной адреса и шиной данных. Поэтому эта шина организуется с помощью дополнительной внешней схемы (микросхемы D27, D29), называемой иногда системным контроллером (СК), которая использует управляющее слово и управляющие сигналы микропроцессора (рис. 6.8). Часть разрядов управляющего слова (D4, D6, D7) фиксируется в триггерах микросхемы К155ТМ7 (D29) по срезу сигнала SYNC (рис. 6.9). Сигнал SYNC пропущен через два инвертора для увеличения нагрузочной способности (эта схема, хотя и работоспособна, не будет применяться в ПМ-ЭВМ). Позднее будет приведена схема для фиксации управляющего слова, где сигнал на управляющие входы триггеров будет вырабатываться с помощью микросхемы КР580ГФ24.
Сигналы шины управления вырабатываются с помощью сигналов с выходов триггеров микросхем D29 и сигналов DBIN и WR.

Рис. 6.9. Временная диаграмма работы фиксаторов управляющего слова
В ПМ-ЭВМ команды, данные и содержимое стека хранятся в едином блоке памяти, состоящем из ОЗУ и ПЗУ. Поэтому Для управления чтением из блока достаточно иметь один сигнал R, который будет вырабатываться при выполнении машинных циклов ВЫБОРКА КОМАНДЫ, ЧТЕНИЕ ИЗ ПАМЯТИ, ЧТЕНИЕ ИЗ СТЕКА. Назовем условно эту группу циклов ЧТЕНИЕ. Для управления записью в блок также достаточно иметь один сигнал W, который будет вырабатываться при выполнении машинных циклов ЗАПИСЬ В ПАМЯТЬ, ЗАПИСЬ В СТЕК. Эту группу назовем ЗАПИСЬ.
Для управления вводом и выводом на внешние устройства необходимы два сигнала OUT и IN, которые будут вырабатываться при выполнении циклов ВЫВОД НА ВНЕШНЕЕ УСТРОЙСТВО и ВВОД С ВНЕШНЕГО УСТРОЙСТВА соответственно.
Формирование сигналов шины управления поясним, пользуясь табл. 6.3.
Таблица 6.3
Тип цикла или группы циклов |
Вырабатываемый сигнал DBIN или WR |
Используемый разряд |
Уровень напряжения на выхо дах триггеров D29 микросхемы |
Вырабаты- ваемый сигнал шины управ- ления |
|||
9 |
1 |
16 |
10 |
||||
ЧТЕНИЕ |
DBIN |
D7 |
Н |
Н |
L |
L |
R, RW |
ЗАПИСЬ |
WR |
D4 |
L |
Н |
L |
L |
W, RW |
ВЫВОД НА ВНЕШНЕЕ УСТРОЙСТВО |
WR |
D4 |
L |
L |
Н |
L |
OUT |
вводе ВНЕШНЕГО УСТРОЙ- СТВА |
DBIN |
D6 |
L H |
|
L |
H |
IN |

Рис. 6.10. Временная диаграмма циклов чтения и записи с переходом в режим ожидания:
а - цикл чтения; б - цикл записи
Для формирования сигнала R естественно воспользоваться разрядом D7 управляющего слова, так как именно в этом разряде имеется сигнал высокого уровня в циклах группы ЧТЕНИЕ (см. табл. 6.2), а для формирования сигналов OUT и IN — разрядами D4 и D6, потому что именно в этих разрядах сигнал имеет высокий уровень при выполнении соответствующих циклов и низкий уровень во всех остальных циклах.
Сложнее дело обстоит с формированием сигнала W для циклов группы
ЗАПИСЬ. Казалось, было бы естественно воспользоваться разрядом D1 управляющего слова, в котором передается сигнал низкого уровня для циклов группы ЗАПИСЬ. Но в этом разряде сигнал низкого уровня бывает также и в цикле ВЫВОД НА ВНЕШНЕЕ УСТРОЙСТВО, и так как в этом цикле также вырабатывается сигнал WR, то пришлось бы усложнять схему, чтобы сформировать два разных сигнала W и OUT. Поэтому для формирования сигнала W используется инвертированный разряд D4. Соответствующий ему сигнал снимается с инверсного выхода триггера (вывод 7). Этот сигнал имеет высокий уровень и для циклов группы ЧТЕНИЕ и ВВОД С ВНЕШНЕГО УСТРОЙСТВА (см. табл. 6.2), но при этом не формируются сигналы W и OUT (так как не в ырабатывается сигнал WR), а формируются лишь сигналы R и IN (так как вырабатывается сигнал DBIN).
Сигнал высокого уровня RW формируется из сигнала R или W и управляет работой дешифратора адреса (см. § 7.2). В заключение опишем еще некоторые управляющие сигналы микропроцессора КР580ИК80А и их функции.
Вход READY используется для того, чтобы удлинить циклы ввода и вывода информации в микропроцессор и обеспечить таким образом возможность его работы с менее быстродействующими устройствами. Если во время высокого уровня сигнала Ф2 в такте Т2 какого-либо цикла на вход READY подается высокий уровень, то происходит нормальный цикл ввода или вывода информации. Если же подается низкий уровень, то микропроцессор с этого момента прекращает свою работу, сохраняя на всех выходах имеющиеся уровни сигналов (рис. 6.10). Такой режим называется режимом ожидания. Микропроцессор сигнализирует о том, что он находится в режиме ожидания, выработкой сигнала WAIT высокого уровня. В режиме ожидания микропроцессор не выполняет никаких операций и может находиться как угодно долго — до тех пор, пока не будет подан сигнал READY высокого уровня. После этого он завершает начатую операцию и продолжает далее свою работу.
Вход RESET используется для начального запуска микропроцессора и для повторных перезапусков. При подаче высокого уровня на этот вход микропроцессор прекращает свою работу, помещает во все разряды счетчика команд нули и бездействует до тех пор, пока на входе RESET остается высокий уровень. Как только высокий уровень снимается, он начинает выполнять команду, расположенную в ячейке памяти с нулевым адресом.
6.4. ТАКТОВЫЙ ГЕНЕРАТОР
И СХЕМА ПОШАГОВОГО ИСПОЛНЕНИЯ ПРОГРАММ
Для того чтобы получить тактовые импульсы с необходимыми для микропроцессора КР580ИК80А параметрами (см. § 6.2, рис. 6.2), можно использовать микросхему КР580ГФ24 (рис. 6.11, табл. 6.4). Эта микросхема является тактовым генератором, специально сконструированным для данного микропроцессора, и выполняет еще ряд дополнительных функций.

Т а б л и ц а 6.4
Название |
Назначение вывода |
XTAL1 XTAL2 |
Выводы для подключения кварцевого резонатора |
TANK |
Вывод, используемый при применении кварцевого резонатора с обертоном |
OSC |
Выход для синусоидального сигнала с частотой кварцевого резонатора |
Ф1.Ф2 |
Выходы для тактовых импульсов |
Ф2Т |
Выход для тактовых импульсов Ф2, но ТТЛ-уровня |
SYNC |
Вход для сигнала SYNC микропроцессора |
STSTB |
Выход для синхронизированного сигнала SYNC |
- |
Вход для асинхронного сигнала сброса |
RESIN |
|
RESET |
Выход для синхронизированного сигнала RESET микропроцессора |
RDYIN |
Вход для асинхронного сигнала готовности |
READY |
Выход для синхронизированного сигнала READY микропроцессора |

Рис. 6.12. Временные диаграммы синхронизации сигналов при помощи КР580ГФ24:
а - сигнал RESET; б - сигнал READY; в - сигнал SYNC
Опишем более подробно функции выводов тактового генератора. Выводы XTAL1 и XTAL2 предназначены для подключения кварцевого резонатора для стабилизации частоты генератора. При этом частота тактовых импульсов Ф1 иФ2 равняется 1/9 частоты кварцевого резонатора (так, в ПМ-ЭВМ при резонаторе на частоту 9 МГц частота тактовых импульсов равна 1 МГц).
На выходах Ф1 и Ф2 вырабатываются тактовые импульсы, удовлетворяющие всем предъявляемым для микропроцессора КП580ИК80А требованиям. На выходе OSC вырабатывается синусоидальный сигнал с частотой, которую имеет кварцевый резонатор. Все оставшиеся выводы (т. е. кроме Ф1, Ф2 и OSC) работают с сигналами, имеющими ТТЛ-уровни. На выходе Ф2Т вырабатывается сигнал, идентичный Ф2, но имеющий ТТЛ-уровень, который может быть использован для синхронизации каких-либо устройств в микро-ЭВМ.

Рис. 6.13. Схема подключения тактового генератора к микропроцессору
Три входа SYNC, RESIN, RDYIN являются входами для асинхронных сигналов. Эти сигналы могут менять свой уровень в любой момент времени. Внутри КР580ГФ24 с помощью специальных схем из этих сигналов формируются три выходных сигнала STSTB, RESET, READY, синхронизированных с тактовыми импульсами (рис. 6.12).
Тактовый генератор подключается к микропроцессору, как показано на рис. 6.13. К входу RESIN подключена кнопка СБРОС. Параллельно кнопке СБРОС подключен конденсатор С1, Если эта кнопка не нажата, то конденсатор С1 заряжен и на вход HESIN поступает высокий уровень. Следовательно, на вход RESET микропроцессора поступает низкий уровень, что позволяет ему нормально работать. Если нажать кнопку СБРОС, то на вход RESET поступит высокий уровень и работа микропроцессора будет прервана (см. § 6.3). Конденсатор С1 служит для начального запуска микропроцессора после включения питания. После включения питания С1 разряжен и на вход RESIN поступает низкий уровень. Затем конденсатор заряжается, напряжение на входе RESIN экспоненциально возрастает и в какой-то момент времени достигает высокого уровня. Это приводит к выработке сигнала RESET низкого уровня, разрешающего работу микропроцессора. Вход RESIN имеет специальную схему (триггер Шмидта), которая перерабатывает медленно меняющийся при заряде конденсатора входной сигнал в нормальный ТТЛ-фронт.
ПМ-ЭВМ можно снабдить схемой пошагового выполнения программы (рис. 6.13), построенной на микросхеме К155ТМ2 (D30) и двух инверторах (D31.3, D31.4).
С помощью этой схемы выполнение программы приостанавливается в середине каждого машинного цикла. Состояния шины данных в этот момент можно наблюдать на индикаторах одного из портов вывода (см. §7.3).
Схема пошагового выполнения программы работает следующим образом. Если контакты выключателя К18 замкнуты, то на вход 4 триггера D30.1 подается низкий уровень. На вход 1 также подается низкий уровень с выхода WAIT через буфер, состоящий из двух инверторов. В результате этого на выходе 5 триггера имеется высокий уровень, который, поступая на вход RDYIN, обеспечивает сигнал READY высокого уровня, что позволяет микропроцессору работать в нормальном режиме. Для перехода в режим пошагового выполнения программы необходимо разомкнуть контакты выключателя К18. Тогда на входе 4 триггера D30.1 будет высокий уровень, а на входе 1 — низкий уровень. Это приведет к тому, что на выходе 5 появится низкий уровень и микропроцессор перейдет в режим ожидания. После перехода в режим ожидания на выходе WAIT и на входе 1 триггера установится высокий уровень. В этом состоянии схема может находиться неограниченно долго. Если теперь подать на вход 3 триггера D30.1 фронт, то на выходе 5 появится высокий уровень. Микропроцессор снимет сигнал WAIT высокого уровня, закончит начатый машинный цикл и начнет выполнять следующий машинный цикл. Сигнал WAIT низкого уровня вновь установит на выходе 5 триггера низкий уровень, что приведет к переходу микропроцессора в режим ожидания в середине следующего машинного цикла.

Рис. 6.14. Явление дребезга контактов:
а - реальная временная диаграмма, дребезг контактов; б - идеальная временная диаграмма
Для подачи импульсов на вход 3 триггера D30.1 используются кнопка К17 и схема для подавления дребезга контактов. Явление дребезга контактов происходит при замыкании любых механических контактов вследствие неидеальности их поверхности. Вместо однократного замыкания или размыкания контакты замыкаются и размыкаются несколько раз.Так, при нажатии на кнопку К17 на выводах 13, 10 микросхемы D30.2 сигнал имеет форму, изображенную на рис. 6.i4. Чтобы сформировать сигнал, имеющий один срез, используется кнопка с двумя контактами: замыкающимся и размыкающимся при нажатии на нее. Когда один из контактов кнопки, соединенный с входами 10 и 13 микросхемы D30.2, замыкается, то первый из возникающих импульсов перебрасывает триггер, а остальные импульсы уже не влияют на его состояние. Таким образом, на выходе 9 формируются фронт при нажатии на кнопку К17 и срез при отпускании этой кнопки.
7
СИСТЕМА КОМАНД И СПОСОБЫ АДРЕСАЦИИ
Система команд микропроцессора КР580ИК80А представлена 244 кодами операций, которые могут быть расклассифицированы по разным признакам. Наиболее существенными для ознакомления с особенностями их использования являются следующие три признака: длина команды, или число занимаемых байтов, функциональный признак, или выполняемые командой операции, и способ адресации. Полный перечень команд приведен в приложении 1. В таблице приведены символическая запись (мнемокод) команды, описание выполняемых ею функций, длина в байтах, обозначения изменяемых флагов и число машинных тактов, занимаемых при ее выполнении. Из 256 возможных кодов (при восьми двоичных разрядах) не используются следующие 12 кодовых комбинаций (в восьмеричной записи): 010, 020, 030, 040, 050, 060, 070, 313, 331, 335, 355 и 375. Этим и объясняется количество всех команд: 244. Команды в таблице разбиты на три группы по числу занимаемых байтов: все команды делятся на однобайтовые, двухбайтовые и трехбайтовые. При этом первый байт всегда отводится под код команды, а второй и третий байты содержат либо данные, либо адрес, по которому они находятся в памяти (рис. 4.6).
Восьмеричные коды всех однобайтовых, двухбайтовых и трехбайтовых команд приведены соответственно в табл. 4.1, 4.2 и 4.3. При этом в табл. 4.1 наряду с обычными указаны обобщенные коды, т. е. коды, содержащие кроме восьмеричных цифр кодовые переменные S, D и А. В табл. 4.1 если код команды содержит только цифры, это означает, что существует единственная команда с соответствующим кодом. Некоторые коды кроме цифр содержат буквы: S (первые И команд), D (третья команда) и А (последняя команда). Таким кодам соответствуют множества команд. При этом каждой команде из первых 11 команд, кроме третьей, соответствует группа конкретных команд, мнемокод которых вместо символа г (регистр) содержит обозначения конкретных регистров (В, С, D, Е, Н, L), либо символ памяти (М), либо символ аккумулятора (А). Соответствующий конкретный восьмеричный код команды вместо символа S должен содержать одну из цифр: О, 1, 2, 3, 4, 5, 6, 7 соответственно, т.
е. символу В в мнемокоде соответствует цифра 0 в восьмеричном коде, символу С в мнемокоде — цифра 1 в восьмеричном коде и т. д,. . ., символу М в мнемокоде — цифра 6 в восьмеричном коде и, наконец, символу А в мнемокоде — цифра 7 в восьмеричном коде. Для третьей команды в табл. 4.1 точно такая же аналогия соблюдается для пар символов гь г2
и D, S. Последняя команда таблицы содержит символ А в мнемокоде и в восьмеричном коде. Она соответствует группе из восьми конкретных команд, в каждой из которых символ А принимает одно из значений: О, 1, ... ...,7.

Рис. 4.6. Форматы команд: однобайтовой (а), двухбайтовой (б), трехбайтовой (в)
Таблица 4.1 |
|||||||||||||||
Код |
Команда |
Код |
Команда |
|
|
Код |
Команда |
||||||||
OS4 |
INR |
r |
|
051 |
DAD |
H |
|
370 |
RM |
|
|||||
OS5 |
DCR |
r |
|
071 |
DAD |
SP |
311 |
RET |
|
||||||
1DS |
MOV |
r1r2 |
301 |
POP |
В |
|
007 |
RLC |
|
||||||
20S |
ADD |
r |
|
321 |
POP |
D |
|
017 |
RRC |
|
|||||
21S |
ADC |
r |
|
341 |
POP |
H |
|
027 |
RAL |
|
|||||
22S |
SUB |
r |
|
361 |
POP |
PSW |
037 |
RAR |
|
||||||
23S |
SBB |
r |
|
305 |
PUSH |
В |
|
353 |
XCHG |
||||||
24S |
ANA |
r |
|
325 |
PUSH |
D |
|
343 |
XTHL |
||||||
25S |
XRA |
r |
|
345 |
PUSH |
H |
|
371 |
SPHL |
||||||
26S |
ORA |
r |
|
365 |
PUSH |
PSW |
351 |
PCHL |
|||||||
27S |
CMP |
r |
|
002 |
STAX |
В |
|
166 |
HLT |
|
|||||
003 |
INX |
в |
|
022 |
STAX |
D |
|
000 |
NOP |
|
|||||
023 |
INX |
D |
|
012 |
LDAX |
В |
|
363 |
DI |
|
|||||
043 |
INX |
H |
|
032 |
LDAX |
D |
|
373 |
El |
|
|||||
063 |
INX |
SP |
300 |
RNZ |
|
|
047 |
DAA |
|
||||||
013 |
OCX |
В |
|
310 |
RZ |
|
|
057 |
CMA |
|
|||||
033 |
OCX |
D |
|
320 |
RNC |
|
|
067 |
STC |
|
|||||
053 |
OCX |
H |
|
330 |
RC |
|
|
077 |
CMC |
|
|||||
073 |
DCX |
SP |
340 |
RPO |
|
|
3A7 |
RST |
A |
||||||
011 |
DAD |
В |
|
350 |
RPE |
|
|
|
|
|
|||||
031 |
DAD |
D |
|
360 |
RP |
|
|
|
|
|
|||||
Таблица 4.2 |
|||||||||||||||
Код |
Команда |
Код |
Команда |
||||||||||||
306 |
ADI |
|
<B2> |
|
323 |
OUT |
<B2> |
|
|||||||
316 |
ACI |
|
<B2> |
|
006 |
|
MVI |
В |
<B2> |
|
|||||
326 |
SUI |
|
<B2> |
|
016 |
|
MVI |
С |
<B2> |
|
|||||
336 |
SBI |
|
<B2> |
|
026 |
|
MVI |
D |
<B2> |
|
|||||
346 |
ANI |
|
<B2> |
|
036 |
|
MVI |
E |
<B2) |
|
|||||
356 |
XRI |
|
<B2> |
|
046 |
|
MVI |
H |
<B2> |
|
|||||
366 |
ORI |
|
<B2> |
|
056 |
|
MVI |
L |
<B2> |
|
|||||
376 |
CPI |
|
<B2> |
|
066 |
|
MVI |
M |
<B2> |
|
|||||
333 |
IN |
|
<B2> |
|
076 |
|
MVI |
A |
<B2> |
|
|||||
Таблица 4.3 |
|||||||||||||||
Код |
Команда |
Код |
Команда |
||||||||||||
302 |
JNZ |
<В2><ВЗ> |
344 |
СРО |
<B2><B3> |
||||||||||
312 |
JZ |
<В2><ВЗ> |
354 |
СРЕ |
<B2><B3> |
||||||||||
322 |
JNC |
<В2><ВЗ> |
364 |
СР |
<B2><B3> |
||||||||||
332 |
JC |
<В2><ВЗ> |
374 |
СМ |
<B2><B3> |
||||||||||
342 |
JPO |
<В2><ВЗ> |
315 |
CALL |
<B2><B3> |
||||||||||
352 |
JPE |
<В2><ВЗ> |
001 |
LXIB |
<B2><B3> |
||||||||||
362 |
JP |
<В2><ВЗ> |
021 |
LXI D |
<B2><B3> |
||||||||||
372 |
JM |
<В2><ВЗ> |
041 |
LXIH |
<B2><B3> |
||||||||||
303 |
JMP |
<В2><ВЗ> |
061 |
LXISP |
<B2><B3> |
||||||||||
304 |
CNZ |
<В2><ВЗ> |
062 |
STA |
<B2><B3> |
||||||||||
314 |
CZ |
<В2><ВЗ> |
072 |
LDA |
<B2><B3> |
||||||||||
324 |
CNC |
<В2><ВЗ> |
042 |
SHLD |
<B2><B3> |
||||||||||
334 |
СС |
<В2><ВЗ> |
052 |
LHLD |
<B2><B3> |
||||||||||
Как видно из табл. 4.2, микропроцессор КР580ИК80А может выполнять всего 18 двухбайтовых и 26 трехбайтовых команд, приведенных в табл. 4.3.
Прежде чем переходить к обзору особенностей выполнения различных операций приведенными командами, остановимся на возможных способах адресации. Под способом или режимом адресации подразумевается способ определения данных, участвующих в операциях, или, иначе говоря, способ определения операндов. Для составления программы важно знать особенности процедур, позволяющих преобразовать информацию об адресах команд и данных в физические адреса участков памяти машины.
Для МП КР580ИК80А существуют следующие четыре возможных способа адресации: непосредственная, прямая, регистровая и косвенная.
Непосредственная адресация является наиболее экономичным способом хранения и поиска информации, поскольку необходимые данные содержит сама команда. Эти данные содержатся во втором и третьем байтах трехбайтовой команды или во втором байте двухбайтовой команды. В случае трехбайтовой команды младшие разряды 16-битового числа содержатся во втором байте команды, а старшие - в третьем (рис. 4.7,а).
Менее экономичной, но также довольно простой является прямая адресация. В этом случае во втором и третьем байтах команды содержится полный 16-разрядный адрес памяти. Младшим байтом адреса является <В2>, старшим — <ВЗ) (рис. 4.7,6). Таким способом можно адресоваться к любой ячейке адресного пространства памяти.
При регистровой адресации код команды содержит указание на регистр или пару регистров, в которых содержатся данные. Используемые в регистровой адресации команды являются однобайтовыми (рис. 4.7,в). Возможность указания пары регистров в однобайтовой команде реализуется за счет того, что адреса регистров являются трехразрядными двоичными кодами.
Косвенная адресация отличается от регистровой лишь тем, что в регистровой паре, определяемой кодом команды, содержатся не данные, а полный 16-разрядный адрес ячейки памяти,в которой имеются эти данные (рис. 4.7,г).
Старший байт адреса записывается в первом регистре пары, а младший байт — во втором. Обычно указателем адреса при косвенной адресации являются пара регистров Н, т. е. регистры Н, L, но иногда используются и пары В и D.
При всевозможных пересылках данных из регистров в регистры или из памяти в регистры или обратно различают регистры — источники данных и регистры — приемники данных. Первые обозначаются символом S (source — источник), вторые — символом D (destination — место назначения). В регистровых парах В, С; D, Е и Н, L старшими являются первые регистры пар, т. е. регистры В, D, Н соответственно. Коды регистров общего назначения, пар регистров и флагов строго фиксированы (табл. 4.4).
В табл. 4.4 обозначение условия в мнемокоде команды в зависимости от значения флагов расшифровывается следующим образом: NZ — результат ненулевой; Z — результат нулевой; NC — нет переноса; С — есть перенос; РО - нет четности; РЕ — есть четность; Р — результат положительный (плюс) ; М -результат отрицательный (минус).

Рис. 4.7. Способы адресации: непосредственная (а), прямая (б), регистровая (в) и косвенная (г)
Все команды по функциональному признаку могут быть разбиты на следующие пять групп: группа команд пересылки данных, арифметические команды, логические команды, команды переходов и команды управления и работы со стеком. Рассмотрим работу наиболее типичных представителей этих групп команд, многие из которых вошли в описываемую ниже программу-монитор (см. § 7.4).
4.6.1. ГРУППА КОМАНД ПЕРЕСЫЛКИ ДАННЫХ
В этой группе встречаются команды, пересылающие содержащиеся в них данные в регистры и в память, а также команды пересылки данных между регистрами и между регистрами и памятью. Рассмотрим команды пересылки данных из одного регистра МП в другой, из регистра МП в ячейку ОЗУ и из ячейки ОЗУ в регистр МП. В мнемонике команд, используемых в данной книге, порядок пересылки данных всегда предполагается в направлении от крайнего правого операнда к следующему слева операнду, отделенному от первого запятой.
Команда MOV rt, r2. Эта команда предназначена для пересылки данных из регистра S (источник, или г2) в регистр D (приемник, или rt). В качестве регистра-источника и регистра-прием ника может выступать любой из регистров В, С, D, H, L или аккумулятор А. Содержимое регистра-источника при этом не меняется. В регистре-приемнике просто появляется копия содержимого регистра-источника. На рис. 4.8,а приведен формат этой команды. Чтобы получить конкретную команду, необходимо вместо символов D и S в формате команды рис. 4.8,я проставить из табл. 4.4 коды соответствующих регистров. Например, команда 01 010 000 В пересылает данные из регистра В в регистр D (в регистре D после выполнения команды будут содержаться т© же данные, что и в регистре В). В восьмеричной системе это число (код команды) будет представлено как 120Q (см. список команд в приложении 1).
Команда MOV М, г. Эта команда может быть получена из предыдущей заменой символов D кодом М из табл. 4.4. Команда пересылает данные из регистра-источника в ячейку памяти по адресу, указанному в регистровой паре Н, L. Регистром-источником может служить любой регистр В, С, D, H, L или аккумулятор А. После выполнения команды в ячейке памяти появится копия содержимого регистра-источника. Содержимое самого регистра не изменится. Код конкретной команды получается фиксацией кода регистра-источника (рис. 4.8,6).

Рис. 4.8. Примеры размещения некоторых команд пересылки данных в байтах

Рис. 4.9. Примеры размещения некоторых арифметических команд в байтах
Команда MOV г, М. Команда также получается из первой заменой символов S кодом М из табл. 4.4. Команда пересылает данные из ячейки памяти по адресу, указанному в регистровой паре Н, L, в регистр-приемник, в качестве которого может использоваться любой регистр В, С, D, H, L или аккумулятор А. После выполнения команды в регистре-приемнике появляется копия содержимого ячейки памяти (рис. 4.8,в).
На этом закончим рассмотрение примеров команд этой группы.Отметим лишь, что все команды из группы пересылки данных на значения флагов влияния не оказывают.
СОДЕРЖИМОЕ ЦЕНТРАЛЬНОГО БЛОКА
Все уже привыкли к тому, что ЭВМ предназначена для вычислений. Об этом говорит ее название Тем не менее это справедливо лишь отчасти. С расширением области применения микро-ЭВМ собственно вычислительные функции в ее работе занимают довольно скромную долю среди всех остальных функций. Действительно, такие задачи, как анализ текстовых и речевых сообщений, поиск требуемых данных в массиве, преобразования массивов данных, распознавание образов и обработка изображений, строго говоря, отнести к вычислительным нельзя, хотя сам процесс преобразований информации можно рассматривать как вычислительный, поскольку в нем реализуются операции над двоичными кодами или числами. По существу микро-ЭВМ является универсальным преобразователем дискретной информации, причем преобразователем особого вида — программируемым.
Процесс преобразования информации начинается в устройстве ввода. Устройство ввода предназначено для преобразований входной информации к виду, удобному для вьиислений. Устройство вывода, напротив, преобразует результаты вычислений к виду, удобному для пользователя. В отличие от устройств ввода и вывода, реализующих неизменные функции преобразования, центральный блок микро-ЭВМ реализует самые разнообразные функции и является поэтому универсальным преобразователем, осуществляющим программный принцип обработки информации.
Любой достаточно сложный процесс преобразования дискретной информации можно разбить на отдельные этапы или акты. Элементарный неделимый акт обработки информации называют операцией, а управляющее слово, вызывающее выполнение этой операции, — командой. Последовательность команд, реализующих требуемый процесс преобразования информации, составляет программу обработки исходных данных. Программный принцип обработки информации позволяет использовать одно и то же устройство — универсальный преобразователь — для решения самых разнообразных задач при помощи составленных пользователем последовательностей команд или программ преобразования.
Как уже отмечалось, программа должна быть введена в машину до начала вычислений. В связи с этим следующий блок микро-ЭВМ (центральный) должен содержать по крайней мере следующие два функциональных блока: процессор, реализующий операции преобразования, и память, хранящую программу и результаты вычислений (рис. 2.3).
Благодаря тому что все осуществляющие управление преобразованием команды записываются в память, программный способ преобразования информации является очень гибким. Процессор, извлекая из памяти команды (рис. 2.3), может оперировать с ними как с числами и, изменив, возвращать их обратно в память. Это позволяет реализовать сложные схемы вычислений путем использования команд, которые в процессе вычислений "сами себя меняют", вследствие чего меняется весь ход вычислительного процесса.

Рис. 2.3. Схема процесса решения задачи:
а — программа и данные на входе микро-ЭВМ; б — программа и данные в памяти машины; в - результат вычислений занесен в память; г -результат на выходе микро-ЭВМ
Память, содержимое которой изменяется процессором и в которую записываются команды и данные, а также заносятся промежуточные и окончательные результаты вьиислений, называется оперативной памятью или оперативным запоминающим устройством. Кроме нее в составе центрального блока микро-ЭВМ должна быть память с неизменным содержанием. Эта память, используемая только для считывания хранимой в ней информации, называется постоянной памятью или постоянным запоминающим устройством. Ее содержимое не пропадает при выключении питания, и изменить его с помощью каких-либо команд пользователь не может. Чтобы это сделать, необходимо воспользоваться специальным устройством, называемым программатором.

Рис. 2.4. Простейшая микро-ЭВМ и некоторые возможности ее расширения
Непосредственное управление процессом обработки информации в соответствии с командами программы пользователя осуществляется специальной схемой, входящей в состав процессора.
Кроме того, в процессе управления микро-ЭВМ при нимают участие следующие специальные устройства: синхро-генератор, синхронизирующий работу всех блоков вычислительной машины, системный контроллер (устройство, формирующее сигналы управления из сигналов процессора) и схема пошагового исполнения программы.
Итак, следующий рассматриваемый нами блок (рис. 2.4), называемый центральным блоком микро-ЭВМ, состоит из микропроцессорного блока (МБ), оперативного запоминающего устройства (ОЗУ), постоянного запоминающего устройства (ПЗУ) и вводных и выводных согласующих устройств связи, называемых портами. Порт — это устройство сопряжения, с которым микропроцессорный блок обменивается информацией аналогично обмену с устройствами памяти. В свою очередь МБ содержит: микропроцессор (МП), синхрогенера-тор (СГ), схему пошагового исполнения программы (СПИП), системный контроллер (СК) и специальные устройства, называемые буферами тин адреса (БША) и данных (БШД) и описываемые ниже.
СТАТИЧЕСКИЙ АППАРАТНЫЙ ЭМУЛЯТОР
Ограничив поставленную задачу проверкой правильности функционирования логических схем, обрамляющих МП, используем тот факт, что в МП-системах на базе микросхемы КР580ИК80А передача информации осуществляется уровнями. Следовательно, если заменить МП устройством, вырабатывающим в статике такие же выходные сигналы, можно проверить работу всех зависящих от него узлов, т. е. правильность адресации микросхем, правильность ввода/вывода, работу микросхем в статике, правильность коммутации. Такой метод проверки называется тестированием статическими сигналами. Устройство тестирования представляет статический аппаратный эмулятор микропроцессора (САЭ). На рис. 8.1 приведена схема САЭ. В устройстве использовано пять микросхем трех типов. САЭ осуществляет управление МП-системой точно так же, как и микропроцессор. В его составе имеются переключатели А15-АО. Каждый из них одним концом соединяется с общим проводом, а другим — с согласующим резистором 4,7 кОм, подключенным к источнику питания + 5 В. В зависимости от положения переключателей через кабель на ножки коммутационной колодки, соответствующие адресным выходам микропроцессора А15 — АО, подаются логические уровни 0 или 1, имитируя сигналы адресной шины МП. В составе САЭ имеются также переключатели D7-DO. С их помощью логические уровни 0 или 1 подаются на входы микросхем D1 nD2 типа К589АП16, представляющих двунаправленные буферные усилители с высокой нагрузочной способностью. Логические уровни 0 или 1 через D1 и D2 подаются на ножки коммутационной колодки, соответствующие выводам D7-DO микропроцессора, имитируя выходные сигналы шины данных МП. К этим же ножкам подключены входы микросхем D3 и D4 типа К589АП26, представляющих инвертирующие двунаправленные буферные усилители. Выходы D3 и D4 нагружены на светодиодные индикаторы, постоянно отображающие состояние шины данных микропроцессора.
Особенностью микропроцессора КР580ИК80А является использование шины данных в начале каждого машинного цикла для выдачи управляющего слова, которое определяет один из десяти типов машинного цикла.
По этой причине прежде чем с помощью САЭ осуществлять передачу информации по шине данных между САЭ, имитирующим МП, и памятью или между САЭ и УВВ, необходимо задать соответствующий тип машинного цикла путем выдачи кода управляющего слова по шине Данных и стробирования его сигналом SYNC. По сигналу SYNC тактовый генератор тестируемой системы вырабатывает импульс STSTB, стробирующий прием и фиксацию управляющего слова системным контроллером тестируемой системы. После снятия сигнала SYNC можно передавать информацию по шине данных в соответствии с заданным управляющим словом, так как но шине управления будут выдаваться соответствующие управляющие сигналы. Так, если задан машинный цикл выдачи информации из процессора в память, УВВ или стек, необходимо переключателями D7-DO набрать код управляющего слова, перевести переключатель SYNC из положения О в положение 1 и обратно, затем переключателями D7-DO набрать код передаваемой информации, переключателями А15-АО набрать адрес ячейки памяти или порта вывода и перевести переключатель WR из положения 0 в положение 1 и обратно. При этом по сигналу WR и на основании зафиксированного управляющего слова системный контроллер тести-руемой системы вырабатывает управляющий сигнал W или OUT соответственно, по которому информация, выданная САЭ по шине данных, запишется в заданную ячейку памяти или будет принята заданным портом вывода. Если задан машинный цикл приема информации из памяти, УВВ или стека, необходимо переключателями D7-DO набрать код управляющего слова, перевести переключатель SYNC из положения О в положение 1 и обратно, затем набрать переключателями Л15 — АО адрес ячейки памяти или порта ввода и перевести переключатель DBIN из положения 0 в положение 1 и обратно. При этом в положении 1 на светодиодных индикаторах САЭ будет отображаться принимаемая информация. Аналогично предыдущему системный контроллер тестируемой системы вырабатывает управляющий сигнал R или IN, по которому информация из заданной ячейки памяти или порта ввода передается по шине данных в САЭ.


Рис. 8.1. Схема САЭ
Заметим, что с целью гашения дребезга контактов к переключателям DBIN, WR и SYNC подключены триггеры, построенные на инверторах микросхемы D5 типа К155ЛЫ1. Поскольку остальные переключатели не оснащены схемами гашения дребезга, они должны переключаться только тогда, когда DBIN, WR и SYNC находятся в положении 0.
Во избежание конфликтной ситуации на шине данных при непредусмотренном положении переключателей при положении переключателя DBIN в 1 блокируется выдача информации с переключателей D7-DO на шину данных путем подачи логической 1 на входы выборки кристалла микросхем D1 и D2, что переводит их выходы в третье состояние.
Отладка шины адреса ПМ-ЭВМ. Определим, возможна ли передача логических 0 и 1 по адресным линиям АВ15 — АВ12 и АВ11-АВО. С этой целью введем САЭ в проверяемую ПМ-ЭВМ вместо МП путем установки коммутационной колодки САЭ в панельку МП и подадим питающие напряжения на ПМ-ЭВМ.
Проверяем, что для всех адресных линий производится переключение сигнала с уровня 0 на уровень 1 под управлением МП. Если обнаружено, что для некоторых линий такое переключение отсутствует, потребуется дальнейшее исследование. С этой целью осуществляется проверка каждой цепи путем прослеживания уровня напряжения в выбранных точках на протяжении всего информационного канала.
Отладка шины управления ПМ-ЭВМ. При отладке шины управления ПМ-ЭВМ будем использовать управляющие переключатели САЭ — DBIN, WR и SYNC. Отладка состоит из двух этапов: на первом проверяется правильность записи кода управляющего слова на микросхеме D29, на втором — правильность формирования системным контроллером ПМ-ЭВМ управляющих сигналов. При этом переключателями А15-А0 набран код 200Q 200Q.
Устанавливаем, что выходные управляющие сигналы ПМ-ЭВМ правильно отражают входные воздействия микропроцессора. Если на каком-то шаге процедуры будет обнаружено нарушение этого соответствия, можно легко осуществить статическую проверку логических сигналов и локализовать неисправность.
Отладка шины данных ПМ-ЭВМ. При отладке шины данных будем проверять возможность двунаправленной передачи данных от МП к ОЗУ и УВВ и от ПЗУ, ОЗУ и УВВ к МП. Как и в предыдущем разделе, во избежание нежелательной выборки устройств и возникновения конфликта на и тане данных переключателями А15-А0 набран код 200Q 200Q.
Если выходные сигналы на шине данных на некотором шаге процедуры не являются корректными, необходимо определить причины неисправности. Это достигается путем проверки статических сигналов на протяжении информационного канала.
Успешное завершение процедуры означает, что шина данных ПМ-ЭВМ при выводе данных функционирует правильно, т. е. шина данных должна выводить информацию, соответствующую сигналам от МП.
Отладка схем дешифрации адреса и выработки сигналов выборки устройств. При отладке будем проверять наличие сигналов выборки устройств в четырех режимах: чтения из памяти, записи в память, ввода из УВВ, вывода в УВВ.
Ускоренная проверка ПМ-ЭВМ. Приведенная методика проверки позволяет полностью и последовательно проверить в статике работу всех устройств ПМ-ЭВМ. Однако часто можно ограничиться проверкой по разделу "Отладка схем дешифрации адреса и выработки сигналов выборки устройств", так как данная проверка является итоговой. Если обнаружены какие-либо неисправности, то необходимо провести полную проверку. Хотя вероятность нормальной работы при выбранных параметрах схемы весьма высока, проверка в статике не гарантирует работоспособность ПМ-ЭВМ в динамических условиях, так как не проверяются временные соотношения между сигналами в системе, не известны действительные задержки логических схем и не исключено, что к какой-нибудь сигнальной линии по ошибке подпаян конденсатор. Кроме того, нет гарантии, что все ячейки ОЗУ функционируют нормально. Поэтому после отладки ПМ-ЭВМ с помощью САЭ, когда нормально функционирует клавиатура, вводится и считывается информация, следует произвести программные проверки, описываемые в § 8.3.
СТРУКТУРА ПАМЯТИ
Блок памяти состоит, как правило, из ОЗУ и ПЗУ. В ОЗУ и ПЗУ хранятся данные и программы пользователя. В ПЗУ помешаются те данные и программы, которые должны сохраняться при выключении питания. Во-первых, в ячейки ОЗУ информация может попадать, в результате работы какой-либо программы, во-вторых, пользователь может сам изменить их содержание при помощи клавиатуры.
Максимальное количество ячеек памяти (или "объем памяти"), к которым может обращаться при помощи своей 16-разрядной шины адреса микропроцессор КР580ИК80А, равно 216, или 65 536. Обычно говорят: не 65 536 ячеек, а 64 К (1 К равняется 1024). Для решения некоторых задач оказывается мало и такого объема памяти, но для большинства применений достаточно использовать лишь его часть. С другой стороны, объем памяти, содержащейся в одной микросхеме, может быть меньше, чем максимальный объем, который может адресовать микропроцессор. Эти два обстоятельства, а также и то, что в составе памяти микро-ЭВМ необходимо иметь память с разными свойствами (ОЗУ и ПЗУ), приводят к специальным техническим решениям при конструировании памяти микро-ЭВМ.
Рассмотрим эти технические решения на примере блока памяти ПМ-ЭВМ. Блок памяти, состоящий из двух микросхем ОЗУ и двух ПЗУ, подключается к шинам данных, адреса и управления (рис. 7.1). В качестве ОЗУ в ПМ-ЭВМ используются микросхемы статической памяти КР541РУ2 (см. гл. 4) с организацией 1024x4 бита. Поэтому для получения объема памяти 1 Кбайт (1024 байта) необходимо подключить две микросхемы, присоединив выводы данных одной микросхемы (D12) к линиям DBO-DB3 шины данных, а выводы другой (D13) — к линиям DB4 — DB7. Остальные выводы микросхем D12 и D13 подключаются к одним и тем же линиям. Таким образом составляется блок ОЗУ емкостью 1 Кбайт.
В качестве ПЗУ в ПМ-ЭВМ используются две микросхемы КР556РТ4 (D14, D15) с организацией 256x4 бит. Они включены аналогично микросхемам ОЗУ, т. е. организованы в блок 25 6 байтов.

Рис. 7.1. Схема блока памяти
Теперь рассмотрим, как размещается блок ОЗУ объемом 1 Кбайт и блок ПЗУ объемом 256 байт в пространстве адресов, вырабатываемых микропроцессором. Для того чтобы осуществить привязку блоков ОЗУ и ПЗУ, старшие разряды адреса (линии АВ10-АВ15) подаются на схему дешифрации адреса (микросхемы D8, D11, рис. 7.1). Шесть старших разрядов адреса АВ10-АВ15 определяют, к какому килобайту памяти микропроцессора будет произведено обращение. Десять младших разрядов адреса АВО-АВ9 адресуют байты памяти в пределах каждого килобайта. Каждому коду на АВ10-АВ15 соответствует один килобайт памяти, но вследствие того, что инвертированные линии АВ12-АВ15 шины адреса поступают на микросхему D8, сигнал с выхода которой разрешает или запрещает работу дешифратора D11, дешифратор D11 будет работать только при нулевых кодах на этих линиях. В зависимости от кода на линиях АВ10 — АВ15 низкий уровень будет появляться на одном из выходов 7, 6, 5 или 4 дешифратора D11 при условии, что на втором управляющем входе дешифратора (вывод 1) будет высокий уровень. В табл. 7.1 дается соответствие кода на линиях АВ 10 — АВ 15 номеру вывода D11.
В табл. 7.1 приводятся адрес первого байта, адрес последнего байта и условный номер килобайта памяти, к которому происходит обращение при определенном коде на линиях АВ10 — АВ15. Из пятой строки табл. 7.1 также видно, что если адрес, вырабатываемый микропроцессором, лежит в диапазоне от 010000Q до 177 OOOQ, то ни на одном из выходов дешифратора не будет низкого уровня, т. е. с помощью выходов этого дешифратора нельзя адресоваться к килобайтам с 4-го по 63-й.
Выходы дешифратора используются для привязки отдельных блоков памяти емкостью 1 Кбайт к определенным областям в пространстве адресов микропроцессора; для этого они соединены со входами микросхемы памяти, разрешающими их работу, а на адресные входы микросхемы памяти подаются младшие разряды адреса, которые осуществляют адресацию ячеек памяти внутри микросхем.
Таблица 7.1
Код на линиях АВ10— АВ1 5 |
Номер вывода D11.на котором низкий уровень напряжения |
Диапазон адресов области памяти в восьмеричном коде |
Номер адресуемого ки- |
||||||
А15 |
А14 |
А13 |
А12 |
All |
А10 |
|
от адреса |
до адреса |
лобайта |
0 |
0 |
0 |
0 |
0 |
0 |
7 |
000 000 |
001 777 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
6 |
002 000 |
003 777 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
5 |
004000 |
005 777 |
2 |
0 |
0 |
0 |
0 |
1 |
1 |
4 |
006 000 |
007 777 |
3 |
Любой другой код |
|
|
- |
010 000 |
177777 |
4-63 |
Блок из микросхем ПЗУ подключен так, что он занимает самые младшие адреса, начиная с 000 000Q. Это сделано для размещения программы-монитора, которая должна начинать работать сразу после включения микро-ЭВМ, или нажатия кнопки СБРОС, в результате чего вырабатывается сигнал RESET, по которому микропроцессор начинает выполнять команду, расположенную по адресу 000 OOOQ (т. е. в ПЗУ). Заметим,что для адресации 256 байтов ПЗУ достаточно восьми адресных линий ABO — AB7; линии АВ8, АВ9 излишни и поэтому к ПЗУ не подсоединены. В результате этого независимо от кода на линиях АВ8 и АВ9 адресуется байт ПЗУ, определяемый адресом на линиях ABO — AB7. Это приводит к тому, что один и тот же байт ПЗУ можно считывать по адресам, в разрядах АВ8, АВ9 которых находятся коды 00, 01, 10 или 11. Область памяти ПЗУ, состоящая из 256 байт, повторяется 4 раза в нулевом килобайте памяти. Ясно, что это повторение не мешает работе микропроцессора.
Такая схема адресации с неиспользованием части разрядов адреса называется схемой с неполной дешифрацией адреса. При необходимости использовать весь нулевой килобайт и поместить в пространство его адресов еще три блока памяти по 256 байт в каждом нужно использовать для разрядов АВ8 и АВ9 полный дешифратор, устроенный так же, как для разрядов АВ10 и АВ11. Схема с неполной дешифрацией адреса приводит к тому, что используется не все адресное пространство, но зато требуется меньше микросхем для ее реализации, и поэтому такая схема часто применяется в простых микро-ЭВМ.
Блок из микросхем ОЗУ подключен к выходу 4 дешифратора D11, и поэтому килобайт ОЗУ адресуется как 3-й килобайт в адресном пространстве микропроцессора. На рис. 7.2 приведена карта распределения памяти в ПМ-ЭВМ.
Этого объема памяти достаточно для нормальной работы, но его можно при необходимости увеличить. Объем используемого ОЗУ можно увеличить до 3 Кбайт, ничего не переделывая в схеме дешифрации адреса, а просто подключением дополнительных блоков ОЗУ емкостью по 1 Кбайт к выходам 6 и 5 дешифратора D11 (рис. 7.1). Можно также увеличить объем используемого ПЗУ, если построить его из микросхем большей емкости, например из микросхем К573РФ1 с организацией 1024x8 бит (1 Кбайт) или микросхем КР556РТ5 емкостью 4 Кбита и с организацией 512x8 бит (0,5 Кбайта). В первом случае будет использоваться весь 0-й килобайт, а во 2-м ячейки ПЗУ будут повторяться во второй половине 0-го килобайта.
|
|
|
000 000 |
|
|
|
ПЗУ |
|
000 377 |
|
|
000 400 000 777 |
Повторяется ПЗУ |
|
001 000 001 377 |
Повторяется ПЗУ |
0 и К баит |
001 400 001 777 |
Повторятся ЛЗУ |
|
002 000 |
|
|
|
Память |
|
|
отсутствует |
1-й К байт |
003 777 |
|
|
004 000 |
|
|
|
Память |
|
|
отсутствует |
2-й K бaйm |
005 777 |
|
|
005 000 |
|
|
|
ОЗУ |
3-й K бaйm |
|
Область стека |
|
007 777 |
|
|
Осталось рассмотреть подключение блока памяти к линиям шины управления. Линия R (рис. 7.1) подключена к входам 13 микросхем ПЗУ и разрешает их работу во время цикла считывания байта из ПЗУ. Линия W подключена к входам 10 микросхем ОЗУ и управляет записью байта в ОЗУ. Если на ней во время цикла обращения к ОЗУ поддерживается высокий уровень, то происходит считывание, а если низкий - то запись байта. Сигнал RW, вырабатывающийся и сигналом R, и сигналом W, служит Для того, чтобы разрешать работу дешифратора D11 только во время низкого уровня сигналов R и W.
Это необходимо, чтобы считывание и запись в блок памяти происходили во время выра ботки сигналов R и W, которые формируются сигналами DBIN и WR микропроцессора, определяющими момент передачи информации по шине данных.

Рис. 7.3. Временная диаграмма работы блока памяти при чтении

Рис. 7.4. Временная диаграмма работы блока памяти при записи
Считывание из ОЗУ микропроцессор может выполнить в циклах ВЫБОРКА КОМАНДУ, ЧТЕНИЕ ИЗ ПАМЯТИ, ЧТЕНИЕ ИЗ СТЕКА а считывание из ПЗУ - только в циклах ВЫБОРКА КОМАНДЫ И ЧТЕНИЕ ИЗ ПАМЯТИ. Временные диаграммы сигналов шины адреса, данных и управления приведены на рис. 7.3. Запись информации в ОЗУ микропроцессор может выполнить в циклах ЗАПИСЬ В ПАМЯТЬ, ЗАПИСЬ В СТЕК. Временные диаграммы записи приведены на рис. 7.4.
Таблица
Входы | Выход | |||||||
1 | X | X | X | X | X | X | X | 0 |
X | 1 | X | X | X | X | X | X | 0 |
X | X | 1 | X | X | X | X | X | 0 |
X | X | X | 1 | X | X | X | X | 0 |
X | X | X | X | 1 | X | X | X | 0 |
X | X | X | X | X | 1 | X | X | 0 |
X | X | X | X | X | X | 1 | X | 0 |
X | X | X | X | X | X | X | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
От сигналов, подававшихся на входы элементов в более ранние моменты времени, выходные сигналы не зависят. Поэтому эти элементы относятся к классу комбинационных схем, или к классу схем, не обладающих памятью.
С помощью комбинационных элементов в ЦГО микро-ЭВМ реализуются все основные логические операции над 8-разрядными словами данных и 16-разрядными словами адресов. К ним относятся операции поразрядного логического умножения (поразрядное И), сложения (поразрядное ИЛИ), инвертирования (поразрядное НЕ), сравнения. С их помощью реализуются арифметические операции (см. § 3.3). Однако многие из этих операций были бы практически невыполнимы, если бы схема обработки двоичных сигналов не содержала специальных устройств для временного хранения данных.
К таким устройствам принадлежат регистры. Они состоят из элементов, число которых (или длина регистра) равно числу двоичных разрядов поступающих на них данных. Каждый элемент способен сохранить на своем выходе значение поступившего и затем пропавшего входного сигнала до тех пор, пока не возникнет необходимость сохранения вновь поступившей информации. Эти элементы, называемые триггерами, относятся не к комбинационным схемам, а к схемам с памятью. Триггер — это схема с двумя устойчивыми состояниями: ВКЛЮЧЕНО, обозначаемое 1, и ВЫКЛЮЧЕНО, обозначаемое 0. Распространенным типом триггера является триггер с двумя входами, обозначаемыми R и S. Такой тип триггера носит название RS-триггера. Вход R (Reset — очистка) предназначен для перевода триггера в состояние 0, или, как говорят, для очистки триггера. При появлении сигнала на этом входе триггер переводится в состояние 0, если до этого он находился в состоянии 1, или остается в состоянии 0, если до этого он находился в состоянии 0. Вход S (Set — установка) предназначен для перевода триггера в состояние 1, или, как говорят, для установки триггера.
При появлении сигнала на этом входе триггер переводится в состояние 1, если до этого он находился в состоянии 0, или остается в состоянии 1, если до этого он находился в состоянии 1.
Сигнал, переводящий триггер в то или иное состояние, может быть как единичным (в этом случае вход называется прямым) или нулевым (вход называется инверсным). Так, например, в схеме К155ТМ2 (см. гл. 5) сигналы сброса и установки имеют нулевые значения. В этой схеме триггер остается в состоянии 0 и в том случае, если значение сигнала изменится с 0 на 1. Перевести его в состояние 1 можно только подачей сигнала 0 на вход S (Set — установка). Состояние 1 триггер будет также сохранять при изменении значения сигнала на входе S на единичное.
Триггер типа RS является далеко не единственным и даже не наиболее применяемым в схемотехнике дискретных устройств. Более распространенным, например, является D-триг-гер. Он имеет два входа: D и С. Вход D является информационным, а С — управляющим. Сигнал со входа D переписывается в триггер только при наличии определенного сигнала на управляющем входе С. Некоторые триггеры, реализованные в виде микросхем, имеют входы, соответствующие как RS-триггеру, так и D-триггеру, и могут быть использованы как триггеры любого из указанных двух типов.
Состояние триггера однозначно соответствует сигналу на выходе, который называется прямым выходом. Кроме прямого выхода у триггера имеется так называемый инверсный выход, значение сигнала которого всегда противоположно значению сигнала прямого выхода. Это позволяет, например, иметь на выходах регистра, состоящего из восьми триггеров, одновременно прямой и обратный коды вводимого 8-разрядного двоичного числа.
Поскольку все процессы преобразования сигналов в ЭВМ синхронизированы, в схемах регистров используются синхронизируемые триггеры. В таких триггерах кроме информационных входов имеется специальный вход, на который подаются сигналы синхрогенератора. Изменение состояния триггера происходит только во время появления тактового импульса на его синхронизирующем входе. Изменение значений информационных сигналов в период пауз тактовых импульсов на состояние триггера влияния не оказывает.
Используемые для одновременного хранения нескольких двоичных разрядов регистры состоят из последовательно соединенных триггеров и управляющих связей между ними, позволяющих организовать последовательную или параллельную подачу запоминаемой информации. С помощью управляющих связей можно сдвигать хранящуюся в регистрах информацию на произвольное число разрядов вправо и влево, а также считывать информацию в последовательной и параллельной формах. Такие регистры называются сдвиговыми регистрами. Они широко используются для реализации арифметических функций, в частности умножения и деления.
Итак, в самом общем случае регистры позволяют осуществить следующее:
1) хранить поступившую на них двоичную информацию в течение необходимого времени;
2) осуществлять преобразование последовательных двоичных кодов в параллельные и обратно;
3) сдвигать при необходимости хранимые данные вправо
и влево;
4) пользоваться обратным кодом хранимой информации, имеющимся на инверсных выходах триггеров.
ТЕЛЕВИЗОРА ИЛИ ОСЦИЛЛОГРАФА
Телевизионный дисплей — одно из наиболее мощных средств общения человека с вычислительной машиной. Информационная емкость телевизионного экрана велика, а скорость изменения информации согласована со скоростью реакции человека. Здесь мы будем иметь в виду либо телевизионный приемник с входом, позволяющим подавать обычный видеосигнал, либо специальный видеомонитор, в котором разделены входные каналы синхронизации горизонтальной, вертикальной разверток и модуляции яркости. Модуляторы, предназначенные для подачи сигнала на антенный вход телевизора, не рассматриваются.
Читатель должен строго соблюдать правила техники безопасности при работе с таким высоковольтным прибором, как телевизор, особенно если он будет каким-либо образом переделывать его!
В телевизоре два генератора развертки отклоняют электронный луч, модулированный по интенсивности. Первый перемещает луч горизонтально и быстро возвращается. Период составляв! 64 мкс (частота 15,625 кГц), причем четвертая часть периода занята обратным ходом луча. Вторая отклоняющая система перемещает луч вертикально с периодом 20 мс (50 Гц). Таким образом, на экране появляются 312 горизонтальных линий (строк), и если импульс обратного .вертикального хода луча формируется во время появления 313-й строки, то обеспечивается обьиная стандартная развертка в 625 строк.
Для алфавитно-цифрового дисплея МП-системы не требуется разрешающая способность в 625 строк, вполне достаточно 312, что упрощает схему дисплея. Устройство, управляющее телевизионным (ТВ) монитором, вырабатывает три сигнала. Фронт импульса синхронизации горизонтальной развертки Н определяет начало обратного хода луча. Минимальная длительность импульса Н зависит от ТВ монитора. Фронт импульса вертикальной синхронизации V определяет начало обратного хода луча по вертикали. Модуляционный сигнал интенсивности Z в случае цифрового дисплея является двоичным, т. е. принимает только два значения. Телевизионные мониторы с цифровым управлением имеют три независимых входа для сигналов Н, V и Z.
Большинство ТВ-мониторов и некоторые бытовые телевизоры имеют вход для смешанного сигнала С с более жесткими ограничениями по длительности и положению синхроимпульсов. Сигнал на антенном входе бытового телевизора эквивалентен высокочастотно-модулированному полному сигналу С.
Разрешающая способность экрана по горизонтали ограничена шириной полосы пропускания и электронной трубкой. Для обычного ТВ-приемника полоса пропускания не превышает 5 МГц.
Любой символ может быть сгенерирован на экране путем соответствующей модуляции сигнала Z. На практике знакогенераторы строятся на интегральных микросхемах, обладающих заранее запрограммированной памятью, ставящей в соответствие каждому коду символа последовательность точек, представляющих знак. Эта последовательность формируется на строке путем модуляции сигналом Z.
Важный параметр - время отклика, т. е. полное время на генерацию символа с момента задания адреса в ЗУ. Нужно достигнуть хорошего компромисса между плотностью символов, их читаемостью на экране и простотой цепей управления. Для хорошей читаемости каждый символ должен быть окружен достаточным пространством.
Необходимые сигналы формируются цепочкой делителей. Первый делитель определяет количество точек на строке для каждого символа, второй - количество символов на строке с учетом фиктивных знаков - пропусков во время обратного хода луча. Этот счетчик генерирует синхроимпульсы горизонтальной развертки и гашения обратного хода луча Н, следующий - количество строк развертки на формирование одного ряда символов с учетом разделительных линий. Последний делитель определяет количество рядов символов на экране, включая невидимые на экране строки, когда генерируются синхроимпульс вертикальной развертки и гашения обратного хода луча V. Параллельный код с .выхода знакогенератора преобразуется с помощью сдвигового регистра в последовательность битов, задающих рисунок данного символа на строке. Выходы Q и R счетчиков соответствуют адресам символов на экране (рис. 10.7).

Рис. 10.7. Схема генератора знаков

Рис. 10.8. Схема приставки для формирования буквенно-цифровых символов на экране ТВ
Страница текста запоминается в специальном местном ЗУ, Символы передаются на дисплей параллельно, содержимое памяти передается на знакогенератор при синхронизации с дели-
телей (рис. 10.8). Процессор может модифицировать содержимое ЗУ текста. При этом блокируется обращение к ЗУ от дисплея.
ТТЛ-ВХОДЫ И ТТЛ-ВЫХОДЫ
Цифровые микросхемы выполняют преобразование сигналов, изменяющихся дискретно. Такой сигнал может принимать несколько фиксированных значений. Современные микросхемы, как правило, работают с сигналами, которые имеют два значения, и эти значения кодируются двумя различными уровнями напряжения. Обычно эти уровни напряжения расположены в диапазоне от нуля до напряжения источника питания и различны для серий микросхем, отличающихся по технологии изготовления. Широкое распространение в настоящее время получили микросхемы, изготовленные по ТТЛ-технологии, и поэтому часто микросхемы, изготовленные по другим технологиям, имеют выводы с такими же характеристиками и работают с такими же уровнями напряжения (в частности, все микросхемы, применяющиеся в ПМ-ЭВМ). Для того чтобы подавать сигналы с микросхем, имеющих одни уровни напряжения, на микросхемы с другими уровнями напряжения, применяются специальные преобразователи уровня.
Вывод микросхемы, на который сигнал необходимо подавать, называется входом (для ТТЛ-микросхем - ТТЛ-входом), а вывод, на котором сигнал вырабатывается самой микросхемой, называется выходом (для ТТЛ-микросхем - ТТЛ-выходом). В этом параграфе будут подробно рассмотрены характеристики ТТЛ-входов и ТТЛ-выходов.
Входные и выходные уровни напряжения ТТЛ-микросхем имеют определенные значения. Высокий уровень напряжения должен лежать в пределах от +2,4 до +5 В для ТТЛ-выхода и в пределах от +2 до +5 В для ТТЛ-входа, а низкий уровень -от 0 до +0,4 В для ТТЛ-выхода и от 0 до +0,8 В для ТТЛ-входа. Между нижней границей для более высокого уровня и верхней границей для более низкого уровня напряжения ТТЛ-входа имеется диапазон напряжения (от 0,8 до 2 В) шириной 1,2 В. Этот диапазон предназначен для защиты микросхемы от ложных срабатываний при помехах амплитудой менее 1,2 В. Если бы его не было, то любая малая помеха приводила бы к тому, что напряжение сигнала попадало бы из области низких напряжений в область высоких (или наоборот).
В этом диапазоне напряжение сигнала может находиться только в момент переключения с одного уровня напряжений на другой.
Как известно, переменные в логике могут принимать два значения - 0 и 1. Возможны два способа кодировки этих значений. Первый способ - это кодировать 0 низким уровнем напряжения, а 1 - высоким уровнем напряжения. Такой способ кодировки называется позитивной (иногда положительной) логикой. Второй способ - кодировать 0 высоким уровнем, а 1 - низким уровнем напряжения. Такой способ кодировки называется негативной (иногда отрицательной) логикой. Эти названия общеприняты, хотя не совсем удачны. Во-первых логика здесь ни при чем (она одинаковая, разные только способы кодировки), а во-вторых, слова "позитивный" и "негативный" применяются для обозначения способов кодировки с помощью разных уровней напряжения одной полярности. В дальнейшем для краткости вместо слов "сигнал имеющий высокий (низкий) уровень напряжения" будут употребляться слова "сигнал высокого (низкого) уровня" или просто высокий (низкий) уровень", и так как в этой книге принята положительная логика, то будут также употребляться слова "уровень логического нуля (единицы)".


Рис. 5.3. Характеристика ТТЛ-входа
ТТЛ-вход является эмиттером многоэмиттерного транзистора (рис. 5.2). Диод к эмиттеру подключен для того, чтобы ограничивать отрицательные импульсы напряжения. Если поставить эксперимент, изображенный на рис. 5.2, то можно получить входную характеристику ТТЛ-входа, т. е. зависимость тока от подаваемого напряжения (рис. 5.3). Ветви 1 соответствует ток, вытекающий в ТТЛ-вход, который в этом случае работает как р-п переход, включенный в обратном направлении, и поэтому значение тока невелико. Этот ток обозначается обычно I1вх. Ветви 2 соответствует ток, который вытекает из ТТЛ-входа, работающего как р-п переход, включенный в прямом направлении.
В этом случае ток ограничивается сопротивлением R. Этот ток обозначается I0вх. В диапазоне напряжений, соответствующем высокому уровню, I1вх должен быть не больше 0,1 мА, а в диапазоне, соответствующем низкому уровню, I0вх должен быть не больше 1,6 мА. Направления I0вх и I1вх показаны стрелками на рис. 5.2. Вход с такими характеристиками называется стандартным ТТЛ-входом или стандартной ТТЛ-нагрузкой.


Рис. 5.5. Схема снятия характеристики ТТЛ-выхода при высоком уровне напряжения (а); характеристика (б)
ТТЛ-выходы бывают трех типов: нормальный ТТЛ-выход, выход с открытым коллектором и выход с тремя состояниями. Схема нормального ТТЛ-выхода приведена на рис. 5.4. Для того чтобы создать на выходе высокий уровень напряжения, с помощью внутренних управляющих цепей открывается верхний транзистор и закрывается нижний. Если поставить эксперимент по схеме, изображенной на рис. 5.5,л, то можно снять выходную характеристику ТТЛ-выхода при высоком уровне напряжения (рис. 5.5,6). Из этой характеристики видно, что с возрастанием вытекающего тока I1вых напряжение на выходе уменьшается. Стандартный ТТЛ-выход должен обеспечивать при I1вых, равном 1 мА, высокий уровень напряжения (не меньше+2,4 В).

Рис. 5.6. Схема снятия характеристики ТТЛ-выхода при низком уровне напряжения (а); характеристика (б)
Для того чтобы создать на выходе напряжения низкого уровня, с помощью внутренних управляющих цепей открывается нижний транзистор и закрывается верхний. Схема, с помощью которой можно снять выходную характеристику ТТЛ-выхода, и сама характеристика приведены на рис. 5.6. Из этой характеристики видно, что с возрастанием втекающего тока напряжение на ТТЛ-выходе, находящемся в состоянии низкого напряжения, увеличивается. Стандартный ТТЛ-выход должен обеспечивать при I0вых, Равном 16 мА, высокий уровень напряжения (не более 0,4 В). Если теперь сравнить входные и выходные токи, то видно, что к одному стандартному ТТЛ-выходу можно подключить, не перегружая его, 10 стандартных ТТЛ-входов.
Иногда используют термин "нагрузочная способность" выхода или "коэффициент разветвления по выходу", измеряющийся числом входов, которые можно подключить к данному выходу.
Диод между эмиттером верхнего транзистора и коллектором нижнего транзистора включен для того, чтобы избежать открывания верхнего транзистора при низком уровне напряжения на выходе. При переключении выходных транзисторов в какой-то момент времени они оба оказываются открытыми и ток через них резко возрастает (в этот момент ток ограничивается только резистором К). Резкое возрастание тока может создать импульс помехи, распространяющейся по цепям питания. Для подавления таких помех используются развязывающие конденсаторы, которые включаются между линией питания и общим выводом в непосредственной близости от микросхемы. Развязывающий конденсатор должен быть один на группу не более 10 микросхем и должен иметь емкость не менее 0,002 мкФ на микросхему.
Два нормальных ТТЛ-выхода нельзя подключать друг к другу, если возможна ситуация, когда на одном выходе высокий, а на другом — низкий уровень напряжения, потому что тогда ток, протекающий через открытые транзисторы разных ТТЛ-выходов, может превысить допустимое значение.

Рис. 5.7. Выход с открытым коллектором

Рис. 5.8. Соединение нескольких выходов с открытым коллектором
Второй тип ТТЛ-выхода — это так называемый выход с открытым коллектором. Как следует из названия, выход такого типа представляет собой коллектор транзистора (рис. 5.7). Для того чтобы обеспечить нормальную работу этого выхода, его необходимо соединить через резистор с положительным полюсом источника питания. Тогда если транзистор закрывается с помощью внутренних управляющих цепей, то напряжение на выходе больше +2,4 В, что достаточно для создания стандартного высокого ТТЛ-уровня; если же транзистор открывается, то напряжение на выходе падает до стандартного низкого ТТЛ-уровня. При закрытом выходном транзисторе ток I1вых течет от положительного полюса источника питания через резистор R, при открытом транзисторе ток I0вых течет через транзистор.
Резистор R рассчитывается так, чтобы обеспечить необходимые значения токов I0вых и I1вых.
В отличие от стандартных ТТЛ-выходов выходы с открытым коллектором можно соединять друг с другом (рис. 5.8). В этом случае высокий уровень напряжения поддерживается в точке соединения только тогда, когда закрыты транзисторы всех выходов, поэтому в этой точке реализуются логическая функция И при позитивной логике и логическая функция ИЛИ при негативной логике. Такая схема часто называется "монтажное И" или "монтажное ИЛИ" в зависимости от используемой логики.
Третий тип ТТЛ-выходов - это выходы с тремя состояниями или, как их еще называют, выходы с третьим состоянием высокого сопротивления (или просто выходы с третьим состоянием). В отличие от нормальных ТТЛ-выходов оба выходных транзистора такого выхода с помощью внутренних управляющих цепей могут быть закрыты. В этом случае через них может протекать лишь небольшой ток утечки (обычно несколько микроампер) и говорят, что выходы находятся в отключенном состоянии или в состоянии высокого сопротивления. Для перевода выходов микросхемы в состояние высокого сопротивления, как правило, имеется специальный управляющий вход, или если этот переход происходит вследствие каких-либо неуправляемых внутренних процессов, то имеется специальный выход, состояние которого показывает, переведены ли в состояние высокого сопротивления другие выходы. Выходы с третьим состоянием сконструированы специально для того, чтобы можно было подключать несколько выходов для управления состоянием одной линии. Когда несколько выходов с третьим состоянием подключены к одной линии, то в определенный момент времени только один из них может управлять состоянием этой линии (т. е. создавать на ней уровень высокого или низкого напряжения). Остальные выходы должны находиться в состоянии высокого сопротивления. В этом состоянии они не создают дополнительную нагрузку на транзисторы работающего выхода.
Естественно, что это требует спе циальных электронных схем, которые управляют тем выходом, который должен работать в какой-либо определенный момент времени.
Вывод микросхемы может быть входом или выходом и, кроме того, может совмещать эти функции. Это достигается путем объединения внутри микросхемы входов и выходов с тремя состояниями или открытым коллектором. Для управления таким выводом у микросхемы имеется специальный вход, в зависимости от сигнала на котором вывод работает как ТТЛ-вход или как ТТЛ-выход в разные моменты времени. Ниже будут встречаться микросхемы со всеми разобранными типами выводов. Нормальные ТТЛ-входы и ТТЛ-выходы в дальнейшем будем называть просто входами и выходами, а во всех остальных случаях будем указывать определенный тип вывода.
5.3. ВРЕМЕННЫЕ ДИАГРАММЫ
Электрические сигналы, которые соответствуют определенным логическим состояниям, можно наблюдать на выводах работающих микросхем с помощью осциллографа или логического пробника. На рис. 5.9,а показано изображение на экране осциллографа электрического сигнала с вывода цифровой микросхемы. Ось времени располагается горизонтально, а ось напряжений — вертикально. Время увеличивается слева направо, т. е. из двух событий правее окажется более позднее. Такое расположение и направление оси времени традиционны и используются во всех осциллографах.

Рис. 5.9. Дискретный сигнал:
а - на экране осциллографа; б - условное графическое изоб -ражение
Электрические сигналы с выводов цифровых микросхем принято изображать в процессе их изменений во времени (рис. 5.9,6). Такие условные графические изображения называются временными диаграммами. На временных диаграммах не наносятся оси напряжения и времени. Нулевая отметка времени также не наносится, так как большинство процессов периодически повторяется и достаточно изобразить интервал времени немного большим периода повторения, чтобы диаграмма содержала всю необходимую информацию о происходящем процессе.
Приведем некоторые соглашения, которые используются при изображении сигналов на временньгх диаграммах. Высокий уровень изображается, как показано на рис. 5.10,я, состояние высокого сопротивления - как на рис. 5.10,в, низкий уровень -как на рис. 5.10,6. Штриховые линии на этих рисунках приведены только для сравнения и обычно не наносятся. На рис. 5.11 показано, как изображается переход с одного уровня на другой. Переход от низкого уровня к высокому называется фронтом, а от высокого к низкому — срезом. Иногда употребляют также термины "нарастающий и спадающий фронт", "передний и задний фронт", "положительный и отрицательный фронт" и некоторые другие. Если переход от одного уровня к другому происходит не в конкретный момент времени, а может произойти в любой момент времени в течение некоторого интервала времени, то это изображается как на рис. 5.12.

Рис. 5.10. Изображение уровней напряжения:
а — высокий; б — низкий; в — состояние высокого сопротивления

Рис. 5.11. Изображение фронтов:
а - фронт; б - срез

Рис. 5.12. Изображение фронтов в неопределенный момент времени

Рис. 5.13. Изображение зависимости одного сигнала от другого
Изменение одного сигнала может быть причиной изменения другого сигнала. Если изменение вызывается фронтом сигнала, то это изображается как на рис. 5.13,я, если уровнем сигнала -то как на рис. 5.13,6. При этом кружок отмечает тот элемент сигнала, который вызывает изменение, а стрелка указывает на изменение зависимого сигнала. Изменение одного сигнала может быть причиной изменений нескольких сигналов, тогда это изображается, как показано на рис. 5.14, и наоборот, изменение некоторого сигнала может вызываться только определенными изменениями нескольких других сигналов (рис. 5.15).

Рис. 5.14. Изображение зависимости нескольких сигналов от одного

Рис. 5.15. Изображение зависимости одного сигнала от нескольких других

Если уровень на входе микросхемы не влияет никак на ее работу или уровень на выходе не определен (не устанавливается), то это изображается так, как показано на рис. 5.16. Если необходимо изобразить на временной диаграмме состояния и Фронты нескольких сигналов, которые ведут себя одинаково с точки зрения переключений, но могут иметь разные уровни, то это делается так, как показано на рис. 5.17. Длительности интервалов времени между какими-либо изменениями сигналов изображаются с помощью букв или цифр на выносных линиях (рис. 5.18). На этом же рисунке показано, где пишутся буквенные обозначения сигналов (слева рядом с соответствующей временной диаграммой).

Рис. 5.18. Изображение временных интервалов

Рис. 5.17. Изображение нескольких сигналов, ведущих себя идентично с точки зрения переходов с уровня на уровень
5.4. МИКРОСХЕМЫ, РЕАЛИЗУЮЩИЕ ЛОГИЧЕСКИЕ ФУНКЦИИ
В этом и следующем параграфах будут описаны микросхемы, используемые в ПМ-ЭВМ. Как правило, инженеров, имеющих дело с микросхемами, не интересует их внутреннее устройство, их интересуют только выполняемые ими функции и характеристики входов и выходов. Функции микросхем будут описываться с помощью таблиц, в которых будут указываться входные и выходные комбинации сигналов низкого и высокого уровней. Сигнал низкого уровня будет обозначаться буквой L, высокого — буквой Н, фронт — стрелкой t, срез — стрелкой 4. Если сигнал никак не влияет на работу микросхемы в каком-либо режиме, он будет обозначаться символом X. Для описания работы микросхем будут также применяться таблицы истинности и временные диаграммы. Для каждой микросхемы будет приводиться ее условное графическое изображение. Номера выводов, на которые подается напряжение питания, и номера общих выводов перечислены в приложении 3.

Puc. 5.19. Микросхема К5 89АП16

Рис. 5.20. МикросхемаК589АП16 как двунаправленный буфер
Микросхема К589АП16 (рис. 5.19). Эта микросхема содер жит четыре элемента, каждый из которых предназначен для организации одной линии двунаправленной шины передачи данных и называется шинным формирователем. Все четыре элемента имеют общие управляющие входы CS и S. Каждый элемент имеет вход А, выход С с тремя состояниями и вывод В, который работает как вход или как выход с тремя состояниями. Когда на управляющем входе CS высокий уровень, выходы С и В находятся в отключенном состоянии (табл5.1).
Если на входе CS низкий уровень, то сигналом на входе S можно управлять направлением передачи. При низком уровне на входе S сигнал передается от входа А на выход В, т. е. уровень сигнала на выходе такЬй же, как и на входе. Выход С при этом находится в отключенном состоянии. При высоком уровне на входе S сигнал передается от входа В к выходу С, а выход В находится в отключенном состоянии. Таким образом, вывод В может работать и как вход для выхода С, и как выход для входа А, и его можно использовать для организации одной линии двунаправленной шины для передачи данных. Выводы А и С можно соединять друг с другом (рис. 5.20), тогда эти выводы можно также использовать как одну двунаправленную линию, направлением передачи по которой, управляет вход S.
Таблица5.1
Уровень сигнала на управляющих входах сигнала |
Направление передачи | Выход в отключенном | ||
CS | S | от входа | к выходу | — состоянии |
Н L L | X
L Н |
Нет А В | Нет В С | В, С С В |

Рис. 5.21. Микросхема К155ЛН1

Рис. 5.22. Микросхема К155ЛАЗ

Рис. 5.23. Микросхема К155ЛА1
Микросхема К155ЛН1 (рис. 5.21). Эта микросхема содержит шесть элементов, каждый из которых имеет один вход и один выход и выполняет логическую функцию НЕ (табл. 5.2 и 5.3).
Микросхема К155ЛАЗ (рис. 5.22). Эта микросхема содержит четыре элемента, каждый из которых имеет два входа и один выход и выполняет функцию И — НЕ при позитивной и функцию ИЛИ — НЕ при негативной логике. На рис. 5.22 приводится условное графическое изображение этой микросхемы при позитивной логике. Таблица 5.4 описывает работу каждого двухвходового элемента; табл. 5.5 и табл. 5.6 — таблицы истинности для позитивной и негативной логик соответственно.
Таб л и ц а 5.2 Таблица 5.3
Вход | Выход | Вход | Выход |
L
Н |
Н
L |
0
1 |
1
0 |
Таб лица 5.4
Входы | Выход | |
L | L | Н |
L | Н | Н |
Н | L | Н |
Н | Н | L |
Та б л и ц а 5.5
Входы | Выход | |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Т а б л и ц а 5.6
Входы | Выход | |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
Микросхемы К155ЛА1 и К155ЛА2. Эти микросхемы выполняют функции, аналогичные функциям микросхемы К155ЛАЗ, т. е. функции И-НЕ при позитивной и функции ИЛИ-НЕ при негативной логиках. Микросхема К155ЛА1 (рис. 5.23) содержит два четырехвходовых элемента, и поэтому выполняемая ею функция называется и обозначается 4И — НЕ (4ИЛИ- НЕ). Так как полные таблицы, описывающие работу этой микросхемы, были бы велики, приведем их в сокращенном виде (табл. 5.7-5.9). Таблица 5.7 описывает работу одного элемента микросхемы К155ЛА1, табл. 5.8 и 5.9 - таблицы истинности при позитивной и негативной логиках соответственно.
Та б ли ца 5.7
Входы |
Выход |
|||
L |
X |
X |
X |
H |
X |
L |
X |
X |
H |
X |
X |
L |
X |
H |
X |
X |
X |
L |
H |
H |
H |
H |
H |
L |
Входы |
Выход |
|||
0 |
X |
X |
X |
1 |
X |
0 |
X |
X |
1 |
X |
X |
0 |
X |
1 |
X |
X |
X |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
Входы |
Выход |
|||
1 |
X |
X |
X |
0 |
X |
1 |
X |
X |
0 |
X |
X |
1 |
X |
0 |
X |
X |
X |
1 |
0 |
0 |
0 |
0 |
0 |
1 |

Рис. 5.24. Микросхема К155ЛА2

Рис. 5.25. Микросхема К155ЛЕ1

Рис. 5.26. Микросхема К155ИД4
Из табл. 5. 7 видно, что если хотя бы на одном из четырех входов элемента присутствует низкий уровень, то на выходе будет высокий уровень. Только когда на всех четырех входах высокий уровень, то на выходе — низкий уровень.
Микросхема К155ЛА2 (рис. 5.24, табл. 5.10) содержит один восьмивходовый элемент, который выполняет функцию 8И — НЕ при позитивной логике (табл. 5.11) и функцию 8ИЛИ — НЕ (табл. 5.12) при негативной логике.
Микросхема К155ЛЕ1 (табл. 5.13, рис. 5.25) содержит четыре элемента, каждый из которых имеет два входа и один выход и выполняет функцию ИЛИ — НЕ при позитивной логике(табл. 5.14) или функцию И — НЕ (табл. 5.15) при негативной логике.
Таблица 5.10
|
Входы |
|
Выход |
|||||
L |
X |
X |
X |
X |
X |
X |
X |
Н |
X |
L |
X |
X |
X |
X |
X |
X |
Н |
X |
X |
L |
X |
X |
X |
X |
X |
Н |
X |
X |
X |
L |
X |
X |
X |
X |
Н |
X |
X |
X |
X |
L |
X |
X |
X |
Н |
X |
X |
X |
X |
X |
L |
X |
X |
Н |
X |
X |
X |
X |
X |
X |
L |
X |
н |
X |
X |
X |
X |
X |
X |
X |
L |
н |
Н |
н |
н |
н |
н |
н |
Н |
Н |
L |
Входы |
Выход |
|||||||
0 |
X |
X |
X |
X |
X |
X |
X |
1 |
X |
0 |
X |
X |
X |
X |
X |
X |
1 |
X |
X |
0 |
X |
X |
X |
X |
X |
1 |
X |
X |
X |
0 |
X |
X |
X |
X |
1 |
X |
X |
X |
X |
0 |
X |
X |
X |
1 |
X |
X |
X |
X |
X |
0 |
X |
X |
1 |
X |
X |
X |
X |
X |
X |
0 |
X |
1 |
X |
X |
X |
X |
X |
X |
X |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
В РАБОЧЕМ РЕЖИМЕ
Итак, ПМ-ЭВМ собрана, реагирует на нажатия клавиш, индикация загорается и гаснет, по-видимому, так, как нужно. Но это еще не значит, что ПМ-ЭВМ полностью проверена и функционирует правильно. Гарантировать стопроцентную проверку вычислительной системы вообще невозможно, тем более с помощью имеющихся у читателя простейших средств. МП может неправильно выполнять некоторые операции и притом только для некоторых сочетаний кодов, микросхемы запоминающих устройств могут иметь неисправные или ненадежные ячейки, искажающие некоторые сочетания кодов. Отдельные элементы ЭВМ могут работать в предельных режимах по нагрузке, по временным допускам, по питанию, по уровню помех и выдавать сбои при изменении внешних условий. Рано или поздно это выявится в процессе эксплуатации. Однако надлежаще проведенные испытания в начале эксплуатации позволят выявить значительную часть дефектов и устранить их. Первое, что необходимо сделать, - это проверить работоспособность ОЗУ. Простейший способ - записывать в ячейки ОЗУ с помощью клавиатуры различные коды, а затем последовательно считывать их, проверяя совпадение. Такой метод очень трудоемок, так как ПМ-ЭВМ имеет 1024 ячейки ОЗУ, к тому же некоторые ячейки, надежные в статике, в динамике могут выдавать неверные коды. Приведенная ниже программа позволяет автоматически записать заданный код в произвольно заданную зону оперативной памяти. Программа записывается, начиная с ячейки ОЗУ с адресом 014Q OOOQ и занимает 24 ячейки. Зона памяти, в которую заносится код, может начинаться с ячейки 014Q 030Q. Этот адрес заносится в регистровую пару Н командой LXIH. Адрес конца зоны заносится в регистровую пару D командой LXID. Устанавливаемый код задается вторым байтом команды MVIM адреса 014Q 007Q и 014Q 024Q. Проверку правильности записи можно произвести вручную, последовательно просматривая память:
014000041 Ml: LXIH, 014Q 030Q
014001 030
014002014
014003021 LXI D, 017Q377Q
014 004 377
014005017
014006066 M2: MVIM, OOOQ
014 007 000
014010043 INXH
014011 174 MOV A, H
014012222 SUBD
014 013 302 JNZ M2
014014 006
014015 014
014016173 MOV A, E
014017225 SUBL
014 020 302 JNZ M2
014 021 006
014022014
014 023 066 MVI M, OOOQ
014 024 000
014025303 JMPM1
014 026 000
014027014
Путем незначительного усложнения программы можно автоматизировать проверку правильности записи:
014 000 006 MVI B, OOOQ
014 001 000
014002041 Ml: LXI H, 014Q 055Q
014003055
014 004 014
014 005 021 LXI D, 020Q OOOQ
014 006 000
014 007 020
014010160 M2: MOV M, В
014011 170 MOV А, В
014012226 SUBM
014013302 JNZM4
014014 035
014015 014
014016043 МЗ: INX H
014017174 MOV A, H
014 020 222 SUB D
014021302 JNZM2
014022010
014023 014
014024 173 MOV A, E
014025225 SUB L
014026302 JNZ M2
014027010
014030014
014031000 NOP
014032303 JMPM1
014033 002
014034 014
014035174 M4: MOV A. H
014036323 OUT 0010
014037 001
014040175 MOV A, L
014041323 OUT OOOQ
014 042 000
014043 176 MOV A, M
014044323 OUT002Q
014045 002
014046315 CALLSKL
014047 177
014050000
014051303 JMPM3
014052016
014053 014
В данной программе проверочный код заносится по адресу 014Q 001Q. Сверка кодов производится последовательно в порядке возрастания адресов. При обнаружении ошибки программа выводит адрес в порт 001 (старшие разряды) и в порт 000 (младшие разряды), содержимое ячейки — в порт 002 и переходит в режим опроса клавиатуры. Нажатие любой кнопки запускает программу на проверку следующих ячеек до новой ошибки, и так далее до конца проверяемой зоны. Для более полной проверки необходимо задавать различные проверочные коды, в предельном случае — от OOOQ до 377Q. Поставив на место команды NOP по адресу 014Q 031Q команду INRB (код 004Q), получим программу автоматической проверки памяти для всех кодов. Читатель" может сам оценить, какая программа удобнее в эксплуатации. Необходимо заметить, что ячейки ОЗУ, отведенные для программы проверки, должны быть заведомо исправными, и чем длиннее программа, тем труднее найти зону для ее размещения.
В результате проверки выясняется, какой частью ОЗУ можно располагать для работы. Лучше всего, когда все ячейки ОЗУ исправны и, значит, программы могут последовательно размещаться в ячейках памяти. Однако и при наличии дефектных ячеек (если их не слишком много) можно использовать почти весь оставшийся объем памяти, обходя дефектные места с помощью команды JMP.
С помощью простейших пробных программ необходимо также проверить исполнение всей системы команд МП.Например, программа MVI A, OPERA ADI, OPERB OUT PORT1 проверяет исполнение команд MVIA, ADI и OUT.
ВНЕШНЯЯ ПАМЯТЬ
Постепенно осваивая методы программирования и приемы работы на ПМ-ЭВМ, читатель рано или поздно столкнется с необходимостью, во-первых, увеличения объема памяти для размещения все более длинных программ и, во-вторых, сохранения уже отработанных программ в памяти при многократном включении и выключении питания. Поскольку ПМ-ЭВМ построена в соответствии со стандартной архитектурой вычислительных систем на базе МП типа КР580ИК80А, ее прямо адресуемая память может быть легко расширена до максимального объема 64 Кбайта.
Непосредственно на плате ПМ-ЭВМ могут быть дополнительно установлены микросхемы памяти на 2 Кбайта. При этом не потребуется никакого дополнительного оборудования, так как для выдачи сигналов выборки микросхем ОЗУ используются ранее не задействованные выводы дешифратора К155ИД4 (микросхема D11).
Память большего объема потребует для своего размещения дополнительной платы, на которой должны быть установлены свои адресные дешифраторы и другие микросхемы (кроме микросхем памяти), обеспечивающие нормальную работу устройства. В этом случае на плате ПМ-ЭВМ необходимо установить шинные буферы-формирователи для умощнения шин адреса и данных (например, на микросхемах типа К589АП16), причем буферы шины данных должны быть двунаправленными. Аналогично внутреннему буферу шины данных (микросхемы D9 и D10) для управления направлением передачи данных используется буферированный сигнал DBIN.
Для формирования энергонезависимой части памяти могут быть применены микросхемы ПЗУ с однократной записью информации, например типа КР556РТ4, которые уже использованы в ПМ-ЭВМ для хранения программы-монитора. Более удобными могут оказаться микросхемы ППЗУ с электрической записью и ультрафиолетовым стиранием типов К573РФ1, К573РФ2, К573РФ4, К573РФ5. Наконец, могут быть использованы микросхемы ППЗУ с электрической записью и стиранием информации, например типов КР558РР1 и КР558РР11.
Для сохранения информации могут быть использованы внешние носители, такие, например, как перфолента или магнитная лента. В этом случае поступают следующим образом: с помощью специальной программы вывода содержащуюся в ОЗУ информацию передают побайтно (параллельный вывод) или побитно (последовательный вывод) через устройство вывода на перфоратор или на магнитофон. Записанная на внешнем носителе информация может храниться неограниченно долго. При необходимости восстановить в ОЗУ ранее выведенную информацию она считывается с помощью перфосчитывающего устройства или магнитофона и вводится через устройство ввода в ОЗУ микро-ЭВМ под управлением программы ввода. Подчеркнем, что информация (данные, программы), считываемая из внешнего накопителя, обычно не используется непосредственно при исполнении рабочей программы, а сначала помещается в виде одного или нескольких массивов в ОЗУ, а затем уже используется в работе.
ЗВУКОВАЯ СИГНАЛИЗАЦИЯ
В рассмотренной в § 9.2 конструкции кодового замка мы уже использовали звуковую сигнализацию для подачи сигнала тревоги. Для этого наушник или репродуктор подключался через резистор 200 Ом к младшему разряду порта 001 между выводом 16 микросхемы D18 и источником +5 В. Определенный звуковой тон получался в результате того, что в порт 001 выводилось содержание регистра, инкрементируемого в постоянном темпе. Частота сигнала, получаемого с младшего разряда порта, равна половине частоты инкрементирования и задается временной задержкой соответствующего программного цикла. В следующем разряде частота вдвое меньше и т. д. Следовательно, подключая репродуктор не к младшему разряду порта, а к старшим, получим тон на соответствующее число октав ниже. Подавая на репродуктор через резисторы сигналы с разных разрядов порта, получим звуки одного тона, но с разным содержанием гармоник. Если же в несколько портов выводить содержимое регистров, к которым с постоянной частотой прибавляются различные числа, то, подключив репродуктор, к выходам портов через резисторы, можно получить различные аккорды.
Таким образом, звуки разных частот можно получать, прибавляя к содержимому регистра разные числа или же меняя частоту суммирования.
Подключим репродуктор и введем в ПМ-ЭВМ следующую программу:
014000061 Ml: LXISP,TAB
014001 036
014002014
014003301 М2: POP В
014 004 170 MOV A, B
014 005 267 ORA A
014006312 JZ.M1
014 007 000
014010014
014011171 МЗ: MOVA.C
014012267 ORA A
014013312 JZ,M4
014014 023
014015 014
014016034 INRE
014017173 MOV A, E
014020323 OUT, 0010
014 021 001
014022171 MOV А, С
014023075 М4: DCRA
014024302 JNZ,M4
014025 023
014026014
014 027 005 UCR B
014030302 JNZ,M3
014031 Oil
014032 014
014 033 303 JMP, M2
014 034 003
014035 014
014 036 175 TAB: до
014037 145
014040160 ре
014041161
014 042 144 ми
014043 177
014 044 136 фа
014 045 207
014 046 124 соль
014 047 230
014050113 ля
014 050 252
014051102 си
014 052 277
014 053 077 до
014054 313
014 055 000
014 056 000
Нажмем кнопки СБРОС и Ц. Репродуктор начинает наигры вать гамму. Воспроизводимая мелодия запрограммирована таблицей, начинающейся с метки TAB. Таблица содержит пары чисел, последовательно извлекаемые процессором из памяти с помощью команды POP В. Первое число из пары заносится в регистр С и задает высоту тона, второе число заносится в регистр В и задает длительность звучания ноты. Если в регистре В оказывается нуль, программа возвращается к началу таблицы. Если в регистре С оказывается нуль, формируется пауза. Подсчитав длительности программных циклов, нетрудно определить, какие числа в таблице соответствуют различным нотам, и запрограммировать любую мелодию. Надо иметь в виду следующее: для того чтобы различные ноты имели одинаковую длительность звучания, произведение первого числа из пары на второе должно быть постоянным.
Читатель может усложнить программу, чтобы получить более интересное звучание. Он может также самостоятельно разработать программу "музыкального ящика", позволяющую самому наигрывать различные мелодии, пользуясь клавиатурой ПМ-ЭВМ.Мир машинной музыки необъятен, и начав с простейших программ, читатель при желании может достичь в этой области новых и оригинальных результатов.