Menu English Ukrainian Russian Home

Бесплатная техническая библиотека для любителей и профессионалов Бесплатная техническая библиотека


Модульное программирование систем управления на MCS48. Энциклопедия радиоэлектроники и электротехники

Бесплатная техническая библиотека

Энциклопедия радиоэлектроники и электротехники / Микроконтроллеры

Комментарии к статье Комментарии к статье

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

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

Этот принцип заложен в структуру многих языков высокого уровня (PASCAL, C++), и программист буквально вынужден ему следовать. К сожалению, АССЕМБЛЕРЫ (в том числе для МСS48), предоставляя программисту большую свободу выбора средств и методов решения задач, как правило, совсем не следят за соблюдением дисциплины программирования. Это нередко приводит к созданию настолько запутанных программ, что даже их авторы не могут спустя некоторое время разобраться в том, что было сделано, не говоря уже об использовании отлаженных фрагментов в других программах. Сознательное соблюдение общих модульных концепций значительно облегчает и ускоряет программирование микроконтроллеров. Пример типичной модульной программы для СУ приведен в таблице. Ее синтаксис соответствует табличному АССЕМБЛЕРУ ТАSМ в варианте для микропроцессора 8048.

Как видно, в начале текста программы директивами ЕQU константам даются имена и присваиваются значения. Пользоваться именованными константами всегда предпочтительнее, чем указывать числовые значения непосредственно в исполняемых командах процессора. Например, выдержка времени, реализуемая одной из рассматриваемых ниже подпрограмм, определяется тремя числами. Они заданы константами N1, N2 и N3. Если нужно изменить выдержку .достаточно в операторах ЕQU указать новые значения. В противном случае пришлось бы разыскивать во всей программе команды с операндами, равными этим числам, решать, относится ли каждая из них к выдержке времени, и в нужных случаях указывать новые значения.

Очевидно,такая работа требует много времени и часто не обходится без ошибок. Особенно усложняет ее то, что в некоторых командах может использоваться не число целиком, а, например, его старший или младший байт. АССЕМБЛЕР уже на этапе трансляции программы способен вычислить некоторые константы, исходя из значений других. Эту возможность иллюстрирует вычисление старшего (NЗН) и младшего (N3L) байтов числа N3.

Далее в программе выделяют память для переменных. Делают это теми же самыми директивами ЕQU, но в отличие от описаний констант задают не числовые значения переменных, а адреса занимаемых ими ячеек памяти.

Модульное программирование систем управления на MCS48
(нажмите для увеличения)

Если позволяет АССЕМБЛЕР, не следует пренебрегать возможностью использования макрокоманд. Каждая из них представляет собой как бы новую команду, выполняющую операцию, прямо не предусмотренную системой команд процессора. Описывая макрокоманду, программист дает ей имя (конечно, не совпадающее с именем ни одной из "настоящих" команд) и задает требуемые действия в виде Последовательности машинных команд. Каждый раз, встретив макрокоманду в программе, АССЕМБЛЕР заменит ее указанной последовательностью. В рассматриваемом примере Используются две макрокоманды. Одна из них пересылает содержимое аккумулятора в заданную параметром макрокоманды ячейку памяти данных, а другая - обратно.

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

Следующий этап-установка режимов работы контроллера (например, выбор банков памяти и регистров), инициализация переменных и внешних устройств. Типичная ошибка начинающих программистов - считать, что сразу после пуска программы переменные уже имеют какие-то определенные значения. Укреплению этого заблуждения способствует предусмотренное в некоторых языках высокого уровня (например, в BASIC) автоматическое присвоение всем переменным начального нулевого значения. В программах на языке АССЕМБЛЕРа (и многих других языках) программист должен сам позаботиться, чтобы до первого считывания значения переменной в отведенную ей ячейку памяти уже было что-нибудь записано. Хороший стиль программирования требует, чтобы начальные значения были присвоены переменным в самом начале работы программы. В данном случае это делает подпрограмма 1INIT.

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

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

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

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

Рассмотрим некоторые особенности подпрограмм. I NCREM и DЕСRЕМ выполняют требуемые во многих случаях операции увеличения или уменьшения на заданную величину 16-разрядного двоичного числа (его старший и младший байты находятся соответственно в регистрах R6 и R5). Константы, задающие величину приращения, описаны в начале программы.

Так как любой микроконтроллер работает значительно быстрее технологического оборудования, очень важно уметь организовывать в программе выдержку времени. В данном случае использован внутренний счетчик/таймер процессора. Он имеет ограниченную емкость и переполняется за время, измеряемое миллисекундами. Каждое переполнение генерирует запрос прерывания. Подпрограмма обслуживания прерываний от таймера (ТIМЕ) подсчитывает их и при достижении заданного числа присваивает единичное значение флагу истечения времени FLT. Всем подпрограммам,работа которых зависит от времени, остается анализировать состояние этого флага. Так удается реализовать выдержки в несколько секунд и даже минут.

Для того чтобы начать отсчет нового интервала, необходимо занести исходные значения в рабочие ячейки подпрограммы ТIМЕ и включить таймер. Подпрограмма SET2М, например, задает выдержку времени, равную 2 мин. Расчет исходных значений имеет несколько тонкостей.

Известно, что в микроконтроллерах серии МСS48 на вход внутреннего счетчика/таймера импульсы поступают с частотой, в 480 раз меньшей частоты кварцевого генератора. Например, при частоте кварцевого резонатора 7 МГц число, записанное в счетчик, изменяется каждые 480/7000000 = 0,00006857 с = 68,57 мкс. Так что счетчик переполнится (и будет сформирован запрос прерывания) через 68,57 -(256-N1) мкс, где N1 -число,первоначально записанное в счетчик. Если каждый раз начинать новый счет с этого числа, то за 0,1 с (минимальная выдержка времени) произойдет N2 = 0,1 · 7000000/[1480 · (256-N1)] переполнений.

Очевидно, одну и ту же выдержку времени можно получить при разных N1 и N2, но так как эти числа не могут быть дробными, она будет реализована с некоторой ошибкой. Задача состоит в подборе такой пары значений, при которых ошибка минимальна. В рассматриваемом случае наилучший вариант N1 = 13, N2 = 6, Выдержка времени, равная 2 мин, получается повторением описанной процедуры N3 = 1200 раз.

Часто бывает необходимо в разных режимах работы программы применять разные процедуры обработки одних и тех же аппаратных прерываний. Один из способов сделать это иллюстрирует подпрограмма INTER. Она анализирует код типа прерывания, занесенный основной программой в ячейку INTT,и в зависимости от его значения вызывает одну из подпрограмм обслуживания прерывания ISR1 или ISR2. Заметим, что обе они заканчиваются командой RЕТ,а не RETR. Число вариантов обработки нетрудно увеличить и даже сделать так, что при некотором значении кода будут вызываться одна за другой несколько различных подпрограмм.

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

Автор: Д.Рыжов, г.Владимир

Смотрите другие статьи раздела Микроконтроллеры.

Читайте и пишите полезные комментарии к этой статье.

<< Назад

Последние новости науки и техники, новинки электроники:

Использование Apple Vision Pro во время операций 16.03.2024

Медицинская команда больницы Кромвеля в Лондоне впервые применила Apple Vision Pro в ходе двух операций на позвоночнике. Это событие подтверждает потенциал гарнитуры в качестве медицинского инструмента, изменяющего подход к хирургической практике. Хотя сами врачи не использовали Vision Pro, операционная медсестра работала с виртуальной реальностью, используя очки во время подготовки и выполнения процедур. Гарнитура позволила просматривать виртуальные экраны в операционной, выбирать инструменты и следить за ходом операции. Программное обеспечение, разработанное компанией eXeX, специализирующейся на создании приложений на основе искусственного интеллекта для хирургии, существенно улучшило процесс оказания медицинской помощи пациентам. Использование Apple Vision Pro открывает новые возможности для разработки приложений в сфере здравоохранения, таких как клиническое образование, планирование операций, обучение и медицинская визуализация. Внедрение Apple Vision Pro в медицинскую пр ...>>

Хранение углерода в Северное море 16.03.2024

Министр энергетики Норвегии Терье Осланд объявил о запуске проекта Longship, нацеленного на создание центрального хранилища углекислого газа в Северном море. Этот амбициозный проект оценивается в $2,6 млрд и направлен на применение технологии CCS (углеродного захвата и хранения) для смягчения воздействия климатических изменений. Норвегия уже имеет опыт в области CCS благодаря успешным проектам Sleipner и Snohvit, и сейчас стремится увеличить объем углерода, запечатываемого под морским дном. План Longship предусматривает создание мощности по захвату и хранению 1,5 млн. тонн углерода ежегодно в течение 25 лет. Несмотря на позитивные перспективы, существуют опасения по поводу долгосрочных последствий такого хранения. Однако сторонники проекта утверждают, что морское хранение углерода имеет ряд преимуществ, включая минимальное воздействие на окружающую среду. Проект Longship осуществляется при участии компаний Equinor, Shell и TotalEnergies через совместное предприятие Northern Li ...>>

Выращены мини-органы из амниотической жидкости человека 15.03.2024

Международная команда ученых под руководством профессора Фань Сюлиня из Университета Чжэцзян разработала уникальный способ выращивания мини-органов из клеток, обнаруженных в амниотической жидкости человека. Этот значительный прорыв в медицине может привести к улучшению диагностики и лечения врожденных заболеваний. Органоиды, представляющие собой трехмерные клеточные структуры, имитирующие органы в меньшем масштабе, были выращены из клеток легких, почек и тонкого кишечника, найденных в амниотической жидкости. Этот метод открывает новые возможности для изучения различных состояний плода и может стать ключом к ранней диагностике и лечению врожденных дефектов. Хотя пока не проводились попытки использования этого метода в лечении, ученые надеются, что их исследования в будущем помогут бороться с серьезными врожденными заболеваниями, которые затрагивают миллионы новорожденных ежегодно. Этот прорыв может изменить практику медицинских вмешательств, позволяя диагностировать и лечить врожд ...>>

Случайная новость из Архива

Фотон шифрует связь 17.08.2012

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

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

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

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

Другие интересные новости:

▪ Литий-ионный аккумулятор с водой вместо электролита

▪ Энергоэффективная оптическая связь

▪ Трансгенный продукт вызывает аллергию

▪ Шерстяной дом

▪ Первый полнофункциональный чип на технологии 16FinFET

Лента новостей науки и техники, новинок электроники

 

Интересные материалы Бесплатной технической библиотеки:

▪ раздел сайта Автомобиль. Подборка статей

▪ статья Ум, честь и совесть нашей эпохи. Крылатое выражение

▪ статья Как Амфитрион убедился, кто из рожденных Алкменой близнецов его сын? Подробный ответ

▪ статья Ванны гигиенические, общие и местные лечебные. Медицинская помощь

▪ статья Электронный включатель звонка с мелодичным боем. Энциклопедия радиоэлектроники и электротехники

▪ статья Рисунок, дорисовывающий сам себя. Секрет фокуса

Оставьте свой комментарий к этой статье:

Имя:


E-mail (не обязательно):


Комментарий:





All languages of this page

Главная страница | Библиотека | Статьи | Карта сайта | Отзывы о сайте

www.diagram.com.ua

www.diagram.com.ua
2000-2024