В этой главе рассмотрим основные характеристики четырех наиболее распространенных 8-битных микропроцессоров и некоторые приемы поиска неисправностей в микропроцессорных системах. Глава начинается с общего введения в микропроцессоры и микропроцессорные системы, рассчитанного на читателей, которые с ними еще не знакомы.
Микропроцессоры — это СБИС, которые могут воспринимать, дешифровать и выполнять команды, представленные в двоично-кодированной форме. Микропроцессор образует ядро любой микрокомпьютерной системы. Однако сами по себе микропроцессоры не являются компьютерами, поскольку требуют разнообразных вспомогательных («поддерживающих») микросхем. Среди последних важнейшую роль играют микросхемы, предназначенные для хранения последовательностей команд (т. е. программ) и изменяющейся информации (т. е. данных), привлекаемой для обработки.
Некоторые специализированные микропроцессоры снабжены внутренней памятью (для хранения программ и данных) и входными/выходными портами. Для таких микропроцессоров требуется минимальный объем внешних вспомогательных схем, и они идеально подходят для дешевых систем управления. Обычно упомянутые микропроцессоры называются однокристальными микрокомпьютерами.
Микропроцессоры в зависимости от размера двоичных чисел, которыми они оперируют, можно разделить на два класса. Большинство современных микропроцессоров выполняют операции над группами из 8 или 16 двоичных разрядов (бит). Очевидно, 16-битные микропроцессоры оказываются мощнее 8-битных. В ряде случаев их применения выбирать между этими двумя классами почти не приходится. Например, относительные стоимость и сложность 16-битных микропроцессоров препятствуют их использованию в системах управления. Поэтому будем ориентироваться на 8-, а не на 16-битные микропроцессоры.
8-битный микропроцессор вводит и выводит данные группами по 8 бит, называемых байтами. Данные передаются по восьми отдельным линиям D0—D7, образующим шину данных. Микропроцессоры определяют источник данных (откуда их нужно считать) и их получатель (куда данные нужно записать), указывая местоположение данных в форме уникального адреса. Для этого адресный двоичный набор помещается на шину адреса. В 8-битных микропроцессорах шина адреса всегда состоит из 16 отдельных линий А0—А15.
Адреса, по которым считываются и записываются данные, могут относиться к системной памяти (например, ЗУПВ или ПЗУ) либо к вводу-выводу (ВВ). Распределение адресного диапазона 64К в 8-битных микропроцессорах удобно показывать с помощью карты памяти.
Еще одна шина применяется для определения направления передачи данных (т. е. указания операции считывания или записи) и некоторых общих служебных функций, например сброса. Эта шина называется шиной управления и в зависимости от типа микропроцессора состоит из 5—15 линий.
Первое поколение 8-битных микропроцессоров появилось в середине 70-х годов, начиная с микросхемы 8008 фирмы Intel. По тому времени она казалась удивительным прибором, который мог заменить множество других микросхем и адресовать «огромную» память 16К байт.
По современным меркам микропроцессор 8008 выглядит довольно «слабым» по своим возможностям. Затем появился более «удачный» микропроцессор 8080, выполненный по NMOП-технологии (микропроцессор 8008 выпускался по РМОП-технологии). Микропроцессор 8080 имеет 16 линий адреса, обеспечивающих адресацию памяти 64К байт, и 78 команд, находящихся в распоряжении программиста. На базе этого микропроцессора были разработаны более совершенные микропроцессоры 8085 и Z80.
Наряду с фирмой Intel к производству микропроцессоров подключились и другие фирмы, например Motorola (микропроцессор 6800) и MOS Technology (микропроцессор 6502). В последующие годы было затрачено много усилий на переход к 16- и 32-битным микропроцессорам. Несмотря на новейшие разработки, первые образцы микропроцессоров, а также их модификации довольно широко применяются и в настоящее время. Цены на них значительно снизились, и теперь можно собрать микропроцессорную систему (состоящую из центрального процессора и ряда вспомогательных микросхем) за умеренную плату. Например, основой системы управления микроклиматом почти наверняка будет микропроцессор или однокристальный микрокомпьютер. Такая система не только выполнит все традиционные функции, но и обеспечит более сложные средства обработки данных, а также хранение их с возможностью использования в последующем и даже передаст информацию в удаленный компьютер. Сэкономленное при проектировании аппаратных средств время целесообразно посвятить программному обеспечению проекта, а последующие улучшения свести к замене программного ПЗУ.
Главными внутренними элементами микропроцессора являются:
• регистры для временного хранения команд, данных и адресов;
• арифметико-логическое устройство (АЛУ), которое реализует множество арифметических и логических функций;
• схема управления, воспринимающая и генерирующая внешние управляющие сигналы (например, считывания и записи) и формирующая сигналы для синхронизации всей системы.
Конечно, внутреннее устройство (или архитектура) микропроцессоров разных семейств различно, но в них имеется и много общих элементов. Например, в основных микропроцессорных семействах заметна тенденция сохранить «совместимость вверх» в части их внутренней архитектуры и системы команд, что, безусловно, делает новые приборы более привлекательными для потребителей.
Внутренние регистры — это просто наборы триггеров-защелок (см. гл. 3), в которые при обработке помещаются двоичные данные. Некоторые из регистров доступны программисту (т. е. он может записать в них или считать их содержимое), а другие не доступны. Регистры подразделяются на специализированные (т. е. имеющие конкретное назначение, например указание ячейки памяти или хранения результата операции АЛУ) и общего назначения.
Особенно важную роль в микропроцессоре играют следующие регистры.
Программный счетчик или указатель команды. Программный счетчик PC или указатель команды IP в 8-битном микропроцессоре — это 16-битный регистр, содержащий адрес следующего командного байта. При выборке каждого командного байта производится автоматический инкремент программного счетчика.
Аккумулятор А функционирует как регистр-источник и регистр-получатель; он одновременно является и источником одного из байт данных, которые требуются для операции АЛУ, и местом, куда помещается результат операции АЛУ. Разумеется, в 8-битных микропроцессорах длина аккумулятора составляет 8 бит.
Регистр флажков F (или регистр состояния SR, регистр кода условия CCR) содержит информацию о внутреннем состоянии микропроцессора, в частности об особенностях результата последней операции АЛУ. Подчеркнем, что регистр флажков не является регистром в обычном смысле, а представляет собой просто набор триггер-защелок, состояния которых зависят от результата операции АЛУ. Можно считать, что выход каждого триггера действует как флажок. Обычно имеются флажки нуля Z, переполнения V, отрицательного результата N и переноса С.
Указатель стека. В большинстве микропроцессоров требуется доступ к такой области внешнего ЗУПВ, которая предназначена для временного хранения данных. Эта область называется стеком и занимает от 16 до 256 байт. (Заметим, однако, что стек — это динамическая структура и его размер изменяется в процессе обработки).
Стек работает по принципу «последний пришел — первый ушел» (LIFO). Данные включаются («проталкиваются») в стек, а затем извлекаются («выталкиваются») из него. Указатель стека SP следит за положением стека, т. е. содержит адрес последней использованной ячейки стека. В некоторых микропроцессорах, например в микропроцессоре 6809, имеются два независимых указателя стека — системный указатель стека SSP и пользовательский указатель стека USР.
Регистр команды непосредственно программисту недоступен. Он содержит текущий командный байт, который декодируется дешифратором команды. Выходы дешифратора команды подаются в схему управления микропроцессора, определяющую направление передач данных и реагирующую на внешние сигналы, появляющиеся на шине управления, а также выполняет другие функции.
Упрощенная внутренняя архитектура типичного 8-битного микропроцессора показана на рис. 5.1.
Рис. 5.1. Упрощенная внутренняя архитектура типичного 8-битного микропроцессора.
Отметим, что линии внешней шины управления изолированы от линий внутренней шины с помощью буферов и основные внутренние элементы связаны быстродействующей внутренней шиной данных.
Рассмотрим вкратце функции наиболее важных внешних линий управления, которые имеются в большинстве микропроцессоров.
Считывание/запись. На линии считывания/записи R/W¯ действует сигнал низкого уровня, когда микропроцессор выполняет операцию записи, и сигнал высокого уровня в операции считывания. В некоторых микропроцессорах, например в Z80, имеются отдельные линии считывания READ и записи WRITE.
Запрос прерывания. На входной линии запроса прерывания или внешнее устройство формирует сигнал низкого уровня, обращая «внимание» микропроцессора на этот сигнал. Если флажок прерывания сброшен (логический 0), запрос воспринимается и микропроцессор прерывает обычную обработку и переходит к выполнению нужной процедуры прерывания.
Немаскируемое прерывание. Реакция на обычный запрос прерывания ( или ) определяется флажком прерывания, поэтому прерывание может быть замаскировано. В программу вводятся команды, которые устанавливают и сбрасывают флажок прерывания и, следовательно, разрешают или запрещают прерывания. Такой способ позволяет гибко реагировать на прерывания — мы сами определяем, воспринимаются они или игнорируются. Однако в некоторых ситуациях требуется, чтобы прерывание обслуживалось независимо от текущих действий микропроцессора. Для этой цели предусмотрена отдельная линия немаскируемого прерывания . Когда на ней появляется сигнал низкого уровня, выполнение программы прерывается независимо от состояния флажка прерывания, т. е. независимо от того, разрешены прерывания или запрещены.
Сброс. Сигнал низкого уровня на входной линии сброса применяется для инициализации системы, т. е. приведения ее в известное состояние, до обычного выполнения программы. При активном сигнале сброса программный счетчик PC переводится в определенное состояние (например, в него загружается нуль или конкретный адресный вектор) и прерывания запрещаются.
Выполняются и другие внутренние операции, зависящие от типа микропроцессора.
Синхронизация. Для упорядочивания передач данных внутри микропроцессора необходимо синхронизировать их специальными сигналами. Они формируются либо внешним генератором (рис. 5.2), либо аналогичным внутренним генератором. Для поддержания точности и стабильности сигналов синхронизации обычно применяется кварцевый осциллятор; диапазон частоты синхронизации составляет от 1 до 8 МГц.
Рис. 5.2. Типичная схема синхронизации.
Такт синхронизации (Т-состояние) является в микропроцессоре основным временным интервалом. Машинный цикл (М-цикл) — это минимальная неделимая единица действий микропроцессора. Обычно он состоит из 3–5 тактов синхронизации. Командный цикл, включающий в себя выборку, дешифрование и выполнение команды, обычно требует от 1 до 5 машинных циклов.
Оценим реальные временные интервалы, о которых идет речь. Предположим, что микропроцессор Z80 работает с частотой синхронизации 4 МГц. Тогда такт синхронизации (Т-состояние) соответствует 250 нс. Продолжительность машинного цикла (М-цикла) составляет от 0,75 до 1,25 мкс, а командного цикла (в зависимости от команды) — от 1,25 до 6,25 мкс. Другими словами, микропроцессор может выполнить от 160000 до 800 000 команд в секунду!
Даже самый совершенный микропроцессор практически бесполезен без «поддержки» других устройств, которые подразделяются на три группы.
Запоминающее устройство с произвольной выборкой. Выше мы говорили о том, что всем микропроцессорам требуется доступ к памяти со считыванием и записью, и хотя однокристальные микропроцессоры обладают такой небольшой внутренней памятью, обычно для организации памяти требуются соответствующие микросхемы (подробнее см. в гл.6).
Постоянное запоминающее устройство. Микропроцессорам необходима некоторая фиксированная память для управляющих программ и, возможно, операционных систем и интерпретаторов языков программирования высокого уровня. Такая память обеспечивается микросхемами постоянных запоминающих устройств (см. гл. 6).
Микросхемы для ввода-вывода. Чтобы выполнить любую полезную функцию, микропроцессор должен как-то взаимодействовать с внешним миром. Такие связи реализуются с помощью БИС, конфигурация которых определяется программно и которые называются программируемыми.
Микросхемы для ввода-вывода подразделяются на параллельные (одновременно передается байт) и последовательные (по единственной линии передается один бит за другим).
На рис. 5.3 показана базовая конфигурация микропроцессорной системы, содержащая центральный микропроцессор (ЦП), постоянное запоминающее устройство (ПЗУ), запоминающее устройство с произвольной выборкой (ЗУПВ) и микросхемы для ввода-вывода.
Рис. 5.3. Основные компоненты микропроцессорной системы.
Отметим наличие в системе трех шин; компоненты объединяются шинами адреса, данных и управления, поэтому одним из требований к вспомогательным микросхемам оказывается наличие у них тристабильных выходов. С их помощью обеспечивается отключение микросхемы от шины, когда последняя не требуется.
Вспомогательные микросхемы, например ПЗУ или ЗУПВ, почти всегда выбираются или разрешаются низким уровнем сигнала разрешения кристалла EN или выбора (выборки) кристалла CS.
Обычно эти сигналы формируют дешифраторы адреса, на входы которых подаются сигналы с шины адреса. Дешифратор адреса как бы разделяет имеющуюся память на блоки, каждый из которых соответствует конкретной вспомогательной микросхеме. Следовательно, когда микропроцессор считывает или записывает информацию, например в ЗУПВ, дешифратор адреса обеспечивает выбор только ЗУПВ, а внутренние буферы микросхем ПЗУ и ввода-вывода удерживают их выходы в высокоимпедансном состоянии.
Распределение пространства памяти в микропроцессорной системе удобно показывать с помощью так называемой карты памяти. 8-битный микропроцессор с 16-линиями адреса может адресовать любую из 65536 (216) ячеек памяти, поэтому диапазон адресов памяти составляет от 0 до 65535 (максимальный адрес). На рис. 5.4 показана типичная карта памяти с адресами.
Рис. 5.4. Типичная карта памяти системы управления с 8-битным микропроцессором.
Поиск неисправностей в микропроцессорных системах, особенно для новичков, может оказаться сложной задачей. Однако расстраиваться не нужно, потому что большинство неисправностей довольно просты и их можно обнаружить несложным прибором. До начала работы следует по возможности получить принципиальную схему и документацию по эксплуатации системы; в ней приводятся наиболее часто встречающиеся неисправности.
Отправной точкой при работе со схемной платой служит идентификация основных элементов, включая микропроцессор и вспомогательные микросхемы. Микросхемы полупроводниковой памяти обычно размещаются компактно, и их легко найти (подробнее см. в гл. 6), а микросхемы для ввода-вывода располагаются вблизи соответствующих разъемов. Генератор синхронизации легко найти по кварцу, а дешифраторы адреса выполняются на TTЛ-схемах либо на заказных логических матрицах (программируемые логические матрицы ПЛМ или нескоммутироваиные логические матрицы НЛМ).
Разобравшись в схемной плате и найдя основные микросхемы, нужно попытаться найти ответы на следующие вопросы.
1. В каком состоянии находится система — имеется ли какая-либо индикация или система выглядит полностью неработающей? В последнем случае прежде всего необходимо проверить напряжение питания +5 В. Если оно мало или отсутствует, следует отключить питание от печатной платы и установить, «виноват» блок питания или чрезмерная нагрузка из-за короткого замыкания в самой системе.
2. Нажмите кнопку сброса и посмотрите, возникают ли в системе какие-либо изменения. Если происходит частичный сброс (например, индицируется сообщение об авторском праве или появляется какой-то начальный стимул), неисправность микропроцессора маловероятна, а более правдоподобен отказ в какой-либо вспомогательной микросхеме, например в ЗУПВ.
3. Если наблюдается перемежающаяся неисправность (система какое-то время работает, а затем останавливается в непредсказуемой точке), проверьте все разъемы. Соединения в краевых разъемах довольно ненадежны, и их контакты следует периодически чистить. Аналогичная проблема возникает, если основные микросхемы вставлены в гнезда. Осторожно нажмите на каждую из «больших» микросхем и посмотрите, не возобновляется ли правильная работа. Иногда до замены микросхемы достаточно просто аккуратно вынуть ее и снова вставить, так как эта операция может прочистить контакты.
4. Если микропроцессор вроде бы работает и неисправность не перемежающаяся, целесообразно проверить сигналы управления в самом микропроцессоре. На рис. 5.6–5.8 показана разводка контактов четырех наиболее популярных 8-битных микропроцессоров.
Рис. 5.5. Разводка контактов микропроцессора 6502.
Рис. 5.6. Разводка контактов микропроцессора 6800.
Рис. 5.7. Разводка контактов микропроцессора 6809.
Рис. 5.8. Разводка контактов микропроцессора Z80.
С помощью логического пробника (см. приложение 2) убедитесь, что:
а) имеются сигналы на входе синхронизации (пробник показывает наличие импульсов). Если их нет, проверьте схему генератора синхронизации;
б) на входе сброса отсутствует сигнал низкого уровня (проверьте также действие короткого импульса при нажатии кнопки сброса). При «зависшем» входе сброса проверьте соответствующую схему формирования сигнала сброса;
в) отсутствует постоянный сигнал низкого уровня на входе немаскируемого прерывания. Если такой сигнал все же имеет место, попробуйте поочередно отключать внешние устройства до тех пор, пока сигнал немаскируемого прерывания не станет пассивным. Проверьте также микросхему ввода-вывода (можно временно вынуть ее из гнезда, не забыв, конечно, предварительно выключить питание);
г) линии считывания и записи (или одна линия считывания/записи) активны. Если микропроцессор выбирает команды и выполняет их, на этих линиях действует непрерывный поток импульсов. Если их нет, нажмите кнопку сброса и проверьте наличие кратковременной активности на линии считывания. В случае отсутствия импульсов и при срабатывании сигнала сброса, по всей вероятности, неисправен сам микропроцессор.
5. Если на предыдущих этапах проблема не выяснена, поочередно коснитесь логическим пробником каждой линии адреса и данных (при наличии осциллографа удобно использовать и его). Наблюдайте сигнал на каждой линии.
Если на какой-то линии постоянно действует сигнал низкого или высокого уровня (т. е. она «зависла») или постоянно находится в высокоимпедансном состоянии, выключите питание и попробуйте поочередно отсоединять вспомогательные микросхемы. В случае сохранения неисправности ее причиной может быть отказ в одном из внутренних буферов микропроцессора, что требует его замены.
6. Если все ваши попытки оказались тщетными, воспользуйтесь следующими «менее научными», но тем не менее эффективными приемами:
а) пусть система поработает некоторое время, затем поочередно коснитесь пальцем каждой микросхемы. Если какая-то микросхема слишком горячая, то вполне возможно, что неисправность произошла именно в ней (температуру можно сравнить, касаясь аналогичной микросхемы на этой же или другой печатной плате);
б) когда микросхемы вставлены в гнезда, поочередно вынимайте и заменяйте каждую из них (не забывая, конечно, выключать питание). Замену следует производить на заведомо работоспособную микросхему.
Данные в сложной микропроцессорной системе непрерывно изменяются с очень высокой скоростью (быстродействие многих современных микропроцессоров составляет более 1 млн. операций в секунду). Чтобы получить осмысленное представление о состоянии системы, в некоторых случаях требуется проанализировать изменение данных по командам. Для этого разработан способ восприятия данных от системы за небольшой временной интервал и запоминания их для индикации и наблюдения.
Как и многие современные контрольно-измерительные приборы, логические анализаторы содержат встроенные микропроцессоры. Стоимость этих приборов колеблется от 50 фунт. ст. (сравнительно несложный прибор с 16-ричным индикатором и небольшой памятью — 2К) до нескольких тысяч фунтов стерлингов (многофункциональный прибор с памятью 16К и дисплеем на электронно-лучезой трубке).
Логические анализаторы подключаются к исследуемой системе через входной порт и быстродействующую память для регистрации данных. Благодаря этому прибор может зарегистрировать часть изменяющихся данных, существующих в исследуемой системе.
В анализаторе обычно предусматриваются различные режимы запуска и сбора данных. Важно, чтобы он мог зафиксировать данные, имеющиеся в системе до и после определенной точки при выполнении программы. Для этого приходится сравнивать входную информацию с определенным пользователем запускающим словом. Когда в системе возникает запускающее слово (например, микропроцессор обращается по конкретному адресу памяти), схемы запуска формируют импульс, «замораживающий» состояние памяти для регистрации данных. Таким образом обеспечивается фиксация данных и их доступность для последующего анализа.
Еще один из способов запуска заключается в использовании импульса, генерируемого на одной из входных линий. Типичным примером такого запуска является регистрация данных до и после появления импульса на линии прерывания.
Большинство многофункциональных логических анализаторов обеспечивают два режима индикации — во временной области и в информационной области. В первом случае индицируется временная диаграмма в виде сигналов, показывающих состояния каждой входной лиши в выбранном временном интервале (диаграмма напоминает изображение на экране многоканального запоминающего осциллографа). Обычно допускается движение «окна» по памяти для регистрации (или перемещение курсора по неподвижному изображению), что позволяет получить более подробную информацию, включая двоичное и 16-ричное преобразования сигналов в конкретный момент времени. Индикация в информационной области производится в двоичном или 16-ричном форматах, а иногда позволяет дисассемблировать дг-.нные для различных микропроцессоров.