Учебники

Встроенные системы — Краткое руководство

Встроенные системы — обзор

Система — это система, в которой все ее узлы работают вместе в соответствии с набором правил. Он также может быть определен как способ работы, организации или выполнения одной или нескольких задач в соответствии с фиксированным планом. Например, часы — это система отображения времени. Его компоненты следуют ряду правил, чтобы показать время. Если одна из его частей выйдет из строя, часы перестанут работать. Таким образом, мы можем сказать, что в системе все ее подкомпоненты зависят друг от друга.

Встроенная система

Как следует из названия, Embedded означает то, что связано с другой вещью. Под встроенной системой можно понимать компьютерную аппаратную систему, в которую встроено программное обеспечение. Встроенная система может быть независимой системой или частью большой системы. Встроенная система — это система на основе микроконтроллера или микропроцессора, предназначенная для выполнения конкретной задачи. Например, пожарная сигнализация является встроенной системой; это будет чувствовать только дым.

Встроенная система состоит из трех компонентов:

  • У этого есть оборудование.

  • У этого есть прикладное программное обеспечение.

  • Он имеет операционную систему реального времени (RTOS), которая контролирует прикладное программное обеспечение и предоставляет механизм, позволяющий процессору запускать процесс согласно расписанию, следуя плану управления задержками. ОСРВ определяет способ работы системы. Он устанавливает правила при выполнении прикладной программы. Небольшая встроенная система может не иметь ОСРВ.

У этого есть оборудование.

У этого есть прикладное программное обеспечение.

Он имеет операционную систему реального времени (RTOS), которая контролирует прикладное программное обеспечение и предоставляет механизм, позволяющий процессору запускать процесс согласно расписанию, следуя плану управления задержками. ОСРВ определяет способ работы системы. Он устанавливает правила при выполнении прикладной программы. Небольшая встроенная система может не иметь ОСРВ.

Таким образом, мы можем определить встроенную систему как основанную на микроконтроллере программную надежную систему управления в режиме реального времени.

Характеристики встроенной системы

  • Однофункциональный — встроенная система обычно выполняет специализированную операцию и делает то же самое многократно. Например: пейджер всегда функционирует как пейджер.

  • Тесно ограничен — все вычислительные системы имеют ограничения по метрикам проектирования, но те, что во встроенной системе, могут быть особенно жесткими. Метрики проектирования — это мера возможностей реализации, таких как стоимость, размер, мощность и производительность. Он должен иметь размер, подходящий для одного чипа, должен работать достаточно быстро, чтобы обрабатывать данные в режиме реального времени и потреблять минимум энергии для продления срока службы батареи.

  • Реактивный и в реальном времени. Многие встроенные системы должны постоянно реагировать на изменения в системной среде и должны вычислять определенные результаты в реальном времени без каких-либо задержек. Рассмотрим пример автомобильного круиз-контроллера; он постоянно контролирует и реагирует на датчики скорости и тормоза. Он должен вычислять ускорение или замедление многократно в течение ограниченного времени; задержка вычислений может привести к невозможности управления автомобилем.

  • На основе микропроцессоров — это должен быть микропроцессор или микроконтроллер.

  • Память. Она должна иметь память, поскольку ее программное обеспечение обычно вставляется в ПЗУ. Для этого не нужно никаких дополнительных воспоминаний в компьютере.

  • Подключено — Для подключения устройств ввода и вывода необходимо подключить периферийные устройства.

  • HW-SW системы — Программное обеспечение используется для большего количества функций и гибкости. Оборудование используется для производительности и безопасности.

  • Встроенные системы

Однофункциональный — встроенная система обычно выполняет специализированную операцию и делает то же самое многократно. Например: пейджер всегда функционирует как пейджер.

Тесно ограничен — все вычислительные системы имеют ограничения по метрикам проектирования, но те, что во встроенной системе, могут быть особенно жесткими. Метрики проектирования — это мера возможностей реализации, таких как стоимость, размер, мощность и производительность. Он должен иметь размер, подходящий для одного чипа, должен работать достаточно быстро, чтобы обрабатывать данные в режиме реального времени и потреблять минимум энергии для продления срока службы батареи.

Реактивный и в реальном времени. Многие встроенные системы должны постоянно реагировать на изменения в системной среде и должны вычислять определенные результаты в реальном времени без каких-либо задержек. Рассмотрим пример автомобильного круиз-контроллера; он постоянно контролирует и реагирует на датчики скорости и тормоза. Он должен вычислять ускорение или замедление многократно в течение ограниченного времени; задержка вычислений может привести к невозможности управления автомобилем.

На основе микропроцессоров — это должен быть микропроцессор или микроконтроллер.

Память. Она должна иметь память, поскольку ее программное обеспечение обычно вставляется в ПЗУ. Для этого не нужно никаких дополнительных воспоминаний в компьютере.

Подключено — Для подключения устройств ввода и вывода необходимо подключить периферийные устройства.

HW-SW системы — Программное обеспечение используется для большего количества функций и гибкости. Оборудование используется для производительности и безопасности.

преимущества

  • Легко настраиваемый
  • Низкое энергопотребление
  • Бюджетный
  • Улучшенная производительность

Недостатки

  • Высокие усилия по развитию
  • Больше времени на рынок

Основная структура встроенной системы

На следующем рисунке показана основная структура встроенной системы —

Структура встраиваемых систем

  • Датчик — Он измеряет физическую величину и преобразует ее в электрический сигнал, который может быть прочитан наблюдателем или любым электронным инструментом, таким как преобразователь A2D. Датчик сохраняет измеренную величину в памяти.

  • AD Converter — аналого-цифровой преобразователь, преобразующий аналоговый сигнал, передаваемый датчиком, в цифровой сигнал.

  • Процессор и ASIC — процессоры обрабатывают данные, чтобы измерить вывод и сохранить их в памяти.

  • DA Converter — Цифро-аналоговый преобразователь преобразует цифровые данные, передаваемые процессором, в аналоговые данные.

  • Привод — привод сравнивает выходной сигнал, предоставляемый преобразователем DA, с фактическим (ожидаемым) выходным сигналом, хранящимся в нем, и сохраняет утвержденный выходной сигнал.

Датчик — Он измеряет физическую величину и преобразует ее в электрический сигнал, который может быть прочитан наблюдателем или любым электронным инструментом, таким как преобразователь A2D. Датчик сохраняет измеренную величину в памяти.

AD Converter — аналого-цифровой преобразователь, преобразующий аналоговый сигнал, передаваемый датчиком, в цифровой сигнал.

Процессор и ASIC — процессоры обрабатывают данные, чтобы измерить вывод и сохранить их в памяти.

DA Converter — Цифро-аналоговый преобразователь преобразует цифровые данные, передаваемые процессором, в аналоговые данные.

Привод — привод сравнивает выходной сигнал, предоставляемый преобразователем DA, с фактическим (ожидаемым) выходным сигналом, хранящимся в нем, и сохраняет утвержденный выходной сигнал.

Встроенные системы — процессоры

Процессор — это сердце встроенной системы. Это базовая единица, которая принимает входные данные и производит выходные данные после обработки данных. Для разработчика встроенных систем необходимо знание как микропроцессоров, так и микроконтроллеров.

Процессоры в системе

Процессор имеет два основных блока —

  • Блок управления потоком программ (CU)
  • Единица исполнения (ЕС)

CU включает в себя блок выборки для извлечения инструкций из памяти. В ЕС есть схемы, которые реализуют инструкции, относящиеся к операции передачи данных и преобразования данных из одной формы в другую.

ЕС включает в себя Арифметико-логический блок (АЛУ), а также схемы, которые выполняют инструкции для задачи управления программой, такой как прерывание, или переход к другому набору инструкций.

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

Типы процессоров

Процессоры могут быть следующих категорий —

  • Процессор общего назначения (GPP)

    • Микропроцессор
    • микроконтроллер
    • Встроенный процессор
    • Цифровой сигнальный процессор
    • Медиапроцессор
  • Системный процессор для приложений (ASSP)

  • Специфичные для приложений процессорные инструкции (ASIP)

  • Ядра (и) GPP или ядро ​​(а) ASIP либо в интегральной микросхеме конкретного приложения (ASIC), либо в схеме очень большой интеграции (VLSI).

Процессор общего назначения (GPP)

Системный процессор для приложений (ASSP)

Специфичные для приложений процессорные инструкции (ASIP)

Ядра (и) GPP или ядро ​​(а) ASIP либо в интегральной микросхеме конкретного приложения (ASIC), либо в схеме очень большой интеграции (VLSI).

Микропроцессор

Микропроцессор — это одиночная микросхема VLSI с процессором. Кроме того, он также может иметь другие блоки, такие как тренеры, арифметические единицы обработки с плавающей запятой и конвейерные единицы, которые помогают в более быстрой обработке команд.

Цикл извлечения и исполнения микропроцессоров предыдущего поколения определялся тактовой частотой порядка ~ 1 МГц. Процессоры теперь работают на тактовой частоте 2 ГГц

Микропроцессоры

микроконтроллер

Микроконтроллер представляет собой однокристальный блок VLSI (также называемый микрокомпьютером ), который, хотя и имеет ограниченные вычислительные возможности, обладает улучшенными возможностями ввода / вывода и несколькими функциональными блоками на кристалле.

ЦПУ баран ПЗУ
Порт ввода / вывода таймер Последовательный порт

Микроконтроллеры особенно используются во встроенных системах для приложений управления в реальном времени с программной памятью и устройствами на кристалле.

Микропроцессор против Микроконтроллера

Давайте теперь посмотрим на наиболее заметные различия между микропроцессором и микроконтроллером.

Микропроцессор микроконтроллер
Микропроцессоры носят многозадачный характер. Может выполнять несколько задач одновременно. Например, на компьютере мы можем воспроизводить музыку во время написания текста в текстовом редакторе. Одиночная задача ориентирована. Например, стиральная машина предназначена только для стирки белья.
ОЗУ, ПЗУ, порты ввода / вывода и таймеры могут быть добавлены извне и могут различаться по количеству. RAM, ROM, порты ввода / вывода и таймеры не могут быть добавлены извне. Эти компоненты должны быть встроены в микросхему и зафиксированы в цифрах.
Дизайнеры могут решить, какое количество памяти или портов ввода / вывода необходимо. Фиксированное число для памяти или ввода / вывода делает микроконтроллер идеальным для ограниченной, но конкретной задачи.
Внешняя поддержка внешней памяти и портов ввода / вывода делает микропроцессорную систему более тяжелой и дорогой. Микроконтроллеры легче и дешевле, чем микропроцессор.
Внешние устройства требуют больше места, а их энергопотребление выше. Система на основе микроконтроллера потребляет меньше энергии и занимает меньше места.

Встраиваемые системы — типы архитектуры

Микроконтроллеры 8051 работают с 8-битной шиной данных. Таким образом, они могут поддерживать внешнюю память данных до 64 КБ и внешнюю память программ до 64 КБ в лучшем случае. В совокупности 8051 микроконтроллер может адресовать 128 КБ внешней памяти.

Когда данные и код находятся в разных блоках памяти, эта архитектура называется архитектурой Гарварда . В случае, если данные и код находятся в одном и том же блоке памяти, эта архитектура называется архитектурой фон Неймана .

Архитектура фон Неймана

Архитектура фон Неймана была впервые предложена ученым Джоном фон Нейманом. В этой архитектуре существует один путь данных или шина как для инструкции, так и для данных. В результате процессор выполняет одну операцию за раз. Он либо извлекает инструкцию из памяти, либо выполняет операцию чтения / записи данных. Таким образом, выборка команды и операция с данными не могут происходить одновременно, совместно используя общую шину.

Архитектура фон Неймана

Архитектура фон Неймана поддерживает простое аппаратное обеспечение. Это позволяет использовать одну последовательную память. Сегодняшняя обработка значительно опережает время доступа к памяти, и мы используем очень быстрый, но небольшой объем памяти (кэш), локальный для процессора.

Гарвардская Архитектура

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

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

Гарвардская Архитектура

Архитектура фон Неймана против Гарвардской архитектуры

Следующие пункты отличают архитектуру фон Неймана от архитектуры Гарварда.

Архитектура фон Неймана Гарвардская Архитектура
Единая память для совместного использования как кодом, так и данными. Отдельная память для кода и данных.
Процессор должен извлекать код в отдельном тактовом цикле и данные в другом тактовом цикле. Так что требуется два такта. Одного тактового цикла достаточно, поскольку для доступа к коду и данным используются отдельные шины.
Более высокая скорость, поэтому меньше времени. Медленнее в скорости, таким образом, больше времени.
Простой в дизайне. Комплекс по дизайну.

CISC и RISC

CISC — это компьютер с комплексными инструкциями. Это компьютер, который может адресовать большое количество инструкций.

В начале 1980-х разработчики компьютеров рекомендовали компьютерам использовать меньше инструкций с простыми конструкциями, чтобы они могли выполняться намного быстрее в ЦП без использования памяти. Такие компьютеры классифицируются как компьютер с сокращенным набором команд или RISC.

CISC против RISC

Следующие пункты отличают CISC от RISC —

CISC RISC
Большой набор инструкций. Легко программировать Меньший набор инструкций. Сложно программировать.
Упрощенная конструкция компилятора, учитывая больший набор инструкций. Комплексное проектирование компилятора.
Множество режимов адресации, вызывающих сложные форматы команд. Несколько режимов адресации, исправление формата инструкции.
Длина инструкции является переменной. Длина инструкции варьируется.
Более высокие тактовые частоты в секунду. Низкий тактовый цикл в секунду.
Акцент делается на железе. Акцент делается на программное обеспечение.
Блок управления реализует большой набор команд с помощью микропрограммного блока. Каждая инструкция должна быть выполнена аппаратно.
Более медленное выполнение, поскольку инструкции должны быть прочитаны из памяти и декодированы модулем декодера. Более быстрое выполнение, так как каждая инструкция должна выполняться аппаратно.
Трубопроводы невозможны. Возможна конвейеризация инструкций, учитывая один такт.

Встроенные системы — инструменты и периферия

Компиляторы и Ассемблеры

составитель

Компилятор — это компьютерная программа (или набор программ), которая преобразует исходный код, написанный на языке программирования (исходный язык), в другой компьютерный язык (обычно двоичный формат). Наиболее распространенной причиной для преобразования является создание исполняемой программы. Название «компилятор» в основном используется для программ, которые переводят исходный код с языка программирования высокого уровня на язык низкого уровня (например, язык ассемблера или машинный код).

Кросс-компилятор

Если скомпилированная программа может работать на компьютере с другим процессором или операционной системой, чем на компьютере, на котором компилятор программы скомпилировал, то этот компилятор называется кросс-компилятором.

Decompiler

Программа, которая может переводить программу с языка низкого уровня на язык высокого уровня, называется декомпилятором.

Языковой конвертер

Программа, которая переводит программы, написанные на разных языках высокого уровня, обычно называется переводчиком языка, переводчиком источника в источник или преобразователем языка.

Компилятор может выполнять следующие операции:

  • предварительная обработка
  • анализ
  • Семантический анализ (синтаксически-ориентированный перевод)
  • Генерация кода
  • Оптимизация кода

Монтажники

Ассемблер — это программа, которая берет базовые компьютерные инструкции (называемые ассемблером) и преобразует их в последовательность битов, которую процессор компьютера может использовать для выполнения своих основных операций. Ассемблер создает объектный код, переводя мнемонику инструкций на ассемблере в коды операций, преобразовывая символические имена в ячейки памяти. Язык ассемблера использует мнемонику для представления каждой низкоуровневой машинной операции (код операции).

Инструменты отладки во встроенной системе

Отладка — это методический процесс, позволяющий найти и уменьшить количество ошибок в компьютерной программе или части электронного оборудования, чтобы она работала так, как ожидалось. Отладка затруднена, когда подсистемы тесно связаны, потому что небольшое изменение в одной подсистеме может вызвать ошибки в другой. Инструменты отладки, используемые во встроенных системах, сильно различаются по времени разработки и функциям отладки. Мы обсудим здесь следующие инструменты отладки —

  • Имитаторы
  • Стартовые комплекты микроконтроллера
  • Эмулятор

Имитаторы

Код тестируется для MCU / системы, моделируя его на главном компьютере, используемом для разработки кода. Симуляторы пытаются смоделировать поведение всего микроконтроллера в программном обеспечении.

Функции симуляторов

Симулятор выполняет следующие функции —

  • Определяет семейство процессоров или устройств обработки, а также его различные версии для целевой системы.

  • Контролирует подробную информацию части исходного кода с метками и символическими аргументами, поскольку выполнение продолжается для каждого отдельного шага.

  • Предоставляет информацию о состоянии оперативной памяти и моделируемых портов целевой системы для каждого отдельного пошагового выполнения.

  • Контролирует реакцию системы и определяет пропускную способность.

  • Обеспечивает трассировку вывода содержимого счетчика программы по сравнению с регистрами процессора.

  • Предоставляет подробный смысл настоящей команды.

  • Отслеживает подробную информацию о командах симулятора, поскольку они вводятся с клавиатуры или выбираются из меню.

  • Поддерживает условия (до 8, 16 или 32 условий) и безусловные точки останова.

  • Предоставляет точки останова и трассировку, которые вместе являются важным инструментом тестирования и отладки.

  • Облегчает синхронизацию внутренней периферии и задержек.

Определяет семейство процессоров или устройств обработки, а также его различные версии для целевой системы.

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

Предоставляет информацию о состоянии оперативной памяти и моделируемых портов целевой системы для каждого отдельного пошагового выполнения.

Контролирует реакцию системы и определяет пропускную способность.

Обеспечивает трассировку вывода содержимого счетчика программы по сравнению с регистрами процессора.

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

Отслеживает подробную информацию о командах симулятора, поскольку они вводятся с клавиатуры или выбираются из меню.

Поддерживает условия (до 8, 16 или 32 условий) и безусловные точки останова.

Предоставляет точки останова и трассировку, которые вместе являются важным инструментом тестирования и отладки.

Облегчает синхронизацию внутренней периферии и задержек.

Стартовый комплект микроконтроллера

Стартовый комплект микроконтроллера состоит из —

  • Аппаратная плата (Оценочная плата)
  • Внутрисистемный программист
  • Некоторые программные инструменты, такие как компилятор, ассемблер, компоновщик и т. Д.
  • Иногда IDE и размер кода ограничены оценочной версией компилятора.

Большое преимущество этих наборов перед симуляторами состоит в том, что они работают в режиме реального времени и, таким образом, позволяют легко проверять функциональность ввода / вывода. Стартовые наборы, однако, вполне достаточны и являются самым дешевым вариантом для разработки простых проектов микроконтроллеров.

эмуляторы

Эмулятор — это аппаратный набор или программное обеспечение, или оба они могут эмулировать функции одной компьютерной системы (гостя) в другой компьютерной системе (хосте), отличные от первой, так что эмулированное поведение очень похоже на поведение реальной системы (гость).

Под эмуляцией понимается способность компьютерной программы в электронном устройстве эмулировать (имитировать) другую программу или устройство. Эмуляция фокусируется на воссоздании оригинальной компьютерной среды. Эмуляторы имеют возможность поддерживать более тесную связь с подлинностью цифрового объекта. Эмулятор помогает пользователю работать с любым видом приложения или операционной системы на платформе аналогично тому, как программное обеспечение работает в своей исходной среде.

Периферийные устройства во встроенных системах

Встроенные системы взаимодействуют с внешним миром через свои периферийные устройства, такие как следующие & mins;

  • Интерфейсы последовательной связи (SCI), такие как RS-232, RS-422, RS-485 и т. Д.
  • Интерфейс синхронной последовательной связи, такой как I2C, SPI, SSC и ESSI
  • Универсальная последовательная шина (USB)
  • Мультимедийные карты (SD-карты, Compact Flash и т. Д.)
  • Сети, такие как Ethernet, LonWorks и т. Д.
  • Полевые шины, такие как CAN-Bus, LIN-Bus, PROFIBUS и т. Д.
  • Такие устройства, как PLL (s), Capture / Compare и Time Processing Units.
  • Дискретный ввод-вывод или универсальный ввод / вывод (GPIO)
  • Аналого-цифровой / Цифро-аналоговый (АЦП / ЦАП)
  • Отладка, например, JTAG, ISP, ICSP, BDM Port, BITP и DP9.

Критерии выбора микроконтроллера

Выбирая микроконтроллер, убедитесь, что он соответствует поставленной задаче и является экономически эффективным. Мы должны посмотреть, сможет ли 8-разрядный, 16-разрядный или 32-разрядный микроконтроллер наилучшим образом удовлетворить вычислительные потребности задачи. Кроме того, при выборе микроконтроллера следует учитывать следующие моменты:

  • Скорость — Какую максимальную скорость поддерживает микроконтроллер?

  • Упаковка — это 40-контактный DIP (двойной встроенный пакет) или QFP (Quad flat)? Это важно с точки зрения пространства, сборки и создания прототипа конечного продукта.

  • Потребляемая мощность — это важный критерий для продуктов с батарейным питанием.

  • Количество ОЗУ и ПЗУ на чипе.

  • Количество выводов ввода / вывода и таймеров на чипе.

  • Стоимость за единицу. Это важно с точки зрения конечной стоимости продукта, в котором будет использоваться микроконтроллер.

Скорость — Какую максимальную скорость поддерживает микроконтроллер?

Упаковка — это 40-контактный DIP (двойной встроенный пакет) или QFP (Quad flat)? Это важно с точки зрения пространства, сборки и создания прототипа конечного продукта.

Потребляемая мощность — это важный критерий для продуктов с батарейным питанием.

Количество ОЗУ и ПЗУ на чипе.

Количество выводов ввода / вывода и таймеров на чипе.

Стоимость за единицу. Это важно с точки зрения конечной стоимости продукта, в котором будет использоваться микроконтроллер.

Кроме того, убедитесь, что у вас есть такие инструменты, как компиляторы, отладчики и ассемблеры, доступные с микроконтроллером. Самое главное, вы должны купить микроконтроллер из надежного источника.

Встроенные системы — 8051 микроконтроллер

Краткая история 8051

Первый микропроцессор 4004 был изобретен корпорацией Intel. Микропроцессоры 8085 и 8086 также были изобретены Intel. В 1981 году Intel представила 8-разрядный микроконтроллер под названием 8051 . Он назывался системой на чипе, поскольку имел 128 байт оперативной памяти, 4 Кбайт встроенного ПЗУ, два таймера, один последовательный порт и 4 порта (шириной 8 бит) на одном кристалле. Когда она стала широко популярной, Intel позволила другим производителям создавать и продавать различные версии 8051 с кодом, совместимым с 8051. Это означает, что если вы напишите свою программу для одного варианта 8051, она будет работать и на других версиях, независимо от производитель. Это привело к нескольким версиям с разными скоростями и объемом оперативной памяти.

8051 вкусов / участников

  • Микроконтроллер 8052 — 8052 обладает всеми стандартными функциями микроконтроллера 8051, а также дополнительными 128 байтами оперативной памяти и дополнительным таймером. Он также имеет 8 КБ встроенного ПЗУ вместо 4 КБ.

  • Микроконтроллер 8031 — это еще один член семейства 8051. Этот чип часто называют 8051 без ПЗУ, так как он имеет 0K байт ПЗУ на кристалле. Вы должны добавить к нему внешнее ПЗУ, чтобы использовать его, в котором содержится программа, которую нужно извлечь и выполнить. Эта программа может быть размером до 64 Кбайт. Но в процессе добавления внешнего ПЗУ к 8031 ​​он потерял 2 порта из 4 портов. Чтобы решить эту проблему, мы можем добавить внешний ввод / вывод к 8031

Микроконтроллер 8052 — 8052 обладает всеми стандартными функциями микроконтроллера 8051, а также дополнительными 128 байтами оперативной памяти и дополнительным таймером. Он также имеет 8 КБ встроенного ПЗУ вместо 4 КБ.

Микроконтроллер 8031 — это еще один член семейства 8051. Этот чип часто называют 8051 без ПЗУ, так как он имеет 0K байт ПЗУ на кристалле. Вы должны добавить к нему внешнее ПЗУ, чтобы использовать его, в котором содержится программа, которую нужно извлечь и выполнить. Эта программа может быть размером до 64 Кбайт. Но в процессе добавления внешнего ПЗУ к 8031 ​​он потерял 2 порта из 4 портов. Чтобы решить эту проблему, мы можем добавить внешний ввод / вывод к 8031

Сравнение между 8051 членами семьи

В следующей таблице сравниваются функции, доступные в 8051, 8052 и 8031.

Особенность 8051 8052 8031
ПЗУ (байт) 4K 8K 0K
Оперативная память (байт) 128 256 128
Таймеры 2 3 2
Контакты ввода / вывода 32 32 32
Последовательный порт 1 1 1
Источники прерывания 6 8 6

Особенности микроконтроллера 8051

Микроконтроллер 8051 поставляется со следующими функциями:

  • Встроенная память программ (ПЗУ) объемом 64 КБ
  • Встроенная память на 128 байтов (RAM)
  • Четыре регистра банка
  • 128 пользовательских программных флагов
  • 8-битная двунаправленная шина данных
  • 16-битная однонаправленная адресная шина
  • 32 регистра общего назначения каждый из 8-битных
  • 16-ти битные таймеры (обычно 2, но могут иметь больше или меньше)
  • Три внутренних и два внешних прерывания
  • Четыре 8-битных порта (короткая модель имеет два 8-битных порта)
  • 16-битный программный счетчик и указатель данных
  • 8051 также может иметь ряд специальных функций, таких как UART, АЦП, ОУ и т. Д.

Блок-схема микроконтроллера 8051

На следующем рисунке показана блок-схема микроконтроллера 8051 —

Блок-схема микроконтроллера 8051

Встроенная система — программирование ввода / вывода

В 8051 операции ввода / вывода выполняются с использованием четырех портов и 40 контактов. Следующая диаграмма выводов показывает детали 40 выводов. Порт операций ввода / вывода резервирует 32 контакта, где каждый порт имеет 8 контактов. Другие 8 контактов обозначены как V cc , GND, XTAL1, XTAL2, RST, EA (полоса), ALE / PROG (полоса) и PSEN (полоса).

Это 40-контактный PDIP (пластиковый двойной встроенный пакет)

ПИН-схема

Примечание. В пакете DIP вы можете распознать первый и последний контакты по разрезу в середине микросхемы. Первый штифт находится слева от этой метки реза, а последний штифт (т.е. в данном случае 40- й штифт) находится справа от метки реза.

Порты ввода / вывода и их функции

Четыре порта P0, P1, P2 и P3, каждый использует 8 контактов, делая их 8-битными портами. После СБРОСА все порты настраиваются как входы, готовые для использования в качестве входных портов. Когда первый 0 записывается в порт, он становится выходом. Чтобы перенастроить его как вход, 1 должен быть отправлен в порт.

Порт 0 (контакт № 32 — контакт № 39)

Он имеет 8 контактов (от 32 до 39). Может использоваться для ввода или вывода. В отличие от портов P1, P2 и P3, мы обычно подключаем подтягивающие резисторы P0 к 10 кОм, чтобы использовать их в качестве входного или выходного порта, являющегося открытым стоком.

Он также обозначен как AD0-AD7, что позволяет использовать его как адрес и данные. В случае 8031 ​​(т. Е. Чипа без ROM), когда нам нужно получить доступ к внешнему ROM, тогда P0 будет использоваться как для адреса, так и для шины данных. ALE (контакт № 31) указывает, есть ли у P0 адрес или данные. Когда ALE = 0, он предоставляет данные D0-D7, но когда ALE = 1, он имеет адрес A0-A7. В случае отсутствия подключения к внешней памяти, P0 должен быть подключен извне к нагрузочному резистору 10 кОм.

Схема порта 0

MOV A,#0FFH  ;(comments: A=FFH(Hexadecimal  i.e. A=1111 1111)  

MOV P0,A     ;(Port0 have 1's on every pin so that it works as Input)

Порт 1 (контакт 1-8)

Это 8-битный порт (контакты с 1 по 8) и может использоваться как вход или выход. Это не требует подтягивающих резисторов, потому что они уже подключены внутри. После сброса порт 1 настраивается в качестве входного порта. Следующий код может использоваться для отправки чередующихся значений 55H и AAH в порт 1.

;Toggle all bits of continuously 
MOV     A,#55 
BACK:    

MOV     P2,A 
ACALL   DELAY 
CPL     A      ;complement(invert) reg. A 
SJMP    BACK

Если порт 1 настроен для использования в качестве выходного порта, то для повторного использования его в качестве входного порта запрограммируйте его, записав 1 во все его биты, как показано в следующем коде.

;Toggle all bits of continuously 

MOV     A ,#0FFH    ;A = FF hex 
MOV     P1,A        ;Make P1 an input port                     
MOV     A,P1        ;get data from P1 
MOV     R7,A        ;save it in Reg R7 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R6,A        ;save it in R6 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R5,A        ;save it in R5

Порт 2 (контакты с 21 по 28)

Порт 2 занимает всего 8 контактов (контакты с 21 по 28) и может использоваться как для операций ввода, так и для вывода. Как и P1 (порт 1), P2 также не требует внешних подтягивающих резисторов, поскольку они уже подключены внутри. Он должен использоваться вместе с P0 для предоставления 16-битного адреса для внешней памяти. Поэтому он также обозначается как (A0 – A7), как показано на схеме контактов. Когда 8051 подключен к внешней памяти, он обеспечивает путь для старших 8 бит 16-битного адреса и не может использоваться как ввод / вывод. После сброса порт 2 настраивается как входной порт. Следующий код может использоваться для отправки чередующихся значений 55H и AAH на порт 2.

;Toggle all bits of continuously 
MOV     A,#55 
BACK: 
MOV     P2,A 
ACALL   DELAY 
CPL     A         ; complement(invert) reg. A 
SJMP    BACK

Если порт 2 настроен для использования в качестве выходного порта, то для повторного использования его в качестве входного порта запрограммируйте его, записав 1 во все его биты, как показано в следующем коде.

;Get a byte from P2 and send it to P1 
MOV    A,#0FFH    ;A = FF hex 
MOV    P2,A       ;make P2 an input port 
BACK: 
MOV    A,P2       ;get data from P2 
MOV    P1,A       ;send it to Port 1
SJMP   BACK       ;keep doing that

Порт 3 (контакты с 10 по 17)

Он также имеет 8 битов и может использоваться как вход / выход. Этот порт обеспечивает некоторые чрезвычайно важные сигналы. P3.0 и P3.1 — это RxD (приемник) и TxD (передатчик), соответственно, и совместно используются для последовательной связи. Контакты P3.2 и P3.3 используются для внешних прерываний. P3.4 и P3.5 используются для таймеров T0 и T1 соответственно. P3.6 и P3.7 — это контакты записи (WR) и чтения (RD). Это активные нижние выводы, то есть они будут активны, когда им дается 0, и они используются для обеспечения операций чтения и записи во внешнее ПЗУ в системах на базе 8031.

Бит P3 функция Штырь
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < Дополнение к INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < Дополнение RD 17

Двойная роль порта 0 и порта 2

  • Двойная роль порта 0 — порт 0 также обозначается как AD0 – AD7, поскольку его можно использовать как для обработки данных, так и для обработки адресов. При подключении 8051 к внешней памяти порт 0 может предоставлять как адрес, так и данные. Микроконтроллер 8051 затем мультиплексирует вход в качестве адреса или данных, чтобы сохранить контакты.

  • Двойная роль порта 2 — Помимо работы в качестве ввода / вывода, порт P2 также используется для предоставления 16-разрядной адресной шины для внешней памяти вместе с портом 0. Порт P2 также обозначается как (A8– A15), в то время как порт 0 обеспечивает младшие 8 бит через A0 – A7. Другими словами, мы можем сказать, что когда 8051 подключен к внешней памяти (ПЗУ), которая может быть максимально до 64 КБ, и это возможно по 16-битной адресной шине, потому что мы знаем 216 = 64 КБ. Порт 2 используется для старшего 8-битного 16-битного адреса, и его нельзя использовать для ввода-вывода, и именно так адресуется любой программный код внешнего ПЗУ.

Двойная роль порта 0 — порт 0 также обозначается как AD0 – AD7, поскольку его можно использовать как для обработки данных, так и для обработки адресов. При подключении 8051 к внешней памяти порт 0 может предоставлять как адрес, так и данные. Микроконтроллер 8051 затем мультиплексирует вход в качестве адреса или данных, чтобы сохранить контакты.

Двойная роль порта 2 — Помимо работы в качестве ввода / вывода, порт P2 также используется для предоставления 16-разрядной адресной шины для внешней памяти вместе с портом 0. Порт P2 также обозначается как (A8– A15), в то время как порт 0 обеспечивает младшие 8 бит через A0 – A7. Другими словами, мы можем сказать, что когда 8051 подключен к внешней памяти (ПЗУ), которая может быть максимально до 64 КБ, и это возможно по 16-битной адресной шине, потому что мы знаем 216 = 64 КБ. Порт 2 используется для старшего 8-битного 16-битного адреса, и его нельзя использовать для ввода-вывода, и именно так адресуется любой программный код внешнего ПЗУ.

Аппаратное соединение контактов

  • V cc — контакт 40 обеспечивает питание для чипа и составляет +5 В.

  • Gnd — контакт 20 обеспечивает заземление для ссылки.

  • XTAL1, XTAL2 (контакт № 18 и № 19) — 8051 имеет встроенный генератор, но для его работы требуются внешние часы. Кристалл кварца подключен между выводами XTAL1 и XTAL2 микросхемы. Этот кристалл также нуждается в двух конденсаторах 30 пФ для генерации сигнала желаемой частоты. Одна сторона каждого конденсатора соединена с землей. Микросхема 8051 доступна с различными скоростями, и все зависит от этого кварцевого кристалла, например, для микроконтроллера 20 МГц требуется кристалл с частотой не более 20 МГц.

V cc — контакт 40 обеспечивает питание для чипа и составляет +5 В.

Gnd — контакт 20 обеспечивает заземление для ссылки.

XTAL1, XTAL2 (контакт № 18 и № 19) — 8051 имеет встроенный генератор, но для его работы требуются внешние часы. Кристалл кварца подключен между выводами XTAL1 и XTAL2 микросхемы. Этот кристалл также нуждается в двух конденсаторах 30 пФ для генерации сигнала желаемой частоты. Одна сторона каждого конденсатора соединена с землей. Микросхема 8051 доступна с различными скоростями, и все зависит от этого кварцевого кристалла, например, для микроконтроллера 20 МГц требуется кристалл с частотой не более 20 МГц.

Диаграмма XTAL1, XTAL2

  • RST (контакт № 9) — это входной контакт и активный верхний контакт. После подачи высокого импульса на этот вывод, то есть 1, микроконтроллер сбросит и завершит все действия. Этот процесс известен как Сброс при включении питания . Активация сброса при включении питания приведет к потере всех значений в регистре. Это установит программный счетчик на все 0. Чтобы обеспечить действительный вход сброса, высокий импульс должен быть высоким в течение как минимум двух машинных циклов, прежде чем ему будет разрешено опуститься, что зависит от значения конденсатора и скорости, с которой он заряжается. ( Машинный цикл — это минимальная частота, требуемая для выполнения одной инструкции).

  • EA или внешний доступ (контакт № 31) — это входной контакт. Этот вывод является активным низким выводом; после применения низкого импульса, он активируется. В случае микроконтроллера (8051/52), имеющего встроенное ПЗУ, вывод EA (стержень) подключается к V cc . Но в микроконтроллере 8031, который не имеет встроенного ПЗУ, код сохраняется во внешнем ПЗУ и затем выбирается микроконтроллером. В этом случае мы должны подключить советник (контакт № 31) к Gnd, чтобы указать, что программный код хранится извне.

RST (контакт № 9) — это входной контакт и активный верхний контакт. После подачи высокого импульса на этот вывод, то есть 1, микроконтроллер сбросит и завершит все действия. Этот процесс известен как Сброс при включении питания . Активация сброса при включении питания приведет к потере всех значений в регистре. Это установит программный счетчик на все 0. Чтобы обеспечить действительный вход сброса, высокий импульс должен быть высоким в течение как минимум двух машинных циклов, прежде чем ему будет разрешено опуститься, что зависит от значения конденсатора и скорости, с которой он заряжается. ( Машинный цикл — это минимальная частота, требуемая для выполнения одной инструкции).

EA или внешний доступ (контакт № 31) — это входной контакт. Этот вывод является активным низким выводом; после применения низкого импульса, он активируется. В случае микроконтроллера (8051/52), имеющего встроенное ПЗУ, вывод EA (стержень) подключается к V cc . Но в микроконтроллере 8031, который не имеет встроенного ПЗУ, код сохраняется во внешнем ПЗУ и затем выбирается микроконтроллером. В этом случае мы должны подключить советник (контакт № 31) к Gnd, чтобы указать, что программный код хранится извне.

RST, диаграмма EA

  • Включение PSEN или хранилища программ (вывод № 29) — это также активный низкий вывод, т. Е. Он активируется после подачи низкого импульса. Это выходной вывод, который используется вместе с выводом EA в системах на основе 8031 ​​(т.е. ROMLESS) для хранения программного кода во внешнем ПЗУ.

  • ALE или (Address Latch Enable) — это выходной контакт, который активен на высоком уровне. Он особенно используется для 8031 ​​IC для подключения к внешней памяти. Его можно использовать при принятии решения, будут ли контакты P0 использоваться в качестве шины адреса или шины данных. Когда ALE = 1, контакты P0 работают как шина данных, а когда ALE = 0, контакты P0 действуют как шина адреса.

Включение PSEN или хранилища программ (вывод № 29) — это также активный низкий вывод, т. Е. Он активируется после подачи низкого импульса. Это выходной вывод, который используется вместе с выводом EA в системах на основе 8031 ​​(т.е. ROMLESS) для хранения программного кода во внешнем ПЗУ.

ALE или (Address Latch Enable) — это выходной контакт, который активен на высоком уровне. Он особенно используется для 8031 ​​IC для подключения к внешней памяти. Его можно использовать при принятии решения, будут ли контакты P0 использоваться в качестве шины адреса или шины данных. Когда ALE = 1, контакты P0 работают как шина данных, а когда ALE = 0, контакты P0 действуют как шина адреса.

Порты ввода / вывода и битовая адресация

Это наиболее широко используемая функция 8051 при написании кода для 8051. Иногда нам нужно получить доступ только к 1 или 2 битам порта вместо целых 8 битов. 8051 обеспечивает возможность доступа к отдельным битам портов.

При доступе к порту однобитным способом мы используем синтаксис «SETB X. Y», где X — номер порта (от 0 до 3), а Y — номер бита (от 0 до 7) для битов данных D0-D7. где D0 — LSB, а D7 — MSB. Например, «SETB P1.5» устанавливает старший бит 5 порта 1.

Следующий код показывает, как мы можем непрерывно переключать бит P1.2.

AGAIN: 
SETB    P1.2
ACALL   DELAY    
CLR     P1.2      
ACALL   DELAY 
SJMP    AGAIN

Однобитные инструкции

инструкции функция
Бит SETB Установите бит (бит = 1)
Бит CLR очистить бит (бит = 0)
Бит CPL дополнить бит (бит = НЕ бит)
JB бит, цель перейти к цели, если бит = 1 (перейти, если бит)
JNB бит, цель перейти к цели, если бит = 0 (перейти, если нет бита)
Бит JBC, цель перейти к цели, если бит = 1, сбросить бит (перейти, если бит, затем очистить)

Встраиваемые системы — Условия

Счетчик команд

Счетчик программ — это 16- или 32-битный регистр, который содержит адрес следующей команды, которая должна быть выполнена. ПК автоматически увеличивается до следующей последовательной ячейки памяти каждый раз, когда извлекается инструкция. Операции ветвления, перехода и прерывания загружают счетчик программ с адресом, отличным от следующего последовательного местоположения.

Активация сброса при включении питания приведет к потере всех значений в регистре. Это означает, что значение ПК (счетчик программ) при сбросе равно 0, что заставляет ЦП извлечь первый код операции из ячейки памяти ПЗУ 0000. Это означает, что мы должны поместить первый байт кода доступа в ячейку ПЗУ 0000, потому что именно там CPU ожидает найти первую инструкцию

Сбросить вектор

Значение вектора сброса заключается в том, что он указывает процессору на адрес памяти, который содержит первую инструкцию встроенного программного обеспечения. Без вектора сброса процессор не знал бы, с чего начать выполнение. После сброса процессор загружает программный счетчик (ПК) со значением вектора сброса из предопределенной ячейки памяти. На архитектуре CPU08 это находится в расположении $ FFFE: $ FFFF.

Когда вектор сброса не требуется, разработчики обычно принимают это как должное и не программируют в окончательное изображение. В результате процессор не запускается на конечном продукте. Это распространенная ошибка, возникающая на этапе отладки.

Указатель стека

Стек реализован в ОЗУ, а регистр ЦП используется для доступа к нему, называемому регистром SP (Stack Pointer). Регистр SP является 8-битным регистром и может адресовать адреса памяти в диапазоне от 00h до FFh. Первоначально регистр SP содержит значение 07, указывающее на местоположение 08 как первое местоположение, используемое для стека 8051.

Когда содержимое регистра ЦП хранится в стеке, это называется операцией PUSH. Когда содержимое стека сохраняется в регистре ЦП, это называется операцией POP. Другими словами, регистр помещается в стек, чтобы сохранить его, и извлекается из стека, чтобы получить его.

Бесконечный цикл

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

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

Такие бесконечные циклы обычно приводили к тому, что старые операционные системы перестали отвечать на запросы, поскольку бесконечный цикл занимал все доступное время процессора. Операции ввода / вывода, ожидающие ввода пользователя, также называются «бесконечными циклами». Одной из возможных причин «зависания» компьютера является бесконечный цикл; другие причины включают тупик и нарушения доступа .

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

Прерывания

Прерывания — это в основном аппаратные механизмы, которые инструктируют программу о том, что произошло событие. Они могут возникать в любое время и, следовательно, являются асинхронными потоку программы. Они требуют специальной обработки процессором и в конечном итоге обрабатываются соответствующей подпрограммой обработки прерываний (ISR). Прерывания должны быть обработаны быстро. Если вы уделяете слишком много времени обслуживанию прерывания, вы можете пропустить другое прерывание.

Little Endian против Big Endian

Хотя числа всегда отображаются одинаково, они не сохраняются в памяти одинаково. Машины Big-Endian хранят самый старший байт данных в младшем адресе памяти. Машина Big-Endian хранит 0x12345678 как —

ADD+0: 0x12 
ADD+1: 0x34 
ADD+2: 0x56 
ADD+3: 0x78

Машины Little-Endian, с другой стороны, хранят младший байт данных в младшем адресе памяти. Little-Endian машина хранит 0x12345678 как —

ADD+0: 0x78 
ADD+1: 0x56 
ADD+2: 0x34 
ADD+3: 0x12

Встроенные системы — язык ассемблера

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

Различные языки программирования, такие как C, C ++, Java и различные другие языки, называются языками высокого уровня, потому что они не имеют дело с внутренними деталями процессора. Напротив, ассемблер используется для перевода программы на языке ассемблера в машинный код (иногда также называемый объектным кодом или кодом операции ). Аналогично, компилятор переводит язык высокого уровня в машинный код. Например, чтобы написать программу на языке C, необходимо использовать компилятор C для перевода программы на машинный язык.

Структура ассемблера

Программа на языке ассемблера — это серия операторов, которые являются либо инструкциями на языке ассемблера, такими как ADD и MOV, либо операторами, называемыми директивами .

Инструкция говорит процессору, что делать, а директива (также называемая псевдоинструкцией ) дает инструкцию ассемблеру. Например, инструкции ADD и MOV — это команды, которые выполняет ЦП, а ORG и END — это директивы ассемблера. Ассемблер помещает код операции в ячейку памяти 0, когда используется директива ORG, а END указывает на конец исходного кода. Инструкция на языке программирования состоит из следующих четырех полей:

[ label: ]   mnemonics  [ operands ]   [;comment ] 

Квадратная скобка ([]) указывает, что поле является необязательным.

  • Поле метки позволяет программе ссылаться на строку кода по имени. Поля метки не могут превышать определенного количества символов.

  • Поля мнемоники и операндов вместе выполняют реальную работу программы и выполняют задачи. Такие операторы, как ADD A, C & MOV C, # 68, где ADD и MOV — мнемоника, производящая коды операций; «A, C» и «C, # 68» являются операндами. Эти два поля могут содержать директивы. Директивы не генерируют машинный код и используются только ассемблером, тогда как инструкции преобразуются в машинный код для выполнения CPU.

Поле метки позволяет программе ссылаться на строку кода по имени. Поля метки не могут превышать определенного количества символов.

Поля мнемоники и операндов вместе выполняют реальную работу программы и выполняют задачи. Такие операторы, как ADD A, C & MOV C, # 68, где ADD и MOV — мнемоника, производящая коды операций; «A, C» и «C, # 68» являются операндами. Эти два поля могут содержать директивы. Директивы не генерируют машинный код и используются только ассемблером, тогда как инструкции преобразуются в машинный код для выполнения CPU.

1.0000         ORG  0H            ;start (origin) at location 0 
2 0000 7D25    MOV  R5,#25H       ;load 25H into R5 
3.0002 7F34    MOV  R7,#34H       ;load 34H into  R7 
4.0004 7400    MOV  A,#0          ;load 0 into A 
5.0006 2D      ADD  A,R5          ;add contents of R5 to A 
6.0007 2F      ADD  A,R7          ;add contents of R7 to A
7.0008 2412    ADD  A,#12H        ;add to A value 12 H 
8.000A 80FE    HERE: SJMP HERE    ;stay in this loop 
9.000C END                        ;end of asm source file
  • Поле комментария начинается с точки с запятой, которая является индикатором комментария.

  • Обратите внимание на ярлык «ЗДЕСЬ» в программе. Любая метка, которая ссылается на инструкцию, должна сопровождаться двоеточием.

Поле комментария начинается с точки с запятой, которая является индикатором комментария.

Обратите внимание на ярлык «ЗДЕСЬ» в программе. Любая метка, которая ссылается на инструкцию, должна сопровождаться двоеточием.

Сборка и запуск программы 8051

Здесь мы обсудим основную форму языка ассемблера. Шаги по созданию, сборке и запуску программы на языке ассемблера следующие:

  • Во-первых, мы используем редактор для ввода программы, похожей на приведенную выше. Редакторы, такие как MS-DOS EDIT, которая поставляется со всеми операционными системами Microsoft, могут использоваться для создания или редактирования программы. Редактор должен иметь возможность создавать файл ASCII. Расширение «asm» для исходного файла используется ассемблером на следующем шаге.

  • Исходный файл «asm» содержит программный код, созданный на шаге 1. Он подается на ассемблер 8051. Затем ассемблер преобразует инструкции языка ассемблера в инструкции машинного кода и создает файл .obj (объектный файл) и файл .lst (файл списка). Он также называется исходным файлом , поэтому некоторые ассемблеры требуют, чтобы этот файл имел расширения «src». Файл «lst» является необязательным. Это очень полезно для программы, поскольку в ней перечислены все коды операций и адреса, а также ошибки, обнаруженные ассемблерами.

  • Сборщикам требуется третий шаг, называемый связыванием . Ссылочная программа принимает один или несколько объектных файлов и создает абсолютный объектный файл с расширением «abs».

  • Затем файл «abs» подается в программу под названием «OH» (преобразователь объекта в шестнадцатеричный формат), которая создает файл с расширением «hex», который готов записать в ПЗУ.

Во-первых, мы используем редактор для ввода программы, похожей на приведенную выше. Редакторы, такие как MS-DOS EDIT, которая поставляется со всеми операционными системами Microsoft, могут использоваться для создания или редактирования программы. Редактор должен иметь возможность создавать файл ASCII. Расширение «asm» для исходного файла используется ассемблером на следующем шаге.

Исходный файл «asm» содержит программный код, созданный на шаге 1. Он подается на ассемблер 8051. Затем ассемблер преобразует инструкции языка ассемблера в инструкции машинного кода и создает файл .obj (объектный файл) и файл .lst (файл списка). Он также называется исходным файлом , поэтому некоторые ассемблеры требуют, чтобы этот файл имел расширения «src». Файл «lst» является необязательным. Это очень полезно для программы, поскольку в ней перечислены все коды операций и адреса, а также ошибки, обнаруженные ассемблерами.

Сборщикам требуется третий шаг, называемый связыванием . Ссылочная программа принимает один или несколько объектных файлов и создает абсолютный объектный файл с расширением «abs».

Затем файл «abs» подается в программу под названием «OH» (преобразователь объекта в шестнадцатеричный формат), которая создает файл с расширением «hex», который готов записать в ПЗУ.

Шаги по созданию программы

Тип данных

Микроконтроллер 8051 содержит один тип данных из 8 бит, и каждый регистр также имеет размер 8 бит. Программист должен разбить данные размером более 8 бит (от 00 до FFH или до 255 в десятичном виде), чтобы они могли быть обработаны процессором.

DB (Определить байт)

Директива DB является наиболее широко используемой директивой данных в ассемблере. Он используется для определения 8-битных данных. Его также можно использовать для определения данных в десятичном, двоичном, шестнадцатеричном или ASCII-форматах. Для десятичного числа «D» после десятичного числа является необязательным, но это требуется для «B» (двоичный) и «Hl» (шестнадцатеричный).

Чтобы указать ASCII, просто поместите символы в кавычки («как это»). Ассемблер автоматически генерирует ASCII-код для чисел / символов. Директива DB является единственной директивой, которая может использоваться для определения строк ASCII длиннее двух символов; следовательно, его следует использовать для всех определений данных ASCII. Некоторые примеры БД приведены ниже —

        ORG  500H 
DATA1:  DB   28                     ;DECIMAL (1C in hex) 
DATA2:  DB   00110101B              ;BINARY  (35 in hex) 
DATA3:  DB   39H                    ;HEX 
        ORG  510H 
DATA4:  DB   "2591"                 ;ASCII  NUMBERS 
        ORG  520H                         
DATA6:  DA   "MY NAME IS Michael"   ;ASCII CHARACTERS 

Вокруг строк ASCII можно использовать одинарные или двойные кавычки. БД также используется для выделения памяти кусками размером в байты.

Директивы ассемблера

Вот некоторые из директив 8051:

  • ORG (origin) — директива origin используется для указания начала адреса. Он принимает числа в шестнадцатеричном или десятичном формате. Если после числа указано H, число считается шестнадцатеричным, в противном случае — десятичным. Ассемблер преобразует десятичное число в гекса.

  • EQU (equate) — используется для определения константы, не занимая место в памяти. EQU связывает постоянное значение с меткой данных, так что метка появляется в программе, а ее постоянное значение будет заменено меткой. При выполнении инструкции «MOV R3, #COUNT» в регистр R3 будет загружено значение 25 (обратите внимание на знак #). Преимущество использования EQU состоит в том, что программист может изменить его один раз, а ассемблер изменит все его вхождения; программист не должен искать всю программу.

  • Директива END — указывает конец исходного файла (asm). Директива END является последней строкой программы; что-нибудь после директивы END игнорируется ассемблером.

ORG (origin) — директива origin используется для указания начала адреса. Он принимает числа в шестнадцатеричном или десятичном формате. Если после числа указано H, число считается шестнадцатеричным, в противном случае — десятичным. Ассемблер преобразует десятичное число в гекса.

EQU (equate) — используется для определения константы, не занимая место в памяти. EQU связывает постоянное значение с меткой данных, так что метка появляется в программе, а ее постоянное значение будет заменено меткой. При выполнении инструкции «MOV R3, #COUNT» в регистр R3 будет загружено значение 25 (обратите внимание на знак #). Преимущество использования EQU состоит в том, что программист может изменить его один раз, а ассемблер изменит все его вхождения; программист не должен искать всю программу.

Директива END — указывает конец исходного файла (asm). Директива END является последней строкой программы; что-нибудь после директивы END игнорируется ассемблером.

Метки на ассемблере

Все метки на языке ассемблера должны соответствовать приведенным ниже правилам.

  • Название каждого ярлыка должно быть уникальным. Имена, используемые для меток в программировании на ассемблере, состоят из букв алфавита как в верхнем, так и в нижнем регистре, цифр от 0 до 9, и специальных символов, таких как вопросительный знак (?), Точка (.), Со скоростью @, подчеркивание (_), и доллар ($).

  • Первый символ должен быть в алфавитном порядке; это не может быть число.

  • Зарезервированные слова не могут использоваться в качестве метки в программе. Например, слова ADD и MOV являются зарезервированными словами, поскольку они являются мнемоникой инструкций.

Название каждого ярлыка должно быть уникальным. Имена, используемые для меток в программировании на ассемблере, состоят из букв алфавита как в верхнем, так и в нижнем регистре, цифр от 0 до 9, и специальных символов, таких как вопросительный знак (?), Точка (.), Со скоростью @, подчеркивание (_), и доллар ($).

Первый символ должен быть в алфавитном порядке; это не может быть число.

Зарезервированные слова не могут использоваться в качестве метки в программе. Например, слова ADD и MOV являются зарезервированными словами, поскольку они являются мнемоникой инструкций.

Встроенные системы — регистры

Регистры используются в ЦП для временного хранения информации, которая может быть данными, подлежащими обработке, или адресом, указывающим на данные, которые должны быть извлечены. В 8051 существует один тип данных из 8 битов, от MSB (младший значащий бит) D7 до LSB (младший значащий бит) D0. С 8-битным типом данных любой тип данных больше 8 бит должен быть разбит на 8-битные блоки перед обработкой.

Наиболее широко используемыми регистрами 8051 являются A (аккумулятор), B, R0-R7, DPTR (указатель данных) и PC (программный счетчик). Все эти регистры имеют 8 бит, кроме DPTR и ПК.

Регистры хранения в 8051

Мы обсудим следующие типы регистров хранения здесь —

  • аккумуляторный
  • R зарегистрироваться
  • B зарегистрироваться
  • Указатель данных (DPTR)
  • Счетчик программ (ПК)
  • Указатель стека (SP)

аккумуляторный

Аккумулятор, регистр A, используется для всех арифметических и логических операций. Если аккумулятор отсутствует, то каждый результат каждого вычисления (сложение, умножение, сдвиг и т. Д.) Должен храниться в основной памяти. Доступ к основной памяти медленнее, чем доступ к регистру, такому как аккумулятор, потому что технология, используемая для большой основной памяти, медленнее (но дешевле), чем используемая для регистра.

Регистры «R»

Регистры «R» представляют собой набор из восьми регистров, а именно, R0, R1-R7. Эти регистры функционируют как регистры вспомогательного или временного хранения во многих операциях. Рассмотрим пример суммы 10 и 20. Сохраните переменную 10 в аккумуляторе, а другую переменную 20, скажем, в регистре R4. Чтобы обработать операцию сложения, выполните следующую команду —

ADD A,R4

После выполнения этой инструкции аккумулятор будет содержать значение 30. Таким образом, регистры «R» являются очень важными вспомогательными или вспомогательными регистрами . Аккумулятор сам по себе был бы не очень полезен, если бы не эти «R» регистры. Регистры «R» предназначены для временного хранения значений.

Давайте возьмем другой пример. Мы сложим значения в R1 и R2 вместе, а затем вычтем значения R3 и R4 из результата.

MOV A,R3   ;Move the value of R3 into the accumulator 
ADD A,R4   ;Add the value of R4 
MOV R5,A   ;Store the resulting value temporarily in R5 
MOV A,R1   ;Move the value of R1 into the accumulator 
ADD A,R2   ;Add the value of R2 
SUBB A,R5  ;Subtract the value of R5 (which now contains R3 + R4)

Как видите, мы использовали R5 для временного удержания суммы R3 и R4. Конечно, это не самый эффективный способ вычисления (R1 + R2) — (R3 + R4), но он иллюстрирует использование регистров «R» в качестве способа временного хранения значений.

8-битные регистры

Регистр «B»

Регистр «B» очень похож на Аккумулятор в том смысле, что он может содержать 8-битное (1-байтовое) значение. Регистр «B» используется только двумя инструкциями 8051: MUL AB и DIV AB . Чтобы быстро и легко умножить или разделить A на другое число, вы можете сохранить другое число в «B» и использовать эти две инструкции. Помимо использования инструкций MUL и DIV, регистр «B» часто используется как еще один регистр временного хранения, очень похожий на девятый регистр R.

Указатель данных

Указатель данных (DPTR) — это единственный доступный для пользователя 16-разрядный (2-байтовый) регистр 8051. Регистры Accumulator, R0 – R7 и B являются однобайтовыми регистрами значений. DPTR предназначен для указания на данные. Он используется 8051 для доступа к внешней памяти по адресу, указанному DPTR. DPTR — единственный доступный 16-битный регистр, который часто используется для хранения 2-байтовых значений.

Счетчик программ

Счетчик программ (ПК) — это 2-байтовый адрес, который сообщает 8051, где в памяти находится следующая команда для выполнения. Компьютер запускается в 0000h, когда инициализируется 8051, и увеличивается каждый раз после выполнения инструкции. ПК не всегда увеличивается на 1. Некоторые инструкции могут потребовать 2 или 3 байта; в таких случаях ПК будет увеличен на 2 или 3.

Операции ветвления, перехода и прерывания загружают счетчик программ с адресом, отличным от следующего последовательного местоположения. Активация сброса при включении питания приведет к потере всех значений в регистре. Это означает, что значение ПК при сбросе равно 0, что заставляет ЦП извлечь первый код операции из местоположения ПЗУ 0000. Это означает, что мы должны поместить первый байт кода обновления в местоположение ПЗУ 0000, потому что именно здесь ЦП ожидает найти Первая инструкция.

Указатель стека (SP)

Указатель стека, как и все регистры, кроме DPTR и ПК, может содержать 8-битное (1-байтовое) значение. Указатель стека указывает местоположение, откуда следующее значение должно быть удалено из стека. Когда значение помещается в стек, значение SP увеличивается, а затем значение сохраняется в результирующей ячейке памяти. Когда значение выгружается из стека, оно возвращается из ячейки памяти, указанной SP, а затем значение SP уменьшается.

Этот порядок работы важен. SP будет инициализирован до 07h, когда инициализируется 8051. Если значение помещается в стек одновременно, оно будет сохранено во внутреннем адресе памяти 08h, потому что 8051 сначала увеличит значение SP (с 07h до 08h), а затем сохранит переданное значение в этой памяти адрес (08ч). SP изменяется напрямую с помощью 8051 с помощью шести инструкций: PUSH, POP, ACALL, LCALL, RET и RETI.

ROM Space в 8051

Некоторые члены семейства 8051 имеют только 4 Кбайт встроенного ПЗУ (например, 8751, AT8951); некоторые имеют 8Кб ПЗУ, как AT89C52, а некоторые члены семейства имеют 32Кбайт и 64Кбайт встроенного ПЗУ, такие как Dallas Semiconductor. Следует помнить, что ни один из членов семейства 8051 не может получить доступ к более чем 64 Кбайт кода операции, поскольку счетчик программы в 8051 является 16-разрядным регистром (адрес от 0000 до FFFF).

Первое местоположение программного ПЗУ внутри 8051 имеет адрес 0000H, тогда как последнее местоположение может отличаться в зависимости от размера ПЗУ на чипе. Среди членов семейства 8051 AT8951 имеет $ k байтов встроенного ПЗУ, имеющего адрес памяти от 0000 (первое местоположение) до 0FFFH (последнее местоположение).

ROM Space

Флаговые биты 8051 и регистр PSW

Регистр слова состояния программы (PSW) представляет собой 8-битный регистр, также известный как регистр флага . Он имеет ширину 8 бит, но используется только 6 бит. Два неиспользованных бита являются определяемыми пользователем флагами . Четыре из флагов называются условными флагами , что означает, что они указывают условие, которое возникает после выполнения инструкции. К этим четырем относятся CY (перенос), AC (вспомогательный перенос), P (четность) и OV (переполнение). Биты RS0 и RS1 используются для изменения банковских регистров. На следующем рисунке показан регистр слова состояния программы.

Регистр PSW содержит те биты состояния, которые отражают текущее состояние ЦП.

CY Калифорния F0 RS1 RS0 О.В. п

CY PSW.7 Несут флаг
переменный ток PSW.6 Вспомогательный флаг для перевозки
F0 PSW.5 Флаг 0 доступен пользователю общего назначения.
RS1 PSW.4 Зарегистрировать селектор банка, бит 1
RS0 PSW.3 Зарегистрировать селектор банка, бит 0
О.В. PSW.2 Флаг переполнения
PSW.1 Определяемый пользователем FLAG
п PSW.0 ФЛАГИ Паритета. Устанавливается / сбрасывается аппаратно во время цикла инструкций для указания четного / нечетного числа 1 бита в аккумуляторе.

Мы можем выбрать соответствующий бит регистра банка, используя биты RS0 и RS1.

RS1 RS2 Зарегистрировать банк Адрес
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
  • CY, флаг переноса — этот флаг переноса устанавливается (1) всякий раз, когда происходит перенос из бита D7. На это влияет после 8-битной операции сложения или вычитания. Он также может быть сброшен в 1 или 0 напрямую с помощью такой команды, как «SETB C» и «CLR C», где «SETB» обозначает установленный перенос битов, а «CLR» обозначает чистый перенос.

  • AC, флаг вспомогательного переноса — если во время операции ADD или SUB происходит перенос из D3 и D4, бит AC устанавливается; в противном случае это очищается. Он используется для инструкции для выполнения двоично-десятичной арифметики.

  • P, флаг четностифлаг четности представляет количество единиц только в регистре аккумулятора. Если регистр A содержит нечетное число единиц, то P = 1; и для четного числа 1, P = 0.

  • OV, флаг переполнения — этот флаг устанавливается всякий раз, когда результат операции со знаком слишком велик, что приводит к переполнению старшего бита в знаковый бит. Он используется только для обнаружения ошибок в знаковых арифметических операциях.

CY, флаг переноса — этот флаг переноса устанавливается (1) всякий раз, когда происходит перенос из бита D7. На это влияет после 8-битной операции сложения или вычитания. Он также может быть сброшен в 1 или 0 напрямую с помощью такой команды, как «SETB C» и «CLR C», где «SETB» обозначает установленный перенос битов, а «CLR» обозначает чистый перенос.

AC, флаг вспомогательного переноса — если во время операции ADD или SUB происходит перенос из D3 и D4, бит AC устанавливается; в противном случае это очищается. Он используется для инструкции для выполнения двоично-десятичной арифметики.

P, флаг четностифлаг четности представляет количество единиц только в регистре аккумулятора. Если регистр A содержит нечетное число единиц, то P = 1; и для четного числа 1, P = 0.

OV, флаг переполнения — этот флаг устанавливается всякий раз, когда результат операции со знаком слишком велик, что приводит к переполнению старшего бита в знаковый бит. Он используется только для обнаружения ошибок в знаковых арифметических операциях.

пример

Покажите состояние флагов CY, AC и P после добавления 9CH и 64H в следующей инструкции.

MOV A, # 9CH

ДОБАВИТЬ A, # 64H

Solution:  9C   10011100 
          +64   01100100 
          100   00000000 
			 
CY = 1 since there is a carry beyond D7 bit  
AC = 0 since there is a carry from D3 to D4 
P  = 0 because the accumulator has even number of 1's 

Встроенные системы — Банк регистров / Стек

Микроконтроллер 8051 имеет 128 байтов оперативной памяти. Мы обсудим распределение этих 128 байтов ОЗУ и рассмотрим их использование в качестве стека и регистра.

Распределение ОЗУ в 8051

128 байтам оперативной памяти внутри 8051 присвоен адрес от 00 до 7FH. К ним можно обращаться непосредственно как к ячейкам памяти, и они делятся на три группы следующим образом:

  • 32 байта от 00H до 1FH расположены отдельно для банков регистров и стека.

  • 16 байтов от 20H до 2FH отведены для памяти чтения / записи с адресацией по битам.

  • 80 байтов от 30H до 7FH используются для чтения и записи; это называется блокнотом . Эти 80 мест оперативной памяти широко используются для хранения данных и параметров 8051 программистами.

32 байта от 00H до 1FH расположены отдельно для банков регистров и стека.

16 байтов от 20H до 2FH отведены для памяти чтения / записи с адресацией по битам.

80 байтов от 30H до 7FH используются для чтения и записи; это называется блокнотом . Эти 80 мест оперативной памяти широко используются для хранения данных и параметров 8051 программистами.

Распределение ПЗУ

Регистрация банков в 8051 году

Всего 32 байта оперативной памяти отведено для банков регистров и стека. Эти 32 байта разделены на четыре банка регистров, в которых каждый банк имеет 8 регистров, R0 – R7. Места ОЗУ от 0 до 7 отведены для банка 0 R0-R7, где R0 — это место в ОЗУ 0, R1 — это место в ОЗУ 1, R2 — это место 2 и т. Д., До тех пор, пока место в памяти 7, которое принадлежит R7 банка 0.

Второй банк регистров R0 – R7 начинается в ячейке ОЗУ 08 и направляется в ячейки OFH. Третий банк R0 – R7 начинается в ячейке памяти 10H и идет в ячейку до 17H. Наконец, места RAM от 18H до 1FH отведены для четвертого банка R0-R7.

Банк по умолчанию Регистрация

Если места ОЗУ 00–1F отведены для четырех банков регистров, к какому банку регистров R0 – R7 у нас будет доступ, когда 8051 включен? Ответ — регистр банка 0; то есть доступ к ячейкам ОЗУ от 0 до 7 осуществляется с именами от R0 до R7 при программировании 8051. Поскольку гораздо проще ссылаться на эти места в ОЗУ по именам, таким как от R0 до R7, а не по местам их памяти.

Как поменять банки регистрации

Банк регистров 0 используется по умолчанию при включении питания 8051. Мы можем переключиться на другие банки, используя регистр PSW. Биты D4 и D3 PSW используются для выбора нужного банка регистров, так как к ним могут обращаться инструкции адресации битов SETB и CLR. Например, «SETB PSW.3» установит PSW.3 = 1 и выберет банковский регистр 1.

RS1 RS2 Банк выбран
0 0 Bank0
0 1 Bank1
1 0 Bank2
1 1 Bank3

Стек и его операции

Стек в 8051

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

Как стеки доступны

Поскольку стек является частью ОЗУ, внутри ЦП есть регистры, указывающие на него. Регистр, используемый для доступа к стеку, известен как регистр указателя стека. Указатель стека в 8051 имеет ширину 8 бит и может принимать значение от 00 до FFH. Когда 8051 инициализируется, регистр SP содержит значение 07H. Это означает, что местоположение 08 ОЗУ является первым местоположением, используемым для стека. Операция сохранения регистра ЦП в стеке называется PUSH , а получение содержимого из стека обратно в регистр ЦП называется POP .

Толкаем в стек

В 8051 указатель стека (SP) указывает на последнее использованное местоположение стека. Когда данные помещаются в стек, указатель стека (SP) увеличивается на 1. Когда выполняется PUSH, содержимое регистра сохраняется в стеке, а SP увеличивается на 1. Чтобы поместить регистры в стек, мы должны использовать их адреса RAM. Например, инструкция «PUSH 1» помещает регистр R1 в стек.

Выскакивают из стека

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

Встроенные системы — инструкции

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

Инструкции по петле и прыжку

Цикл в 8051

Повторение последовательности инструкций определенное количество раз называется циклом . Инструкция DJNZ reg, метка используется для выполнения операции Loop. В этой инструкции регистр уменьшается на 1; если он не равен нулю, то 8051 переходит к целевому адресу, указанному в метке.

В регистр загружается счетчик количества повторений до начала цикла. В этой инструкции как уменьшение регистра, так и решение о переходе объединены в одну инструкцию. Регистры могут быть любыми из R0 – R7. Счетчик также может быть местом в оперативной памяти.

пример

Умножьте 25 на 10, используя технику многократного сложения.

Решение — Умножение может быть достигнуто путем добавления умножения многократно, столько раз, сколько множитель. Например,

25 * 10 = 250 (FAH)

25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 = 250

   MOV A,#0             ;A = 0,clean ACC 
   MOV R2,#10           ; the multiplier is replaced in R2 
   Add A,#25            ;add the multiplicand to the ACC 
	
AGAIN:DJNZ R2, 
AGAIN:repeat  until R2 = 0 (10 times) 

   MOV R5 , A           ;save A in R5 ;R5 (FAH)

Недостаток в 8051 — Действие цикла с инструкцией DJNZ Reg ограничено только 256 итерациями. Если условный переход не выполняется, то выполняется инструкция, следующая за переходом.

Цикл внутри петли

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

пример

Написать программу —

  • Загрузите аккумулятор значением 55H.
  • Дополните ACC 700 раз.

Решение. Поскольку 700 больше 255 (максимальная емкость любого регистра), для хранения счетчика используются два регистра. Следующий код показывает, как использовать два регистра, R2 и R3, для подсчета.

   MOV A,#55H            ;A = 55H 
	
NEXT: MOV R3,#10         ;R3 the outer loop counter 
AGAIN:MOV R2,#70         ;R2 the inner loop counter 

   CPL A                 ;complement

Другие условные переходы

В следующей таблице перечислены условные переходы, используемые в 8051 —

инструкция действие
JZ Прыжок, если A = 0
JNZ Прыгай, если A ≠ 0
DJNZ Уменьшение и переход, если регистр ≠ 0
CJNE A, данные Перейти, если данные A ≠
CJNE reg, #data Перейти, если байт ≠ данных
JC Прыжок, если CY = 1
JNC Прыгай, если CY ≠ 1
JB Перейти, если бит = 1
JNB Перейти если бит = 0
JBC Перейти, если бит = 1 и сбросить бит
  • JZ (переход, если A = 0) — в этой инструкции проверяется содержимое аккумулятора. Если это ноль, то 8051 переходит к целевому адресу. Инструкция JZ может использоваться только для аккумулятора, она не распространяется ни на какой другой регистр.

  • JNZ (переход, если A не равно 0) — в этой инструкции содержимое аккумулятора проверяется на ненулевое значение. Если это не ноль, то 8051 переходит к целевому адресу.

  • JNC (переход, если перенос отсутствует, прыжок, если CY = 0) — бит флага переноса в регистре флага (или PSW) используется для принятия решения о том, следует ли переходить или нет «метка JNC». Процессор смотрит на флаг переноса, чтобы увидеть, поднят ли он (CY = 1). Если оно не поднято, то процессор начинает извлекать и выполнять инструкции с адреса метки. Если CY = 1, он не будет прыгать, но выполнит следующую инструкцию ниже JNC.

  • JC (Перейти, если перенос, прыжки, если CY = 1) — Если CY = 1, он переходит на целевой адрес.

  • JB (прыгать, если бит высокий)

  • JNB (прыжок, если бит низкий)

JZ (переход, если A = 0) — в этой инструкции проверяется содержимое аккумулятора. Если это ноль, то 8051 переходит к целевому адресу. Инструкция JZ может использоваться только для аккумулятора, она не распространяется ни на какой другой регистр.

JNZ (переход, если A не равно 0) — в этой инструкции содержимое аккумулятора проверяется на ненулевое значение. Если это не ноль, то 8051 переходит к целевому адресу.

JNC (переход, если перенос отсутствует, прыжок, если CY = 0) — бит флага переноса в регистре флага (или PSW) используется для принятия решения о том, следует ли переходить или нет «метка JNC». Процессор смотрит на флаг переноса, чтобы увидеть, поднят ли он (CY = 1). Если оно не поднято, то процессор начинает извлекать и выполнять инструкции с адреса метки. Если CY = 1, он не будет прыгать, но выполнит следующую инструкцию ниже JNC.

JC (Перейти, если перенос, прыжки, если CY = 1) — Если CY = 1, он переходит на целевой адрес.

JB (прыгать, если бит высокий)

JNB (прыжок, если бит низкий)

Примечание. Следует отметить, что все условные переходы являются короткими, то есть адрес цели должен находиться в пределах от –128 до +127 байт содержимого счетчика программы.

Безусловные Инструкции Прыжка

В 8051 есть два безусловных скачка —

  • LJMP (long jump) — LJMP — это 3-байтовая инструкция, в которой первый байт представляет код операции, а второй и третий байты представляют 16-битный адрес целевого местоположения. 2-байтовый целевой адрес должен позволять переходить к любой ячейке памяти от 0000 до FFFFH.

  • SJMP (короткий переход) — это 2-байтовая инструкция, где первый байт — это код операции, а второй — относительный адрес целевого местоположения. Относительный адрес варьируется от 00H до FFH, который делится на прямой и обратный переходы; то есть в пределах от –128 до +127 байт памяти относительно адреса текущего ПК (счетчик программ). В случае прямого перехода целевой адрес может находиться в пределах 127 байт от текущего ПК. В случае обратного перехода целевой адрес может находиться в пределах –128 байтов от текущего ПК.

LJMP (long jump) — LJMP — это 3-байтовая инструкция, в которой первый байт представляет код операции, а второй и третий байты представляют 16-битный адрес целевого местоположения. 2-байтовый целевой адрес должен позволять переходить к любой ячейке памяти от 0000 до FFFFH.

SJMP (короткий переход) — это 2-байтовая инструкция, где первый байт — это код операции, а второй — относительный адрес целевого местоположения. Относительный адрес варьируется от 00H до FFH, который делится на прямой и обратный переходы; то есть в пределах от –128 до +127 байт памяти относительно адреса текущего ПК (счетчик программ). В случае прямого перехода целевой адрес может находиться в пределах 127 байт от текущего ПК. В случае обратного перехода целевой адрес может находиться в пределах –128 байтов от текущего ПК.

Расчет адреса быстрого перехода

Все условные переходы (JNC, JZ и DJNZ) являются короткими, потому что они являются 2-байтовыми инструкциями. В этих инструкциях первый байт представляет код операции, а второй байт представляет относительный адрес. Целевой адрес всегда относительно значения счетчика программы. Чтобы вычислить целевой адрес, второй байт добавляется к ПК инструкции непосредственно под переходом. Взгляните на программу, приведенную ниже —

Line   PC    Op-code   Mnemonic   Operand 
1      0000               ORG       0000 
2      0000  7800         MOV       R0,#003  
3      0002  7455         MOV       A,#55H0 
4      0004  6003         JZ        NEXT 
5      0006  08           INC       R0 
6      0007  04   AGAIN:  INC       A 
7      0008  04           INC       A 
8      0009  2477 NEXT:   ADD       A, #77h 
9      000B  5005         JNC       OVER 
10     000D  E4           CLR       A
11     000E  F8           MOV       R0, A 
12     000F  F9           MOV       R1, A 
13     0010  FA          MOV       R2, A 
14     0011  FB           MOV       R3, A 
15     0012  2B   OVER:   ADD       A, R3 
16     0013  50F2         JNC       AGAIN 
17     0015  80FE HERE:   SJMP      HERE 
18     0017             END

Расчет целевого адреса обратного перехода

В случае скачка вперед значение смещения является положительным числом от 0 до 127 (от 00 до 7F в шестнадцатеричном формате). Однако для обратного скачка смещение имеет отрицательное значение от 0 до –128.

CALL Инструкции

CALL используется для вызова подпрограммы или метода. Подпрограммы используются для выполнения операций или задач, которые необходимо выполнять часто. Это делает программу более структурированной и экономит место в памяти. Есть две инструкции — LCALL и ACALL.

LCALL (длинный звонок)

LCALL — это 3-байтовая инструкция, где первый байт представляет код операции, а второй и третий байты используются для предоставления адреса целевой подпрограммы. LCALL может использоваться для вызова подпрограмм, которые доступны в 64-байтовом адресном пространстве 8051.

Для успешного возврата к точке после выполнения вызванной подпрограммы, CPU сохраняет адрес инструкции непосредственно под LCALL в стеке. Таким образом, когда вызывается подпрограмма, управление передается в эту подпрограмму, и процессор сохраняет ПК (программный счетчик) в стеке и начинает извлекать инструкции из нового местоположения. Инструкция RET (возврат) передает управление обратно вызывающей стороне после завершения выполнения подпрограммы. Каждая подпрограмма использует RET в качестве последней инструкции.

ACALL (абсолютный вызов)

ACALL — это 2-байтовая инструкция, в отличие от LCALL, которая составляет 3 байта. Целевой адрес подпрограммы должен быть в пределах 2K байтов, потому что только 11 битов из 2 байтов используются для адреса. Разница между ACALL и LCALL заключается в том, что целевой адрес для LCALL может находиться где угодно в пределах 64K-байтового адресного пространства 8051, в то время как целевой адрес CALL находится в пределах 2K-байтового диапазона.

Встроенные системы — режимы адресации

Режим адресации относится к тому, как вы обращаетесь к данной ячейке памяти. Существует пять различных способов или пять режимов адресации для выполнения этой инструкции:

  • Режим немедленной адресации
  • Режим прямой адресации
  • Зарегистрировать режим прямой адресации
  • Зарегистрировать режим косвенной адресации
  • Режим индексированной адресации

Режим немедленной адресации

Давайте начнем с примера.

MOV A, #6AH 

В общем, мы можем написать,

MOV A, #data

Это называется немедленным, потому что 8-битные данные немедленно передаются в аккумулятор (целевой операнд).

Следующая иллюстрация описывает вышеупомянутую инструкцию и ее выполнение. Код операции 74H сохраняется по адресу 0202. Данные 6AH сохраняются по адресу 0203 в памяти программы. После считывания кода операции 74H данные по адресу следующей памяти программ передаются в аккумулятор A (E0H — это адрес аккумулятора). Поскольку команда состоит из 2 байтов и выполняется за один цикл, счетчик программ будет увеличен на 2 и будет указывать на 0204 памяти программы.

Режим немедленной адресации

Примечание. Символ # перед 6AH означает, что операндом являются данные (8 бит). В отсутствие «#» шестнадцатеричное число будет считаться адресом.

Режим прямой адресации

Это еще один способ обращения к операнду. Здесь адрес данных (исходные данные) задается в качестве операнда. Давайте возьмем пример.

MOV A, 04H 

Банк регистров № 0 (4-й регистр) имеет адрес 04H. Когда инструкция MOV выполняется, данные, хранящиеся в регистре 04H, перемещаются в аккумулятор. Поскольку регистр 04H содержит данные 1FH, 1FH перемещается в аккумулятор.

Примечание. Мы не использовали ‘#’ в режиме прямой адресации, в отличие от непосредственного режима. Если бы мы использовали ‘#’, значение данных 04H было бы передано в аккумулятор вместо 1FH.

Теперь взгляните на следующую иллюстрацию. Он показывает, как выполняется инструкция.

Режим прямой адресации

Как показано на рисунке выше, это 2-байтовая инструкция, для выполнения которой требуется 1 цикл. ПК будет увеличен на 2 и будет указывать на 0204. Код операции для инструкции MOV A, адрес E5H. Когда инструкция в 0202 выполнена (E5H), аккумулятор становится активным и готовым к приему данных. Затем ПК переходит к следующему адресу 0203 и ищет адрес местоположения 04H, где находятся исходные данные (для передачи в аккумулятор). В 04H система управления находит данные 1F и передает их в аккумулятор, и, следовательно, выполнение завершается.

Регистрация режима прямой адресации

В этом режиме адресации мы используем имя регистра напрямую (в качестве исходного операнда). Давайте попробуем понять с помощью примера.

MOV A, R4 

За один раз регистры могут принимать значения от R0 до R7. Есть 32 таких регистра. Чтобы использовать 32 регистра с 8 переменными для адресации регистров, используются банки регистров. Существует 4 банка регистров с именами от 0 до 3. Каждый банк состоит из 8 регистров с именами от R0 до R7.

Одновременно может быть выбран один банк регистра. Выбор банка регистров возможен через регистр специальных функций (SFR), называемый словом состояния процессора (PSW). PSW — это 8-битный SFR, где каждый бит может быть запрограммирован как требуется. Биты обозначены от PSW.0 до PSW.7. PSW.3 и PSW.4 используются для выбора банков регистров.

Теперь взгляните на следующую иллюстрацию, чтобы получить четкое представление о том, как она работает.

Регистрация режима прямой адресации

Код операции EC используется для MOV A, R4. Код операции сохраняется по адресу 0202, и когда он выполняется, управление переходит непосредственно к R4 уважаемого банка регистров (который выбран в PSW). Если выбран банк регистров № 0, то данные из R4 банка регистров № 0 будут перемещены в аккумулятор. Здесь 2F хранится в 04H. 04H представляет адрес R4 банка регистра № 0.

Данные (2F) движения выделены жирным шрифтом. 2F передается в аккумулятор из ячейки памяти данных 0C H и отображается пунктирной линией. 0CH является адресом местоположения регистра 4 (R4) банка регистров # 1. Указанная выше инструкция составляет 1 байт и требует 1 цикла для полного выполнения. Это означает, что вы можете сохранить память программы, используя режим прямой адресации регистра.

Регистрация режима косвенной адресации

В этом режиме адресации адрес данных сохраняется в регистре как операнд.

MOV A, @R0 

Здесь значение внутри R0 рассматривается как адрес, который содержит данные для передачи в аккумулятор. Пример : если R0 имеет значение 20H, а данные 2FH хранятся по адресу 20H, то значение 2FH будет передано в аккумулятор после выполнения этой инструкции. Смотрите следующую иллюстрацию.

Регистрация режима косвенной адресации

Таким образом, код операции для MOV A, @ R0 — E6H. Предполагая, что банк регистров # 0 выбран, R0 банка регистров # 0 содержит данные 20H. Управление программой перемещается в 20H, где он находит данные 2FH и передает 2FH в аккумулятор. Это однобайтовая инструкция, счетчик программ увеличивается на 1 и перемещается в 0203 памяти программ.

Примечание. Только R0 и R1 могут формировать инструкцию косвенной адресации регистра. Другими словами, программист может создать инструкцию, используя @ R0 или @ R1. Все банковские регистры разрешены.

Режим индексированной адресации

Мы возьмем два примера, чтобы понять концепцию индексированной адресации. Посмотрите на следующие инструкции —

MOVC A, @ A + DPTR

а также

MOVC A, @ A + ПК

где DPTR — указатель данных, а PC — программный счетчик (оба являются 16-разрядными регистрами). Рассмотрим первый пример.

MOVC A, @A+DPTR

Операндом-источником является @ A + DPTR. Он содержит исходные данные из этого места. Здесь мы добавляем содержимое DPTR с текущим содержимым аккумулятора. Это дополнение даст новый адрес, который является адресом исходных данных. Данные, указанные по этому адресу, затем передаются в аккумулятор.

Режим индексированной адресации

Код операции 93H. DPTR имеет значение 01FE, где 01 находится в DPH (старшие 8 бит), а FE находится в DPL (младшие 8 бит). Аккумулятор имеет значение 02H. Затем выполняется 16-разрядное сложение, и 01FE H + 02H приводит к 0200 H. Данные в местоположении 0200H будут переданы в аккумулятор. Предыдущее значение внутри аккумулятора (02H) будет заменено новыми данными с 0200H. Новые данные в аккумуляторе выделены на рисунке.

Это 1-байтовая инструкция с 2 циклами, необходимыми для выполнения, и время выполнения, требуемое для этой инструкции, является высоким по сравнению с предыдущими инструкциями (которые все были по 1 циклу каждая).

Другой пример MOVC A, @ A + PC работает так же, как и в предыдущем примере. Вместо добавления DPTR с помощью аккумулятора, данные внутри счетчика программ (ПК) добавляются вместе с аккумулятором для получения целевого адреса.

Встроенные системы — регистры SFR

Регистр специальных функций (или регистр специального назначения, или просто регистр специального назначения) — это регистр в микропроцессоре, который управляет или контролирует различные функции микропроцессора. Поскольку специальные регистры тесно связаны с какой-то специальной функцией или состоянием процессора, они не могут быть непосредственно записаны обычными инструкциями (такими как сложение, перемещение и т. Д.). Вместо этого некоторые специальные регистры в некоторых процессорных архитектурах требуют специальных инструкций для их изменения.

В 8051 регистры A, B, DPTR и PSW являются частью группы регистров, обычно называемых SFR (регистры специальных функций). Доступ к SFR можно получить по его имени или по адресу.

В следующей таблице приведен список SFR и их адреса.

Байт Адрес Битовый адрес
FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 В
E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC
Д0 D7 D6 D5 D4 D3 D2 Д0 PSW
B8 До нашей эры BB BA B9 B8 IP
B0 B7 B6 B5 B4 B3 Би 2 B1 B0 P3
A2 AF переменный ток AB А.А. A9 A8 IE
A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
99 Не битовая адресуемая SBUF
98 9F 9E 9D 99 98 SCON
90 97 96 95 94 93 92 91 90 P1
8D Не битовая адресуемая TH1
8C Не битовая адресуемая TH0
Не битовая адресуемая TL1
Не битовая адресуемая TL0
89 Не битовая адресуемая TMOD
88 8F 8E 8D 8C 89 88 TCON
87 Не битовая адресуемая PCON
83 Не битовая адресуемая DPH
82 Не битовая адресуемая DPL
81 Не битовая адресуемая SP
80 87 87 85 84 83 82 81 80 P0

Рассмотрим следующие два момента об адресах SFR.

  • Регистр специальной функции может иметь адрес от 80H до FFH. Эти адреса выше 80H, так как адреса от 00 до 7FH являются адресами оперативной памяти внутри 8051.

  • Не все адресные пространства от 80 до FF используются SFR. Неиспользуемые местоположения, от 80H до FFH, зарезервированы и не должны использоваться программистом 8051.

Регистр специальной функции может иметь адрес от 80H до FFH. Эти адреса выше 80H, так как адреса от 00 до 7FH являются адресами оперативной памяти внутри 8051.

Не все адресные пространства от 80 до FF используются SFR. Неиспользуемые местоположения, от 80H до FFH, зарезервированы и не должны использоваться программистом 8051.

CY PSW.7 Несут флаг
переменный ток PSW.6 Вспомогательный флаг для перевозки
F0 PSW.5 Флаг 0 доступен пользователю общего назначения.
RS1 PSW.4 Зарегистрировать селектор банка, бит 1
RS0 PSW.3 Зарегистрировать селектор банка, бит 0
О.В. PSW.2 Флаг переполнения
PSW.1 Определяемый пользователем FLAG
п PSW.0 ФЛАГИ Паритета. Устанавливается / сбрасывается аппаратно во время цикла инструкций для указания четного / нечетного числа 1 бита в аккумуляторе.

В следующем примере имена регистров SFR заменяются их адресами.

CY переменный ток F0 RS1 RS0 О.В. п

Мы можем выбрать соответствующий бит регистра банка, используя биты RS0 и RS1.

RS1 RS2 Зарегистрировать банк Адрес
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH

Слово состояния программы (PSW) содержит биты состояния, отражающие текущее состояние ЦП. Варианты 8051 предоставляют один специальный регистр функций, PSW, с этой информацией о состоянии. 8251 предоставляет два дополнительных флага состояния, Z и N, которые доступны во втором регистре специальной функции под названием PSW1.

Встроенные системы — таймер / счетчик

Таймер — это специализированный тип часов, который используется для измерения временных интервалов. Таймер, который отсчитывает от нуля вверх для измерения прошедшего времени, часто называют секундомером . Это устройство, которое отсчитывает от заданного интервала времени и используется для генерации задержки, например, песочные часы — это таймер.

Счетчик — это устройство, которое хранит (и иногда отображает) количество раз, когда произошло конкретное событие или процесс, относительно тактового сигнала. Он используется для подсчета событий, происходящих вне микроконтроллера. В электронике счетчики могут быть легко реализованы с использованием схем регистрового типа, таких как триггер.

Разница между таймером и счетчиком

Точки, которые отличают таймер от счетчика, следующие:

таймер счетчик
Регистр увеличивается для каждого машинного цикла. Регистр увеличивается с учетом перехода от 1 до 0 в соответствии с внешним входным выводом (T0, T1).
Максимальная скорость счета составляет 1/12 от частоты генератора. Максимальная скорость счета составляет 1/24 от частоты генератора.
Таймер использует частоту внутренних часов и генерирует задержку. Счетчик использует внешний сигнал для подсчета импульсов.

Таймеры 8051 и связанные с ними регистры

У 8051 есть два таймера, Таймер 0 и Таймер 1. Они могут использоваться как таймеры или как счетчики событий. Таймер 0 и Таймер 1 имеют ширину 16 бит. Поскольку 8051 соответствует 8-битной архитектуре, к каждому 16-битному доступу обращаются как к двум отдельным регистрам младшего байта и старшего байта.

Таймер 0 Регистрация

16-разрядный регистр таймера 0 доступен как младший и старший байт. Регистр младших байтов называется TL0 (младший байт таймера 0), а регистр старших байтов называется TH0 (старший байт таймера 0). Эти регистры могут быть доступны как любой другой регистр. Например, инструкция MOV TL0, # 4H перемещает значение в младший байт таймера # 0.

Таймер 0

Таймер 1 Регистрация

16-разрядный регистр таймера 1 доступен как младший и старший байт. Младший байтовый регистр называется TL1 (младший байт таймера 1), а старший байтовый регистр называется TH1 (старший байт таймера 1). Эти регистры могут быть доступны как любой другой регистр. Например, инструкция MOV TL1, # 4H перемещает значение в младший байт таймера 1.

Таймер 1

TMOD (Режим таймера) Регистрация

Таймер 0 и Таймер 1 используют один и тот же регистр для установки различных режимов работы таймера. Это 8-битный регистр, в котором младшие 4 бита отведены для таймера 0, а старшие четыре бита для таймеров. В каждом случае младшие 2 бита используются для предварительной установки режима таймера, а верхние 2 бита используются для указания местоположения.

TMOD Зарегистрироваться

Gate — если установлено, таймер работает только при высоком INT (0,1).

C / T — бит выбора счетчика / таймера.

M1 — Режим бит 1.

M0 — бит режима 0.

ВОРОТА

Каждый таймер имеет средства запуска и остановки. Некоторые таймеры делают это с помощью программного обеспечения, некоторые с помощью аппаратного обеспечения, а некоторые имеют как программное, так и аппаратное управление. Таймеры 8051 имеют как программное, так и аппаратное управление. Запуск и остановка таймера управляются программным обеспечением с использованием инструкций SETB TR1 и CLR TR1 для таймера 1, а также SETB TR0 и CLR TR0 для таймера 0.

Инструкция SETB используется для его запуска, и она останавливается инструкцией CLR. Эти инструкции запускают и останавливают таймеры до тех пор, пока GATE = 0 в регистре TMOD. Таймеры могут быть запущены и остановлены внешним источником, сделав GATE = 1 в регистре TMOD.

C / T (ЧАСЫ / ТАЙМЕР)

Этот бит в регистре TMOD используется для определения того, используется ли таймер в качестве генератора задержки или менеджера событий . Если C / T = 0, он используется в качестве таймера для генерации задержки таймера. Источником синхронизации для создания временной задержки является частота кристалла 8051. Если C / T = 0, частота кристалла, подключенная к 8051, также определяет скорость, с которой таймер 8051 срабатывает с регулярным интервалом.

Частота таймера всегда составляет 1/12 от частоты кристалла, подключенного к 8051. Хотя различные системы на базе 8051 имеют частоту XTAL от 10 МГц до 40 МГц, мы обычно работаем с частотой XTAL 11,0592 МГц. Это связано с тем, что скорость передачи для последовательной связи 8051.XTAL = 11.0592 позволяет системе 8051 обмениваться данными с ПК без ошибок.

М1 / М2

M1 M2 Режим
0 0 13-битный режим таймера.
0 1 16-битный режим таймера.
1 0 8-битный режим автоматической перезагрузки.
1 1 Разлитый режим.

Различные режимы таймеров

Режим 0 (13-битный режим таймера)

Таймер 1 и Таймер 0 в режиме 0 работают как 8-битные счетчики (с предварительным делителем на 32). Регистр таймера сконфигурирован как 13-битный регистр, состоящий из всех 8 битов TH1 и младших 5 битов TL1. Старшие 3 бита TL1 являются неопределенными и должны игнорироваться. Установка флага запуска (TR1) не очищает регистр. Флаг прерывания таймера TF1 устанавливается, когда счетчик переходит со всех 1 на все 0. Режим 0 работает для Таймера 0 так же, как и для Таймера 1.

Режим 1 (16-битный режим таймера)

Режим таймера «1» является 16-битным таймером и является широко используемым режимом. Он функционирует так же, как 13-битный режим, за исключением того, что используются все 16 бит. TLx увеличивается, начиная с 0 до максимального значения 255. После достижения значения 255 значение TLx сбрасывается до 0, а затем значение THx увеличивается на 1. Будучи полным 16-разрядным таймером, таймер может содержать до 65536 различных значений, и он переполнится до 0 после 65 536 рабочих циклов.

Режим 2 (8-битная автоматическая перезагрузка)

Оба регистра таймера настроены как 8-битные счетчики (TL1 и TL0) с автоматической перезагрузкой. Переполнение от TL1 (TL0) устанавливает TF1 (TF0), а также перезагружает TL1 (TL0) с содержимым Th1 (TH0), которое предварительно устанавливается программным обеспечением. Перезагрузка оставляет TH1 (TH0) без изменений.

Преимущество режима автоматической перезагрузки заключается в том, что у вас может быть таймер, который всегда будет содержать значение от 200 до 255. Если вы используете режим 0 или 1, вам придется проверить код, чтобы увидеть переполнение, и, в этом случае, сбросьте таймер до 200. В этом случае драгоценные инструкции проверяют значение и / или перезагружаются. В режиме 2 микроконтроллер позаботится об этом. После того, как вы настроили таймер в режиме 2, вам не нужно беспокоиться о том, чтобы проверить, не переполнен ли таймер, и вам не нужно беспокоиться о сбросе значения, потому что оборудование микроконтроллера сделает все за вас. Режим автоматической перезагрузки используется для установления общей скорости передачи.

Режим 3 (Режим таймера разделения)

Режим таймера «3» известен как режим таймера с разделением . Когда Таймер 0 переводится в режим 3, он становится двумя отдельными 8-битными таймерами. Таймер 0 — это TL0, а таймер 1 — это TH0. Оба таймера отсчитывают от 0 до 255, а в случае переполнения сбрасываются обратно на 0. Все биты таймера 1 теперь будут привязаны к TH0.

Когда Таймер 0 находится в режиме разделения, реальный Таймер 1 (т. Е. TH1 и TL1) может быть установлен в режимах 0, 1 или 2, но он не может быть запущен / остановлен, поскольку биты, которые делают это, теперь связаны с TH0. Реальный таймер 1 будет увеличиваться с каждым машинным циклом.

Инициализация таймера

Выберите режим таймера. Рассмотрим 16-битный таймер, который работает непрерывно и не зависит от внешних выводов.

Инициализируйте TMOD SFR. Используйте младшие 4 бита TMOD и рассмотрите таймер 0. Оставьте два бита, GATE 0 и C / T 0, равными 0, поскольку мы хотим, чтобы таймер не зависел от внешних выводов. Поскольку 16-битный режим является режимом таймера 1, очистите T0M1 и установите T0M0. Фактически, единственный включаемый бит — это бит 0 TMOD. Теперь выполните следующую инструкцию —

MOV TMOD,#01h

Теперь таймер 0 находится в режиме 16-битного таймера, но таймер не работает. Чтобы запустить таймер в режиме работы, установите бит TR0, выполнив следующую инструкцию:

SETB TR0

Теперь таймер 0 сразу начнет отсчет, увеличиваясь один раз за каждый машинный цикл.

Чтение Таймера

16-битный таймер может быть прочитан двумя способами. Либо считайте фактическое значение таймера как 16-битное число, либо вы обнаружите, когда таймер переполнен.

Обнаружение переполнения таймера

Когда таймер переполняется от своего максимального значения до 0, микроконтроллер автоматически устанавливает бит TFx в регистре TCON. Таким образом, вместо проверки точного значения таймера можно проверить бит TFx. Если установлен TF0, то таймер 0 переполнен; если установлен TF1, таймер 1 переполнен.

Встроенные системы — прерывание

Прерывание — это сигнал для процессора, испускаемый аппаратным или программным обеспечением, указывающий на событие, которое требует немедленного внимания. Всякий раз, когда происходит прерывание, контроллер завершает выполнение текущей инструкции и начинает выполнение процедуры обработки прерывания (ISR) или обработчика прерываний . ISR сообщает процессору или контроллеру, что делать, когда происходит прерывание. Прерывания могут быть аппаратными или программными.

Аппаратное прерывание

Аппаратное прерывание — это электронный предупреждающий сигнал, отправляемый процессору от внешнего устройства, такого как контроллер диска или внешнее периферийное устройство. Например, когда мы нажимаем клавишу на клавиатуре или перемещаем мышь, они запускают аппаратные прерывания, которые заставляют процессор считывать нажатие клавиши или положение мыши.

Программное прерывание

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

Что такое опрос?

Состояние непрерывного мониторинга известно как опрос . Микроконтроллер продолжает проверять состояние других устройств; и при этом он не выполняет никаких других операций и использует все свое время обработки для мониторинга. Эта проблема может быть решена с помощью прерываний.

В методе прерывания контроллер отвечает только тогда, когда происходит прерывание. Таким образом, контроллер не обязан регулярно контролировать состояние (флаги, сигналы и т. Д.) Сопряженных и встроенных устройств.

Прерывает v / s Polling

Вот аналогия, которая отличает прерывание от опроса —

Прерывание голосование
Прерывание похоже на лавочника . Если кому-то нужна услуга или продукт, он идет к нему и сообщает ему о своих потребностях. В случае прерываний, когда флаги или сигналы получены, они уведомляют контроллер о необходимости их обслуживания. Метод опроса подобен продавцу . Продавец идет от двери к двери, прося купить товар или услугу. Точно так же контроллер продолжает отслеживать флаги или сигналы один за другим для всех устройств и обеспечивает обслуживание любому компоненту, который нуждается в его обслуживании.

Программа обработки прерываний

Для каждого прерывания должна быть подпрограмма обработки прерываний (ISR) или обработчик прерываний . Когда происходит прерывание, микроконтроллер запускает процедуру обслуживания прерывания. Для каждого прерывания в памяти есть фиксированное местоположение, которое содержит адрес своей процедуры обработки прерывания, ISR. Таблица ячеек памяти, отведенная для хранения адресов ISR, называется таблицей векторов прерываний.

Выполнение программ

Таблица векторов прерываний

В 8051 есть шесть прерываний, включая RESET.

Прерывания Расположение ROM (Hex) Штырь
Прерывания Расположение ROM (HEX)
Серийный COM (RI и TI) 0023
Таймер 1 прерывает (TF1) 001B
Внешнее прерывание HW 1 (INT1) 0013 Р3,3 (13)
Внешнее прерывание HW 0 (INT0) 0003 P3.2 (12)
Таймер 0 (TF0) 000B
Сброс 0000 9
  • Когда активирован вывод сброса, 8051 переходит к адресу адреса 0000. Это сброс при включении питания.

  • Два прерывания отводятся для таймеров: одно для таймера 0 и одно для таймера 1. В таблице векторов прерываний ячейки памяти соответственно 000BH и 001BH соответственно.

  • Два аппаратных прерывания выделяются для аппаратных внешних прерываний. PIN-код 12 и ПИН № 13 в порту 3 предназначены для внешних аппаратных прерываний INT0 и INT1 соответственно. В таблице векторов прерываний в памяти расположены ячейки памяти 0003H и 0013H соответственно.

  • Последовательная связь имеет одно прерывание, которое относится как к приему, так и к передаче. Память 0023H принадлежит этому прерыванию.

Когда активирован вывод сброса, 8051 переходит к адресу адреса 0000. Это сброс при включении питания.

Два прерывания отводятся для таймеров: одно для таймера 0 и одно для таймера 1. В таблице векторов прерываний ячейки памяти соответственно 000BH и 001BH соответственно.

Два аппаратных прерывания выделяются для аппаратных внешних прерываний. PIN-код 12 и ПИН № 13 в порту 3 предназначены для внешних аппаратных прерываний INT0 и INT1 соответственно. В таблице векторов прерываний в памяти расположены ячейки памяти 0003H и 0013H соответственно.

Последовательная связь имеет одно прерывание, которое относится как к приему, так и к передаче. Память 0023H принадлежит этому прерыванию.

Шаги для выполнения прерывания

Когда прерывание становится активным, микроконтроллер выполняет следующие шаги:

  • Микроконтроллер закрывает текущую выполняемую инструкцию и сохраняет адрес следующей инструкции (ПК) в стеке.

  • Он также сохраняет текущее состояние всех прерываний внутри (т.е. не в стеке).

  • Он переходит в область памяти таблицы векторов прерываний, которая содержит адрес подпрограммы обслуживания прерываний.

  • Микроконтроллер получает адрес ISR из таблицы векторов прерываний и переходит к ней. Он начинает выполнять подпрограмму обслуживания прерываний, которая является RETI (возврат из прерывания).

  • После выполнения инструкции RETI микроконтроллер возвращается в то место, где он был прерван. Во-первых, он получает адрес счетчика программ (ПК) из стека, вставляя верхние байты стека в ПК. Затем он начинает выполняться с этого адреса.

Микроконтроллер закрывает текущую выполняемую инструкцию и сохраняет адрес следующей инструкции (ПК) в стеке.

Он также сохраняет текущее состояние всех прерываний внутри (т.е. не в стеке).

Он переходит в область памяти таблицы векторов прерываний, которая содержит адрес подпрограммы обслуживания прерываний.

Микроконтроллер получает адрес ISR из таблицы векторов прерываний и переходит к ней. Он начинает выполнять подпрограмму обслуживания прерываний, которая является RETI (возврат из прерывания).

После выполнения инструкции RETI микроконтроллер возвращается в то место, где он был прерван. Во-первых, он получает адрес счетчика программ (ПК) из стека, вставляя верхние байты стека в ПК. Затем он начинает выполняться с этого адреса.

Запуск по фронту и запуск по уровню

Модули прерывания бывают двух типов — с уровнями или с фронтами.

Уровень срабатывает Edge Triggered
Модуль прерываний, инициируемый уровнем, всегда генерирует прерывание всякий раз, когда устанавливается уровень источника прерывания. Модуль прерывания, инициируемый фронтом, генерирует прерывание только тогда, когда он обнаруживает утверждающую границу источника прерывания. Край обнаруживается, когда уровень источника прерывания фактически изменяется. Он также может быть обнаружен путем периодической выборки и обнаружения заявленного уровня, когда предыдущая выборка была отменена.
Если источник прерывания все еще утверждается, когда обработчик прерывания встроенного программного обеспечения обрабатывает прерывание, модуль прерывания будет восстанавливать прерывание, вызывая повторный вызов обработчика прерывания. Модули прерывания, запускаемые по фронту, могут действовать немедленно, независимо от поведения источника прерывания.
Инициируемые уровнем прерывания обременительны для прошивки. Прерывания, инициируемые краем, сохраняют сложность кода встроенного ПО, уменьшают количество условий для встроенного ПО и обеспечивают большую гибкость при обработке прерываний.

Включение и отключение прерывания

После сброса все прерывания отключаются, даже если они активированы. Прерывания должны быть разрешены с помощью программного обеспечения, чтобы микроконтроллер мог реагировать на эти прерывания.

Регистр IE (разрешение прерывания) отвечает за включение и отключение прерывания. IE — это битовый адресный регистр.

Регистр разрешения прерываний

Е.А. ET2 ES ET1 EX1 ET0 EX0
  • EA — Глобальное включение / отключение.

  • Не определено.

  • ET2 — Включить прерывание от Таймера 2.

  • ES — Включить прерывание последовательного порта.

  • ET1 — Включить прерывание от Таймера 1.

  • EX1 — Включить внешнее 1 прерывание.

  • ET0 — Включить прерывание от Таймера 0.

  • EX0 — включить внешнее 0 прерывание.

EA — Глобальное включение / отключение.

Не определено.

ET2 — Включить прерывание от Таймера 2.

ES — Включить прерывание последовательного порта.

ET1 — Включить прерывание от Таймера 1.

EX1 — Включить внешнее 1 прерывание.

ET0 — Включить прерывание от Таймера 0.

EX0 — включить внешнее 0 прерывание.

Чтобы включить прерывание, мы предпринимаем следующие шаги:

  • Бит D7 регистра IE (EA) должен быть высоким, чтобы остальная часть регистра вступила в силу.

  • Если EA = 1, прерывания будут разрешены, и на них будет дан ответ, если их соответствующие биты в IE будут высокими. Если EA = 0, прерывания не будут реагировать, даже если их соответствующие выводы в регистре IE высоки.

Бит D7 регистра IE (EA) должен быть высоким, чтобы остальная часть регистра вступила в силу.

Если EA = 1, прерывания будут разрешены, и на них будет дан ответ, если их соответствующие биты в IE будут высокими. Если EA = 0, прерывания не будут реагировать, даже если их соответствующие выводы в регистре IE высоки.

Приоритет прерывания в 8051

Мы можем изменить приоритет прерывания, назначив более высокий приоритет любому из прерываний. Это достигается путем программирования регистра под названием IP (приоритет прерывания).

На следующем рисунке показаны биты регистра IP. После сброса регистр IP содержит все 0. Чтобы дать более высокий приоритет любому из прерываний, мы делаем соответствующий бит в регистре IP высоким.

PT1 PX1 PT0 PX0

IP.7 Не реализованы.
IP.6 Не реализованы.
IP.5 Не реализованы.
IP.4 Не реализованы.
PT1 IP.3 Определяет уровень приоритета прерывания от Таймера 1.
PX1 IP.2 Определяет уровень приоритета внешнего прерывания 1.
PT0 IP.1 Определяет уровень приоритета прерывания от Таймера 0.
PX0 IP.0 Определяет уровень приоритета внешнего прерывания 0.

Прерывание внутри Прерывание

Что произойдет, если 8051 выполняет ISR, который принадлежит прерыванию, и другое становится активным? В таких случаях высокоприоритетное прерывание может прерывать низкоприоритетное прерывание. Это известно как прерывание внутри прерывания . В 8051 прерывание с низким приоритетом может быть прервано прерыванием с высоким приоритетом, но не любым другим прерыванием с низким приоритетом.

Запуск прерывания программным обеспечением

Есть моменты, когда нам нужно протестировать ISR с помощью симуляции. Это можно сделать с помощью простых инструкций, чтобы установить высокий уровень прерывания и тем самым заставить 8051 перейти к таблице векторов прерываний. Например, установите бит IE равным 1 для таймера 1. Команда SETB TF1 прервет 8051 во всем, что он делает, и заставит его перейти к таблице векторов прерываний.