Справочник от Автор24
Поделись лекцией за скидку на Автор24

Классификация микропроцессоров и особенности их использования в цифровой аппаратуре.

  • 👀 612 просмотров
  • 📌 561 загрузка
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Классификация микропроцессоров и особенности их использования в цифровой аппаратуре.» doc
13.1. Классификация микропроцессоров и особенности их использования в цифровой аппаратуре. Стремительное развитие цифровых методов обработки информации обусловлено успехами интегральной технологии, позволяющей изготавливать на сегодняшний день цифровые микросхемы, содержащие сотни тысяч и даже миллионы логических элементов в одном кристалле. Использование микросхем повышенной степени интеграции позволяет существенно улучшить основные технико-экономические характеристики цифровой аппаратуры. Во-первых, значительно уменьшается число внешних соединений в аппаратуре из-за большей функциональной сложности самих микросхем. Поскольку в микроэлектронной аппаратуре внешние соединения являются одной из основных причин ее отказов, то их уменьшение при использовании микросхем повышенной степени интеграции позволяет повысить надежность аппаратуры. Во-вторых, сокращается общая длина соединений между элементами. Задержка сигнала на каждые 30 см соединений равна 1 нс. Отсюда следует, что создание устройств со сверхвысоким быстродействием принципиально возможно только на базе микросхем повышенного уровня интеграции, в которых общую длину межсоединений между соседними функциональными элементами можно довести до величины, не превышающей 1 см, что обеспечивает задержку распространения сигнала между элементами не более 0,03 нс. Кроме того, микросхемы повышенного уровня интеграции имеют по сравнению с микросхемами малого уровня интеграции меньшие размеры и более низкую стоимость в расчете на один функциональный элемент. Аппаратура, построенная на микросхемах высокой степени интеграции, является энергоэкономичной, что не маловажно при эксплуатации устройств с автономным электропитанием. Отмеченные преимущества стали причиной активного развития технологии иготовления микросхем повышенного уровня интеграции (микросхем БИС и СБИС) в начале 70-х годов прошлого века. Однако появление БИС и СБИС на начальном этапе поставило поблемы перед разработчиками микросхем и аппаратуры на их основе. Дело в том, что на начальном этапе БИС и СБИС были узкоспециализированными и представляли собой устройства жесткой логики с неизменяемыми структурой и функциональностью. По этой причине выпуск таких микросхем оставался небольшим и их себистоимость была высока из-за больших первоначальных затрат, обусловленных разработкой их логической структуры, изготовлением фотошаблонов и технологической подготовкой производства при малых объемах выпуска. Решение проблемы было достигнуто разработкой БИС, функции которых задаются путем подачи внешних электрических сигналов, изменяющихся по определенной программе. Такие БИС получили название микропроцессоров. Микропроцессор - это программно-управляемое устройство, предназначенное для обработки цифровой информации и управления процессом этой обработки, выполненное в виде одной или нескольких БИС. Качественным отличием микропроцессора от других типов микросхем является возможность их функциональной перестройки путем изменения внешней программы. В зависимости от программы микропроцессор может быть использован для решения самых разных задач и в этом способен заменить многие типы интегральных схем с "жесткой" логикой. Подобная универсальность микропроцессоров обусловила массовость их выпуска, что привело к снижению их стоимости, в результате чего экономически выгодным стало их использование в промышленной автоматике, транспорте, бытовой технике и т.д. Создание дешевых микропроцессоров с широкими функциональными возможностями обеспечило дополнительные преимущества цифровым методам обработки информации, что стимулировало их внедрение в такие отрасли, как телефония, радиосвязь, измерительная техника. Существует множество классификационных признаков микропроцессоров, вплоть до их поколений. Отметим лишь те признаки, которые исторически сформировались как основные и отражают состояние микропроцессорной техники на современном этапе. По разрядности обрбатываемых операндов на сегодняшний день можно выделить 8-, 16-, 32- и 64-разрядные микропроцессоры. Микропроцессоры с высокой разрядностью используются в основном в персональных и суперЭВМ. Использование таких микропроцессоров в специализированных задачах не всегда оправданно из-за их высокой стоимости и избыточности разрядности в отношении точности обработки и округления результатов. Достаточно широко в системах управления и измериельных приборах на сегодняшний день используются 8-разрядные микропроцессоры и микроконтроллеры. Объясняется это главным образом их широкой номенклатурой и низкой ценой. Даже при необходимости многоразрядной обработки, когда ее приходится выполнять по частям программно, быстродействие таких микропроцессоров оказывается достаточным в силу невысокой динамики большинства измерительных задач и контролируемых процессов. По назначению различают микропроцессоры универсальные и специализированные. Универсальные микропроцессоры применяются для построения систем решения широкого круга задач. Производительность решения задачи в этом случае слабо зависит от специфики самой задачи. Примером универсального микропроцессора является центральный процессор (CPU) персонального компьютера. Для повышения производительности системы, обусловленной именно спецификой задачи, стараются применять специализированные микропроцессоры, ориентированные на решение конкретной задачи. К таким микропроцессорам можно отнести математические, сигнальные, медийные, контроллеры устройств. Математические микропроцессоры имеют, как правило, развитую систему команд для выполнения не только элементарных математических операций, но и поддерживают на аппаратном уровне операции возведения в степень, нахождения тригонометрических, логарифмических и прочих функций. Такие процессоры выполняют обработку числовой информации в формате с плавающей запятой. Сигнальные микропроцессоры представляют важный класс микропроцессорной техники, используемой в измерительной аппаратуре. Они ориентированы на обработку в реальном времени оцифрованных значений аналоговых сигналов по специальным алгоритмам цифровой обработки сигналов (ЦОС) или в английской аббревиатуре «digital signal processing» (DSP). К таким алгоритмам можно отнести цифровую фильтрацию, дискретное преобразование Фурье для задач спектрального анализа сигналов, корреляционный анализ и пр. Все эти алгоритмы широко используются в измерительных методиках. В качестве примера бытового использования можно привести процессоры аудиообработки в системах воспроизведения звука, формирующих эффекты реверберации, эха и пр. Медийные микропроцессоры ориентированы на обработку в реальном времени аудио и видео потоков. Примером может служить графический процессор (GPU) видеосистемы персонального компьютера. Такой процессор имеет систему команд для формирования двухмерных и псевдотрехмерных изображений по специальным инструкциям стандартов DirectX и OpenGL, применяемых в трехмерной графике современных персональных компьютеров. Контроллеры устройств являются, пожалуй, самым широким классом микропроцессорных микросхем в силу большого количества самих устройств – объектов управления. Такие контроллеры выполняют функции местного управления исполнительными устройствами, задают режимы и функции работы периферии, осуществляют опрос датчиков при их наличии. Примерами могут служить процессоры управления бытовой техникой, бортовые компьютеры автомобилей, контроллеры управления внешними накопителями информации в компьютерах и многие подобные устройства. Нельзя путать контроллеры устройств с микроконтроллерами. Контроллеры устройств являются специализированными микросхемами и разрабатываются под конкретное устройство или под определенный класс устройств. Микроконтроллеры же представляют интегрированную в едином кристалле микропроцессорную систему и могут быть как специализированными, так и универсальными. По числу и типу команд микропроцессоры бывают с CISC-архитектурой и с RISC-архитектурой. CISC-процессоры – это микропроцессоры с полным набором команд. Как правило, CISC-процессорами являются универсальные микропроцессоры. Объясняется это тем, что универсальные микропроцессоры используются для решения широкого круга задач. А значит необходимо, чтобы как можно большее количество операций поддерживалось на аппаратном уровне соответствующими командами. Поскольку различные по сложности операции требуют для своего выполнения различного времени, то для CISC-процессоров характерно, что разные их команды выполняются в течение разного времени. Работа микропроцессора синхронизируется сигналами тактового генератора. А значит, разное время выполнения команд можно интерпретировать как разное количество тактов сигналов синхронизации. Считается, что схема управления CISC-процессора достаточна сложна из-за большого количества отрабатываемых ею команд. В специализированных задачах CISC-процессор является функционально избыточным, сложным, дорогим и потребляет неоправданно большую энергию от источника питания. Для многих специализированных задач нет необходимости использовать и разрабатывать микропроцессор с развитой системой команд. Достаточно иметь только те команды, которые нужны для решения данной задачи. Характерно это, например, для микропроцессоров сетевых маршрутизаторов, в задачу которых не входит обработка графики или выполнение каких-либо сложных математических расчетов. Между тем, для них важна скорость обработки запросов от пользователей сети и скорость пересылки больших потоков данных, т.е. выполнение достаточно простых команд пересылки с максимальным быстродействием. Поэтому было предложено создать класс микропроцессоров, имеющих ограниченный набор простых команд, но выполняемых в течение минимально короткого времени - одного такта сигнала синхронизации при возможности. Такие микропроцессоры получили название RISC-процессоров. RISC-процессоры – это микропроцессоры с сокращенным набором простых команд. Изначально для них характерна была более простая аппаратная реализация и система команд типа регистр-регистр. Но со временем принцип минимизации времени выполнения команд стали использовать и для достаточно сложных команд путем распараллеливания в микропроцессоре действий по их выполнению. Такой принцип называется конвейеризацией. Согласно этому принципу в микропроцессоре организуются конвейеры, представляющие собой очереди, между которыми обмен осуществляется через буферы. Такая организация позволяет начинать выполнение следующей команды, не дожидаясь результата предыдущей, если для нее результат предыдущей команды не нужен. Поэтому, несмотря на то, что одна команда может выполняться в течение нескольких тактов, при выполнении нескольких команд «в нахлест» друг на друга в общем потоке команд, среднее время окажется минимальным для отдельной команды. На сегодняшний день в качестве основного отличия CISC- и RISC-процессоров является не уровень сложности и развитости системы команд, а среднее время выполнения на одну команду. В RISC-процессорах оно минимально и по возможности одинаковое для всех команд. По способу организации памяти микропроцессорной системы различают микропроцессоры с Фон-Неймановской архитектурой и с Гарвардской архитектурой. В микропроцессорах с Фон-Неймановской архитектурой область памяти является общей и для программ и для данных. Это снижает производительность системы с позиции организации потоков данных и команд, поскольку обеспечивает только последовательное обращение к командам и данным по одной общей шине данных. В микропроцессорах с Гарвардской архитектурой для хранения программы используется область памяти, называемая памятью программ, а для хранения данных – область памяти, называемая памятью данных. Память программ реализуется в виде ПЗУ, поэтому в нее в процессе работы программы невозможно выполнить запись, а память данных - в виде ОЗУ. Причем для памяти программ используется своя независимая магистраль команд. К памяти данных обращение осуществляется по магистрали данных. Такая организация позволяет реализовывать параллельные во времени потоки данных и команд. Также для Гарвардской организации памяти характерно, что адресное пространство обоих сегментов памяти начинается с нулевых адресов. Гарвардская организация позволяет в значительной степени упростить реализацию конвеерной обработки информации. Но она достаточно сложна в аппаратной реализации, требует большого количества выводов микропроцессора. Поэтому для микропроцессоров обычно характерна Фон-Неймановская организация, а для микроконтроллеров, где вся структура микропроцессорной системы реализована в едином кристалле и, следовательно, вопрос о количестве информационных линий процессорного ядра не встает, характерна Гарвардская организация памяти. Гарвардская организация требует, чтобы рабочая программа находилась в ПЗУ программ, что не позволяет в разное время запускать разные программы и накладывает ограничение на реализацию на ее основе универсальных систем. В Фон-Неймановской организации такого ограничения нет, поскольку нет самого понятия памяти программ и памяти данных. Любые программы в такой системе могут размещаться в любых ячейках оперативной памяти в любой момент времени, что расширяет возможности по реализации универсальных микропроцессорных систем. Существуют и другие классификационные признаки, которые можно встретить в литературе, но на сегодняшний день они либо потеряли свою актуальность, либо не являются значимо информативными, и по этой причине нами рассматриваться не будут. Применение микропроцессоров открыло широкие возможности усовершенствования цифровой аппаратуры, расширения функциональных возможностей, позволило увеличить сложность информационных систем без существенного увеличения стоимости, улучшить их характеристики. Так, например, точность измерительных приборов может быть увеличена за счет использования цифровых методов коррекции погрешностей и цифровой фильтрации. Надежность может быть повышена путем применения более надежных, но менее прецизионных элементов в аналоговых трактах с последующей минимизацией методами статистической обработки вносимых случайных погрешностей. Применение микропроцессоров позволяет также улучшить эксплуатационные качества аппаратуры за счет расширения ее функциональности, организации экранного меню в пользовательской интерфейсной части приборов, автоматизации процесса, получения функциональных зависимостей рассчитываемых параметров, использования методов самоконтроля и самодиагностики. Именно в измерительной технике особенно эффективно проявляется такое важное свойство микропроцессоров, как встраиваемость, возможность приблизить вычислительную технику непосредственно к объекту измерения, а иногда использование микропроцессоров становится целесообразным в конструктивном объединении с первичными преобразователями информации. Построенная на базе микропроцессоров цифровая аппаратура может быть легко адаптирована под новую задачу без значительного изменения ее аппаратной части. Функции прибора легко меняются изменением рабочей программы. Микропроцессорная организация позволяет цифровому прибору взаимодействовать с большим числом входных и выходных устройств, фиксировать в памяти большое количество данных. При проектировании цифровых устройств на базе микропроцессоров следует учитывать, что насколько не был бы быстродействующим микропроцессор, реализация функций в этом случае будет программная, а значит более медленная, чем аппаратная. Поэтому при обработке информации с динамическими характеристиками в диапазоне радиочастот наиболее эффективным остается аппаратная реализация функций традиционными схемотехническими методами жесткой логики, либо комбинация аппаратного и программного подхода. 13.2. Типовые структуры микропроцессорных систем. Микропроцессор, взятый отдельно, не может выполнять каких-либо полезных функций. Для реальной пользы микропроцессор должен использоваться совместно с памятью и устройствами ввода-вывода, подключаемыми через специальные регистры, называемые портами. Такое объединение микропроцессора с памятью и портами ввода-вывода позволет получить микропроцессорную систему. Существуют три типовые структуры микропроцессорных систем: магистральная, радиальная и радиально-магистральная. Каждая из этих структур обладает своими преимуществами и недостатками. Использование той или иной структуры определяется задачей, решаемой микропроцессорной системой. Магистральная структура или, как ее еще называют, структура с общей шиной предполагает подключение всех составляющих микропроцессорной системы к микропроцессору по одной группе шин. Подобная структура представлена на рис.13.1. Шины представляют собой набор соединительных проводников-линий, объединяющих одноименные выводы всех периферийных модулей. По каждой линии может быть передано значение одного разряда двоичного кода в виде уровней напряжения, соответствующих логическому нулю или логической единицы. Периферийными модулями в рассматриваемой структуре являются запоминающие устройства (ОЗУ и ПЗУ), а также регистры портов ввода-вывода для подключения внешних устройств (клавиатуры, индикатора, таймера, АЦП, ЦАП, различных датчиков и исполнительных механизмов). По роду передаваемой информации все шины разделены на три группы, образующие шину данных, шину адреса и шину управления. Характерной особенностью шины данных является ее двунаправленность, обеспечиваемая буферными регистрами, под которой понимается возможность передачи данных в разные моменты времени в различных направлениях, например, сначала от микропроцессора к периферийному модулю, а затем в обратном направлении. Ещё одна особенность этих буферных регистров заключается в том, что они являются трехстабильными, т.е. выходы этих регистров могут принимать третье пассивное, высокоимпедансное состояние, благодаря чему регистр оказывается отключенным от шины данных. Каждый периферийный модуль микропроцессорной системы имеет вход для приема сигнала CS (выбор кристалла). В процессе работы с помощью этого сигнала "активизируется" только один из периферийных модулей. Выходы буферных регистров остальных модулей остаются в высокоимпедансном состоянии. Рис.13.1. Стуктура МП-системы с общей шиной Поскольку микропроцессор должен обмениваться данными с определенными ячейками памяти запоминающих устройств или с определенными портами, то для возможности обращаться (адресоваться) к ним, каждая ячейка памяти и каждый порт ввода или вывода имеют свои индивидуальные номера - адреса. При обмене данными микропроцессор устанавливает двоичный код, соответствующий адресу порта или ячейки памяти на шине адреса. Шина адреса является однонаправленной, т.е. адреса передаются только от микропроцессора. Рассматриваемая микропроцессорная система содержит два модуля памяти: модуль ОЗУ и модуль ПЗУ. В общем случае в системе может содержаться несколько модулей (микросхем) ОЗУ и ПЗУ, каждый из которых имеет вход для приема сигнала CS. Во всех случаях, когда в системе имеется более одного модуля памяти, часть кода адреса ячейки памяти должна указывать, к какому модулю памяти производится обращение. Эта часть называется кодом выбора модуля и определяется старшими разрядами адреса. Оставшаяся часть кода адреса, образованная младшими разрядами адреса, выбирает ячейку памяти внутри модуля и называется адресом ячейки внутри модуля. Дешифрация кода выбора модуля производится с помощью дешифратора выбора модуля памяти, который вырабатывает соответствующий сигнал CS. Дешифрация адреса ячейки осуществляется внутренним дешифратором модуля. Входы этого дешифратора (адресные шины модуля памяти) подключаются к соответствующим линиям шины адреса. В рассматриваемой системе содержится один порт ввода и один порт вывода. В общем случае портов ввода-вывода может быть гораздо больше. Поскольку каждый порт представляет собой один регистр, то дешифрация номеров портов осуществляется только внешним дешифратором, формирующим сигнал CS выбора портов. Дополнительным условием «активизации» любого периферийного модуля является наличие соответствующего сигнала на шине управления. По линиям шины управления от микропроцессора к периферийным модулям поступают сигналы, определяющие выбор группы модулей (порты или модули памяти), а также направление обмена данными. Такими сигналами являются: сигнал чтения из модулей запоминающих устройств RDM (read memory); сигнал записи в модули запоминающих устройств WRM (write memory), сигнал чтения из порта ввода RDIO (read input/output), сигнал записи в порт вывода WRIO (write input/output). Например, при записи числа в ячейку памяти ОЗУ микропроцессор устанавливает на шине адреса адрес этой ячейки памяти, на шине данных – двоичный код записываемого числа, и выдает на линию шины управления сигнал WRM. При этом с шины данных число записывается в адресуемую ячейку памяти ОЗУ. При чтении данных из какого-либо порта ввода микропроцессор устанавливает на шине адреса адрес этого порта и выдает на соответствующую линию шины управления сигнал RDIO. При этом адресуемый порт ввода передает информацию со своего входа на шину данных, откуда она считывается микропроцессором. Часто процесс ввода-вывода с (из) внешних устройств организуют в режиме прерывания. Этот режим характеризуется тем, что инициатива ввода-вывода информации при нем принадлежит внешнему устройству. Для инициализации режима ввода-вывода по прерыванию и передачи в микропроцессор номера устройства, запрашивающего прерывание, служит контроллер прерывания. Более подробно назначение и описание контроллера прерывания будет рассмотрено в этом параграфе позже. На изображенной на рис.13.1 схеме шина данных разделена системным контроллером на локальную и системную. Системная шина данных связывает все периферийные модули между собой и с микропроцессором. Локальная шина данных связывает системный контроллер с микропроцессором. Системный контроллер является вспомогательным элементом микропроцессорной системы и его функции индивидуальны для разных микропроцессорных комплектов микросхем. Обычно системный контроллер используется для расширения функций шины управления, добавляя в нее управляющие сигналы, отсутствующие в выводах микропроцессора. Подключение его в схему микропроцессорной системы также индивидуально для каждого микропроцессорного комплекта. В приведенной на рисунке схеме системный контроллер формирует часть сигналов шины управления из служебных слов, передаваемых по шине данных в моменты времени, когда шина данных не используется для обмена информацией с периферийными модулями. Также системный контроллер в данном случае выполняет функцию шинного формирователя. Микропроцессор, системный контроллер и ряд вспомогательных узлов (тактовый генератор, шинные формирователи и прочие) образуют так называемый процессорный модуль. Поскольку в структуре с общей шиной обмен информацией между модулями системы возможен только поочередный, то это снижает производительность системы с позиции передачи данных. Это является недостатком такой структуры. Однако у нее есть и преимущество – это простая аппаратная реализация. В некоторых случаях можно обойтись даже и без системного контроллера, а периферийные модули подключать непосредственно к выводам шин данных и адреса микропроцессора. Для возможности организации параллельных потоков информации используется радиальная структура или, как ее еще называют, структура с распределенными шинами. Вариант подобной организации представлен на рис.13.2. В представленной структуре используются раздельные магистрали (группы шин адреса, данных и управления) для связи портов ввода-вывода и запоминающих устройств с процессорным модулем. Причем в представленном примере для каждого типа памяти (памяти программ и памяти данных) используются независимые магистрали. Подобная структура отражает Гарвардскую модель микропроцессорной системы. Каждая магистраль в этом случае отвечает за связь своего типа периферийного модуля с процессорным модулем и позволяет осуществить независимый параллельный во времени обмен информацией. Однако это достигается за счет значительного увеличения аппаратных средств, участвующих в построении микропроцессорной системы. В частности, значительно усложняется аппаратная реализация системного контроллера, который в этой схеме распределяет ресурсы локальной магистрали микропроцессора между магистралями периферии. Рис.13.2. структура МП-системы с распределенными шинами Следует отметить, что рассмотренное разбиение составных частей микропроцессорной системы на модули носит функциональный характер, а не конструктивный. В настоящее время часто все компонетнты микропроцессорных систем реализуются в едином кристалле микросхемы. Такие микросхемы называются микроконтроллерами. Использование микроконтроллеров позволяет значительно упростить разработку микропроцессорной системы, поскольку все необходимые компоненты такой системы, а именно АЦП, ЦАП, интерфейсные узлы, модуляторы, демодуляторы и многие другие, уже содержатся в кристалле микроконтроллера. Еще более гибкой и более сложной в аппаратной реализации является радиально-магитсральная структура. В тех связях периферии с микропроцессором, где необходима высокая скорость обмена информацией, используется радиальный принцип, а где высокая скорость не нужна – магистральный. Примером может служить структура персонального компьютера. По магистральному принципу в нем строится шина PCI (шина периферийных устройств), а по радиальному – шины подсистемы памяти и видеосистемы. В специализированных микропроцессорных системах такая организация используется редко, поскольку она является сложной и дорогой для сравнительно медленных задач. 13.3. Принцип программного управления в микропроцессорной системе. Работа микропроцессорной системы, как и любого цифрового устройства, заключается в обработке исходных данных по заданному алгоритму. Под алгоритмом работы цифрового устройства понимается набор последовательно выполняемых действий по обработке исходных данных с целью получения требуемого результата. В микропроцессорной системе алгоритм реализуется при выполнении программы, хранимой в памяти в виде последовательности команд. Программа работы встроенной в какое-либо устройство специализированной микропроцессорной системы хранится в ПЗУ. В случае использования микропроцессорной системы в качестве универсальной, ОЗУ используется и для хранения программ. В этом случае обычно используется ПЗУ с малым объемом, куда записывается небольшая программа-загрузчик, под управлением которой в начале работы в ОЗУ с какого-либо внешнего устройства загружается рабочая программа. Выполнение любой команды начинается с чтения микропроцессором из запоминающего устройства кода этой команды, называемого кодом операции. Далее этот код должен быть дешифрирован микропроцессором и по результатам дешифрации определяются дальнейшие его действия по выполнению этой команды. Если команда имеет операнд, т.е. значение, над которым команда выполняет действие, то в команде должно быть определено местонахождение этого операнда. Он может находиться в памяти, считываться из порта ввода или выводиться в порт вывода, присутствовать в самой команде в качестве константы. После окончания выполнения текущей команды микропроцессор переходит к выполнению очередной команды, т.е. обращается к ячейке памяти, где хранится код следующей команды. Каждая команда требует для своей реализации выполнения определенной последовательности элементарных преобразований, которые называются микрооперациями и реализуются микрокомандами. К ним относятся пересылки информации между частями системы, логические поразрядные операции, сдвиги информации и другие. Каждая микрооперация выполняется в течение одного такта сигнала синхронизации. Количество типовых микрокоманд у микропроцессора обычно небольшое. Но, комбинируя микрокоманды в определенные последовательности, можно получить систему команд любого уровня сложности и развитости. Система команд – это полный перечень команд, которые может выполнять микропроцессор. Дешифрацию кода команды, разбивку команды на микрокоманды и формирование управляющих сигналов, под действием которых команда отрабатывается, выполняет устройство управления микропроцессора. Существуют микропроцессоры, в которых устройство управления представляет собой схему жесткой логики, и микропроцессоры, в которых устройство управления представляет собой ПЛИС. У первых система команд фиксированная, у вторых – изменяемая. Время, необходимое для считывания команды из памяти и ее выполнения, называется циклом команды. Цикл команды реализуется обычно за несколько машинных циклов (от одного до пяти). Машинный цикл - это промежуток времени, затрачиваемый микропроцессором на одно обращение к какому-либо периферийному модулю (ОЗУ, ПЗУ, порту ввода или вывода). В микропроцессорах используются обычно следующие базовые типы машинных циклов: • выборка команды (прием кода операции и его дешифрация); • считывание из памяти; • запись в память; • ввод из порта ввода; • вывод в порт вывода; • прерывание; • останов. Каждый машинный цикл состоит из микрокоманд и выполняется за определенное количество тактов сигналов синхронизации. Действия в каждом из тактов индивидуальны для конкретного микропроцессора, но можно выделить общие типовые действия для многих их типов (в порядке очередности их выполнения): • вывод на шину адреса кода адреса вызываемого порта или ячейки памяти, а на шину управления сигналов их активизации; • анализ ответных управляющих сигналов, выставление на шину данных передаваемой информации или чтение получаемой; • расшифровка команды и выполнение внутренних операций. 13.4. Организация ввода-вывода в микропроцессорной системе. Вводом-выводом информации называют процесс передачи данных между микропроцессором и основной памятью (ОЗУ, ПЗУ), между микропроцессором и внешними устройствами, а также между основной памятью и внешними устройствами. Различают три режима ввода-вывода: программный, по прерываниям и прямой доступ к памяти. Программный ввод-вывод инициируется программой работы микропроцессора, т.е. в определенных местах программы записываются команды опроса портов или обращения к памяти, под управлением которых осущетсвляется процесс ввода-вывода. Поэтому программный ввод-вывод называют еще синхронным режимом ввода-вывода, т.е. управляемым командами микропроцессора. Эти команды выполняются немедленно, если внешние устройства имеют свойство постоянной готовности к приему или передаче данных. Такими устройствами могут быть, например, светодиодные или ЖК-индикаторы на выходе порта вывода или набор кнопок на входе порта ввода. Если внешнее устройство таким свойством не обладает, то при выполнении команды необходимо осуществлять проверку управляющего сигнала готовности внешнего устройства к передаче или приему данных. Если готовность устройства не подтверждается, то микропроцессор переходит в режим ожидания активного уровня сигнала готовности. Недостатком такой организации ввода-вывода являются большие временные затраты на ожидание готовности медленного внешнего устройства. Однако такой способ ввода-вывода имеет преимущество, заключающееся в простой аппаратной реализации. Поэтому такой режим ввода-вывода используется преимущественно для осуществления обмена данными с устройствами постоянно готовыми к этому обмену. Ввод-вывод по прерываниям производится по инициативе внешних устройств и вводится при необходимости помимо выполнения основной программы организовать обработку информации от этих устройства по мере ее поступления. По прерыванию может подключаться клавиатура в микропроцессорной системе, как это показывалось в разделе 8.3.1. Поскольку режим ввода-вывода по прерыванию активизируется внешним устройством, то его называют еще асинхронным вводом-выводом. При этом микропроцессор должен прервать выполнение основной программы и перейти к подпрограмме обработки устройства, запросившего прерывания. Переход к обработке запроса прерывания осуществляется по сигналу запроса прерывания INT от внешнего устройства (рис.13.1) по мере готовности на его выходе данных к передаче или по мере потребности получения им данных от микропроцессора. В микропроцессорной системе может быть подключено несколько внешних устройств по прерываниям (по линиям IRQ0…IRQn). Поэтому внешнее устройство должно сообщить не только о факте прерывания, но и свой номер, чтобы микропроцессор знал, какую именно обрабатывающую подпрограмму запускать. Для этих целей в микропроцессорных комплектах микросхем имеются обычно специальные микросхемы, называемые контроллерами прерываний. Контроллер прерывания воспринимает хотя бы одно прерывание с линий IRQ0…IRQn и формирует сигнал запроса прерывания INT на шину управления микропроцессора. Далее он должен в виде двоичного кода сформировать на шину данных микропроцессора команду запроса прерывания, где определенные биты этого кода будут указывать на номер устройства, запросившего прерывание. Поскольку сигнал запроса прерывания может поступить в любое время, даже когда микропроцессор выполняет очередную команду программы и его шина данных занята, то анализ этого сигнала микропроцессором должен выполниться только после завершения текущей выполняемой команды. Поэтому контроллер прерывания должен дождаться от микропроцессора подтверждения прерывания в виде сигнала INTA, и только после этого выставить на шину данных код команды прерывания. Не всегда можно допустить, чтобы работа микропроцессора прерывалась. Прерывания делят на маскируемые и немаскируемые. Немаскируемые прерывания вызываются внешними устройствами и выполняются всегда. Маскируемые прерывания отличаются от немаскируемых тем, что могут быть разрешены или запрещены программой путем включения в нее специальных команд разрешения или запрещения прерываний. Обычно по умолчанию маскируемые прерывания при включении питания микропроцессора запрещены. Поэтому, если в программе предполагается реализация ввода-вывода по прерываниям, их нужно в определенном месте программы соответствующей командой разрешить. И хотя бы одно обслуженное маскируемое прерывание запрещает остальные. При необходимости и в далнейшем обслуживать эти прерывания их также нужно разрешить. Различают также прерывания одноуровневые и многоуровневые. Уровень прерывания задается его приоритетом, т.е. преимущественным обслуживанием того или иного внешнего устройства при поступлении сразу нескольких прерываний. В многоуровневых системах прерываний подпрограмма обслуживания прерывания более низкого уровня может быть прервана подпрограммой обслуживания прерывания более высокого уровня. Иными словами реализуется режим прерывания во время прерывания. Ввод-вывод с прямым доступом к памяти (ПДП) используется в случаях, когда необходимо реализовывать обмен между основной памятью и внешними устройствами большими массивами данных. Как правило, ввод-вывод данных в микропроцессоре реализуется через один из его регистров, называемым аккумулятором. Таким образом, передача данных из внешнего устройства в основную память осуществляется с помощью следующей последовательности команд для каждого элемента массива данных - сперва данные заносятся из внешнего устройства в аккумулятор, затем из аккумулятора в основную память. Т.е. данные пересылаются через микропроцессор и под его управлением. Это значительно снижает производительность системы при пересылке пакетов данных определенного объема. Причем такие пакеты данных обычно записываются (считываются) с внешнего устройства в соседние ячейки памяти. Это легко сделать в режиме ПДП. Суть его заключается в следующем: буферные регистры данных и адреса микропроцессора переводятся в высокоимпедансное состояние, благодаря чему микропроцессор оказывается отключенным от шины данных и шины адреса. Отключение микропроцессора позволяет внешнему устройству самостоятельно обмениваться данными с памятью, для чего устройство должно само устанавливать на шине адреса адрес требуемой ячейки памяти, а также формировать управляющие сигналы чтения и записи. Для этих целей в микропроцессорных комплектах микросхем имеются специальные микросхемы, называемые контроллерами прямого доступа к памяти. Эти микросхемы берут на себя задачу управления памятью, а именно формируют адреса соседних ячеек памяти в режиме автоинкремента или автодекремента и управляющие сигналы чтения и записи памяти и портов. Характерен ввод-вывод в режиме ПДП обычно для микропроцессорных систем универсального назначения, где в разные моменты времени в соседние ячейки оперативной памяти загружаются с внешних накопителей разные программы в виде файлов, а также сохраняются из памяти в виде файлов большие количества промежуточных и конечных результатов. Для специализированных автономных микропроцессорных систем такой режим организуется редко, поскольку такие системы работают в основном с одной программой, уже хранимой в ПЗУ, и быстродействие обращения к внешним устройствам в них не столь значимо. 13.5. Интерфейсы микропроцессорных систем. Одним из центральных моментов в проектировании микропроцессорной системы является выбор интерфейсов. Интерфейсы представляют собой совокупность унифицированных аппаратных, программных и конструктивных средств, необходимых для реализации алгоритмов взаимодействия различных функциональных устройств. Стандартизации в интерфейсе обычно подлежат: форматы передаваемой информации, команды и состояния, состав и типы линий связи, алгоритм функционирования, передающие и приемные электронные схемы, параметры сигналов и требования к ним, конструктивные решения. Скорость передачи данных по интерфейсу измеряется в Бодах. Бод определяет, сколько бит передается в единицу времени, т.е. в секунду. К основным характеристикам интерфейса относят: функциональное назначение, принцип обмена информацией, способ обмена, режим обмена, количество линий, число линий для передачи данных (разрядность), количество адресов, количество команд, быстродействие, длину линий связи, число подключаемых устройств (нагрузочная способность), тип линии связи. По функциональному назначению интерфейсы разделяют на внутренние (межплатные, межелементные и системные) и внешние (для периферийных устройств, для локальных сетей, для распределенных систем). Внутренние интерфейсы определяют комплекс принятых соглашений по организации связей между микросхемами, модулями и блоками, составляющими микропроцессоную систему. Внешние интерфейсы организуют связь между несколькими микропроцессорными системами. По принципу обмена информацией выделяют интерфейсы с параллельной, последовательной и параллельно-последовательной передачей информации. В параллельных интерфейсах в единицу времени данные пересылаются по нескольким сигнальным линиям одновременно. В последовательных – по одной линии бит за битом. Аналогом здесь можно привести принцип организации параллельных и последовательных регистров. Методически интерфейсы с параллельной передачей должны обладать более высокой пропускной способностью. Однако, это не всегда так. Дело в том, что в параллельных интерфейсах из-за большого количества сигнальных линий, объединенных в кабели, существенное влияние оказывают паразитные емкости этих кабелей, увеличивающиеся с увеличением длины кабеля. Кроме того на такие кабели оказывает вляние поперечная помеха, также увеличивающая свое влияние с увеличением длины кабеля. Это накладывает ограничение на длину соединительных кабелей. В последовательных интерфейсах кабели обычно представляют витую пару и их длину можно реализовывать значительно большую, чем в параллельных интерфейсах. При проектировании специализированных микропроцессорных систем на базе микроконтроллеров разработчики часто сталкиваются с проблемой нехвати портов для подключения большого количества периферии. Поэтому выводы микросхем микроконтрллеров часто приходится экономить. По этой причине в микроконтроллерных микропроцессорных системах в настоящее время часто используются последовательные интерфейсы, особенно внутренние. По режиму обмена информацией различают интерфейсы с симплексным, полудуплексным, дуплексным и мультиплексным режимами обмена. Симплексный режим обмена характерен тем, что только один из абонентов может в любой момент времени инициировать передачу информации. Полудуплексный режим обмена обеспечивает инициализацию связи любым абонентом, если линия связи интерфейса свободна. Дуплексный режим обеспечивает связь любому абоненту в любой момент времени. Мультиплексный режим позволяет связываться только между парами абонентов и в единственном направлении от одного к другому. Мультиплексный режим характерен для магистральной организации, когда поочередно разные устройства включаются в общую шину. По способу передачи информации во времени различают интерфейсы с синхронной передачей данных (с постоянной временной привязкой в цикле сбора информации) и с асинхронной (без постоянной временной привязки к определенному временному интервалу цикла сбора). В первом случае передача синхронизируется специальными синхроимпульсами CLK в виде последовательности прямоугольных импульсов. Во втором – управляющими сигналами «ГОТОВНОСТЬ» к обмену, «НАЧАЛО», «КОНЕЦ» и «КОНТРОЛЬ» обмена. В качестве примера магистральных интерфейсов можно привести асинхронные мультиплексные интерфейсы с параллельным способом передачи: 8-разрядные интерфейсы Microbus, Z-bus, шина iSBX, ISA; 16-разрядные интерфейсы Unibus (отечественный аналог ОШ), Multibus I, Q-bus, EISA; 32-разрядные интерфейсы Vercabus, PCI. В качестве внешних интерфейсов периферийных устройств наиболее широкое распространение получили последовательные интерфейсы RS-232, USB и параллельный интерфейс Centronix. В микропроцессорной технике для согласования микросхем аналого-цифровых и цифро-аналоговых преобразователей, памяти и прочих с микропроцессорами и микроконтроллерами широко используются внутренние последовательные интерфейсы I2C, SPI и MicroLAN. Для программирования внутренней памяти программ и отладки программного обеспечения микроконтроллеров используется интерфейс JTEG. Следует отметить, что в составе микропроцессорных комплектов имеются специальные интерфейсные БИС, обеспечивающие совместимость по электрическим, конструктивно-технологическим и эксплуатационным параметрам процессорного модуля с внешними устройствами. Каждый микропроцессорный комплект характерен наличием, как правило, параллельных и последовательных интерфейсных устройств, выполненных в виде отдельных микросхем, представляющих собой регистры, буферные схемы и специализированные контроллеры. Такие микросхемы используются как шинные формирователи для организации внутримашинных магистралей и как внешние интерфейсы периферийных устройств. 13.5.1. Интерфейс RS-232. Приведем в качестве примера организацию наиболее часто используемых в микроконтроллерных системах интерфейсов. Начнем с интерфейса RS-232. Принято также обозначение EIA-232 этого стандарта. Этот интерфейс обеспечивает последовательный мультиплексный режим связи. Для него сигнал логической единицы имеет уровень напряжения менее –3 В (обычно –10 В) и сигнал логического нуля - уровень напряжения более +3 В (обычно +10 В). Гарантированная длина кабеля для надежной работы интерфейса может быть до 30 м в зависимости от скорости передачи. Есть микросхемы, которые выполняют преобразование стандартных ТТЛ-уровней в уровни стандарта RS-232. Примером может служить микросхема MAX232A производства фирмы Maxim, условное графическое обозначение и типавая схема включение которой показаны на рис.13.3. Микросхема преобразует уровни напряжений стандарта ТТЛ (уровень нуля 0,2 В и уровень единицы 3,5 В, рельно 0 В и 5 В) в уровни напряжения стандарта RS-232 (уровень единицы –10 В и уровень нуля +10 В) и наоборот для двух равноценных каналов 1 и 2. Вывод T1in микросхемы является входом усилителя первого канала с входными напряжениями ТТЛ, вывод T1out - выходом усилителя первого канала с уровнями напряжений RS-232. Вывод R1in является входом усилителя первого канала с входными напряжениями RS-232, вывод R1out - выходом усилителя первого канала с уровнями напряжений ТТЛ. Аналогично назначение выводов второго канала. Существет аналогичная микросхема MAX242, отличающаяся от рассмотренной тем, что у нее ТТЛ-выходы усилителей обоих каналов выполнены по трехстабильной схеме. Для управления состояниями этих выходов микросхема MAX242 имеет дополнительный управляющий вход . Рис.13.3. УГО и схема включения микросхемы MAX232A. Передача данных по протоколу стандарта RS-232 осуществляется обычно побайтно бит за битом (в общем случае от 5 до 8 бит) по независимым двум каналам для каждого направления. Канал передачи данных от передатчика называется каналом TxD (передача данных), а канал приема данных в приемник – каналом RxD (чтение данных). Пассивному состоянию линии передачи соответствует уровень напряжения логической единицы (-10 В). Наибольшее распространение получил асинхронный режим передачи интерфейса RS-232, поскольку именно он реализован для COM-портов персонального компьютера. В этом режиме передаче основного байта предшествует выдача на линию передатчиком логического нуля (стартовый бит), а завершение передачи заканчивается выдачей логической единицы (стоповый бит) (рис.13.4). Может также использоваться контрольный бит четности, предшествующий передаче стопового бита. Бит четности дополняет общую сумму единиц основного байта до четного (нечетного) количества единиц. Такой способ контроля может выявить на принимающей стороне ошибку, если общее количество единиц приходит нечетным (четным). При пересылке данных между устройствами необходимо, чтобы оба устройства были настроены в один режим и на одну скорость. Типовые значения скорости передачи данных для интерфейса RS-232 составляют: 2400, 4800, 9600, 19200 Бод. Рис.13.4. Временная диаграмма протокола интерфейса RS-232. Как правило, функции интерфейса RS-232 реализуются аппаратно. Для этого существуют специализированные микросхемы последовательных приемопередатчиков. Если такие микросхемы реализуют асинхронный режим последовательной связи, то они называются UART-преобразователями (от англ. «Universal Asynchronous Receiver/Transmitter»). Примером подобной микросхемы является i8251A (отечественный аналог КР580ВВ51А). Эта микросхема не является в чистом виде асинхронным приемником-передатчиком. Она поддерживает как асинхронный режим, так и синхронный. Т.е. ее можно охарактеризовать как USART-преобразователь. Обмен может быть как полудуплексным, так и дуплексным. Структурная схема микросхемы i8251A приведена на рис. 13.5. Микросхема выполняет следующие функции: • прием данных из устройства, осуществляющего передачу, преобразование их из параллельного формата в последовательный и передачу через последовательный канал периферийному устройству; • прием данных по последовательному каналу из периферийного устройства, преобразование их к параллельному формату и передачу в устройство назначения. Рис.13.5. Структурная схема микросхемы i8251A. Назначение выводов микросхемы следующее (стрелка внутрь соответствет входу, стрелка наружу – выходу): • D0…D7 – двунаправленные трехстабильные выводы параллельных данных; • RESET – сброс; • CLK – синхронизация (вход подачи последовательности прямоугольных импульсов с типовым значением частоты 2 МГц); • A0 – адрес. Высокий уровень сигнала на этом входе определяет возможность записи или чтения данных по параллельному каналу, а низкий – возможность записи управляющих кодов для задания режима работы микросхемы или чтение слова состояния; • - разрешение вывода данных или слова состояния на выводы параллельного канала; • - разрешение ввода данных с параллельного канала; • - выбор кристалла; • - готовность микросхемы передавать данные по последовательному каналу; • - готовность приемника терминала; • - готовность микросхемы принять данные по последовательному каналу; • - готовность передатчика терминала; • TxD – последовательный канал передачи данных; • TxEnd – буфер передатчика пустой; • TxRDY – готовность передатчика к приему данных с выводов параллельного канала; • - синхронизация передачи данных; • RxD – последовательный канал приема данных; • SynDet – определяет вид синхронизации - внутренней или внешней. Состояние вывода определяется программно; • RxRDY – данные на выводах параллельного канала готовы для считывания их микропроцессором; • - синхронизация приема данных. Несмотря на то, что микросхема имеет большое количество управляющих выводов, для связи терминала и периферийного устройства в асинхронном режиме используется обычно всего 2 вывода: RxD и TxD. Причем вход RxD терминала соединяется кабелем с выходом TxD периферийного устройства и выход TxD терминала соединяется с входом RxD периферийного устройства. Рассмотрим работу микросхемы в наиболее часто используемом режиме – асинхронном. В этом режиме скорость обмена кратна частоте сигналов синхронизации и в соответствующих направлениях обмена. На эти входы подаются синхроимпульсы в виде последовательности прямоугольных импульсов. Коэффициент кратности задается программно и может быть выбран из ряда 1:1, 1:16 и 1:64. Для задания режима работы в микросхему необходимо по параллельному каналу записать слово инициализации. Это слово определяет асинхронный или синхронный режим работы микросхемы, кратность коэффициента деления, длину передаваемых/принимаемых данных по последовательному каналу, наличие или отсутствие бита контроля на четность или нечетность, блительность стоп-бита. В асинхронном режиме биты параллельного кода слова инициализации определяются следующими значениями: • D0=1, D1=0 - коэффициент кратности равен 1; • D0=0, D1=1 - коэффициент кратности равен 16; • D0=1, D1=1 - коэффициент кратности равен 64; • D2=0, D3=0 - формат передаваемых данных – 5 бит; • D2=1, D3=0 - формат передаваемых данных – 6 бит; • D2=0, D3=1 - формат передаваемых данных – 7 бит; • D2=1, D3=1 - формат передаваемых данных – 8 бит; • D4=1, D5=0 - контроль по четности; • D4=1, D5=1 - контроль по нечетности; • D4=0, D5=1 - без контроля; • D6=1, D7=0 - длина стоп-бита 1; • D6=0, D7=1 - длина стоп-бита 1,5; • D6=1, D7=1 - длина стоп-бита 2. Слово инициализации устанавливается один раз. Смена слова инициализации необходима тогда, когда необходимо сменить режим работы микросхемы. Также в процессе передачи может возникнуть потребность задавать слова команды, определяющие функции и этапы передачи. Разряды слова команды задают следующие функции: • D0 – разрешение на передачу (при нулевом значении разряда передача не возможна, при единичном – возможна); • D1 – запрос готовности передатчка (при единичном значении разряда на выводе микросхемы устанавливается ноль); • D2 – разрешение приема (при нулевом значении разряда прием не возможен, при единичном – возможен); • D3 – конец передачи (при нулевом значении разряда – нормальная работа канала передачи, при единичном – установка высокого уровня на выходе TxD микросхемы); • D4 – сброс меток ошибок (при единичном значении разряда сбрасываются все флажки-признаки ошибок); • D5 - запрос готовности приемника терминала (при единичном значении разряда на выводе микросхемы устанавливается ноль); • D6 – программный сброс (единичное значение разряда равноценно подаче сигнала RESET); • D7 – поиск синхроимпульсов (при единичном значении разряда выполняется поиск синхроимпульсов в синхронном режиме). 13.5.2. Интерфейс USB. В настоящее время стандарт последовательной передачи RS-232 считается морально устаревшим. На многих современных персональных компьютерах он даже не предусмотрен. На смену ему пришел интерфейс USB (universal serial bus или универсальная последовательная шина). Этот интерфейс широко применяется для связи внешних периферийных устройств с персональным компьютером. Он может быть полезен, когда необходимо подключить прибор, построенный на базе микропроцессора или микроконтроллера как внешнее устройство к персональному компьютеру. USB предствляет собой шину. Т.е. к одному физическому каналу можно подключать несколько устройств. Для подключения периферийных устройств к шине USB используется четырёхпроводный кабель. При этом два провода «USB-» и «USB+» (витая пара) в дифференциальном включении используются для приёма и передачи данных, а два провода «+5 В» и «Общий» - для питания периферийного устройства. Благодаря встроенным линиям питания интерфейс USB позволяет подключать периферийные устройства без собственного источника питания. Максимальная сила тока, потребляемого устройством по линиям питания шины USB, не должна превышать 500 мА. Существует несколько версий стандарта шины USB, отличающихся режимами работы и пропускной способностью, но схемотехническое подключение устройств к этой шине одинаковое для всех версий (кроме последней версии 3.0). Шина USB строго ориентирована, имеет понятие «главное устройство» (хост, он же USB контроллер), и «периферийные устройства». Шина имеет древовидную топологию, т.е. периферийным устройством может быть разветвитель (хаб), к которому в свою очередь могут подключаться другие периферийные устройства. Разветвитель всегда активный и представляет собой сложное электронное устройство. К одному контроллеру шины USB можно подсоединить до 127 устройств по топологии «звезда», в том числе и разветвители. На одной шине USB может быть до 5 уровней каскадно включенных разветвителей. USB поддерживает «горячее» подключение периферийных устройств в режиме Plug&Play. Это означает, что подключаемое к контроллеру шины USB периферийное устройство должно быть опознано персональным компьютером и должна автоматически запуститься программа обработки этого подключения. Попутно решается историческая проблема нехватки ресурсов на внутренних системных шинах персонального компьютера - контроллер USB занимает только одно прерывание независимо от количества подключенных к шине USB устройств. Для этого каждое периферийное устройство должно иметь уникальный код, который считывается контроллером USB (хостом) при подключении этого устройства. Несмотря на то, что стандарт RS-232 на сегодняшний момент считается устаревшим и во многих новых моделях персональных компьютеров не используется вовсе, существует огромный парк периферийных устройств, имеющих интерфейс RS-232. Поэтому возникает задача стыковки периферии, имеющей интерфейс RS-232, с новыми моделями персональных компьютеров, в особенностями с переносными типа Notebook. Для этих целей разработаны микросхемы преобразователей RS-232 (с асинхронным режимом работы) в стандарт шины USB. Примером такой микросхемы является микросхема FT232R фирмы Future Technology Devices International Ltd., условное графическое обозначение и типовая схема включения которой приведены на рис.13.6. Рис. 13.6. УГО и схема включения микросхемы FT232R. В микросхеме имеются все сигналы и линии стандарта RS-232 со стороны периферийного устройства, рассмотренные ранее и дополнительные линии (обнаружен вызов) и (обнаружена несущая), задействованные обычно в работе модема. Для связи периферийного микропроцессорного устройства с персональным компьютером достаточно использовать только линии TxD и RxD. В микросхему FT232R запрограммирован индивидуальный идентификационный код, что позволяет использовать ее без каких-либо специальных процедур программирования. Если предусматривается возможность подключения нескольких устройств через несколько микросхем FT232R к одному хосту, то в каждую из них нужно запрограммировать индивидуальный номер, чтобы хост мог корректно идентифицировать устройство и запустить необходмую процедуру обработки. Для этих целей микросхема имеет встроенное перепрограммируемое ПЗУ, программирование которого осущетсвляется через выводы CBUS0…CBUS4. Выводы OSCi и OSCo используются в опциональных применениях и в обычном режиме не задействованы. Вывод TEST также используется в специальных режимах, в обычном режиме на него подается логичеий ноль. Вывод 3,3Vout может быть использован как стабилизированный источник напряжения для подключения дополнительных потребителей с потребляемым током не более 50 мА, если такие есть в схеме. 13.5.3. Интерфейс I2C. Другим примером интерфейса, широко применяемым в цифровой микропроцессорной технике, является интерфейс I2C (часто встречается обозначение «I2C»). Этот интрефейс представляет собой шину, поддерживающую мультиплексный синхронный последовательный обмен данными. Название интерфейса расшифровывается как «Inter IC», т.е. «межмикросхемная шина». Интерфейс I2C был предложен фирмой Philips в начале 90-х годов прошлого века специально для связи различных цифровых микросхем между собой. Сегодня эта шина широко применяется для простой, не требующей большого количества выводов и сигнальных линий, стыковки микроконтроллеров с микросхемами памяти, АЦП, ЦАП, часами реального времени, таймерами, различными преобразователями, индикаторами и прочей периферией. В периферийных устройствах протокол шины I2C обычно реализуется аппаратно, в микроконтроллерах и микропроцессорах он может реализовываться как аппаратно, так и программно. Шина I²C использует две двунаправленные линии, подтянутые к напряжению питания резисторами Rп (рис.13.7). На шину параллельно подключаются все микросхемы и функциональные блоки микропроцессорной системы. Выходы всех устройств, подключаемых к шине, должны быть организованы по схеме с открытым коллектором или открытым стоком. Одна линиия имеет обозначение SDA (Serial Data) и предназначена для последовательной передачи/приема данных, а вторая имет обозначение SCL (Serial Clock) и предназначена для последовательного тактирования. Поскольку в шине прием и передача данных организована по одной линии SDA в обоих направлениях, то выводы SDA и SCL микросхем должны быть как входами, так и выходами. Стандартные напряжения логических уровней соответствуют ТТЛ-уровням, однако допускаются и другие значения напряжений. Основной режим работы реализуется на скорости 100 кбит/с, режим с пониженной скоростью - 10 кбит/с. В более поздних спецификациях появились ускоренный режим со скоростью 400 кбит/с и режим повышенной скорости 3,4 Мбит/с. Стандарт шины допускает также приостановку тактирования для работы с медленными устройствами. Рис.13.7. Организация шины I2C. Устройства, подключаемые к шине, по своему назначению делятся на ведущие (Master) и ведомые (Slave). В шине должно быть как минимум одно ведущее устройство. Как правило, таким устройством является микроконтроллер. Он берет на себя функции управления шиной, вырабатывает тактовые сигналы SCL, инициирует сеансы приема/передачи. Информация может передаваться как от ведущего устройства к ведомому, так и в обратном направлении, но обязательно под управлением ведущего устройства. На рисунке показана внутренняя организация выводов SDA и SCL только для одного устройства. Такая же организация характерна для всех микросхем, подключаемых к шине. В исходном состоянии на выходах SDA и SCL всех микросхем, подключенных к шине I2C, должны быть установлены логические единицы. Благодаря схеме с открытыми коллекторами, в которой транзисторные ключи выходов SDA и SCL оказываются закрытыми, через резисторы Rп потенциалы указанных выходов подтягиваются к напряжению питания. Внутренние сопротивления закрытых транзисторов выходов микросхем оказываются большими и все микросхемы находятся в режиме чтения. Если какое-либо устройство начнет процесс передачи, остальные устройства окажутся приемниками. Открывающиеся под управлением синхроимпульсов и импульсов передаваемых данных выходные транзисторы передающего устройства будут подсаживать потенциалы линий SDA и SCL шины на землю. Переданные сигналы данных и синхронизации поступят на входы всех остальных микросхем. Каждая микросхема, работающая в режиме приемника, считает переданный сигнал. Кроме самих передаваемых данных, в каждой посылке закладывается адрес устройства, для которого эти данные предназначены. Каждое подключаемое к шине I2C периферийное устройство имеет свой уникальный адрес. В стандартном режиме для адресации периферийного устройства используется 7 бит информации с 16 зарезервированными адресами. Это означает, что к шине может быть подключено до 112 ведомых устройств. В более поздних спецификациях шины для адресации стали использовать 10 бит, что увеличило количество подключаемых устройств до 1008. Если передаваемый адрес совпадет с индивидуальным адресом микросхемы, то эта микросхема примет предназанченные для нее данные и обработает их. Остальные микросхемы текущую посылку проигнорируют. Адрес в ведомых микросхемах в зависимости от их типа может быть задан жестко производителем или может программироваться разработчиком устройства. Возможен случай, когда микросхема содержит неизменияемую честь адреса в старших разрядах и часть адреса в младших разрядах, доступную для программирования разработчиком. В этом случае упрощается адресация при подключении однотипных микросхем. Информация по шине I2C передается побайтно, последовательно бит за битом. Передача каждого бита по линии SDA сопроводается синхроимпульсом на линии SCL. Процедура обмена начинается с того, что ведущий передатчик формирует состояние «СТАРТ», обозначаемое в спецификации шины символом «S». Для этого он генерирует переход сигнала линии SDA из высокого «отпущенного» состояния в низкое «подсаженное» при высоком уровне SCL (рис.13.8). Этот переход воспринимается всеми устройствами, подключенными к шине, как признак начала процедуры обмена. Генерация синхросигнала - всегда обязанность ведущего устройства. Каждый ведущий генерирует свой собственный сигнал синхронизации при пересылке данных по шине. Процедура обмена завершается тем, что ведущий формирует состояние «СТОП» (обозначаемое символом «P»), в котором осуществляет переход линии SDA из низкого уровня в высокое «отпущенное» при высоком уровне линии SCL. Состояния «СТАРТ» и «СТОП» всегда вырабатываются ведущим. Считается, что шина занята после фиксации состояния «СТАРТ» и свободна через некоторое время после фиксации состояния «СТОП». После формирования состояния «СТАРТ», ведущий опускает уровень линии SCL в низкое состояние и выставляет на линию SDA старший бит первого байта сообщения. Передача байта по спецификации шины I2C всегда происходит начиная со старшего бита. Количество байт в сообщении не ограничено. Спецификация шины I2C при передаче данных разрешает изменения на линии SDA только при низком уровне сигнала на линии SCL. Данные действительны и должны оставаться стабильными только во время высокого состояния синхроимпульса. Исключение составляют состояния «СТАРТ» и «СТОП», когда уровень линии SDA меняется при высоком уровне линии SCL. Для подтверждения приема байта от ведущего передатчика ведомым приемником в протоколе обмена по шине I2C вводится специальный бит подтверждения, выставляемый на шину SDA после приема последнего младшего бита данных. Для этого передатчик устанавливает логическую единицу на выходе SDA, тем самым «отпускает» эту линию, и передает девятый синхроимпульс по линии SCL. В ответ на этот синхроимпульс, приемник должен сам «подсадить» линию SDA. Если это произойдет, передатчик считает низкий уровень с линии SDA и продолжит или окончит передачу в зависимости от того, все ли байты переданы. Если от приемника подтверждения не последует, передача приостановится. Рис.13.8. Временная диаграмма протокола интерфейса I2C. Механизм передачи, когда ведущее устройство является приемником, а ведомое передатчиком, аналогичен описанному выше. В этом режиме формированием синхроимпольсов и состяний «СТАРТ» и «СТОП» также будет заниматься ведущее устройство. Но только в данном случае оно будет приемником. В ответ на состояние «СТАРТ» ведомый передатчик под управлением синхроимпульсов SCL с ведущего приемника будет выставлять побитно данные на линию SDA, которые будут считаны ведущим приемником. После передачи восьми бит данных ведомый передатчик приступит к ожиданию от ведущего приемника бита подтверждения. Если прием прошел без ошибок, ведущий приемник передаст этот бит путем подсаживания линии SDA и формирования синхроимпульса на линии SCL. В противном случае на линии SDA останется присутствовать высокий потенциал. Процесс обмена информации начинается с того, что ведущее устройство выдает на I2C шину первый байт, в семи старших разрядах которого присутствует адрес активизируемого устройства, а в младшем бите отражается направление пересылки данных. При нуле в этом бите передача осуществляется от ведущего устройства к ведомому, а при единице – от ведомого к ведущему. Все ведомые устройства получат условие «СТАРТ» и примут первый байт. Только в одном устройстве адрес, закодированный первым байтом, совпадет с индивидуальным адресом этого устройства. И именно оно продолжит участвовать в пересылке. Остальные ведомые устройства останутся в режиме ожидания. Все они будут ждать новое условие «СТАРТ», после которого вновь первым передаваемым байтом будет адрес активизируемого устройства. Ведомое устройство, для которого адрес совпал, завершит процедуру приема первого байта, для чего оно выработает бит подтверждения. Получив подтверждение, ведущее устройство начнет в зависимости от направления пересылки, управлять приемом или передачей данных. Между этими пересылками условие «СТОП» формироваться не будет, а будет формироваться только бит подтверждения после пересылки очередного байта. Как только все байты данных будут пересланы, ведущее устройство сформирует условие «СТОП» и пересылка будет считаться завершенной. 13.5.4. Интерфейс SPI. Другим примером широко используемого в микропроцессорной технике интерфейса для стыковки микросхем является интерфейс SPI. Изначально этот интерфейс был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от «Serial Peripheral Bus», что отражает его предназначение - шина для подключения внешних устройств. Шина SPI организована по принципу «ведущий-ведомый». В качестве ведущего устройства обычно выступает микроконтроллер (или микропроцессор с контроллером указанного интерфейса в системе), но им также может быть ПЛИС или специализированная микросхема. Подключенные к ведущему шины внешние устройства являются ведомыми. В их роли выступают различного рода микросхемы, в т.ч. запоминающие устройства (ОЗУ, ПЗУ, ППЗУ, Flash-ROM), часы реального времени, АЦП или ЦАП и др. Главным составным блоком интерфейса SPI является обычный регистр сдвига, сигналы синхронизации и ввода/вывода которого образуют интерфейсные сигналы. Протокол SPI является протоколом обмена данными между двумя сдвиговыми регистрами, каждый из которых одновременно выполняет и функцию приемника, и функцию передатчика. Непременным условием передачи данных по шине SPI является генерация сигнала синхронизации. Этот сигнал имеет право генерировать только ведущее устройство. От этого сигнала полностью зависит работа ведомого устройства. Стандартом шины SPI определены четыре сигнала: MOSI (от англ. Master Output Slave Input) – выходной сигнал передачи последовательных данных для ведущего устройства, входной сигнал приема последовательных данных для ведомого устройства; MISO (от англ. Master Input Slave Output) - входной сигнал приема последовательных данных для ведущего устройства, выходной сигнал передачи последовательных данных для ведомого устройства; SCLK (от англ. Select Clock) – выходной сигнал синхронизации для ведущего устройства и аналогичный входной сигнал для ведомого устройства; (от англ. Select Slave) – выходной сигнал выбора одного из ведомых устройств для ведущего устройства, входной сигнал активизации для ведомого устройства. Существует два типа подключения нескольких устройств к шине SPI – параллельное и последовательное. Параллельное подключение (рис. 13.9,а) более распространено, т.к. позволяет организовывать подключение любых SPI-совместимых устройств. При таком подключении все линии, кроме линии сигнала выбора , соединены параллельно. Ведущее устройство переводом того или иного сигнала в низкое состояние задает, с каким ведомым устройством оно будет обмениваться данными. Главным недостатком такого подключения является необходимость в дополнительных линиях для адресации нескольких ведомых устройств, что существенно неудобно в случае большого их количества. Рис.13.9. Варианты одключения устройств по стандарту интерфейса SPI. Самое простое подключение, в котором участвуют только два устройства – ведущее и ведомое, требует всего одной линии сигнала . Ведущее устройство передает данные по линии MOSI синхронно со сгенерированным им же сигналом SCLK, а ведомое захватывает переданные биты данных по определенным фронтам принятого сигнала синхронизации. Одновременно с этим ведущее устройство отправляет свою посылку данных. Представленную схему можно упростить исключением одной из линий MISO или MOSI, если в процессе передачи предполагается только односторонняя связь. Одностороннюю передачу данных можно встретить у таких микросхем как ЦАП, АЦП, цифровые потенциометры, программируемые усилители и аналогичные по смыслу. Чтобы ведомое устройство принимало и передавало данные, помимо наличия сигнала синхронизации необходимо также, чтобы линия была переведена в низкое состояние. Когда используется только одно ведомое устройство, может возникнуть соблазн исключения и линии за счет жесткой установки низкого уровня на входе выбора ведомого устройства. Такое решение крайне нежелательно и может привести к сбоям или вообще к невозможности передачи данных, т.к. вход выбора ведомого устройства служит для перевода его в исходное состояние и иногда инициирует вывод первого бита данных. Каскадное включение избавлено от недостатка необходимости большого количества линий в случае большого количества ведомых устройств, т.к. при данном подключении из нескольких микросхем образуется один большой сдвиговый регистр. Для этого выход передачи данных MISO текущего ведомого устройства соединяется с входом приема данных MOSI последующего, как показано на рис.13.9,б. Входы выбора всех устройств соединяются параллельно и, таким образом, общее число линий связи сохраняется равным четырем. Однако использование последовательного подключения возможно только в том случае, если оно обеспечивается характеристиками всех ведомых устройств. В технической документации на подключаемые в шину устройства по последовательной схеме должна стоять отметка «daisy-chaining». Протокол передачи по интерфейсу SPI отражает логику работы сдвигового регистра, которая заключается в выполнении операции сдвига и, соответственно, побитного ввода и вывода данных по определенным фронтам сигнала синхронизации. Установка данных при передаче и выборка при приеме всегда выполняются по противоположным фронтам импульсов синхронизации (рис.13.10). Импульсы синхронизации SCLK могут иметь как положительную, так и отрицательную полярность. При этом передача или прием могут осуществляться как по переднему, так и по заднему его фронту. Таким образом, возможно четыре варианта логики работы интерфейса SPI. Эти варианты получили название режимов SPI и описываются двумя параметрами: CPOL - исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень, иначе, если CPOL=1, - высокий); CPHA - фаза синхронизации (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться прием данных, а затем, по заднему фронту, - передача данных; если же CPHA=1, то передача данных будет выполняться по переднему фронту в цикле синхронизации, а прием - по заднему). Рис.13.10. Временная диаграмма протокола интерфейса SPI. Ведущее и ведомое устройства, работающие в различных режимах SPI, являются несовместимыми. Поэтому необходимо обращать внимание на характеристики ведомых устройств при подключении их в шину. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI. По аналогичному с протоколом SPI подключаются карты флэш-носителей SD и MMC форматов. 13.6. Управляющие сигналы типового микропроцессора. Кроме информационных линий адреса и данных, микропроцессор снабжен управляющими выводами, образующими вместе с выводами системного контроллера шину управления микропроцессорной системы. Управлюющие сигналы индивидуальны для каждого типа микропроцессора, но, тем не менее, можно выделить характерные для почти всех микропроцессоров сигналы. В некоторых случаях определенные сигналы исключают друг друга, поэтому присутствуют либо те, либо другие. Разобъем управляющие сигналы для удобства в функциональные группы. Сигналы управления чтением/записью предназначены для активизации периферийного модуля в режим выдачи данных на шину данных или приема данных с шины данных. В общем случае режим чтения характеризуется тем, что микропроцессор запрашивает данные от периферийного модуля, а режим записи - тем, что микропроцессор выставляет данные периферийному модулю. У некоторых микропроцессоров эти сигналы представлены группой сигналов системной шины управления, рассмотренных ранее в теме структурной организации микропроцессорной системы: • RDM (read memory, чтение памяти) - сигнал инициализации чтения из модулей запоминающих устройств (выходной сигнал); • WRM (write memory, запись в память) - сигнал инициализации записи в модули запоминающих устройств (выходной сигнал); • RDIO (read input/output, чтение порта) - сигнал инициализации чтения из порта ввода (выходной сигнал); • WRIO (write input/output, запись в порт) - сигнал инициализации записи в порт вывода (выходной сигнал). Есть микропроцессоры, в которых сигналы управления чтением/записью образуются сигналами, указывающими направление передачи информации и тип адресуемого модуля: • RD (read, чтение) – сигнал инициализации чтения из периферийного модуля (выходной сигнал); • WR (write, запись) – сигнал инициализации записи в периферийный модуль (выходной сигнал); • MEM (memory, память) – сигнал обращения к памяти (выходной сигнал); • I/O (input/output, порты ввода-вывода) – сигнал обращения к портам ввода-вывода (выходной сигнал). Режимы обращения к памяти или к портам исключают друг друга в одном машинном цикле. Поэтому часто вместо пары сигналов MEM и I/O на выводах микропроцессора присутствует только один сигнал . Единичный уровень этого сигнала соответствует режиму обращения к памяти, а нулевой – режиму обращения к портам ввода-вывода. Для формирования сигналов RDM, WRM, RDIO и WRIO системной шины управления, если таких нет на выводах микропроцессора, из сигналов RD, WR, MEM и I/O микропроцессора можно спроектировать схему на основе вентилей элементарных логических функций или воспользоваться системным контроллером. Сигналы управления прерыванием обычно представлены двумя сигналами: • INT (interrupt, прерывание) – входной сигнал от периферийного модуля (контроллера прерывания), запрашивающего процесс ввода-вывода по прерыванию. В ответ на этот сигнал микропроцессор должен запустить обрабатывающую прерывание подпрограмму. Анализируется этот сигнал в последнем такте последнего машинного цикла, т.е. в конце выполнения текущей команды; • INTA (interrupt acknowledge, подтверждение прерывания) – выходной сигнал от микропроцессора, подтверждающий прерывание и сообщающий периферийному модулю (контроллеру прерывания) о готовности микропроцессора приступить к обслуживанию прерывания. По этому сигналу внешнее устройство (контроллер прерывания) должен выставить на шину данных код команды прерывания, в которой закодирован номер устройства, запрашивающего прерывание. Сигналы управления режимом прямого доступа к памяти формируют группу из двух сигналов: • HOLD (hold, захват шин) – входной сигнал от периферийного устройства, запрашивающего процесс ввода-вывода в режиме ПДП. Этот сигнал анализируется обычно между машинными циклами. В ответ на этот сигнал микропроцессор должен перевести свои буферные регистры, связывающие его с шинами данных и адреса, в высокоимпедансное состояние. В результате микропроцессор освобождает шины и внешнее устройство начинает обмен данными с памятью напрямую без участия микропроцессора; • HLDA (hold acknowledge, подтверждение захвата) – выходной сигнал от микропроцессора, подтверждающий, что микропроцессор перевел свои буферные регистры в высокоимпедансное состояние и освободил шины. Сигналы управления ожиданием служат для синхронизации микропроцессора с медленными устройствами ввода-вывода. Не всегда внешнее устройство может мгновенно отреагировать и подготовиться к режиму приема или записи по сигналам RDIO или WRIO (RD или WR). Если внешнее устройство медленное, то ему необходимо время для формирования данных или включения в соответствующий режим. Для синхронизации работы микропроцессора с медленными устройствами ввода-вывода используются следующие сигналы: • RDY (ready, готовность) – входной сигнал от внешнего устройства, являющийся признаком того, что оно готово к обмену данными. Если этот сигнал имеет пассивный уровень, то микропроцессор переходит в такты ожидания готовности внешнего утройства. В течение этого времени микропроцессор не выполняет никаких действий, а только анализирует сигнал готовности; • WAIT (wait, ожидание) – выходной сигнал, являющийся признаком того, что микропроцессор находится в тактах ожидания сигнала готовности. Дополнительные сигналы обеспечивают синхронизацию работы микропроцессора с системным контроллером, шинными формирователями, схемой тактового генератора и начальной установки. К ним можно отнести следующие сигналы: • SYNC (synchronization, синхронизация) – выходной сигнал, вырабатываемый микропроцессором в начале каждого машинного цикла. Он служит для записи в системный контроллер служебной информации, из которой системный контроллер формирует дополнительные сигналы управления (например, RDM, WRM, RDIO и WRIO); • ALE (address latch enable, фиксация адреса) – выходной сигнал микропроцессора, имеющего мультиплексированную шину данных/адреса. Мультиплесированная шина позволяет уменьшить количество выводов микросхемы микропроцессора, поскольку разряды шины данных и адреса реализуются в таких микропроцессорах на одних и тех же выводах. В начале машинного цикла всегда должен быть выставлен адрес внешнего устройства или ячейки памяти, а лишь затем произведен обмен информацией. Поэтому шину данных и адреса можно объединить в одну мультиплексированную шину. Но адрес должен удерживаться на время всего машинного цикла. Для этого сигналом ALE, который выставляется активным вместе с выставлением адреса на мультиплексированной шине, адрес записывается во внешний регистр (шинный формирователь) и там защелкивается до следующего машинного цикла. Затем мультиплексированная шина переключается в режим шины данных; • RST (reset, сброс) – входной сигнал сброса, обнуляющий регистр микропроцессора, содержащий адреса подлежащих выполнению команд и называемый счетчиком команд. В результате программа начинает выполняться с нулевого адреса, т.е. с начала; • CLK (clock, тактирование) – вход (входы) сигналов тактового генератора. Эти сигналы синхронизируют работу микропроцессора. По этим сигналам часто оценивают производительность микропроцессора. 13.7. Структура типового микропроцессора. Микропроцессоры с момента своего появления интенсивно совершенствуются. Главные изменения касаются важнейшей составляющей архитектуры, а именно их структуры. Появляются возможности параллельных вычислений в следствии организации конвейерной и многопотоковой обработки, увеличения количества микропроцессорных ядер в кристалле, реализации принципов Гарвардской модели памяти и пр. Поэтому изобразить структуру микропроцессора, отражающую все новейшие достижения в области микропроцессорной техники, в силу сложности, в рамках данного учебника не представляется возможным. Приведем пример типовой структуры, отражающей общие принципы построения CISC-микропроцессора Фон-Неймановской организации и позволяющей понять общие принципы функционирования микропроцессора (рис.13.11). Рис.13.11. Структурная схема типового микропроцессора Фон-Неймановского типа. В приведенной на рисунке структуре микропроцессора использован магистральный принцип организации связи между узлами, заключающийся в том, что все узлы микропроцессора работают поочередно на общую внутреннюю шину данных. Обмен информацией между внутренней шиной данных и внешней шиной данных осуществляется через двунаправленный буферный регистр данных. Буферный регистр адреса фиксирует адреса активизируемых внешних устройств на внешней шине адреса. Оба этих регистра являются трехстабильными, благодаря чему микропроцессор может быть отключен от внешних шин. Это может быть необходимо, например, при организации ввода-вывода в режиме прямого доступа к памяти или при организации многопроцессорной системы. Напомним, что шины данных и адреса в некоторых типах микропроцессоров могут быть мультиплексированы. Это значит, что одни и те же линии связи могут служить и для передачи данных, и для передачи адреса в различные моменты времени. В этом случае функции буферного регистра данных и буферного регистра адреса совмещаются в одном буферном регистре адреса/данных. Основным операционным блоком является арифметико-логическое устройство (АЛУ), выполняющее арифметические и логические операции, а также операции сдвига. С АЛУ связан регистр, называемый аккумулятором. В большинстве универсальных микропроцессоров, особенно не высокой разрядности, аккумулятор используется для фиксации результата выполненного в АЛУ действия. Для многих восьмиразрядных микропроцессоров и микроконтроллеров так же характерно то, что аккумулятор используется и для фиксации одного из участвующих в операции операндов. Таким образом, один из операндов нужно занести предварительно в аккумулятор. В самой команде действия нужно указать источник второго операнда. Во время выполнения команды один операнд из аккумулятора запишется в первый временный регистр, освободив тем самым аккумулятор для результата, а второй – из источника, определенного командой, во второй временный регистр. АЛУ выполнит действие, предписанное командой, и результат разместится в аккумуляторе. Через аккумулятор для большинства микропроцессоров реализуется обмен информацией с внешними устройствами ввода-вывода. Регистр флагов фиксирует признаки результата выполненной операции. Признак – это характеристика результата, формулируемая значением одного бита – «да» или «нет». Регистр флагов – это тот узел микропроцессора, который делает его «думающим», способным выбирать тот или иной путь в алгоритме решения задачи. Именно регистр флагов отличает микропроцессор от обычного калькулятора. С помощью регистра флагов становится возможным программировать условные операции. Содержимое этого регистра используется в тех случаях, когда выполнение операции ставится в зависимость от значений каких-либо признаков результата предыдущей операции. Типичным набором регистра флагов являются следующие флаги (признаки): • СF (carry flag) - перенос. Указанный разряд устанавливается в единицу, если в результате сложения двух двоичных чисел длиной в одно слово возникает перенос в старший разряд или в результате вычитания возникает заем из старшего разряда. В противном случае разряд признака переноса устанавливается в ноль. Этот признак используется, например, для организации выполнения арифметических операций с повышенной точностью, т.е. с числами длиной более одного слова; • АF (auxiliary flag) – вспомогательный перенос. Разряд этого признака устанавливается в единицу при наличии переноса из четвертого в пятый разряд результата или при заеме единицы из пятого разряда в четвертый. Этот признак позволяет реализовывать арифметику в двоично-десятичных кодах; • РF (parity flag) - четность. Разряд этого признака устанавливается в единицу, если в полученном коде результата общее число единиц является четным. В противном случае данный признак устанавливается в ноль. Этот признак используется при контроле данных на четность при формировании посылок по интерфейсам или при записи/чтении данных на внешние носители; • ZF (zero flag) – нулевой результат. При нулевом значении результата разряд этого признака устанавливается в единицу, при ненулевом - в ноль. Этот признак используется, например, для организации циклических структур; • SF (sign flag) – знак результата. Разряд этого признака дублирует содержимое старшего разряда результата. При выполнении арифметических операций в дополнительных кодах ноль в старшем знаковом разряде результата соответствует положительному числу, а единица – отрицательному; • OF (overflow flag) – переполнение. Разряд этого признака устанавливается в единицу при выходе знакового результата за границы диапазона. Во многих моделях микропроцессоров регистр флагов содержит также разряды, указывающие на режим работы микропроцессора, разрешающие или запрещающие определенные режимы (например, флаг IF разрешения прерывания в микропроцессоре с архитектурой x86), указывающие на вид адресации и пр. Регистры общего назначения (РОН) используются в микропроцессорах для хранения промежуточных данных в процессе обработки. РОН рассматриваются программистом как сверхоперативное запоминающее устройство, т.е. небольшой объем памяти, расположенный непосредственно на кристалле микросхемы микропроцессора. Для микроконтроллеров в качестве РОН обычно используются ячейки внутренней памяти данных с младшими адресами и с символическими обозначениями. Также можно отметить, что количество РОН в микроконтроллерах обычно значительно больше, чем в микропроцессорах. РОН характеризуются быстрым обращением к ним короткими командами. Поэтому в критических к быстродействию участках программы желательно в качестве хранилища промежуточных данных использовать именно РОН. Для микропроцессоров и микроконтроллеров небольшой разрядности отдельные РОН могут объединяться в группы, называемые регистровыми парами, а для микропроцессоров более высокой разрядности – наоборот разбиваться на однобайтовые составляющие. Указатель команд или, как его еще называют, счетчик команд (program counter PC) представляет собой регистр, содержащий адрес ячейки памяти, в которой хранится подлежащая выполнению команда. Команды одной программы размещаются в последовательно расположенных ячейках памяти с соседними адресами. Поэтому для перехода к следующей команде содержимое счетчика команд автоматически инкрементируется на количество единиц, соответсвующее количеству занимаемых ею ячеек в памяти. При необходимости изменения естественного порядка следования команд в счетчик заносится адрес команды, к которой необходимо произвести переход. После перехода команды снова будут выполняться в естественном порядке. Указатель стека (stak pointer SP) также как и счетчик команд представляет собой регистр, содержащий адрес, по которому осуществляется обращение к области памяти ОЗУ, называемой стеком. Стеком называется область оперативной памяти, ячейки которой заполняются последовательно друг за другом по принципу LIFO (Last Input First Output), т.е последний вошедший выходит первым. Стековые ячейки памяти имеют соседние адреса. Поэтому при обращении к стековым ячейкам памяти не нужно указывать адреса этих ячеек. Достаточно один раз в начале программы определить адрес первой ячейки стековой области. И в последствии отслеживать только последовательнойсть загрузки и выгрузки из стека. Адрес первой стековой ячейки заносится в указатель стека SP. Далее при записи или считывании каждого слова из стека указатель стека будет автоматически инкрементироваться или декрементироваться в зависимости от типа микропроцессора. Стековая адресация удобна тем, что команды обращения к стеку короткие и быстро извлекаются из памяти, а, следовательно, и быстро выполняются. В стек может отправляться на временное сохранение содержимое всех программно доступных регистров микропроцессора. Это может быть полезно при организации подпрограмм, когда содержимое этих регистров нужно временно сохранить в оперативной памяти, чтобы освободить сами регистры для выполнения подпрограммы. После того, как подпрограмма будет выполнена, все сохраненные в стеке данные на момент обращения к подпрограмме в обратном порядке будут извлечены из стека и восстановлены в своих первоначальных источниках. Указатель данных используется для хранения адресов ячеек памяти, в которых хранятся обрабатываемые операнды. Указатель данных в этом случае является регистром-указателем адреса ячейки памяти. Микропроцессор читает содержимое этого регистра, рассматривает его содержимое как адрес ячейки памяти, по которому необходимо обратиться для чтения/записи операнда. Команды обращение к памяти через регистр-указатель данных также являются короткими и быстро исполняемыми. Схема синхронгизации и управления служит для формирования внешних и внутренних управляющих сигналов всех узлов микропроцессора. Именно схема синхронизации и управления отвечает за последовательность действий микропроцессора по тактам при отработке каждой команды, т.е. определяет состав машинных циклов и циклов команды. Существуют микропроцессоры, в которых схема синхронизации и управления построена по принципу жесткой логики, и те, в которых эта схема представляет собой ПЛИС. Выполнение любой команды начинается со считывания первого слова команды, которое содержит код операции, из памяти в регистр команд, где оно хранится в течение всего времени выполнения команды. Дешифрация кода операции производится в дешифраторе команд. По результатам работы дешифратора и под воздействием тактовых сигналов вырабатывается нужная последовательность управляющих сигналов схемой синхронизации и управления. Это приводит к считыванию из памяти остальных слов команды, если они имеются, а также к собственно выполнению операции, предписанной командой. 13.8. Способы адресации данных. Способ адресации данных – это механизм указания месторасположения операнда, над которым команда выполняет дествие. Прямая адресация. При прямой адресации адрес ячейки памяти, к которой необходимо произвести обращение, содержится в самой команде. К числу команд с прямой адресацией относятся также команды обращения к портам ввода или вывода. Прямая адресация наиболее удобна с точки зрения программиста, поскольку сразу задает нужный адрес. Однако команды этой группы из-за большого формата требуют нескольких обращений к памяти при их считывании, т.к. адрес ячейки памяти или порта содержится обычно во втором или во втором и третьем словах команды, что снижает производительность МП. Регистровая адресация. Команды этой группы состоят из одного слова, в котором помимо кода операции содержатся также двоичные коды, указывающие регистры или регистровые пары МП, являющиеся источниками или приемниками информации. Команды этой группы выполняются наиболее быстро, поскольку имеют малый формат и, кроме того, их реализация не связана с обращениями к внешней памяти. Однако регистровая адресация требует предварительной загрузки данных в регистры или регистровые пары МП, в результате чего высокая скорость обработки информации достигается в тех случаях, когда одни и те же данные используются в программе многократно. Косвенная адресация. При этой адресации адрес ячейки памяти, к которой необходимо произвести обращение, хранится в адресных регистрах-указателях данных или выполняющих их фукнции регистровых парах. Команды этой группы имеют длину в одно слово. Помимо кода операции слово команды содержит двоичный код, определяющий используемые регистры-указатели данных или регистровые пары. При выполнении команды адрес из регистра или регистровой пары поступает через буферный регистр адреса на шину адреса. Косвенная адресация уменьшает объем программы, но требует предварительной загрузки регистровой пары, поэтому такая адресация наиболее эффективна, когда один и тот же адрес используется в программе многократно или рассчитывается по определнному алгоритму. Непосредственная адресация. При непосредственной адресации обрабатываемый операнд содержится непосредственно в команде, обычно во втором или во втором и третьем ее словах. Команды этой группы выполняются быстро, поскольку нет необходимости отыскивать операнд в памяти. Непосредственная адресация используется для введения констант, необходимых при решении поставленной задачи. Относительная адресация. При относительной адресации фактический адрес определяется относительно счетчика команд или иного счетного регистра путем сложения содержимого этого регистра с указанным в команде числом. Содержимое счетчика команд или иного регистра называется базовым адресом, а указанное в команде число – логическим адресом или смещением относительно базового адреса. Относительная адресация позволяет размещать программы в памяти без привязки к конкретному адресу. Такая форма адресации удобна, когда разрядность счетчика команд ниже разрядности шины адреса микропроцессорной системы. Также относительная адресация используется для постраничной организации памяти. Содержимое счетчика команд в этом случае определяет адрес внутри страницы, а адрес, указанный в команде, определяет номер страницы. Индексная адресация. Данный способ адресации отличается от относительной адресации тем, что для формирования фактического адреса используется содержимое не счетчика команд, а специального регистра, называемого индексным регистром. Данный способ адресации удобен при обработке таблиц и массивов данных. В этом случае адрес первого элемента можно хранить в индексном регистре, а все остальные элементы адресовать в команде относительно него, не заботясь о реальных фактических адресах. Автоинкрементная (автодекрементная) адресация. Данный способ адресации позволяет организовывать обращение к соседним ячейкам памяти в цикле. Ее механизм схож с косвенной адресацией с той лишь разницей, что при каждом обращении к памяти содержимое регистра-указателя или замещающей его регистровой пары увеличивается или уменьшается на единицу или более в зависимости от длины адресуемых операндов. Разновидностью автоинкрементной (автодекрементной) адресации является стековая адресация. При этой адресации каждая загрузка в стек или выгрузка из стека изменяет содержимое указателя стека SP на еденицу в режиме инкремента или декремента в зависимости от типа микропроцессора. 13.9. Типовая система команд микропроцессора. Поскольку микропроцессор воспринимает только двоичную форму информации, то команды должны быть представлены в виде двоичных кодов. Такая форма представления команд называется машинным языком или машинным кодом. Для человека машинные коды из нулей и единиц неудобны, поскольку их трудно запомнить и отождествить с фактическим назначением команды, а в самих машинных кодах легко перепутать 0 и 1. Для более краткой записи двоичных чисел используются также восьмеричная и шестнадцатеричная формы представления информации. Однако и в этом случае остается нерешенной основная проблема - что означает каждая команда, выраженная в подобной форме. По этой причине при описании команд используются условные обозначения в виде мнемонических названий. Мнемоническое название (мнемоника) команды представляет собой сокращение от английских слов, описывающих операцию, выполняемую командой. Мнемонический код команды позволяет легче запомнить ее функцию и значительно упрощает написание программ. Например, команда возврата из подпрограммы по которой хранящийся в стеке адрес возврата пересылается обратно в счетчик команд, имеет обозначение RET (от return – вернуться). Каждый микропроцессор характеризуется своей системой команд. Система команд - это полный перечень тех операций, которые способен производить микропроцессор. Управляемый этими командами микропроцессор выполняет очень простые действия, такие, как элементарные арифметические и логические операции, операции пересылки данных, сравнения двух величин и другие. Однако, составив программу из последовательности таких команд, можно запрограммировать выполнение алгоритма любой сложности. Обычно все команды в системе команд объединяются в группы по функциональному назначению. Например, выделяют команды пересылки кодов, команды логических и арифметических действий, команды передачи управления и ряд команд других групп. Условное обозначение команды помимо мнемоники может также включать названия регистров r или регистровых пар rp, если их наличие предусмотрено типом микропроцессора. При описании системы команд будем придерживаться принципа обобщенности изложения материала и автономности мнемоник и условных обозначений. Это значит, что представленные в данном разделе команды и их мнемоники абстрагированы от какого-либо конкретного микропроцессора, а отражают общие принципы построения систем команд большинства микропроцессоров и микроконтроллеров. Отметим лишь то, что приведенные в качестве примера команды в большей степени характерны для восьмиразрядных микропроцессоров и микроконтроллеров с аккумуляторной архитектурой. Это значит, что в большинстве команд для сохранения результата используется аккумулятор. Также он используется и в качестве источника одного из операндов арифметических или логических команд. Воспользуемся для примера гипотетическими, не привязанными к конкретному типу микропроцессора, обозначениями регистров - аккумулятором А и регистрами общего назначения В и С. Безусловно, в реальных микропроцессорах количество регистров общего назначения может быть значительно больше и они могут иметь иные обозначения. Будем считать, что восьмиразрядные регистры B и C могут объединяться в шестнадцатиразрядную регистровую пару BC. Эта же регистровая пара будет выполнять функцию указателя адреса данных при косвенной адресации. При описании системы команд восьмиразрядный операнд будем условно обозначать data, а шестнадцатиразрядный операнд – data16. Номер (адрес) порта обозначим как port, а адрес ячейки памяти – как addr. При использовании команд в программе вместо обозначений data, data16, port и addr должны быть подставлены конкретные числовые значения операндов и адресов. При разборе примеров команд будем, кроме введенных гипотетических аккумулятора А и регистров общего назначения В и С, пользоваться обозначением внешнего регистра M, организованного в памяти. Иными словами будем рассматривать регистр М как косвенно адресуемую ячейку памяти, адрес которой определяется содержимым регистра-указателя адреса при косвенной адресации. В нашем случае роль такого адресного регистра будет выполнять регистровая пара BC. Кроме самих мнемонических обозначений команд в системе команд указываются обычно машинные коды для каждой команды и время их выполнения либо в тактах, либо в машинных циклах, если длина всех машинных циклов микропроцессора одинакова. Следует отметить, что передача данных как между внутренними регистрами микропроцессора, так и между микропроцессором и периферийными модулями всегда осуществляется с сохранением содержимого источника информации. Для удобства сведем все рассматриваемые команды в таблицу 13.1. Наряду с описанными выше условными обозначений приведем прочие обозначения, используемые при описании нашей системы команд: • SP - указатель стека; • PC - счетчик команд; • ЯП – ячейка памяти; • ( ) - содержимое регистра (регистровой пары), указанного внутри скобок; • [ ] - содержимое ячейки памяти (порта), адрес которой указан внутри скобок; •  - направление передачи; • , ,  - логическии операции “ИЛИ”, “И”, “ИСКЛЮЧАЮЩЕЕ ИЛИ” соответственно; • -CON - обобщенное обозначение, заменяемое на мнемонику условия перехода. Договоримся использовать следующие мнемонические обозначения этих условий: NZ (no zero) - ненулевой результат (флаг ZF=0); Z (zero) - нулевой результат (флаг ZF=1); NC (no carry) - отсутствие переноса (флаг CF=0); C (carry) - наличие переноса (флаг СF=1); PO (parity odd) - нечетное число единиц в коде результата (флаг PF=0); PE (parity even) - четное число единиц в коде результата (флаг PF=1); P (plus) - неотрицательный результат (флаг SF=0); M (minus) - отрицательный результат (флаг SF=1). Таблица 13.1. Типовая система команд. Группа команд Условное бозначение Описание команды Команды пересылки Данных 1. MOV r1,r2 (r1)  (r2) 2. MOV r,M (r)  [BC] 3. MOV M,r [BC]  (r) 4. LDI r,data (r)  КОНСТАНТА 5. LDI M,data [BC]  КОНСТАНТА 6. LDRP rp,data16 (rp)  КОНСТАНТА 7. LDS A,addr (A)  [АДРЕС ЯП] 8. LDX A,rp (A)  [РЕГ.ПАРА] 9. STS addr,A [АДРЕС ЯП]  (A) 10. STX rp,A [РЕГ.ПАРА]  (A) 11. PUSH r [SP]  (r) 12. POP r (r)  [SP] 13. IN A,port (A)  [АДРЕС ПОРТА] 14. OUT port,A [АДРЕС ПОРТА]  (A) Команды выполнения арифметических операций 1. ADD A,r (A)  (A) + (r) 2. ADC A,r (A)  (A) + (r) + (СF) 3. ADD A,M (A)  (A) + [BC] 4. ADC A,M (A)  (A) + [BC] + (СF) 5. ADDI A,data (A)  (A) + КОНСТАНТА 6. ADCI A,data (A)  (A) + КОНСТАНТА + (СF) 7. SUB A,r (A)  (A) - (r) 8. SBC A,r (A)  (A) - (r) - (СF) 9. SUB A,M (A)  (A) – [BC] 10. SBC A,M (A)  (A) – [BC] - (СF) 11. SUBI A,data (A)  (A) – КОНСТАНТА 12. SBCI A,data (A)  (A) – КОНСТАНТА - (СF) 13. MUL A,B (B)15-8 (А)7-0  (А) х (B) 14. DIV A,B (A)15-8 (B)7-0  (А) / (B) 15. DA A Десятичная коррекция сложения 16. INC r (r)  (r) + 1 17. DEC r (r)  (r) – 1 18. INC M [BC]  [BC] + 1 19. DEC M [BC]  [BC] – 1 20. INRP rp (rp)  (rp) + 1 21. DCRP rp (rp)  (rp) – 1 Команды выполнения логических операций 1. AND A,r (A)  (A)  (r) 2. AND A,M (A)  (A)  [BC] 3. ANDI A,data (A)  (A)  КОНСТАНТА 4. OR A,r (A)  (A)  (r) 5. OR A,M (A)  (A)  [BC] 6. ORI A,data (A)  (A)  КОНСТАНТА 7. XOR A,r (A)  (A)  (r) 8. XOR A,M (A)  (A)  [BC] 9. XORI A,data (A)  (A)  КОНСТАНТА 10. CMP A,r (A) – (r) 11. CMP A,M (A) – [BC] 12. CMPI A,data (A) – КОНСТАНТА 13. CM A (A)  () 14. RLC A (ai+1)  (ai) (a0)  (CF) (CF)  (an) 15. RRC A (ai)  (ai+1) (an)  (CF) (CF)  (a0) 16. RAL A (ai+1)  (ai) (a0)  (an) (CF)  (an) 17. RAR A (ai)  (ai+1) (an)  (a0) (CF)  (a0) 18. SAL A (ai+1)  (ai) (a0)  0 (CF)  (an) 19. SAR A (ai)  (ai+1) (an)  (an) (CF)  (a0) Команды передачи управления 1. JMP addr (PC)  АДРЕС ПЕРЕХОДА 2. J-CON addr (PC)  АДРЕС ПЕРЕХОДА 3. CALL addr [SP]  (PC) (PC)  АДРЕС ПОДПРОГРАММЫ 4. RET (PC)  [SP] Команды специальные 1. EI Разрешить прерывание 2. DI Запретить прерывание 3. NOP (PC)  (PC) + 1 4. HLT Останов 13.9.1. Команды пересылки данных. Команды данной группы служат для загрузки и пересылки двоичных кодов между различными устройствами хранения, которыми являются ячейки памяти, порты и регистры МП. Следует отметить, что команды пересылки данных обычно не воздействуют на флаги, поскольку по командам этой группы не выполняются какие-либо вычисления в АЛУ. 1. Команда MOV r1,r2. Эта команда регистровой адресации содержимое регистра r2 переписывает в регистр r1, причем содержимое регистра r2 сохраняется. В качестве регистров могут быть использованы внутренние регистры общего назначения. Например, после выполнения команды MOV C,А данные из аккумулятора А будут переписаны в регистр С. Содержимое аккумулятора не изменится. 2. Команда MOV r,M. Данная команда имеет косвенную адресацию и выполняет пересылку содержимого ячейки памяти M, адрес которой определяется текущим содержимым регистра-указателя адреса (в нашем случае регистровой пары BC) во внутренний регистр общего назначения r. Для того, чтобы обратиться к ячейке памяти с конкретным адресом, ранее в программе необходимо в регистр-указатель адреса загрузить этот адрес или сформировать его каким-либо вычислением. Например, по команде МОV С,M данные из ячейки памяти M пересылаются в регистр C. 3. Команда MOV M,r. Данная команда выполняет обратное действие по отношению к предыдущей команде, т.е. содержимое внутреннего регистра микропроцессора заносит в косвенно адресуемую ячейку памяти. 4. Команда LDI r, data является командой с непосредственной адресацией данных. Эта команда обеспечивает загрузку любого внутреннего регистра r микропроцессора операндом в виде константы data. Например, по команде LDI B,150 в регистр В загружается двоичный код десятичного числа 150. 5. Команда LDI M, data аналогична предыдущей, но загружает константой косвенно адресуемую ячейку памяти M. 6. Команда LDRP rp,data16 выполняет загрузку регистровой пары или иного адресного регистра шестнадцатиразрядной двоичной константой. В качестве адресных регистров могут использоваться в команде указатель стека SP, регистр-указатель адреса косвенно адресуемой ячейки памяти, индексные регистры и иные регистры, кроме счетчика команд. Например, с учетом принятых нами соглашений, команда LDRP ВC,8000 определяет адрес косвенно адресуемой ячейки памяти M путем занесения в регистровую пару BC двоичного кода десятичного числа 8000. 7. Команда LDS A,addr является командой прямой адресации данных и обеспечивает загрузку аккумулятора содержимым ячейки памяти, адрес которой addr указывается в команде в явном виде числом или меткой, под которой понимается числовое значение. 8. Команда LDX A,rp выполняет загрузку аккумулятора содержимым косвенно адресуемой ячейки памяти, адрес которой указывается регистровой парой rp или регистром-указателем адреса. Данная команда имеет косвенную адресацию данных. 9. Команда STS addr,A аналогична команде LDS A,addr, но выполняет обратную пересылку, т.е. содержимое аккумулятора пересылает в прямо адресуемую ячейку памяти. 10. Команда STX rp,A сохраняет аккумулятор в косвенно адресуемой ячейке памяти, адрес которой определяется содержимым регистровой пары rp или регистром-указателем адреса. 11. Команда PUSH r является командой со стековой адресацией. Она заносит в стековую ячейку памяти содержимое указанного в команде регистра r. Каждая запись в стек изменяет указатель стека SP на единицу. 12. Команда POP r выполняет обратное действие, т.е. выгружает из стека последнее записанное в него значение и размещает его в регистре r. Каждая выгрузка из стека изменяет содержимое указателя стека SP на единицу с противополжным по знаку приращением по отношению к команде PUSH r. 13. Команда IN A,port реализует ввод данных из порта ввода и запись введенного значения в аккумулятор. Эта команда является командой прямой адресации данных и выполняет обращение к порту по явному адресу, записанному в виде числа или условной метки с числовым значением port. 14. Команда OUT port,A выполняет обратную пересылку, т.е. данные из аккумулятора выводит в порт вывода по адресу port. 13.9.2. Команды выполнения арифметических операций. С помощью команд выполнения арифметических действий производится совместная обработка двух двоичных кодов по правилам двоичной арифметики, а также операции отрицательного или положительного приращения содержимого регистров или ячеек памяти. Команды этой группы обычно воздействуют на все флаги или большую их часть. 1. Команда АDD А,r способом регистровой адресации выполняет арифметическое сложение содержимого аккумулятора с содержимым одного из регистров общего назначения. Результат выполнения команды помещается в аккумулятор. Например, команда АDD A,A удваивает содержимое аккумулятора. Размещение одного из операндов и результата арифметических и логических команд в аккумуляторе характерно для многих восьмиразрядных микропроцессоров и микроконтроллеров. Связано это с дефицитом разрядов однобайтового формата кода операции этих команд для кодирования различных регистров-источников обоих операндов. 2. Команда ADС A,r является командой сложения содержимого аккумулятора с содержимым регистра общего назначения, учитывающей при этом флаг переноса СF. Если при ранее выполненной команде флаг переноса был установлен в единицу, то к полученному результату арифметически будет прибавлена единица. В противном случае, прибавление единицы не произойдет. Результат данной команды также размещается в аккумуляторе. С помощью данной команды можно поэтапно складывать двоичные коды с разрядностью, превышающей разрядность АЛУ микропроцессора, без потери переносов единиц из младших байтов в старшие. 3. Команда АDD А,M арифметически прибавляет к содержимому аккумулятора содержимое косвенно адресуемой ячейки памяти. Адрес ячейки памяти M указывается регистровой парой (в нашем случае BC) или специальным регистром-указателем адреса. 4. Команда ADС A,M аналогично предыдущей команде выполняет сложение аккумулятора с косвенно адресуемой ячейкой памяти M, но с учетом значения флага переноса CF. 5. Команда ADDI A,data является командой с непосредственной адресацией данных и осуществляет сложение содержимого аккумулятора с явно указанным в команде в виде константы значением операнда data. Результат команды будет также размещен в аккумуляторе. 6. Команда ADCI A,data выполняет арифметическое сложение аккумулятора с непосредственно указанным в команде значением операнда data, учитывая при этом значение ранее установленного флага переноса CF. 7. Команда SUB A,r является командой с регистровой адресацией данных и выполняет операцию арифметического вычитания из содержимого аккумулятора содержимого указанного в команде регистра общего назначения r. Результат команды как и в предыдущих случаях размещается в аккумуляторе. Например, команда SUB А,А вычтет из содержимого аккумулятора его же собственное содержимое, в результате чего аккумулятор обнулится. Такая команда часто используется для обнуления аккумулятора (или иного регистра общего назначения, если в команде можно указывать размещение обоих операндов в произвольных РОНах), поскольку имеет короткий формат и по времени выполнения более оптимальна, нежели запись в аккумулятор нуля непосредственно командой LDI A,0. 8. Команда SBC A,r выполняет операцию арифметического вычитания из содержимого аккумулятора содержимого регистра общего назначения с учетом флага переноса CF. Если раннее выполненная команда установила этот флаг в единичное значение, то из результата вычитания дополнительно еще арифметически отнимется единица. Эта команда позволяет реализовывать вычитание двоичных чисел с разрядностью, превышающей разрядность АЛУ микропроцессора. 9. Команда SUB A,M вычитает из аккумулятора содержимое косвенно адресуемой ячейки памяти M, адрес которой указывается указательной регистровой парой или специальным адресным регистром. 10. Команда SBC A,M выполняет аналогичное предыдущей команде действие, но учитывает при этом ранее установленное значение флага переноса CF. 11. Команда SUBI A,data является командой с непосредственной адресацией данных и выполняет операцию вычитания из содержимого аккумулятора значение явно заданной в качестве операнда константы data. 12. Команда SBCI A,data вычитает из содержимого аккумулятора значение операнда data и единичное значение флага переноса CF, если таковой был установлен ранее выполненной командой. Команды ADС A,r , ADC A,M , ADCI A,data , SBC A,r , SBC A,M и SBCI A,data используются для выполнения арифметических операций суммирования и вычитания с повышенной точностью, т.е. при работе с двоичными кодами, разрядность которых больше разрядности микропроцессора (его АЛУ). Например, при сложении двух чисел с длиной в два слова (байта) сначала складываются их младшие слова (байты) с помощью команды ADD A,r или ADDI A,data. При этом может образоваться перенос единицы из самого старшего разряда младшего слова (байта) суммы, который зафиксируется во флаге переноса CF. Поэтому, чтобы результат сложения старших слов (байтов) слагаемых был корректным и учел перенос единицы из младшего слова (байта) в старшее, необходимо старшие слова (байты) складывать командой АDС A,r или ADCI A,data соответственно. Если перенос имел место, то единица, занесенная в разряд флага переноса СF регистра признаков командами сложения младших слов (байтов) будет участвовать в сложении старших слов (байтов). Если же переноса не было, то к старшему слову (байту) прибавится ноль, т.е. сумма старших слов не изменится. Аналогично организуется вычитание многоразрядных чисел. При этом для вычитания младших слов (байтов) необходимо на первом этапе использовать команды вычитания, не учитывающие флаг переноса CF, а затем при вычитании старших слов (байтов) необходимо использовать команды вычитания, учитывающие этот флаг. 13. Команда MUL A,B является командой арифметического умножения. При этом разрядность результата умножения всегда в два раза больше разрядности исходных операндов. Обычно в командах умножения и деления участвуют специально отведенные для них регистры. В нашем случае будем в качестве таких регистров рассматривать введенные нами гипотетические аккумулятор A и регистр общего назначения B. В этой интерпритации данная команда выполняет операцию арифметического умножения содержимого аккумулятора на содержимое регистра В. Младшее слово (байт) результата умножения будет размещаться в аккумуляторе, а старшее – в регистре B. Команда устанавливает флаг четности PF в зависимости от четности количества единиц в коде результата. Флаг переполнения OF устанавливается в единичное значение, если старшее слово (байт) результата не равно нулю, или в нулевое значение в противном случае. 14. Команда DIV A,B выполняет деление содержимого аккумулятора (делимое) на содержимое регистра B (делитель). При этом целая часть результата деления записывается в аккумулятор, а остаток – в регистр B. Команда устанавливает флаг четности PF в зависимости от четности количества единиц в коде результата. Флаг переполнения OF устанавливается в единичное значение, если делитель в регистре B был равен нулю, т.е. имело место деление на ноль, или в нулевое значение в противном случае. 15. Команда DA A является командой десятичной коррекции результата сложения, размещенного в аккумуляторе. Поскольку АЛУ складывает числа по правилам двоичной арифметики, то и двоично-десятичные числа будут складываться по таким же правилам. Для того, чтобы сложить двоично-десятичные коды и результат получить в виде двоично-десятичного числа, необходимо ввести соответствующие поправки. Такие поправки и вводятся командой DА А. Эта команда используется непосредственно после команды сложения. Для коррекции результата вычитания команда DА А не может быть использована. Коррекция производится путем последовательного анализа тетрад результата сложения, начиная с самой младшей тетрады. Если значение текущей тетрады результата сложения больше девяти или имел место перенос единицы в следующую старшую тетраду, то к текущей тетраде прибавляется шестерка. Делается это для того, чтобы исключить присутствующие в двоичной системе счисления, но отсутствующие в двоично-десятичной, кодовые комбинации тетрад со значениями A, B, C, D, E и F в количестве шести штук. 16. Команда INC r является командой положительного приращения регистра и изменяет содержимое регистра общего назначения r на +1. Обычно такая команда используется в циклических структурах для организации подсчета каких-либо событий путем инкремента счетчика на каждом шаге цикла, в качестве которого выступает регистр r. 17. Команда DEC r выполняет обратное действие по отношению к предыдущей команде, т.е. изменяет содержимое регистра r на -1. Такая команда может быть полезна для организации циклических структур с определенным количеством шагов. Для этого в регистр r, используемый в качестве счетчика цикла, предварительно заносится некоторое число, равное количеству шагов цикла. Затем в теле цикла вписывают команду DEC r. На каждом шаге цикла содержимое регистра r будет декрементироваться. Проверяя каждый раз в цикле содержимое регистра r на равенство его нулю, можно определить, когда необходимо выполнить выход из цикла. 18. Команда INC M выполняет положительное приращение на единицу содержимого косвенно адресуемой через регистр-указатель или регистровую пару ячейки памяти. 19. Команда DEC M выполняет отрицательное приращение на единицу содержимого косвенно адресуемой ячейки памяти. 20. Команда INRP rp увеличивает на единицу содержимое регистровой пары (или иного указательного адресного регистра). С помощью такой команды можно организовывать обращение к области последовательно расположенных ячеек памяти в сторону увеличения их адресов путем инкремента в цикле содержимого адресного регистра или регистровой пары, хранящей адрес ячейки памяти при косвенной адресации. 21. Команда DCRP rp выполняет обратное действие, т.е. уменьшает на единицу содержимое регистровой пары или адресного регистра-указателя. Соответственно с помощью такой команды можно в цикле косвенно адресоваться к соседним ячейкам пяти в сторону уменьшения их адресов. Часто команды инкремента и декремента регистровых пар на флаги не воздействют. 13.9.3. Команды выполнения логических операций. Команды выполнения логических операций как и команды предыдущей группы выполняют совместную обработку двоичных кодов, но по правилам Булевой алгебры-логики. Как и в случае арифметических команд, при выполнении логических команд один из операндов обычно должен размещаться в аккумуляторе и в нем же должен размещаться результат выполненного действия. Команды этой группы могут использоваться, например, для выделения или изменения каких-либо отдельных разрядов обрабатываемого слова. Выполняется это путем соответствующей логической операции над корректируемым словом и маской, содержащей в определенных разрядах нули или единицы в зависимости от требуемого результата. Также в данную группу относят обычно часть команд, явно логические действия не выполняющие, но результат выполнения которых имеет логический смысл, например, команды сравнения и сдвига. 1. Команда АND А,r выполняет операцию поразрядного логического умножения (операцию И, конъюнкцию) содержимого аккумулятора и регистра общего назначения r. Данная команда воздействует на все флаги, а флаги переноса CF и вспомогательного переноса AF в частности сбрасываются обычно в ноль. Поэтому команда AND А,A , например, может быть примена для воздействия на флаги без изменения содержимого аккумулятора, т.к. согласно тождествам алгебры-логики , либо для обнуления флагов CF и AF. Такая потребность может возникнуть, если нужно определить признаки содержимого аккумулятора после команд, на флаги не воздействовавших, например, после выполнения команд ввода-вывода. 2. Команда АND А,M выполняет операцию логической конъюнкции над содержимым аккумулятора и косвенно адресуемой через регистровую пару или регистр-указатель адреса ячейки памяти M. Воздействие команды на флаги аналогично воздействию предыдущей команды. 3. Команда ANDI A,data также выполняет операцию поразрядного логического умножения, но над содержимым аккумулятора и операндом data, заданным в команде. Эта команда имеет непосредственную адресацию. Воздействие команды на флаги аналогично воздействию предыдущей команды. Если необходимо, например, выделить третий разряд в байте, находящемся в аккумуляторе, а остальные его разряды обнулить, то производят операцию поразрядного логического умножения содержимого аккумулятора с маской, в третьем разряде которой должна быть записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: ANDI A,00000100B. Символ «B» в конце операнда-маски указывает на двоичную форму его записи. 4. Команда ОR А,r выполняет операцию поразрядного логического сложения (операцию ИЛИ, дизъюнкцию) содержимого аккумулятора и регистра общего назначения r. Данная команда также воздействует на все флаги, а флаги CF и AF сбрасывает в ноль. Как и в случае с командой AND A,A , команда ОR А,A может быть использована для воздействия на флаги или обнуления флагов CF или AF без изменения содержимого аккумулятора, поскольку . 5. Команда ОR А,M выполняет операцию поразрядной логической дизъюнкции над содержимым аккумулятора и косвенно адресуемой ячейки памяти M. Воздействие команды на флаги аналогично воздействию предыдущей команды. 6. Команда ORI A,data является командой непосредственной адресации и выполняет операцию поразрядной логической дизъюнкции над содержимым аккумулятора и операндом data записанным в команде в виде константы. Воздействие команды на флаги аналогично воздействию предыдущей команды. Если необходимо, например, записать в пятый разряд байта, находящегося в аккумуляторе, единицу, не изменяя при этом значения остальных его разрядов, то нужно произвести операцию поразрядного логического сложения содержимого аккумулятора с маской, в пятом разряде которой будет присутствовать 1, а в остальных - 0. Команда будет выглядеть следующим образом: ORI A,00010000B. 7. Команда XOR A,r выполняет операцию поразрядного логического сложения по модулю 2 (операцию ИСКЛЮЧАЮЩЕЕ ИЛИ) над содержимым аккумулятора и регистра общего назначения r. Воздействие команды на флаги аналогично воздействиям рассмотренных ранее логических команд. Команда XOR A,А , в частности, используется для обнуления аккумулятора и флагов CF и AF, поскольку известно, что . 8. Команда XOR A,M выполняет операцию поразрядного логического сложения по модулю 2 над содержимым аккумулятора и косвенно адресуемой ячейки памяти M. Воздействие команды на флаги аналогично воздействиям в вышеописанных командах. 9. Команда XORI A,data производит операцию поразрядного логического сложения по модулю 2 над содержимым аккумулятора и явно записанным в команде в виде константы операндом data. Воздействие команды на флаги аналогично воздействию в вышеописанных командах. Для того, чтобы изменить на противоположное значение, например, седьмого разряда байта, находящегося в аккумуляторе, при этом не изменяя значения остальных его разрядов, необходимо выполнить операцию поразрядного логического сложения по модулю 2 с маской, в седьмом разряде которой должна быть записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: XORI A,01000000B. 10. Команда СМР A,r позволяет сравнивать два числа, находящихся в аккумуляторе и в регистре r. Сравнение осуществляется вычитанием из содержимого аккумулятора содержимого регистра r. Вычитание производится без сохранения результата в аккумуляторе. Результат вычитания проявляется только в воздействии на флаги. Если операнды равны, флаг нуля ZF устанавливается в единицу. Если значение числа, находящегося в аккумуляторе, меньше значения второго числа, находящегося в регистре r, и оба числа положительны и заданы в прямых кодах, то устанавливается в единицу флаг переноса СF. Если же сравниваются два знаковых числа в дополнительных кодах, то в случае вычитания из меньшего числа большего в единицу установится флаг знака SF. В противных же случаях все эти флаги будут иметь нулевые значения. 11. Команда СМР A,M аналогична предыдущей, но имеет косвенную адресацию данных, т.е. вычитает без сохранения результата из содержимого аккумулятора содержимое косвенно адресуемой через регистровую пару или адресный регистр-указатель ячейку памяти M. 12. Команда CMPI A,data сравнивает путем вычитания содержимое аккумулятора с операндом data, заданным в команде в виде константы. Эта команда имеет непосредственную адресацию данных. В остальном назначение команды аналогично предыдущим двум. 13. Команда СМ А инвертирует содержимое аккумулятора. 14. Команда RLC A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора влево на один разряд через флаг переноса CF. Из описания команды видно, что все разряды сдвигаются влево на одну позицию (ai+1)  (ai); в самый младший разряд записывается ранее установленное значение флага переноса (a0)  (CF); выдвигаемый старший разряд фиксируется во флаге переноса (CF)  (an). Команды сдвига часто используются для организации операций умножения и деления, т.к. сдвиг двоичного кода влево на один разряд равносилен его умножению на 2, а сдвиг вправо на один разряд - делению на 2. Только необходимо помнить, что рассмотренная команда может исказить результат умножения на 2, поскольку она возвращает обратно в младший бит сдвигаемого байта значение флага переноса. Для корректного же умножения на 2 в младшем бите должен быть установлен 0. Для этого можно перед началом сдвига обнулить флаг переноса, например, командой AND A,A или иной специальной, если такая имеется в системе команд микропроцессора. Так же можно воспользоваться командой арифметического сдвига содержимого аккумулятора влево, которая будет рассмотрена дальше. 15. Команда RRC A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора вправо на один разряд через флаг переноса CF по схеме, аналогичной описанной в предыдущей команде. Путем использования команды RRC A можно определить, например, среднее арифметическое двух значений. Для этого нужно на первом этапе выполнить сложение двух значений, среднее арифметическое которых необходимо определить, используя для этого команду ADD A,r , например. В результате сложения может либо возникнуть перенос, либо не возникнуть, который зафикисируется во флаге переноса единичным или нулевым значением. Поэтому для корректного деления пополам полученной суммы, при сдвиге вправо необходимо учесть этот факт. Это и сделает команда RRC A , вернув значение флага переноса в самый старший разряд результата. 16. Команда RAL A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора влево на один разряд. При этом старший бит замыкается на младший (a0)  (an) и он же выдвигается во флаг переноса (CF)  (an). 17. Команда RAR A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора вправо на один разряд по схеме, аналогичной описанной в предыдущей команде, но в обратном направлении. 18. Команда SAL A является командой арифметического сдвига влево, или, как его еще называют, разомкнутого или простого. Отличие этой команды от предыдущих команд циклического сдвига влево заключается в том, что в младший бит при каждом сдвиге записывается ноль (a0)  0. Старший бит как и в предыдущих командах сдвига влево выдвигается во флаг переноса. Именно этой командой можно выполнить умножение аккумулятора на 2 без каких либо дополнительных манипуляций над флагом переноса CF. 19. Команда SAR A выполняет разомкнутый арифметический сдвиг вправо, но по несколько иной схеме, нежели команда арифметического сдвига влево. Отличие заключается в том, что самый старший разряд при сдвиге не меняет своего значения (an)  (an), т.е. сдвигаются все разряды вправо, кроме старшего. Сохранение значения самого старшего разряда позволяет корректно реализовывать арифметические операции умножения и деления над знаковыми числами в дополнительных кодах. В большинстве случаев микропроцессоры и микроконтроллеры не обладают всеми перечисленными командами командами сдвигов. Однако, дополняя имеющиеся у данного типа микропроцессора команды сдвига другими командами, можно получить результат недостающих команд. Например, получить арифметический сдвиг влево из циклического сдвига можно путем предварительного обнуления флага переноса CF. Аналогичный сдвиг вправо можно выполнить путем наложения на старший бит сдвинутого байта флага знака SF. 13.9.4. Команды передачи управления. При выполнении программы содержимое счетчика команд PC непрерывным образом увеличивается, поэтому команды извлекаются из памяти и выполняются в порядке возрастания их адресов. Ход выполнения программы можно изменить, если в счетчик команд PC поместить адрес, отличающийся от адреса очередной команды. В этом случае микропроцессор перейдет к выполнению программы с места, указанного новым адресом (адресом перехода). Адрес перехода может указываться напрямую в команде в виде числа или метки, а также косвенно содержаться в регистровой паре или специальном адресном указательном регистре, указанными в команде перехода. При выполнении команды перехода адрес, указанный в команде, записывается в счетчик команд PC, причем прежнее содержимое счетчика команд теряется. Переход может быть безусловным или условным. Если безусловные переходы реализуются всегда, то условные - только при истинном значении проверяемого условия условия. Если условие не удовлетворяется, то выполняется следующая команда программы. 1. Команда JMP addr является командой безусловного перехода. Эта команда адрес addr, указанный в ней в качестве операнда, записывает в счетчик команд PC. После отработки этой команды программа начнет выполняться с нового адреса, помещенного в счетчик команд. 2. Команда J-CON addr является командой условного перехода. В качестве условий рассматриваются нулевые или единичные значения флагов ZF, СF, РF, SF и OF флагового регистра. В место сокращения -CON подставляется мнемоника конкретного условия, при котором должен произойти переход: NZ - ненулевой результат; Z - нулевой результат; NC - отсутствие переноса в результате; C - наличие переноса в результате; PO - нечетное число единиц в коде результата; PE - четное число единиц в коде результата; P - неотрицательный результат; M - отрицательный результат. Например, команда условного перехода J-CON addr записывается JNZ addr, если условие перехода заключается в том, что не был установлен флаг нуля, т.е. ZF=0 (ранее выполненная команда не дала нулевого результата). При выполнении этого условия адрес перехода, содержащийся в команде в качестве операнда запишется в счетчик команд PC и микропроцессор перейдет к выполнению программы с нового адреса. Если условие не удовлетворится, т.е. ZF=1 (предыдущий результат был равен нулю), то выполняется команда, непосредственно следующая в программе за командой JNZ addr. Если в программе встречаются одинаковые последовательности команд, то для того, чтобы не записывать такие последовательности по несколько раз в памяти, их выделяют в подпрограммы. Переход от выполнения программы к выполнению подпрограммы производится с помощью команд вызова подпрограмм. При выполнении такой команды в счетчик команд PC также записывается адрес, который указывается в команде (адрес первой команды подпрограммы), но предварительно прежнее содержимое счетчика команд PC, т.е. адрес команды, которая следует в программе за командой вызова (адрес возврата или точка возврата из подпрограммы), запоминается в стеке. 3. Команда CALL addr является командой вызова подпрограммы. Команда записывает в счетчик команд PC адрес первой команды подпрограммы, указанный в команде, и предварительно в стек на сохранение отправляет адрес возврата в основную подпрограмму (адрес команды, следующей за командой CALL addr). При этом, поскольку в стек записывается два байта адреса, указатель стека SP в зависимости от типа микропроцессора смещается вверх или вниз на две ячейки. В некоторых микропроцессорах команды вызова подпрограмм могут быть как безусловными, так и условными. 4. Команда RET служит для возврата из подпрограммы. Она является последней командой любой подпрограммы. По этой команде адрес возврата, сохраненный ранее в стеке при уходе на подпрограмму, пересылается обратно в счетчик команд PC. При этом указатель стека SP смещается на две ячейки в обратном направлении. После возврата из подпрограммы работа программы продолжится с того места, где она была прервана обращением к подпрограмме. Поскольку в стеке реализуется принцип «последний записанный считывается первым», то в случае вызова вложенных подпрограмм во время уже выполняющихся подпрограмм (как и в случае многоуровневых прерываний), адреса возврата будут извлекаться из стека в обратном порядке по сравнению с их размещением в стеке при уходе на подпрограммы. Таким образом, работа программы микропроцессора и последовательность вызова подпрограмм и возврата из них не будут нарушены. 13.9.5. Команды специальные. Каждый микропроцессор обладает индивидуальным набором специальных команд, необходимых для управления и задания режимов его работы и выполнения программ. К специальным командам в большинстве случаев можно отнести следующие команды. 1. Команда EI разрешает маскируемые прерывания. Эта команда устанавливает выходной управляющий сигнал «Разрешение прерывания» или одноименный флаг при его наличии в единичное значение, что разрешает внешнему устройству инициировать процесс ввода-вывода по прерыванию. По умолчанию обычно маскируемые прерывания запрещены. И одно обслуженное прерывание запрещает остальные. Поэтому, если в микропроцессорной системе предусматривается периодическая работа в режиме ввода-вывода по прерыванию, необходимо не забывать вписывать в программу в необходимых местах команду EI. 2. Команда DI запрещает вышеописанный режим путем устанавки выходного управляющего сигнала «Разрешение прерывания» или такого же флага в нулевое значение. В результате, даже если внешнее устройство и будет запрашивать режим ввода-вывода по прерыванию, микропроцессор его будет игнорировать. 3. Команда NOP означает пустую операцию, во время которой происходит только увеличение на единицу содержимого счетчика команд PC. Использование команды NОР позволяет организовать временную задержку небольшой величины, обычно длительностью в один машинный цикл. 4. Команда HLT переводит МП в состояние «останов». По этой команде останавливается счетчик команд, в результате чего работа программы приостанавливается. Выполнение этой команды приведет к «зависанию» микропроцессора. Однако, такая команда в некоторых случаях осознанно пишется в программе. Дело в том, что из состояние «останова» микропроцессор может быть выведен внешним прерыванием. Таким образом, команда HLT пишется в программе в тех местах, где необходимо дождаться внешнего события по прерыванию. Приведенные команды являются далеко не полным набором систем команд существующих микропроцессоров и микроконтроллеров, так же, как и не все микропроцессоры содержат описанные выше команды. Например, есть команды, нами не рассмотренные, устанавливающие определенные разряды регистра флагов микропроцессора в определенные значения или задающие определенные режимы работы микропроцессора – энергосберегающий или «спящий». Существуют команды передачи управления, совмещающие в себе функции команд декремента и условного перехода. Например, команда DJNZ r,addr выполняет и декремент регистра r, и проверку на ненулевой результат. Такая команда удобна для организации циклических структур, в которой регистр r выполняет функцию счетчика цикла. Также можно отметить наличие команд сдвига, в которых сдвиги можно осуществлять на несколько разрядов за одно выполнение команды. Кроме того, приведенная мнемоника описанных выше команд является условной, так же, как и используемые ими регистры. Во многих современных восьмиразрядных RISC-микроконтроллерах в арифметических и логических командах в качестве регистра источника одного из операндов и регистра накопителя результата могут использоваться любые регистры общего назначения или их часть. Иными словами, функции аккумулятора могут выполнять регистры общего назначения. При освоении основ программирования на языке Ассемблера и решении конкретных практических задач необходимо обращаться к руководствам и прочей технической документации этих микропроцессоров и микроконтроллеров. Контрольные вопросы 1. Охарактеризуйте классификационные признаки и особенности микропроцессоров соответствующих классов. 2. Каковы отличительные особенности основных структур микропроцессорных систем? 3. Перечислите основные аппаратные средства, входящие в состав микропроцессорных систем. 4. Дайте определение понятиям «машинный цикл» и «цикл команды». 5. Что подразумевается под процессом ввода-вывода в микропроцессорных системах и какими режимами он реализуется? Охарактеризуйте каждый из режимов. 6. Перечислите основные характеристики интерфейсов микропроцессорных систем. 7. Какие стандарты интерфейсов микропроцессорных систем Вам известны? Охарактеризуйте принципы организации протоколов передачи данных этих интерфейсов. 8. Назовите и охарактеризуйте типовые управляющие сигналы микропроцессора. 9. Перечислите основные узлы, входящие в микропроцессор, и охарактеризуйте их назначение. 10. Перечислите и дайте определение типовым способам адресации данных. 11. Каким образом осуществляются арифметические операции в МП над двоичными числами с повышенной разрядностью? 12. Как можно выделить или изменить отдельные разряды в байте? 13. Чем отличаются команды переходов от команд вызова подпрограмм? 14. Приведите примеры записи команд условных переходов по условиям «меньше», «больше» или «равно» для сравнении беззнаковых значений, заданных в прямых кодах, и знаковых значений, заданных в дополнительных кодах.
«Классификация микропроцессоров и особенности их использования в цифровой аппаратуре.» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 55 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot