WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 2 |
-- [ Страница 1 ] --

Министерство образования и науки Российской Федерации Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Таганрогский государственный

радиотехнический университет Ю.И.ИВАНОВ В.Я.ЮГАЙ МИКРОПРОЦЕССОРНЫЕ УСТРОЙСТВА СИСТЕМ УПРАВЛЕНИЯ Допущено Учебно-методическим объединением вузов по образованию в области автоматизированного машиностроения (УМО AM) в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов - "Автоматизированные технологии и производства" (специальность 210200 - " Автоматизация технологических процессов и производств ( в энергетике) Таганрог 2005 УДК 681.325.5-181.48:681.51 (075.8)+681.51:681.325.5-181.48(075.8) Ю.И.Иванов, ВЛ.Югай. Микропроцессорные устройства систем управления: Учебное пособие. - Таганрог: Изд-во ТРТУ, 2005. - 133 с. Учебное пособие предназначено для студентов, обучающихся по направлению 657900 «Автоматизированные технологии и производства», и содержит сведения, необходимые при изучении курсов «Микропроцессорная техника в системах управления», «Электронные устройства автоматики», «Технические средства автоматизации», «Технологические процессы и производства». В учебном пособии рассмотрены вопросы организации работы микропроцессорных средств, функциональные возможности и характеристики аппаратных средств микроконтроллеров, особенности программирования на ассемблере, приведены примеры программ для выполнения типовых функций, даны краткие рекомендации по технической реализации алгоритмов управления. Ил.12.

Печатается по решению редакционно-издательского совета Таганрогского государственного радиотехнического университета.

Рецензенты: А.Н.Целых - д-р техн. наук, профессор, директор регионального (областного) центра новых информационных технологий, проректор по информатике ТРТУ;

Я.Е.Ромм - д-р техн. наук, профессор, зав. кафедрой информатики ТГПИ.

ISBN 5-8327-0206- © Таганрогский государственный радиотехнический университет, 2005 © Иванов Ю.И.,ЮгайВ.Я., СОДЕРЖАНИЕ ВВЕДЕНИЕ 1. ОРГАНИЗАЦИЯ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ 1.1. Структура микропроцессорной системы 1.2.Форматы данных микропроцессорной системы.... 1.3. Организация памяти и адресация данных 1.4. Организация обработки данных 1.5. Алгоритмы ввода-вывода данных 2. МИКРОКОНТРОЛЛЕРЫ AVR 2.1. Общая характеристика микроконтроллеров семейства AVR 2.2. Микроконтроллер AT90S8535 2.3 Запоминающие устройства микроконтроллера AT90S8535. 3. АППАРАТНЫЕ ИНТЕРФЕЙСЫ МИКРОКОНТРОЛЛЕРА AT90S8535 3.1. Параллельные порты ввода-вывода 3.2. Последовательный интерфейс SPI 3.3. Последовательный интерфейс UART 3.4. Таймеры микроконтроллера 3.4.1. Таймер 0 3.4.2. Таймер 1 3.4.3. Таймер 2 3.5. Аналоговый компаратор 3.6. Аналого-цифровой преобразователь (АЦП) 3.7. Чтение и запись данных EEPROM 3.8. Система прерываний и регистры общего управления... 4. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОКОНТРОЛЛЕРОВ AVR 4.1. Система команд микроконтроллеров AVR 4.1.1. Арифметические и логические команды 4.1.2. Команды пересылки данных 4.1.3. Команды управления 4.1.4. Команды преобразования битов в регистрах.... 4.1.5. Прочие команды 4.2. Компилятор ассемблера микроконтроллеров AVR... 5. РЕАЛИЗАЦИЯ ТИПОВЫХ ФУНКЦИЙ 5.1. Примеры программ для микроконтроллеров AVR... 5.2. Микроконтроллерная система управления температурой. 5.3. Средства подготовки программ 5.4. Особенности применения микроконтроллеров AVR.. ЗАКЛЮЧЕНИЕ БИБЛИОГРАФИЧЕСКИЙ СПИСОК ПРИЛОЖЕНИЕ 4 9 9 19 23 28 32 37 38 39 43 46 46 48 52 54 55 57 61 63 64 66 66 74 75 76 79 84 87 89 90 95 96 104 123 127 130 130 ВВЕДЕНИЕ Распространение новых информационных технологий, основанных на достижениях микроэлектроники последней четверти XX века, привело к значительным изменениям в самых различных областях. Традиционно рас­ сматривается прогресс в компьютерной технике, системах компьютерной обработки информации, компьютерных сетях и т.п. Однако не менее рево­ люционные изменения произошли и в других сферах, связанных с приме­ нением технических средств обработки данных. Появление новых средств и технологий обработки данных позволило существенно расширить функ­ циональные возможности и сложность решаемых задач в системах автома­ тизации. Системы автоматического управления могут эффективно решать задачи на уровнях, начинающихся от управления отдельными узлами и устройст­ вами и заканчивающихся управлением технологическими установками и целыми производствами. В системах автоматизации применяются различ­ ные средства реализации алгоритмов управления. В настоящее время, не­ смотря на определенные особенности применения, наиболее эффективны­ ми являются цифровые методы и средства. Современная микроэлектронная элементная база позволяет при невысо­ ких затратах на аппаратные средства использовать разнообразные алго­ ритмы цифровой обработки данных, а их преимущества общеизвестны. Вес и роль аналоговых средств существенно снизилась в силу недостаточной точности, стабильности, функциональной гибкости и технологичности. Ос­ новная область применения аналоговых устройств - предварительная под­ готовка сигналов для преобразования в цифровой формат. Одним из важнейших факторов прогресса в средствах автоматизации яв­ ляется "интеллектуализация" устройств, включая и устройства, выпол­ няющие наиболее простые функции: измерительные датчики, исполни­ тельные устройства, средства сигнализации и т.п. Кроме необходимых ос­ новных функций, "интеллектуальные" технические средства могут реали­ зовать множество вспомогательных, зачастую весьма сложных алгоритмов преобразования данных при относительно невысоких дополнительных за­ тратах. Эта функциональная избыточность позволяет использовать одни и те же технические средства при решении разнообразных задач, несмотря на раз­ личие требований, реализуемых алгоритмов и функций. Очень часто выбор определенных параметров, режимов и алгоритмов работы должен про­ граммироваться, т.е. определяться специальными процедурами настройки. Поэтому современные технические средства должны обладать соответст­ вующей функциональной гибкостью, возможностью изменения параметров и режимов работы, поддерживать необходимые процедуры настройки.

Типовая структура системы управления приведена на рис. 1. Система управления может быть независимой локальной системой либо интегриро­ вана как элемент в многоуровневую систему. Функции элементов системы управления можно определить следующим образом:

1® 1 "° 1л \*ч\ 1S u so 1 X О. С >* Объект управления 3" то Ь а:

ж' Система управления 1 ф Г ход ерф >s о 0 >s I одн ерф > >S ОФ < > Контроллер 3Ё Ё t 1 1 1 Интерфейс обмена данными s Пульт управления и индикации.

Рис. 1. Структурная схема системы управления входной интерфейс - прием и преобразование сигналов от датчиков в формат, удобный для дальнейшей обработки;

выходной интерфейс - преобразование выходных данных системы в сигналы управления исполнительными устройствами;

контроллер - основной элемент системы управления, реализующий ал­ горитмы управления и обработки данных в соответствии с поставлен­ ными задачами, потоком данных входного интерфейса, управляющих команд пульта управления и интерфейса обмена с другими средствами управления;

пульт управления и индикации - средства управления и отображения данных о параметрах и режимах работы для оператора объекта управ­ ления;

• интерфейс обмена данными - средства организации взаимодействия и координации работы системы управления с другими средствами управления, в локальных системах управления необязателен, но, как правило, должен предусматриваться для возможной модернизации системы управления. Контроллер - основное средство реализации алгоритмов управления, он должен преобразовывать поток цифровых входных данных и команд X в поток управляющих выходных данных У:

Y = !F(X). Алгоритмы преобразования Ч0 можно реализовать двумя основными спосо­ бами. Могут применяться и различные комбинации этих способов. Первый способ принято называть аппаратной реализацией: все необхо­ димые функции преобразования выполняются специально разработанным устройством с определенным набором компонентов и их функциональных связей. Аппаратная реализация при прочих равных условиях минимальна с точки зрения требуемого числа компонентов, обладает максимально воз­ можным быстродействием. Однако проектирование устройств управления с аппаратной реализацией требует очень высоких затрат. Кроме того, даже незначительное изменение алгоритмов преобразования требует повторной разработки нового устройства. В силу этих недостатков чисто аппаратная реализация в настоящее время применяется крайне редко. Второй основной способ - программная реализация. Обычно даже слож­ ные и самые разнообразные алгоритмы преобразования Ч0 можно предста­ вить в виде конечных последовательностей относительно несложных опе­ раций (команд). Классический пример программной реализации - компью­ теры, они и послужили прототипом микропроцессоров - основных техни­ ческих средств этой реализации. Один и тот же набор аппаратных средств микропроцессорной системы позволяет решать самые разнородные задачи, алгоритм преобразования определяется программой, записанной в запоми­ нающем устройстве. Главным достоинством программной реализации является функцио­ нальная гибкость: для изменения алгоритмов или выполняемых функций необходимо модифицировать только последовательность команд в про­ грамме. Значительная функциональная избыточность микропроцессорных средств, как правило, не приводит к существенному увеличению сложности и стоимости. Все же такая реализация обладает и существенным недостат­ ком: последовательное, а не параллельное, как при аппаратной реализации, выполнение необходимых операций требует значительных временных за­ трат, а это приводит к снижению быстродействия. В технике обычно применяют компромиссные решения, которые в той или иной степени объединяют достоинства разных способов реализации. Программируемые логические интегральные схемы (ПЛИС) и микрокон троллеры - наиболее известные результаты таких компромиссов. И те, и другие средства реализации являются продуктом достижений микроэлек­ тронных технологий и представляют большие интегральные схемы со зна­ чительными функциональными возможностями, необходимой универсаль­ ностью и гибкостью. В определенном смысле в них используются противо­ положные подходы, поэтому они обладают разными свойствами и разными основными областями применений. В основе ПЛИС лежит аппаратная реализация. ПЛИС определенного ти­ па содержит ограниченный набор типовых элементов (комбинационные логические схемы, триггеры, счетчики, регистры и т.п.). Для достижения необходимой гибкости функциональные связи между элементами не зада­ ются жестко, а могут изменяться в довольно широких пределах с помощью процедур, аналогичных записи данных в программируемые постоянные за­ поминающие устройства (PROM). Процедуры создания функциональных связей принято называть про­ граммированием. Для реализации заданного алгоритма работы необходимо выбрать тип ПЛИС с необходимым набором элементов и реализуемых функций, разработать требуемую структуру функциональных связей и да­ лее произвести программирование этих связей. Как правило, ПЛИС допус­ кает многократное программирование, т.е. при неудовлетворительных по­ лученных результатах устройство можно перепрограммировать, выполнив требуемую корректировку. Естественно, что все эти операции выполняют­ ся с помощью специальных средств. Эти средства обычно включают инст­ рументальные пакеты прикладных программ для персональных компьюте­ ров, в которых реализуемые функции описываются с помощью формализо­ ванных процедур. Подготовленные файлы для реализации требуемых функций ПЛИС записываются через стандартные программаторы непо­ средственно из персонального компьютера. Таким образом, возможность программирования функций приближает ПЛИС по функциональной гибко­ сти к программной реализации, а сама реализация функций близка к аппа­ ратной. Обычные области применения ПЛИС - задачи, требующие высоко­ го быстродействия, но реализующие один и тот же повторяющийся алго­ ритм преобразования, который не может существенно изменяться в про­ цессе работы. Микроконтроллеры в силу программной реализации основных функций обладают более высокой гибкостью и универсальностью, чем ПЛИС. Для повышения быстродействия и эффективности работы в микроконтроллеры дополнительно вводят средства аппаратной реализации типовых функций, что позволяет, наряду с последовательной программной реализацией необ­ ходимых алгоритмов, использовать и параллельную аппаратную реализа­ цию. Как правило, аппаратные средства выполняют стандартные интер­ фейсные функции. Тогда алгоритмы преобразования, выполняемые микро контроллерами, можно представить в виде двух параллельно реализуемых составляющих где 4*sw - профаммная (последовательная) реализация, обеспечивающая универсальность и гибкость;

4*HW - аппаратная (параллельная) реализация типовых функций стан­ дартных периферийных устройств. Такое сочетание позволяет сохранить универсальность профаммной реализации, повысить быстродействие, реализуя большинство интерфейс­ ных функций аппаратно (УРнн)- Профамма обработки данных (4*Sw) упро­ щается, она не содержит функций, реализуемых аппаратно, но должна обеспечивать корректное взаимодействие с аппаратно реализуемыми ин­ терфейсами. Микроконтроллеры применяют для решения самых разнооб­ разных задач, набор средств аппаратной реализации может быть различ­ ным, поэтому существует несколько классов микроконтроллеров с разными возможностями. Микроконтроллеры выпускаются многими фирмамипроизводителями интефальных схем и являются массовыми, относительно недорогими и доступными изделиями. Интегрируя на одном кристалле высокопроизводительный процессор, память и стандартные периферийные устройства, микроконтроллеры по­ зволяют с минимальными затратами создавать системы управления раз­ личными объектами и процессами. В настоящее время микроконтроллеры являются наиболее универсальными и распространенными компонентами технических средств автоматизации. Особенности применения микроконтроллеров в системах автоматиче­ ского управления в первую очередь определяются средствами профамм­ ной реализации. Основой практически любой профаммной реализации яв­ ляется стандартная структура микропроцессорной системы. Рассмотрим свойства такой системы на примере классического микропроцессора Intel 8080. Несмотря на значительные изменения в микропроцессорной технике, произошедшие в течение 30 лет после его появления, свойства Intel 8080 отражают основные особенности средств профаммной реализации алго­ ритмов преобразования данных.

1.0РГАНИЗАЦИЯ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ Появление микропроцессорных устройств в начале 70-х годов XX века было результатом работы по созданию универсальных средств для реали­ зации цифровых алгоритмов преобразования данных. Как известно, в осно­ ву микропроцессорной системы была положена классическая архитектура электронно-вычислительной машины - компьютера. Принципы программ­ ной реализации цифровых алгоритмов и организация работы компьютера позволяют использовать одни и те же аппаратные средства дня решения весьма разнообразных задач, обеспечивая необходимую универсальность и многофункциональность. Многие архитектурные решения, отработанные в компьютерах, были использованы при создании интегральных схем - мик­ ропроцессоров, они содержат все основные компоненты универсального компьютера и используют аналогичные принципы организации работы. 1.1. Структура микропроцессорной системы В микропроцессорной системе, как уже указывалось, используются принципы организации работы и особенности архитектуры классических компьютерных средств. Любой алгоритм преобразования данных должен быть описан в форме программы ~ конечной последовательности элемен­ тарных операций. Центральный элемент такой системы - микропроцессор, который выполняет операции преобразования данных, производит ввод и вывод всех необходимых данных, в том числе и кодов самой программы, и управляет взаимодействием всех элементов системы. Набор операций (выполняемых команд) микропроцессора должен обла­ дать функциональной полнотой, т.е. обеспечивать выполнение необходи­ мого множества операций преобразования данных, управления, обмена данных. Так как преобразуемые данные и коды программы могут быть представлены в достаточно близких форматах, как правило, строгого раз­ граничения между ними не делают. Такой подход расширяет возможности программной обработки: данные могут использоваться как элементы кодов программы, а элементы кодов программы можно преобразовывать в про­ цессе работы. Для хранения данных и кодов программы микропроцессорная система содержит запоминающее устройство. Стандартная организация микропро­ цессорной системы предполагает доступность для микропроцессора всех данных в запоминающем устройстве. Так как объем запоминающего уст­ ройства достаточно большой, доступ к выбранным данным обычно произ­ водится через средства адресации. Каждому элементу сохраняемых данных (например, каждому байту) соответствует определенный код хранения, на­ зываемый адресом в запоминающем устройстве. Как правило, в микропро­ цессорной системе предполагается постоянная готовность запоминающего устройства к обмену данными, для обмена данными микропроцессор дол жен передать определенный код адреса данных и соответствующие сигна­ лы управления. Процедуры ввода-вывода данных также должны выполняться стандарт­ ными для микропроцессора алгоритмами. Эти алгоритмы, эффективные для управления микропроцессорной системы, могут не соответствовать особенностям работы различных периферийных устройств. Поэтому мик­ ропроцессорная система обычно содержит устройства ввода-вывода, обес­ печивающие согласование алгоритмов управления обменом данными. Еще один важный компонент микропроцессорной системы - топология линий связи для передачи сигналов между микропроцессором и другими устройствами. Топология должна быть такой, чтобы изменение структуры микропроцессорной системы не требовало изменения структуры исполь­ зуемых линий связи и формируемых сигналов. Этому требованию удовле­ творяет магистрально-модульный (шинный) принцип организации взаимо­ действия. При шинной организации все устройства подключаются парал­ лельно к используемым линиям связи. Линии связи можно условно объе­ динить в три группы - шины. По шине данных (ШД) передаются требуе­ мые данные, шина адреса (ША) служит для выбора устройств, участвую­ щих в обмене данными, а шина управления (ШУ) необходима для передачи управляющих сигналов. Шинная организация максимально универсальна: подключение допол­ нительных устройств абсолютно не затрагивает уже действующую струк­ туру микропроцессорной системы. Конечно, такая организация накладыва­ ет и ограничения на обмен данными. Во-первых, управление обменом дан­ ными должно производиться только одним устройством, иначе могут воз­ никнуть конфликты между управляющими устройствами, приводящие к некорректной работе шины. Во-вторых, обязательно требуется адресация устройств, параллельное подключение к шине требует выполнения проце­ дур выбора только одного из нескольких устройств для обмена данными. В-третьих, одновременный обмен данными с несколькими устройствами невозможен, если шины в текущий интервал времени уже заняты, передача каких-либо других данных невозможна. В микропроцессорной системе эти ограничения не создают особых проблем. Управляющим устройством сис­ темы, в том числе и для шины, обычно является микропроцессор, при нор­ мальной работе он обменивается данными с другими устройствами систе­ мы поочередно, адресация используется не только для устройств, но и для данных. Типичная структура микропроцессорной системы, построенной в соот­ ветствии с указанными принципами, приведена на рис. 2. В этой структуре, отражающей особенности построения типовой микропроцессорной систе Микропроцессор Шина данных ж Устройство управления Шина адреса Шина управления ж VVV > S> :> \С у о <> Запоминающие устройства ж Регистр команд Устройства ввода-вывода Программный счетчик Указательстека Рис. 2. Структурная схема микропроцессорной системы мы, рассматривается работа микропроцессора Intel 8080 (отечественный аналог - К580ВМ80). Так как детальное описание этого микропроцессора можно найти в многочисленной литературе, изданной ранее (например, [1]), будем рассматривать только наиболее общие вопросы организации работы микропроцессорной системы (логическое взаимодействие), но с учетом особенностей реализации Intel 8080. В микропроцессорной системе (рис. 2) запоминающие устройства (па­ мять) и устройства ввода-вывода (периферийные устройства) представлены в обобщенном виде, хотя в действительности они могут состоять из разно­ родных устройств с различными свойствами и реализуемыми функциями. Данные в параллельном формате в виде отдельных байт (8 бит) могут пере­ даваться из микропроцессора или в микропроцессор по ШД. Сигналы ША практически всегда формируются микропроцессором и являются адресом (16 бит) байта данных, который микропроцессором передается или прини­ мается. Сигналы ШУ в основном формируются устройством управления микропроцессора, хотя отдельные сигналы этой шины могут поступать и от других устройств, выполняя, например, функции запросов или подтвер­ ждений. Структура микропроцессора (рис. 2) представлена в форме, отображаю­ щей только логическую организацию работы, ряд элементов, без которых невозможно корректное физическое взаимодействие, в этой структуре не показан. Микропроцессор содержит элементы, необходимые для выполне­ ния требуемого набора команд (операций), и представляет собой средство выполнения этих команд, без программы - последовательности команд, реализующих заданный алгоритм работы микропроцессорной системы, ни­ какие операции невозможны. Любые действия в микропроцессоре начина­ ются с чтения из запоминающего устройства (памяти) кода очередной ко­ манды и его ввода в регистр команд. Поэтому любую микропроцессорную систему необходимо рассматривать как программно-аппаратный комплекс. Аппаратные (hardware) и программные (software) средства тесно связаны и могут работать только в едином комплексе. Код команды, поступивший в регистр команд микропроцессора, сигна­ лами устройства управления определяет необходимые функции, как внут­ ренних элементов микропроцессора, так и других устройств микропроцес­ сорной системы через ШУ. Операции преобразования данных выполняют­ ся арифметико-логическим устройством - АЛУ (рис. 2). Набор этих опера­ ций обычно стандартный и включает сложение, вычитание, инкремент (увеличение переменной на единицу), декремент (уменьшение переменной на единицу), логические операции И, ИЛИ, исключающее ИЛИ, инверсия и т.п. В рассматриваемой системе основной формат данных АЛУ - байт (8 бит), АЛУ предназначено только для преобразования и не содержит эле­ ментов для хранения данных. Входными данными для операций преобразования обычно служат две переменных, а результат преобразования - одна переменная. Например, для операции сложения в АЛУ входными переменными будут 2 слагаемых по одному байту, а результат-сумма - один байт и признак переноса, если сумма выходит за пределы однобайтового формата. Для хранения и вход­ ных переменных, и результатов преобразования микропроцессор содержит регистры: регистр-аккумулятор и 6 регистров блока регистров общего на­ значения (РОН). Одна из входных переменных (операндов) всегда разме­ щается в аккумуляторе, а полученный результат преобразования также все­ гда направляется в аккумулятор. Второй операнд может храниться в одном из регистров РОН. В коде команды преобразования обычно указывается ре­ гистр, из которого поступает второй операнд, если аккумулятор единствен­ ный (рис. 2), его не указывают в коде команды. Количество регистров данных микропроцессора невелико, в данном примере - 7 регистров (аккумулятор и 6 регистров блока РОН), эти регист­ ры содержат данные, которые постоянно доступны для преобразования. Основной объем данных хранится в памяти микропроцессорной системы, однако для выполнения операций их необходимо переместить в регистры данных микропроцессора, используя процедуры адресации и управления обменом данных. Разрядность регистров блока РОН соответствует формату данных АЛУ - один байт. Эти 6 однобайтовых регистров (регистры В, С, D, E, H, L, рис. 2) могут использоваться независимо или объединяться в ре­ гистровые пары ВС, DE, HL для выполнения определенных операций с двухбайтовыми данными. В первую очередь двухбайтовый формат необхо­ дим для операций с адресами, так как адресация данных в микропроцес­ сорной системе производится двухбайтовым адресом ША. Такой формат адреса обеспечивает размер адресного пространства микропроцессорной системы 2 16 = 64 кбайт. Организация микропроцессорной системы, кроме операций преобразо­ вания данных, требует выполнения операций пересылки данных, с помо­ щью которых обеспечивается доступ к преобразуемым данным. Операции пересылки должны производить обмен данных между регистрами микро­ процессора, между регистрами микропроцессора и памятью или устройст­ вами ввода-вывода. Эти операции так же, как и операции преобразования, задаются командами программы с указанием кода операции и адресов при­ емника и источника для пересылаемых данных. В рассматриваемой микропроцессорной системе используется память с единым адресным пространством объема 64 кбайта и для данных, и для ко­ дов программы. Адреса данных содержатся в кодах программы, а адреса кодов программы определяются специальным регистром - программным счетчиком. Разрядность программного счетчика соответствует формату ад­ реса (2 байта), его содержимое определяет адрес ячейки памяти, в которой хранится код очередной команды. Последовательность выполняемых ко манд обычно формируется в виде линейной последовательности кодов про­ граммы и размещается в ячейках памяти с последовательно нарастающими адресами. Стандартный цикл работы микропроцессорной системы для очередной команды выполняется следующим образом: 1. По сигналам устройства управления микропроцессора производится считывание и ввод в регистр команд кода очередной команды по адре­ су, указанному в программном счетчике. 2. Содержимое программного счетчика автоматически инкрементируется (увеличивается на единицу) для определения следующего адреса хранения кодов программы. 3. Если код команды поступил в микропроцессор полностью, команда выполняется;

если требуется чтение недостающих элементов кода, по­ вторяется считывание с автоматическим инкрементом адреса в про­ граммном счетчике (повторение п.п. 1 и 2 ). 4. Когда очередная команда программы микропроцессорной системы выполнена, в программном счетчике уже содержится адрес следующей команды и начинается следующий рабочий цикл (см. п. 1). В качестве примера программной реализации рассмотрим процедуру сложения двух переменных. Полагаем, что однобайтовые слагаемые D1 и D2 хранятся в ячейках памяти по двухбайтовым адресам А1 и А2, полу­ ченный однобайтовый результат необходимо сохранить по адресу A3, а последовательность кодов программы сложения также хранится в ячей­ ках памяти с начальным адресом А4. С учетом особенностей работы микропроцессорной системы алгоритм должен предусматривать ввод из памяти в регистры микропроцессора обоих слагаемых, сложение содер­ жимого двух регистров данных и пересылку в память полученного резуль­ тата. Эта последовательность команд при использовании мнемонических обо­ значений операций для микропроцессора Intel 8080 будет следующая: ml: Ida Al ;

чтение байта данных D1 из ячейки памяти по адресу А1 и ;

пересылка в аккумулятор микропроцессора т2: mov В, А ;

пересылка данных из аккумулятора в регистр В 13 Ida А2 ;

чтение байта данных D2 из ячейки памяти по адресу А2 и ;

пересылка в аккумулятор микропроцессора. т4: add В ;

сложение содержимого аккумулятора и регистра В ;

(D1+D2), результат сложения помещается в ;

аккумулятор (А-А+В) т5: sta A3 ;

пересылка байта данных из аккумулятора в память и ;

запись в ячейку памяти по адресу A Для выполнения программы сложения начальный адрес программы А4 должен выть указан в программном счетчике. После завершения предыдушей команды устройство управления производит чтение кода из памя­ ти по адресу А4 и его запись в регистр команд микропроцессора. Так как код этой команды содержит двухбайтовый адрес (А1), устройство управ­ ления дополнительно производит чтение остальных двух байт с автоин­ крементом адреса в программном счетчике. Только после чтения всех трех байт кода команды операция может быть выполнена, т.е. адрес А1 поступит в шину адреса, байт данных D1 будет помещен в аккумулятор, а в программном счетчике - адрес следующей команды (А4+3). Далее микро­ процессор производит чтение и выполнение следующей команды, автома­ тически формируя адреса последующих команд в программном счетчике, и т.д. Необходимо обратить внимание на две важные особенности програм­ мной реализации. Во-первых, выполнение любой операции состоит из двух этапов: чтение и ввод кода выполняемой команды, и непосредственное вы­ полнение команды. Для ускорения работы в современных микропроцессо­ рах эти этапы обычно выполняют параллельно, выполнение текущей ко­ манды совмещают с вводом кода следующей команды. Во-вторых, порядок выполнения операций определяется программным счетчиком. При работе микропроцессора адрес в программном счетчике автоматически инкрементируется, что и определяет линейную очередность выполнения команд с нарастающими адресами в памяти. Если в программе требуется изменить порядок выполнения команд, необходимо изменить содержимое программ­ ного счетчика. Замена адреса в программном счетчике позволяет вызвать для выполнения другие фрагменты программы, изменяя линейную очеред­ ность выполнения команд. Линейные алгоритмы с последовательным выполнением программы не­ достаточно функциональны, поэтому в реализуемых алгоритмах практиче­ ски всегда требуется управление выполнением программы. Для решения этой задачи набор команд любого микропроцессора содержит специальную группу команд управления. Назначение команд управления - изменение в программном счетчике адресов выполняемого в данный момент фрагмента программы. Такое управление программным счетчиком и позволяет вы­ полнять все необходимые функции управления работой программы. Рассмотрим алгоритм, требующий управления работой программы, на­ пример, для задачи поддержания микроклимата в помещении. Типичная постановка задачи может быть следующая: нормальное состояние помеще­ ния при температуре в диапазоне tmin - tmax;

если температура превышает W, должна включаться система охлаждения;

если температура ниже t ^, должна включаться система подогрева. Очевидно, что средства охлаждения и подогрева не должны работать одновременно, компенсируя работу друг друга. Возможный вариант алгоритма представлен на рис. 3. OS • Ввод кода температуры t Рис. 3. Блок-схема алгоритма управления температурой По-видимому, сам алгоритм работы в комментариях не нуждается. Од­ нако, с точки зрения программной реализации, имеются определенные осо­ бенности. По результатам операций контроля (блоки 2 - 5 алгоритма на рис. 3) работа программы должна продолжаться по одной из двух возмож­ ных ветвей алгоритма. Операции программы, представленные в блоках 4, 5 алгоритма, повторяются в разных ветвях. Количество точек для завершения цикла контроля температуры и возврата к началу повторного цикла (точки 1 в алгоритме) равно 6. Очевидно, что такой алгоритм можно реализовать только с помощью команд управления, выполняя в каждой точке разветв­ ления алгоритма операции управления для выбора требуемых функций в программе. Возврат к началу цикла (блок 1 алгоритма) из точек завершения рабоче­ го цикла (точки 1) можно выполнить командами безусловной передачи управления, которые загружают в программный счетчик микропроцессора начальный адрес кодов блока 1. В точках ветвления алгоритма (блоки 2-5 алгоритма) продолжение работы зависит от результатов контроля (ветви "да" - "нет"). Управление работой программы в этих случаях необходимо производить командами передачи управления по выполнению определен­ ного условия (условная передача управления). Признаки этих условий формируются в АЛУ микропроцессора автома­ тически при выполнении операций и содержатся в регистре флагов (рис. 2). Каждый используемый бит регистра флагов является признаком (флагом), который отображает особенности результата операции, выполненной АЛУ. Флаги этого регистра поступают в устройство управления микропроцессо­ ра и влияют на выполнение команд условной передачи управления. В Intel 8080 используется 5 флагов: • Z - флаг нулевого результата, флаг Z = 1, если результат операции (байт аккумулятора) равен нулю;

• S - флаг знака результата, флаг S равен старшему биту результата, ко­ торый при кодировании чисел со знаком используется как знако­ вый бит;

• С - флаг переноса, флаг С = 1, когда формируется перенос из старшего разряда результата операции;

• АС - флаг вспомогательного переноса, флаг АС = 1, когда происходит перенос из младшей тетрады результата в старшую тетраду;

• Р - флаг паритета, флаг Р = I, когда количество единиц в байте резуль­ тата четно. Любой бит регистра флагов может быть использован в качестве условия для команд условной передачи управления. Если условие для такой коман­ ды управления выполняется, то производится загрузка в программный счетчик микропроцессора адреса, указанного в команде. Если условие не выполняется, адрес в программном счетчике автоинкрементируется и, как обычно, выполняется следующая по порядку команда.

Рассмотрим примеры применения команд управления. Пример 1: ml: add В ;

сложение (аккумуляторааккумулятор+регистрВ) и ;

формирование флагов т2: jmp A1 ;

переход к программе по адресу А1 тЗ:.... ;

продолжение текста программы Команда ml производит сложение двух байтов и формирование всех 5 флагов. Команда т2 запишет в программный счетчик адрес А1, поэтому далее фрагменттЗ выполняться микропроцессором не будет, а выполне­ ние программы всегда продолжится по адресу А1 (безусловная команда управления). Пример 2: add В ;

сложение (аккумулятор-аккумулятор*регистрВ) ;

и формирование флагов т2: }С А2 ;

переход к программе по адресу А2, если флаг ;

переноса С=/ тЗ: jZ A3 ;

переход к программе по адресу A3, если флаг ;

нулевого результата Z= 1 т4:.... ;

продолжение текста программы Команда ml производит сложение двух байт и формирование всех 5 фла­ гов. Команда т2 запишет в программный счетчик адрес А2, если в резуль­ тате сложения флаг переноса C-L Если переноса нет (С-0), команда т2 не выполняется и, следовательно, будет продолжено выполнение про­ граммы по тЗ. Аналогичным образом команда тЗ анализирует флаг Z Ра­ бота программы по т4 будет продолжена, если результат сложения не нулевой и не формируется перенос — в данном случае признак превышения результатом однобайтового формата. Таким образом, в примере 2 рабо­ та программы, в зависимости от результата сложения, может быть продолжена по одному из трех вариантов: по адресу А2, по адресу A3 или пот4. Кроме указанных команд, в группе команд управления используются и другие команды, особенности выполнения которых будут рассмотрены позднее. В целом, система команд микропроцессора, включающая команды преобразования данных, команды пересылки данных и команды управле­ ния, является важнейшей характеристикой микропроцессора и, как было показано, система команд построена для выполнения всех необходимых 18 ml:

функций программной реализации при разнообразных алгоритмах преобра­ зования данных. Компоненты микропроцессора и микропроцессорной сис­ темы фактически являются средствами аппаратной поддержки системы ко­ манд и функций, реализуемых программно. Последний элемент микропроцессора, который не был рассмотрен, - ре­ гистр указатель стека (рис. 2). Указатель стека - специальный адресный ре­ гистр с форматом, соответствующим формату ША (16 бит), он использует­ ся для специального способа адресации памяти микропроцессорной систе­ мы. При стековой организации хранения данных всегда используется ад­ рес, содержащийся в указателе стека. Поэтому в явном виде в операциях со стеком адрес не указывается. Более подробно использование стека будет рассмотрено позднее. 1.2. Форматы данных микропроцессорной системы В микропроцессорной системе (рис. 2) разрядность ШД и регистров данных - 8, поэтому способы кодирования данных будем рассматривать применительно к однобайтовому формату. Этот формат данных является достаточно типичным для микропроцессорных средств. Байт данных D обозначим, начиная со старших разрядов, следующим образом: D=D7D6D5D4D3D2D,Do. Байт D при выполнении команд преобразования данных в микропроцес­ соре можно интерпретировать как целое число без знака, целое число со знаком, логическую переменную или символьную переменную. Операции в других форматах данных, например, для дробных чисел, чисел с плаваю­ щей точкой и т.п., требуют применения специальных алгоритмов преобра­ зования и способов кодирования. Рассмотрим выполнение операций преоб­ разования данных для разных способов кодирования. Для целых чисел без знака каждый бит D, имеет вес 2х в соответствии со стандартным двоичным кодированием, диапазон изменения чисел 0 - 255 (28-1). В текстах программ числа без знака можно указывать в десятичном формате (0 - 255), в двоичном формате (ОЬОООООООО - 0Ы1111111, Ob стандартный признак двоичного формата) и шестнадцатеричном (hex) фор­ мате (0x00 - Oxff, Ox - стандартный признак hex-формата). В hex-формате для основания системы счисления 16 в дополнение к десятичным символам используют первые 6 букв латинского алфавита а, Ь, с, d, e, f. Наиболее функционален hex-формат, так как он лучше соответствует исходному дво­ ичному кодированию байта данных. Для hex-формата байт условно разби­ вается на две тетрады, а каждая тетрада записывается как отдельный hexсимвол. Иногда применяют двоично-десятичное кодирование (упакованный bedформат) с кодированием двух десятичных символов в каждой тетраде. Для выполнения арифметических операций bed-формат неудобен, так как ре зультат формируется в двоичном формате и требуется его коррекция для восстановления исходного bed-формата. Диапазон чисел для однобайтово­ го bed-формата О - 99. Для кодирования чисел со знаком применяются стандартные арифмети­ ческие коды. Старший разряд байта D 7 становится битом знака числа, а ве­ личина числа определяется оставшимися 7 битами D0-D6.B дополнитель­ ном коде знак "+" соответствует нулевому знаковому биту, а знак "-" соот­ ветствует единичному знаковому биту. Величина числа в дополнительном коде для положительного и отрицательного числа формируется различны­ ми способами. Для положительных чисел применяют обычное двоичное кодирование величины. Для отрицательных чисел формируют дополнение, т.е. инвер­ сию двоичного кода величины с прибавлением 1 младшего разряда (//VF(D6D5D4D3D2D1Do)+l). Восстановление двоичного кода величины от­ рицательного числа также требует инверсии с прибавлением 1 младшего разряда. Диапазон однобайтовых чисел для дополнительного кода (-128) (+127). Применение дополнительного кода позволяет использовать одни и те же арифметические операции для чисел без знака и чисел со знаком, так как знаковый бит преобразуется в этих операциях вместе с другими битами чисел. Примеры однобайтового кодирования чисел приведены в табл. 1. Таблица 1 bcd-формат hexдвоичный код десятичный десятичный формат (число без зна­ формат (чис­ байта дан­ формат (число без зна­ (число без ка) ных ло со знаком) ка) знака) ObOlOllOQl ОЫ1011001 89 217 0x59 0xd9 59 недопустимый символ в стар­ шей тетраде недопустимый символ в млад­ шей тетраде 83 + 89 - ОЬО 0x4b + ОЫ 00000 И 0x - В первом столбце примеров приведен двоичный код байта данных, в ос­ тальных столбцах - интерпретация этого байта для разных способов ко­ дирования. При выполнении в микропроцессоре операции сложения байтов 1 и 2 получим: 01011001+11011001=00110010 с флагами Z=0, S=0, C=l, АС=1, Р=0. • Для чисел без знака (89+217 или 0x59+0xd9) байт результата: 50 (0x32), а флаг переноса С=1 означает, что результат суммирования вышел за пределы однобайтового формата и этот флаг должен ин­ терпретироваться, как бит 9 (2s=256) суммы. • Для чисел со знаком ((+89)+(-39)) байт результата положительный: +50, флаг переноса должен игнорироваться, как не имеющий значения в этом случае. При выполнении в микропроцессоре операции сложения байтов 3 и 4 по­ лучим 01001011 + 10000011=11001 ПО с флагами Z=0, S=l, С=0, АС=0, Р=0. • Для чисел без знака (75+131 или 0х4Ь+0х83) байт результата: 206 (Охсе), флаг переноса С=0 означает, что результат суммирования не вышел за пределы однобайтового формата, а флаг знака 5=/ просто повторяет значение старшего бита результата D7. • Для чисел со знаком ((+75)+(-125)) байт результата отрицательный:

- 50, флаг знака 5=7, повторяя значение D7, также является призна­ ком отрицательной суммы. Конечно, однобайтовый формат дает весьма ограниченный диапазон из­ менения чисел. Если требуется расширить этот диапазон, необходимо пе­ реходить к двухбайтовому (многобайтовому) формату. Для преобразования многобайтовых чисел в системе команд микропроцессора существуют ко­ манды операций, которые учитывают при выполнении значение флага пе­ реноса С. Например, команда сложения add В производит суммирование байта аккумулятора (А8) и байта регистра В (А8=А8+В8) с формированием всех флагов. Модификация команды сложения adc В при суммировании добавляет сформированное ранее значение флага переноса С (А8=А8+В8+С) и формирует новые значения флагов. В операциях над многобайтовыми числами преобразование всех млад­ ших байтов должно интерпретироваться, как операция над числами без знака, но с учетом значения флага переноса. Знак числа может присутство­ вать только в старшем бите самого старшего байта. Рассмотрим програм­ мную реализацию суммирования двухбайтовых чисел, интерпретация ре­ зультата, как было показано для однобайтового формата, зависит только от кодирования исходных данных.

Пусть двухбайтовые слагаемые находятся в регистровых парах ВС, DE (первый регистр каждой пары содержит старший байт);

результат суммирования должен быть помещен в регистровую пару HL. ml: mov А, С ;

пересылка младшего байта слагаемого 1 ;

в аккумулятор (А8-=С8), т2: add E ;

суммирование младших байтов (А8=А8+Е8) ;

и формирование флагов, тЗ: mov L, А ;

пересылка младшего байта суммы ;

в регистр L (L8-A8), т4: mov А, В ;

пересылка старшего байта слагаемого 1 ;

в аккумулятор (А8~В8), {примечание: команды пересылки значения сформированных ранее ;

флагов не изменяют, т5: adc D ;

суммирование старших байтов и флага переноса, ;

сформированного при суммировании младших ;

байтов, (A8^A8+D8+C), тб: mov H, А ;

пересылка старшего байта суммы ;

в регистр Н (В8=А8). Как видно из примера, переход к двухбайтовому формату увеличивает объем программы, как минимум в два раза. Для логических операций байт данных D должен интерпретироваться как однобайтовая логическая переменная, в которой каждый бит D, являет­ ся независимым элементом. Как правило, логические операции выполня­ ются побитно и также побитно формируют байт результата. Например, операция "логическое И" ana В выполняет побитную конъюнкцию содер­ жимого аккумулятора А и регистра В (А7=А7&В7, А6=А6&В6,... А0=А0&В0), флаги S, Z, Р соответствуют байту результата в аккумуляторе, а флаги переноса - нулевые (С=АС==0), так как перенос не производится. Операции логического сдвига могут выполнять побитовое смещение байта данных аккумулятора и в направлении старших разрядов (сдвиг вле­ во), и в направлении младших разрядов (сдвиг вправо). Значение флага пе­ реноса в операциях сдвига зависит от направления: при сдвиге влево С=А7, при сдвиге вправо - О А 0. Использование флага переноса позволяет выполнять сдвиг многобайтовых переменных по алгоритмам, аналогичным алгоритмам арифметических операций над многобайтовыми числами. Если байт данных при сдвиге интерпретировать как число без знака, сдвиг вправо эквивалентен делению числа на 2, а сдвиг влево - умножению на 2. Для чисел со знаком, так называемый арифметический сдвиг, при сдвиге необходимо обеспечить сохранение знака, т.е. старший (знаковый) бит числа при сдвиге должен быть неизменным. Символьный формат данных в основном предназначен для текстовых сообщений. Специальных команд обработки символьных данных нет, они могут преобразоваться как числовые или логические переменные. Так как для ввода текстов или их отображения используются компьютерные сред­ ства, кодирование в символьном формате обычно производят стандартны­ ми компьютерными кодами. Таким стандартным символьным кодом одно­ байтового формата является, например, код ASCII. ASCII предназначен для кодирования всех символов, используемых на клавиатуре персонального компьютера. Например, символьной переменной 'А1 соответствует одно­ байтовый ASCII-код 0x41, символьной переменной 'к' - ASCII-код 0x6b, символьной переменной '2* - ASCII-код 0x32 и т.п. Полную таблицу кода ASCII можно найти в любой литературе, описывающей форматы компью­ терного кодирования данных. Данные других форматов, кроме рассмотренных в данном разделе, также можно обрабатывать в микропроцессорной системе. При выборе алгорит­ мов преобразования необходимо учитывать, что система команд микро­ процессора содержит операции над числовыми и логическими переменны­ ми. Следовательно, операции преобразования данных других форматов не­ обходимо приводить к эквивалентным операциям, реализуемым в системе команд. В целом, система команд и форматы данных микропроцессора являются универсальными средствами преобразования. Очевидно, что эффектив­ ность работы микропроцессорной системы в силу ограниченного набора команд различна для различных форматов данных. Поэтому применяемые форматы данных - весьма важный компонент реализуемых алгоритмов преобразования. Следующий важный элемент в организации работы мик­ ропроцессорной системы - процедуры адресации данных, именно адреса­ ция обеспечивает доступ к данным для алгоритмов преобразования. 1.3. Организация памяти и адресация данных Запоминающие устройства (память) микропроцессорной системы по вы­ полняемым функциям и свойствам можно разделить на две области: опера­ тивное запоминающее устройство (RAM) и постоянное запоминающее уст­ ройство (ROM). В рассматриваемой структуре (рис. 2) эти области образу­ ют единое адресное пространство, и для них используется общая система адресации с 16 битами ША. В других вариантах микропроцессорных сис­ тем разные области памяти могут иметь самостоятельные системы адреса­ ции. Для единого адресного пространства нет какого-либо начального разде­ ления функционального назначения областей памяти. Так называемая клас­ сическая архитектура компьютера предполагает возможность хранения и кодов программ, и данных для преобразования по любым адресам запоми­ нающих устройств. Запоминающие устройства в этом случае могут рас сматриваться как набор типовых ячеек памяти, каждая из которых позволя­ ет хранить один байт данных и имеет уникальный 16-битовый адрес, пере­ даваемый в микропроцессорной системе по ША. Уникальный адрес позво­ ляет выбрать для обмена данными одну ячейку памяти из всего множества ячеек запоминающих устройств и обеспечить доступ только к выбранному байту данных. Максимальный объем адресного пространства 2 16 ячеек па­ мяти (64 кбайт). Оперативное запоминающее устройство (RAM) позволяет записывать однобайтовые данные для хранения и считывать записанные ранее данные. Направление передачи данных (микропроцессор — RAM или RAM — * > микропроцессор) определяется микропроцессором с помощью сигналов ШУ. Вместе с сигналами управления микропроцессор должен передать ад­ рес выбранной ячейки памяти по ША. Ячейки RAM должны обеспечивать запись данных, хранение данных и считывание хранящихся данных. При работе микропроцессорной системы RAM позволяет выполнять все необходимые функции по хранению информации и, следовательно, являет­ ся обязательным элементом. Однако RAM производит хранение данных только при включенном питающем напряжении. При выключении питания все записанные данные будут потеряны и не могут быть восстановлены по­ вторным включением питания, т.е. RAM - память энергозависимая. Как было показано ранее, в микропроцессорной системе все операции, в том числе и загрузка данных в память, выполняются программно. При от­ сутствии программы в памяти реализация каких-либо функций невозмож­ на. Эта особенность работы микропроцессорной системы требует постоян­ ного наличия программы в памяти, даже при отключении питания. RAM, как известно, такую возможность не обеспечивает, поэтому микропроцес­ сорная система обязательно содержит и постоянное запоминающее устрой­ ство - ROM. ROM - память энергонезависимая, т.е. сохраняет записанные данные и при отключении питания. Другой ее особенностью является возможность только считывать данные при работе микропроцессорной системы. Стан­ дартные процедуры и сигналы управления не позволяют выполнять запись новых данных в ROM. Запись данных ROM выполняется специальными средствами и обычно называется программированием. Существуют ROM с однократным программированием данных, позволяющие выполнять запись только один раз, и репрограммируемые ROM, с возможностью многократ­ ной перезаписи данных (обычно с ограниченным количеством циклов пе­ резаписи). Таким образом, данные в ROM должны быть записаны до начала работы микропроцессорной системы, а при включении - обеспечивать выполнение необходимых алгоритмов работы в соответствии с записанными кодами программы. ROM называют также памятью программ и констант, так как и коды программы, и константы - данные, которые не изменяются в процессе выполнения программы микропроцессорной системы. Соотношение между объемами RAM и ROM в адресном пространстве памяти зависит от назначения микропроцессорной системы. В универсаль­ ных средствах таких, как персональный компьютер, объем ROM относи­ тельно небольшой. Из программ, необходимых для работы, в ROM персо­ нального компьютера постоянно хранится только BIOS - комплекс про­ грамм, обеспечивающих загрузку в RAM других программ с внешних но­ сителей информации (например, с hard-диска). Набор задач жестко не огра­ ничен и для решаемых задач выбираются и загружаются в RAM с помощью BIOS требуемые компоненты программного обеспечения. Для специализированных микропроцессорных систем, к которым отно­ сятся и средства автоматизации, обычно и круг задач, и программы, тре­ буемые для их решения, неизменны и могут постоянно храниться в памяти. Поэтому в таких средствах удельный вес ROM в адресном пространстве практически всегда существенно превышает удельный вес RAM. В даль­ нейшем будем рассматривать вопросы организации работы микропроцес­ сорной системы, полагая, что все программы хранятся в ROM и имеется RAM относительно небольшого объема только для хранения данных. Задание определенных физических адресов для областей RAM и ROM в общем случае может быть произвольным. Однако необходимо учитывать следующую особенность работы микропроцессора: процедура начального сброса (reset), с которой обязательно должна начинаться работа, как прави­ ло, задает в программном счетчике нулевой начальный адрес программы. По начальному адресу памяти должно размещаться начало рабочей про­ граммы микропроцессора, которая обеспечивает корректный старт работы микропроцессорной системы. Область памяти с этими начальными адреса­ ми, следовательно, должна принадлежать области ROM. Чтобы адресные пространства сделать непрерывными, обычно адреса ROM задают, начиная с наименьших адресов, а адреса RAM - в оставшемся диапазоне наиболь­ ших физических адресов. Ранее было показано, что адресация кодов программы производится программным счетчиком микропроцессора. Адресация всех остальных данных должна производиться командами программы. Организация работы микропроцессорной системы предполагает использование нескольких спо­ собов адресации данных. Если память микропроцессорной системы образу­ ет единое адресное пространство, способы адресации не зависят от того, с какой областью памяти мы работаем. Применяемые в микропроцессорной системе алгоритмы адресации дан­ ных можно привести к одному из четырех видов: непосредственная адреса­ ция, прямая адресация, регистровая адресация, стековая адресация. Осо­ бенности адресации связаны с разным форматом данных и адресов: данные - один байт, адреса - два байта. Самый простой вид - непосредственная адресация. В этом случае байт данных помещается непосредственно в коде команды. Примеры: команда mvi By D8 производит загрузку в регистр В байта данных D8 (38=08), со­ держащегося в коде команды;

команда sui D8 производит вычитание из байта аккумулятора байта данных D8 (A8=A8-D8). Команды с непосред­ ственной адресацией часто называют операциями с константами. Так как данные при непосредственной адресации являются элементами кодов про­ граммы, эти данные не могут быть изменены. Неизменность данных явля­ ется свойством и основным ограничением этого вида адресации, который в действительности применяется только для операций с константами. Для прямой адресации физический адрес ячейки памяти (ША) указыва­ ется в коде команды: например, команда sta A16 производит запись байта данных из аккумулятора в ячейку памяти с двухбайтовым адресом А16 (А8-М(А16)). При такой адресации передаваемые байты данных являются обычными переменными и могут принимать любые допустимые значения. Существенное ограничение - обмен данными по командам с прямой адре­ сации всегда происходит с одной и той же ячейкой памяти, адрес которой указан в команде. Из-за этого ограничения и громоздкого формата команд, содержащих в своем коде двухбайтовый адрес, прямая адресация также имеет ограниченное применение. В алгоритмах обработки данных доста­ точно часто требуется адрес сделать переменным, чтобы можно было им программно управлять. Более универсальна регистровая адресация, называемая также косвенной адресацией. При регистровой адресации в качестве кода адреса использует­ ся содержимое регистровой пары (два байта). Примеры: команда Шах DE производит загрузку в аккумулятор байта данных из ячейки памяти с адресом, указанным в регистровой паре DE (A8=M(DE));

команда ana M вы­ полняет конъюнкцию байтов аккумулятора и ячейки памяти с адресом, указанным в регистровой паре HL (A8=(A8)&M(HL)). В большинстве ко­ манд с регистровой адресацией микропроцессора Intel 8080 код адреса хра­ нится в регистровой паре HL (H - старший байт адреса, L - младший байт адреса). Регистровая адресация, во-первых, упрощает формат команд - в явном виде код команды не содержит двухбайтового адреса;

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

Например, команда Ixi HL, DLDH производит загрузку двух байт (DJ3 и DH8) в регистры L и Н (L8 = DL8, H8 = Он8), используя непосредственную адресацию, а команда inx HL выполняет инкремент содержимого реги­ стровой пары HL, как двухбайтовой переменной (HL=HL+1). Четвертый вид - стековая адресация, в первую очередь, предназначена для работы с подпрограммами. Более подробно процедуры с подпрограм­ мами будут рассмотрены в следующем разделе. Следует помнить, что стек в микропроцессорной системе - не отдельное запоминающее устройство, а способ адресации RAM с особым алгоритмом формирования адреса. Адрес RAM для операций со стеком всегда определяется специальным адресным регистром - указателем стека (SP) микропроцессора (рис. 2). В командах, использующих стековую адресацию, адрес в явном виде ни­ когда не указывается и определяется следующим алгоритмом доступа к данным: "последний вошел - первый вышел". Обычно этот алгоритм реа­ лизуется преобразованием содержимого указателя стека: при записи дан­ ных указатель стека (SP) автоматически декрементируется, а при чтении данных указатель стека (SP) автоматически инкрементируется. Такое пре­ образование адреса в указателе стека обеспечивает в командах чтения сле­ дующий порядок доступа: первым считывается байт данных, записанный последним, вторым - записанный предпоследним, и т.д. Следовательно, порядок записи данных в стек однозначно определяет порядок поступления данных при чтении, а стековая адресация не позволяет производить незави­ симый доступ к любым данным, как другие виды адресации. Стековая адресация применяется из-за упрощенного формата команд и процедур обмена данными в алгоритмах, требующих однократной записи в память и затем однократного считывания данных из памяти в строго задан­ ной последовательности. Команды со стековой адресацией микропроцессо­ ра Intel 8080 производят обмен двухбайтовыми данными. Рассмотрим пример применения стека для хранения данных: ml: push ВС ;

B8-+RAM(SP-1), C8-+RAM(SP~2), SP=SP-2 m2: push DE ;

D8-*RAM(SP~3), E8-+RAM(SP-4), SP^SP-4 ;

команды программы, изменяющие данные в ;

регистрах В, С, D, Е ;

однако данные в этих регистрах должны быть восста;

новлены для дальнейшего использования в программе. тЗ: pop DE ;

RAM(SP-4)-+E8, RAM(SP-3)->D8, SP=SP-2 m4: pop ВС ;

RAM(SP-2)-+C8, RAM(SP-1)-+B8, SP^SP Комментарии в каждой строке примера поясняют характер выполняемых операций.

Стековая адресация требует обязательной инициализации указателя сте­ ка (SP) в начале работы микропроцессорной системы. В качестве начально­ го адреса в SP обычно загружается наибольший физический адрес RAM, запись данных в стек автоматически производится от больших адресов к меньшим адресам. Корректное выполнение рабочей программы микропро­ цессорной системы требует, чтобы количество команд записи данных в стек было строго равно количеству команд чтения из стека. Кроме того, ад­ ресное пространство RAM, выделенное для стека, не должно использовать­ ся остальными компонентами программы. Другие особенности организа­ ции обработки данных в микропроцессорной системе рассматриваются в следующем разделе. 1.4. Организация обработки данных В разделе 1.1 показано, что в микропроцессорной системе естественный порядок выполнения команд рабочей программы, определяющийся автома­ тическим инкрементированием программного счетчика, - последователь­ ный, выполняемые команды размещены в ячейках ROM с последовательно нарастающими адресами. При необходимости этот порядок может быть изменен командами управления, основные функции которых и заключают­ ся в изменении адресов выполняемых команд в программном счетчике, С помощью команд управления можно производить обработку данных с раз­ личной организацией алгоритмов выполнения. Один из стандартных алгоритмов организации обработки данных - за­ мена линейной последовательности однотипных операций циклическим повторением одного и того же фрагмента программы, так называемая орга­ низация циклов. Циклы в программах могут быть с заданным числом по­ вторений или с завершением цикла по заданному условию. Рассмотрим ор­ ганизацию циклов на примерах. Пример 1 (цикл с фиксированным числом повторений): Вычислить сумму массива из 16 чисел (целые числа без знака), которые хранятся в последовательных ячейках памяти, начиная с адреса А1, и за­ писать в память по адресу А2. Примечание 1. Задачу можно решить линейным алгоритмом, выполнив 16 команд с прямой адресацией для чтения из памяти каждого байта данных и соответствующее число команд суммиро­ вания, получив простую, но громоздкую программу. Примечание 2. При суммировании 16 байтов довольно высока вероятность того, что сумма выйдет за однобайтовый формат. Про­ грамма должна предусматривать формирование двухбай­ товой суммы. Для решения задачи определим функции регистров микропроцессора: ре­ гистр В - второй байт суммы, регистр С — счетчик числа циклов сумми рования, регистровую пару HL используем для адресации, так как в каж­ дом следующем цикле суммирования байт данных должен поступать из следующей ячейки памяти. Ixi HL, Al;

начальный адрес массива чисел в HL, mvi С, 0x10 ;

количество чисел массива (количество циклов), xra A ;

очистка аккумулятора (А8=0), mov В, А ;

очистка регистра В (В8-А8=0), addM ;

сложение (A8=A8+M(HL)), jnC т8 ;

перейти к т8, если флаг переноса О, inr В ;

увеличить старший байт на 1 (если флаг переноса 1), inx HL ;

инкрементировать адрес в HL для следующего ;

цикла суммирования, т9: dcr С ;

декрементировать количество оставшихся циклов ;

суммирования, mlO.jnZmS ;

вернуться к т5, если цикл суммирования не последний, mil: sta A2 ;

сохранить в памяти младший байт суммы, ml2: mov А, В ;

переслать в аккумулятор старший байт суммы, т!3: sta (A2+1) ;

сохранить в памяти старший байт суммы, ml4:.... Команды ml-m4 выполняют инициализацию (подготовку параметров) цик­ ла;

команды т5-т10 составляют тело цикла с формированием двух байтов суммы, повторяющееся 16 раз;

команды mll-ml3 производят сохра­ нение полученной суммы в памяти по завершению цикла. Пример 2 (цикл с завершением по условию): Дополним задачу примера 1 следующим условием: суммирование чисел должно производиться только до появления переноса в старший байт. Следовательно, суммирование может быть выполнено и для всех чисел массива, если нет переноса, и может быть прервано раньше при ненуле­ вом переносе. Сумма в любом случае имеет однобайтовый формат. Назначение регистров С, HL микропроцессора аналогично примеру 1, ре­ гистр В будем использовать для сохранения промежуточного значения суммы. ml: т2: тЗ: т4: т5: тб: т7: Ixi HL, Al ;

начальный адрес массива чисел в HL, mvi С, 0x10 ;

количество чисел массива (количество циклов), хга А ;

очистка аккумулятора (А8-0), mov В, А ;

сохранение предыдущей суммы в регистре В (В8=А8), addM ;

сложение (A8=A8+M(HL)), JC mil ;

перейти к завершению по mil, если флаг переноса 1, inx HL ;

инкрементировать адрес в HL для следующего ;

цикла суммирования, 29 ml: т2: тЗ: т4: т5: тб: ml: т8:

;

декрементироватъ количество оставшихся циклов ;

суммирования, т9: jnZ m4 ;

вернуться к т4, если цикл суммирования не последний, mlO: jmp ml2 ;

перейти к завершению по ml2 для последнего цикла ;

суммирования, ml I: movA, В ;

переслать в аккумулятор предыдущее значение ;

суммы при переносе, ml2: sta Л2 ;

сохранить в памяти сумму, т!3:.... В примере 2 цикл может завершиться по тб при появлении переноса, и по ml2, если перенос при суммировании не формируется. Еще одной важной процедурой обработки данных является подпрограм­ ма. Для выполнения этой процедуры в командах управления имеются спе­ циальные команды: "call A16" - вызов подпрограммы и "ret" - возврат из подпрограммы. При вызове подпрограммы работа основной программы временно приостанавливается, выполняются команды подпрограммы, за­ тем работа основной программы продолжается. Подпрограммы обычно применяют для реализации повторяющихся в разных частях основной про­ граммы функций. Корректное продолжение работы приостановленной программы требует восстановления данных в определенных регистрах микропроцессора. Этот набор данных, необходимых для работы программы, принято называть век­ тором состояния программы. В общем случае компонентами вектора со­ стояния являются: • адрес очередной команды в программном счетчике;

• регистр флагов, так как флаги могут измениться при выполнении под­ программы;

• аккумулятор, его содержимое практически всегда изменяется при вы­ полнении подпрограммы;

• регистры блока РОН, содержимое регистров также может измениться при выполнении подпрограммы. Следовательно, любые компоненты вектора состояния, изменяющиеся при выполнении подпрограммы, должны сохраняться в памяти и при заверше­ нии подпрограммы восстанавливаться в регистрах микропроцессора. Как правило, эти операции с вектором состояния производят с помощью стека, поэтому стековая адресация всегда поддерживается в микропроцессорных системах. Очевидно, что вызываемая подпрограмма также требует формирования своего вектора состояния. Вектор состояния вызываемой подпрограммы принято называть вектором прерывания. Так как подпрограмма только на­ чинает работать с момента вызова, в векторе прерывания обычно указыва m8: dcr С ют только начальный адрес вызываемой подпрограммы для программного счетчика. Таким образом, процедура использования подпрограммы включает сле­ дующие операции: остановка выполнения и сохранение вектора состояния программы, загрузка вектора прерывания и выполнение подпрограммы по вектору прерывания, восстановление вектора состояния и продолжение ра­ боты программы. Выполнение всех этих операций поддерживается систе­ мой команд микропроцессора. Команда вызова подпрограммы "call A16" производит автоматическое сохранение в стеке текущего адреса команды из программного счетчика микропроцессора и загрузку адреса А16 вектора прерывания в программ­ ный счетчик, а команда завершения прерывания "ret" - такое же автомати­ ческое восстановление адреса в программном счетчике из стека. Из-за та­ кого алгоритма вызова и завершения прерывания задача сохранения и вос­ становления остальных компонентов вектора состояния программы обычно решается в подпрограмме прерывания. Подпрограмма должна начинаться с сохранения в стеке содержимого тех регистров микропроцессора, которые будут использоваться при ее работе. А перед командой возврата из подпро­ граммы (ret) должно выполняться восстановление содержимого этих же ре­ гистров из стека. Коды подпрограммы могут храниться в любой области адресного пространства памяти микропроцессорной системы. Работу с подпрограммой рассмотрим на следующем примере: ml т2: callAsbl ;

вызов подпрограммы по адресу Asbl с ;

сохранением в стеке адреса тЗ из программного счетчика, тЗ ;

текст подпрограммы с командами сохранения и восстановления ;

вектора состояния, Asbl: push PSW;

сохранение в стеке аккумулятора и регистра флагов, Asb2: push ВС ;

сохранение в стеке регистровой пары ВС, Asb3: push HL ;

сохранение в стеке регистровой пары HL,.... ;

команды преобразования данных в подпрограмме, Asb4: pop HL ;

восстановление из стека регистровой пары HL, Asb5' pop ВС ;

восстановление из стека регистровой пары ВС, Asb6' pop PSW ;

восстановление из стека аккумулятора ;

и регистра флагов, Asbl: ret ;

возврат из подпрограммы с восстановлением ;

из стека адреса тЗ;

в программном счетчике Выполнение команды т2 приостанавливает дальнейшую работу програм­ мы, при изменении содержимого программного счетчика начинает рабо­ тать подпрограмма с команды AsbL Завершение подпрограммы командой ret восстанавливает адрес команды тЗ в программном счетчике и обеспе­ чивает продолэюение работы основной программы. В приведенном примере предполагается использование в подпрограмме текста программы из пре­ дыдущего примера, которая в процессе работы изменяет данные в акку­ муляторе, регистре флагов и регистровых парах ВС, HL. Процедура прерывания с вызовом подпрограммы также имеет большое значение в операциях ввода-вывода данных и организации взаимодействия с периферийными устройствами. Для реализации прерываний по запросам периферийных устройств предусмотрены специальные сигналы ШУ мик­ ропроцессорной системы. Подробнее эти вопросы рассмотрены в следую­ щем разделе. 1.5. Алгоритмы ввода-вывода данных Важным элементом организации эффективной работы микропроцессор­ ной системы являются процедур ы ввода-вывода данных. Выполнение алго­ ритмов преобразования невозможно без ввода исходных данных через входные интерфейсы и бессмысленно без выдачи полученных результатов через выходные интерфейсы. Различные устройства, с разными свойства­ ми, самостоятельной организацией и собственными внутренним алгорит­ мами работы могут быть элементами интерфейсов ввода-вывода (рис. 1). В отличие от памяти микропроцессорной системы, предназначенной только для обеспечения доступа к требуемым данным, интерфейсные сред­ ства должны, с одной стороны, работать по сигналам управления микро­ процессора, и, с другой стороны, учитывать особенности работы внешних (периферийных) устройств. Поэтому для ввода-вывода данных от перифе­ рийных устройств требуются специальные процедуры, обеспечивающие согласование внутренних и внешних алгоритмов работы. Процедуры вводавывода в микропроцессорной системе можно свести к трем типам: про­ граммный ввод-вывод, ввод-вывод по прерываниям, ввод-вывод в режиме прямого доступа к памяти (режим DMA). Эти процедуры выполняются с помощью специальных средств и специальных сигналов ШУ микропроцес­ сорной системы. Первая особенность этих процедур - устройства ввода-вывода образуют самостоятельное адресное пространство с собственными сигналами управ­ ления, независимыми адресами и командами микропроцессора для доступа к данным. В рассматриваемой микропроцессорной системе (рис. 2) адреса­ ция производится только младшим байтом ША, по ШУ предусмотрена пе­ редача независимых от управления доступом к памяти сигналов ввода и вывода данных. Однобайтовый адрес (А8) и сигналы управления вводом выводом передаются микропроцессором при выполнении команд следую­ щего формата: "in А8" - ввода байта данных из устройства с адресом А8 в микропроцессор, "out A8" - вывод байта данных из микропроцессора в устройство с адресом А8. Без применения дополнительных средств этими командами можно реа­ лизовать только программный ввод-вывод данных. Основная рабочая про­ грамма должна предусматривать периодическое выполнение команд вводавывода данных для всех используемых периферийных устройств. Период обмена данными должен соответствовать максимально возможной скоро­ сти работы периферийных устройств. При несвоевременном обмене дан­ ными работа этих устройств может нарушаться с недопустимой потерей данных и некорректным выполнением требуемых функций. Однако скорость работы периферийных устройств не всегда однозначно известна и зачастую изменяется в довольно широких пределах. Если уст­ ройство не готово к обмену данными, возможно формирование специаль­ ного сигнала ШУ, который переведет микропроцессор в состояние ожида­ ния. Такой способ согласования весьма неэффективен, так как период ожи­ дания может привести к недопустимо большой задержке выполнения дру­ гих требуемых функций. Возможен и другой вариант организации взаимо­ действия: перед обменом данными микропроцессор предварительно вы­ полняет программный контроль готовности, при готовности производит программный обмен данными, а при отсутствии готовности переходит к выполнению других функций программы с повторением контроля готовно­ сти устройства через определенный интервал времени. В любом из этих ва­ риантов взаимодействия процедуры программного ввода-вывода заметно увеличивают объем функций рабочей программы микропроцессора, замед­ ляют выполнение требуемых функций, не всегда обеспечивают своевре­ менный обмен данными с периферийными устройствами и, следовательно, могут отрицательно повлиять на эффективность работы микропроцессор­ ной системы. Отказаться от программного контроля состояния периферийных уст­ ройств можно в тех случаях, когда эти устройства сами формируют и пере­ дают запросы на обработку данных в микропроцессор. В микропроцессор­ ной системе запросы от периферийных устройств называют прерываниями (interrupt), а процедуры с их использованием - вводом-выводом по преры­ ваниям. Такая процедура предполагает прием микропроцессором запроса прерывания, остановку выполнения текущих операций основной програм­ мы, вызов подпрограммы обслуживания прерывания с выполнением необ­ ходимых операций взаимодействия с устройством, отправившим запрос прерывания, и затем продолжение работы основной программы. Главное достоинство такой организации взаимодействия - отказ от постоянного программного контроля периферийных устройств в основной программе микропроцессора;

подпрограмма обработки прерывания вызывается для работы только тогда, когда возникает необходимость. Для реализации процедуры прерывания в ШУ микропроцессорной сис­ темы предусмотрены специальные сигналы: запрос прерывания INT, по­ ступающий в микропроцессор от устройств ввода-вывода, подтверждение прерывания INTA, формируемый микропроцессором при переходе в режим обработки прерывания. В ряде случаев остановка рабочей программы для обслуживания прерываний недопустима, поэтому в системе команд микро­ процессора обычно содержатся команды запрета ("di") и разрешения ("ei") прерываний. Если командой "di" прерывания запрещены, поступающие за­ просы INT игнорируются и работа основной программы продолжается. После команды разрешения прерываний "ei" в основной программе каж­ дый запрос INT будет обрабатываться микропроцессором. Завершив рабо­ чий цикл очередной команды, выполнявшейся в момент поступления за­ проса IN T, микропроцессор приостанавливает дальнейшую работу основ­ ной программы, переходит в режим обработки прерывания и выдает в ШУ сигнал подтверждения INTA. Обработка прерывания производится по стандартной процедуре вызова подпрограммы, рассмотренной в предыду­ щем разделе. Для обработки прерывания устройство ввода-вывода должны передать по ШД код команды "call А16", где А16 - начальный адрес подпрограммы обслуживания прерывания, и прекратить передачу запроса прерывания INT. Организация работы подпрограммы прерывания, выполняющей все необходимые операции взаимодействия с периферийным устройством, практически ничем не отличается от стандартной процедуры вызова под­ программы. Завершается работа подпрограммы прерывания стандартной командой возврата "ret", которая обеспечивает продолжение приостанов­ ленной работы основной программы. Следует помнить, что работа подпро­ граммы прерывания ничем не отличается от работы основной программы и поступлением нового запроса прерывания может быть приостановлена. Для управления процедурами вызова прерываний в этих подпрограммах также необходимо использовать команды управления "ei" и "di". Организация обработки прерываний в микропроцессорной системе ос­ ложняется тем, что запросы прерываний могут поступать от нескольких разных периферийных устройств. Во-первых, каждое устройство требует вызова индивидуальной подпрограммы прерывания для облуживания за­ проса, во-вторых, запросы от разных устройств могут поступать одновре­ менно, и требуется арбитраж для определения очередности обслуживания. Эти функции обычно выполняют специальные устройства, называемые контроллерами прерываний [1]. Контроллер прерываний является стандартным периферийным устрой­ ством, обеспечивает прием запросов прерываний от нескольких других устройств, выполняет арбитраж поступивших запросов, формирование об щего сигнала запроса INT и команды вызова индивидуальной для каждого запроса подпрограммы прерывания. Индивидуальные адреса подпрограмм прерываний могут указываться программно в процедурах инициализации [1], а при другой организации микропроцессорных систем могут задаваться фиксировано в виде специальных таблиц векторов прерываний. Контрол­ лер прерываний, не являясь самостоятельным устройством и выполняя ука­ занные выше вспомогательные функции, практически всегда необходим для эффективной организации процедур ввода-вывода. Ввод-вывод данных по прерываниям, исключая из основной программы микропроцессора целый ряд операций по управлению взаимодействием с периферийными устройствами, позволяет существенно увеличить скорость обработки данных, уменьшить время реакции на запросы периферийных устройств, расширить набор реализуемых функций и, следовательно, повы­ сить эффективность работы микропроцессорной системы в целом. Общим же в рассмотренных процедурах ввода-вывода является обмен данными между любыми устройствами через микропроцессор. Во всех операциях обмена данными микропроцессор считывает из памя­ ти команды пересылки данных и, выполняя эти команды, производит пере­ дачу данных: байт данных по первой команде поступает в регистр микро­ процессора и только по следующей команде из микропроцессора передает­ ся в другое устройство. При передаче массивов данных такой алгоритм об­ мена неэффективен, для передачи каждого байта требуется чтение из памя­ ти и выполнение нескольких команд микропроцессора. Для ускорения об­ мена данными предусмотрена процедура прямого доступа к памяти - ре­ жим DMA. В этом режиме байты данных передаются непосредственно ме­ жду памятью микропроцессорной системы и устройствами ввода-вывода без участия микропроцессора. В режиме DMA управление процедурой с формированием управляющих сигналов и адресов производится контроллером DMA [1], который реали­ зует необходимые функции не программно, как микропроцессор, а аппаратно. Контроллер DMA, следовательно, является специализированным устройством с ограниченным набором аппаратно реализуемых функций. Благодаря этой особенности передача данных в режиме DMA выполняется в несколько раз быстрее, чем микропроцессором. Перед запуском процедура DMA требует инициализации: необходимо указать начальный адрес памяти для обмена данными, количество циклов обмена и направление передачи данных. Кроме того, контроллер DMA мо­ жет использовать для обмена данными только те сигналы, которые в ос­ новных режимах работы формирует микропроцессор. Поэтому на период выполнения процедуры DMA необходимо работу микропроцессора приос­ тановить и передать функции формирования требуемых сигналов контрол­ леру DMA. Для остановки микропроцессора при запуске режима DMA в ШУ предусмотрены специальные сигналы. Эти сигналы, поступающие че рез контроллер DMA, обрабатываются микропроцессором по алгоритмам, аналогичным алгоритмам обработки запросов прерываний. Передача данных в режиме DMA выполняется следующим образом: • запрос от периферийных устройств поступает через контроллер DMA в микропроцессор;

• если прерывание разрешено, микропроцессор приостанавливает работу и подтверждает право на управление работой ШД, ША и ШУ контрол­ леру DMA передачей специальных сигналов разрешения;

• контроллер, принимая управление работой системы, производит уско­ ренный обмен данными между памятью и периферийным устройством по параметрам, которые были заданы микропроцессором программно перед запуском процедуры;

• после завершения обмена данными контроллер DMA возвращает управление микропроцессору, который продолжает выполнение приос­ тановленной программы. Особенности режима DMA заключаются в том, что обмен данными вы­ полняется с большей скоростью, но требует предварительной программной настройки. Применение этого режима эффективно, если требуется передать подготовленный массив данных относительно большого объема с макси­ мальной скоростью, используя единые параметры настройки обмена дан­ ными. Организация ввода-вывода является важнейшим элементом эффектив­ ной работы для микропроцессорной системы. Рассмотренные процедуры взаимодействия с периферийными устройствами обладают разными свой­ ствами, обеспечивают разную организацию ввода-вывода данных и в соот­ ветствии с определенными условиями могут удовлетворять требованиям различных задач преобразования данных. Несмотря на вспомогательную роль операций ввода-вывода в работе самой микропроцессорной системы, очень часто в решаемых микропроцессорными средствами задачах эти опе­ рации имеют первостепенное значение и поэтому требуют самого серьез­ ного внимания. Достаточно типичны ситуации, когда алгоритмы преобра­ зования данных заметно проще алгоритмов организации ввода-вывода, ко­ гда микропроцессорная система выполняет функции ведомого средства, работая под управлением команд, поступающих через интерфейсы вводавывода, и т.п. Рассмотренная в первой главе организация микропроцессорной системы показывает основные свойства и возможности программной реализации ал­ горитмов преобразования. Корректное использование особенностей про­ граммной реализации позволяет получать весьма эффективные решения в самых различных применениях. Важнейшее свойство микропроцессорных средств - возможность качественной перестройки алгоритмов работы без, изменения структуры и набора применяемых аппаратных средств. 2. МИКРОКОНТРОЛЛЕРЫ AVR Микроконтроллеры являются весьма универсальным средством, могут применяться и применяются для решения самых разнородных задач. Их универсальность определяется особенностями микропроцессорной органи­ зации обработки данных, рассмотренными в первой главе. Функциональ­ ные возможности многих микроконтроллеров, в том числе и их аппаратных средств, ориентированы на реализацию алгоритмов управления. Весьма существенно то, что микроконтроллеры относятся к числу массовых, недо­ рогих и доступных интегральных схем> номенклатура,микроконтроллеров постоянно расширяется. Среди выпускаемых в настоящее время микроконтроллеров выделяются микроконтроллеры семейства AVR фирмы ATMEL. Эти микроконтролле­ ры обладают низким уровнем потребления, невысокой стоимостью при весьма значительных функциональных возможностях, высоким быстродей­ ствием и возможностью многократной перезаписи программ. Хотя и анало­ гичные по характеристикам микроконтроллеры выпускаются многими фирмами, по общему комплексу свойств семейство AVR одно из наиболее эффективных в классе недорогих 8-разрядных микроконтроллеров. Основ­ ная область применения таких микроконтроллеров в системах автоматиза­ ции - реализация в реальном масштабе времени алгоритмов управления, не требующих сложных вычислительных процедур и временем реакции от единиц миллисекунд и более. Естественно, что микроконтроллеры AVR не являются универсальным средством "на все случаи". При определенных требованиях может быть не­ обходимым применение значительно более дорогих 16- или 32-разрядных микроконтроллеров, процессоров цифровой обработки сигналов, програм­ мируемых логических интегральных схем и т.п. Тем не менее, существует большое число разнообразных задач, при решении которых недорогие и простые в применении 8-разрядные микроконтроллеры вне конкуренции. Очевидно, что для построения системы автоматического управления од­ ного микроконтроллера недостаточно. Допустимый диапазон изменения входных и выходных сигналов, особенности интерфейсов ввода-вывода микроконтроллера, как правило, требуют различных дополнительных средств управления, устройств сопряжения и индикации, с помощью кото­ рых можно обеспечить управление различными объектами (электроприво­ ды постоянного и переменного токов, системы стабилизации температуры, системы контроля параметров и т.п.). Состав и характеристики этих допол­ нительных средств определяются свойствами конкретных объектов управ­ ления и используемыми алгоритмами работы, вопросы проектирования этих дополнительных устройств выходят за рамки данного учебного посо­ бия и изучаются в соответствующих курсах.

Данный раздел подготовлен на основе информационных материалов по микроконтроллерам семейства AVR, распространяемых фирмой ATMEL, и является кратким справочным руководством по применению микрокон­ троллера AT90S8535. На примере этого микроконтроллера рассмотрены особенности организации и архитектуры семейства AVR, параметры и ре­ жимы работы аппаратных средств. В следующих главах будут показаны особенности системы команд семейства AVR, средства подготовки про­ грамм на ассемблере и примеры программ для реализации типовых проце­ дур. Знание особенностей применения микроконтроллера семейства AVR позволяет достаточно легко перейти к изучению вопросов применения лю­ бого другого микроконтроллера этого класса. 2.1. Общая характеристика микроконтроллеров семейства AVR Микроконтроллеры фирмы ATMEL с усовершенствованной RISCархитектурой обладают эффективными программно-аппаратными ресурса­ ми для решения различных задач. Семейство микроконтроллеров AVR со­ держит и простые модели (AT90S1200, AT90S2313) с минимумом необхо­ димых ресурсов, и весьма сложные модели megaAVR с существенно уве­ личенным объемом памяти, количеством портов ввода-вывода и других средств. Высокая эффективность микроконтроллеров AVR обеспечивается развитой системой команд, выполняющихся, как правило, за один рабочий такт, аппаратной реализацией многих стандартных функций (таймеры, мо­ дуляторы ШИМ, параллельные и последовательные порты ввода-вывода, компаратор, АЦП и др.) и возможностью внутрисистемного программиро­ вания, т.е. записи программ и данных в память микроконтроллера непо­ средственно в схеме работающего устройства. Общие архитектурные особенности и программная совместимость мик­ роконтроллеров AVR позволяют использовать одни и те же алгоритмы и рабочие программы на разных моделях. Единственным ограничением их применимости может служить только отсутствие необходимых для испол­ нения программ аппаратных средств в более простых моделях микрокон­ троллеров. Архитектура и общая организация микроконтроллеров AVR достаточно типична для микропроцессорных средств, обладает необходимой универ­ сальностью для программной реализации различных алгоритмов и в общих чертах аналогична описанной в главе 1. Важным дополнением являются средства аппаратной реализации стандартных интерфейсных функций и соответствующие алгоритмы и процедуры обеспечения эффективного взаимодействия с ними. Определенные отличия в других деталях архитек­ туры и организации работы, связанные, как правило, с повышением эффек­ тивности используемых средств и спецификой реализуемых алгоритмов, будут описаны ниже.

Существенной общей особенностью всего семейства AVR является ис­ пользование 32 регистров общего назначения и гарвардской архитектуры с тремя раздельными адресными пространствами: памяти программ (FLASH), оперативной памяти данных (RAM), программируемой постоян­ ной памяти данных (EEPROM). FLASH и EEPROM являются энергонеза­ висимыми и, как обычно, сохраняют данные при отсутствии питающих на­ пряжений. RAM - это стандартная энергозависимая оперативная память. Система команд поддерживает стандартные операции с однобайтовыми данными, возможны определенные операции с двухбайтовыми словами и отдельными битами. Каждый из 32 восьмиразрядных регистров общего на­ значения может служить регистром-аккумулятором. Основной формат ко­ дов команд - 2 байта, формат данных - 1 байт. Управление и доступ к дополнительным аппаратным средствам микро­ контроллеров производятся с помощью специальных управляющих регист­ ров - регистров ввода-вывода. Эти регистры определяют параметры и ре­ жимы работы устройств микроконтроллеров, обеспечивают необходимый обмен данными с ними. Каждое устройство аппаратной реализации содер­ жит индивидуальный набор регистров ввода-вывода, которые и являются основными средствами обеспечения взаимодействия. Взаимодействие ме­ жду функциями, реализуемыми программно и аппаратно, производится формированием запросов прерываний. Система прерываний позволяет об­ служивать программные прерывания, внутренние прерывания всех уст­ ройств микроконтроллеров через регистры ввода-вывода и внешние преры­ вания. Внутренние аппаратные и внешние прерывания фиксируются в таб­ лице векторов прерываний со строго закрепленными адресами. Общие особенности микроконтроллеров всего семейства AVR позволя­ ют более детальное их изучение проводить для одной из моделей семейст­ ва. В дальнейшем работа микроконтроллеров AVR будет рассматриваться на примере классической модели AT90S8535 со средними программноаппаратными ресурсами. 2.2. Микроконтроллер AT90S8535 Микроконтроллер AT90S8535 (рис. 4) со 118 командами в системе ко­ манд содержит 8-разрядное арифметико-логическое устройство (АЛУ), па­ мять программ (FLASH) объемом 8 Кбайт, электрически программируемое ПЗУ (EEPROM) объемом 0,5 Кбайт (также с возможностью внутрисистем­ ного программирования), статическое ОЗУ (RAM) объемом 0,5 Кбайт, 32 регистра общего назначения, 4 двунаправленных параллельных восьмираз­ рядных порта ввода-вывода, последовательный синхронный интерфейс SPI, последовательный асинхронный интерфейс UART, два восьмиразрядных и один шестнадцатиразрядный таймеры с возможностью реализации модуля­ торов ШИМ, сторожевой таймер с автономным генератором, аналоговый компаратор, восьмиканальный АЦП. РАО - РА РСО - РС ttftttt?

РВ0-РВ7 PD0-PD Рис. 4. Структурная схема микроконтроллера AT90S8535 Структурная схема (рис. 4) отображает только логическую организацию микроконтроллера и его основные средства программной и аппаратной реализации требуемых функций. Средства программной реализации анало­ гичны рассмотренным в главе 1, хотя и имеют определенные особенности. Все остальные устройства, показанные на рис. 4, предназначены для аппа­ ратной реализации различных интерфейсных функций и будут рассмотре­ ны в следующей главе. АЛУ микроконтроллера выполняет стандартный набор операций преоб­ разования данных однобайтового формата. Практически все эти операции выполняются за один такт микроконтроллера. В некоторых других моделях микроконтроллеров семейства AVR дополнительно содержится умножи­ тель, выполняющий умножение аппаратно с формированием двухбайтово­ го произведения за два такта. Регистр флагов, не показанный на рис. 4, также имеет однобайтовый формат, в микроконтроллере рассматривается, как один из регистров ввода-вывода, и в данной структуре называется ре­ гистр SREG. Количество регистров общего назначения однобайтового формата уве­ личено до 32, регистры гО - гЗ 1. Существенные особенности этих регист­ ров: каждый регистр может выполнять функции аккумулятора, для регист­ ровой адресации шесть последних регистров общего назначения г26 - г 31 могут объединяться в регистровые пары X, Y и Z соответственно. Так как память разделена на три независимых области - FLASH, RAM и EEPROM, каждая из этих областей имеет разное функциональное назначе­ ние, обладает самостоятельной системой и средствами адресации, требует применения разных команд доступа. Подробнее организация памяти рас­ смотрена в следующем разделе. С точки зрения логической организации микроконтроллера каждое из устройств аппаратной реализации интерфейсных функций можно рассмат­ ривать как определенный набор регистров ввода-вывода, изменение дан­ ных в этих регистрах и является средством координации и управления их работой. В контроллере предусмотрены программируемые режимы снижения по­ требляемой мощности (sleep mode) с отключением отдельных устройств. В режиме idle процессор микроконтроллера остановлен, все остальные уст­ ройства работают, и их внутренние аппаратные прерывания или внешние прерывания переводят микроконтроллер в активный режим немедленно. В режиме power-down процессор и тактовый генератор остановлены и, сле­ довательно, не работают все устройства микроконтроллера, тактируемые основным генератором, микроконтроллер переводится в активный режим сигналами внешних прерываний, сторожевым таймером или сигналом RE­ SET. Длительность внешних сигналов для надежного запуска тактового ге­ нератора должна превышать требуемую длительность сигнала RESET. В режиме power-save в отличие от power-down запуск микроконтроллера дополнительно может производиться прерываниями таймера 2, если в этом таймере задан асинхронный режим работы от вспомогательного генерато­ ра. На структурной схеме (рис. 4) и в дальнейшем при описании микро­ контроллеров будут использованы названия и обозначения, используемые фирмой ATMEL. Внешние выводы (рис.4) микроконтроллера: • VCC и GND (общий) - источник питания цифровых элементов;

• AVCC, AGND (общий аналоговый), AREF - питание и опорное на­ пряжение АЦП и его мультиплексора;

• RESET - сигнал внешнего сброса (низкий уровень длительностью бо­ лее 50 не), при включении питания сброс микроконтроллера произ­ водится автоматически;

• XTAL1 и XTAL2 - соответственно вход и выход тактового генератора (для подключения частотозадающего кварцевого резонатора и общей синхронизации с другими устройствами), аналогичные электроды вспомогательного генератора асинхронного режима таймера 2 - вы­ воды РС6 и РС7;

• РА0-РА7, РВ0-РВ7, РС0-РС7, PD0-PD7 - 32 линии ввода-вывода, объ­ единены в 4 восьмиразрядных порта (PORTA, PORTB, PORTC, PORTD). PORTA, PORTB, PORTC, PORTD могут использоваться как стандартные двунаправленные порты ввода-вывода либо для передачи сигналов других устройств микроконтроллера. Альтернативные функции PORTA: передача аналоговых сигналов через мультиплексор на вход АЦП. Альтернативные функции PORTB: РВО и РВ1 - внешние входы ТО и Т1 таймеров 0 и 1 соот­ ветственно, РВ2 и РВЗ - входы AIN0 и AIN1 аналогового компаратора, ос­ тальные - сигналы синхронного последовательного интерфейса SPI (PB4 SS, PB5 - MOSI, PB6 - MISO, PB7 - SCK). Альтернативные функции PORTC: PC6 и РС7 - вход и выход вспомогательного генератора таймера 2. Альтернативные функции PORTD: PD0 и PD1 - сигналы RXD и TXD асин­ хронного последовательного интерфейса UART соответственно, PD2 и PD3 - сигналы внешних прерываний INTO и INT1, PD4-PD7 - сигналы ОС 1В, ОС1 A, ICP, OC2 таймеров 1 и 2.

2.3. Запоминающие устройства микроконтроллера AT90S8535 Как указывалось ранее, запоминающие устройства микроконтроллера FLASH, RAM, EEPROM, регистры общего назначения и регистры вводавывода образуют три отдельных адресных пространства (рис. 5).

Память программ $000 Память данных $000 Регистры! общего назначения $01F $ Память данных $ EEPROM (0,5 К ж 8) FLASH (4Kxt6) Регистры ввода-вывода $05F $ RAM 0,5 К х 8) $1FF $25F $FFF Рис. 5. Память микроконтроллера AT90S8535 FLASH - постоянное запоминающее устройство и предназначено для хранения кодов программы, адресация в этой области памяти производится программным счетчиком. Изменение адреса FLASH в программном счет­ чике производится в соответствии со стандартной организацией микропро­ цессорной системы. Как и обычно, для изменения адреса в программном счетчике можно применять команды управления микроконтроллера (см. главу 1). FLASH можно использовать и для хранения констант, чтение этих констант производится специальной командой "lpm" с регистровой адреса­ цией через регистр Z. FLASH объемом 8 Кбайт предназначена для хранения кодов программ и констант, в том числе и при выключенном питающем напряжении, и состо ит из 4 К двухбайтовых ячеек с адресами $000 - $FFF\ Запись данных про­ изводится специальным программатором в процедуре внутрисистемного программирования, допустимое количество циклов перезаписи не менее 1000. Большинство кодов команд имеют 16-битовый формат, поэтому, как правило, одна ячейка флэш-памяти хранит код 1 команды или две 8битовых константы. В памяти данных EEPROM образует отдельное адресное пространство объемом 0,5 К однобайтовых ячеек с адресами $000 - $ IFF и хранением данных при выключении питающего напряжения. Доступ к данным в EEPROM производится специальной процедурой с особым алгоритмом ад­ ресации через соответствующие регистры из файла регистров вводавывода. Эта процедура по организации ближе к процедурам ввода-вывода (глава 1) и будет рассмотрена позднее, программно доступно и чтение, и запись данных. Запись данных также может производиться программато­ ром в процедуре внутрисистемного программирования. Третье адресное пространство является основной рабочей областью па­ мяти данных и включает 32 регистра общего назначения с адресами $000 $01F, 64 регистра ввода-вывода с адресами $020 - $05F и, собственно, RAM объемом 0,5 К однобайтовых ячеек с адресами $060 - $25F. Такая ор­ ганизация памяти данных позволяет адресовать все регистры как ячейки RAM с известными адресами либо использовать для их адресации соответ­ ствующие обозначения или адреса в регистровых файлах. Например, ре­ гистр управления АЦП имеет адрес RAM $026, адрес в файле регистров ввода-вывода $06 или символическое имя ADCSR. Адресация ячеек памяти в третьем адресном пространстве производится стандартными способами. При прямой адресации адрес содержится в ко­ мандах sts k, Rr и Ids Rd, к (см. главу 4), где к - адрес в диапазоне $000$25F, Rr и Rd любые из регистров общего назначения. Косвенная адресация возможна регистрами X, Y, Z. Каждый из этих адресных регистров образо­ ван парой регистров общего назначения: X - r27-r26, Y - r29-r28, Z - г31гЗО. Также возможна стековая адресация с помощью указателя стека (пара регистров SPH-SPL файла регистров ввода-вывода), обычно в качестве вершины стека используется наибольший адрес ОЗУ с символическим именем RAMEND, для данного микроконтроллера - это физический адрес $25F. Данные в командах с непосредственной адресацией являются эле­ ментами кодов программы и вместе с ними хранятся в FLASH. Адресация регистров общего назначения стандартная: в команде указы­ вается номер регистра (например, mov r2, г0 - передать байт данных из г0 в г2) или присвоенное ему в программе символическое имя (например, mov Символ $, как и символ Ох применяется для обозначения шестнадцатиричного формата дан­ ных r2, temp, где temp - символическое имя регистра). Обращение к файлу ре­ гистров ввода-вывода производится командами in, out (например, out SPL, г 16 - передать байт данных из регистра г 16 в регистр ввода-вывода SPL) с использованием, как правило, символических имен (символические имена регистров ввода-вывода приведены в приложении). Необходимо обратить внимание не только на отличия в командах адре­ сации регистров, но и на их совершенно разное функциональное назначе­ ние. Регистры общего назначения, как и в любой микропроцессорной сис­ теме, содержат данные для программного преобразования. Следовательно, команды преобразования данных выполняются только над содержимым ре­ гистров общего назначения. Дополнительная особенность микроконтрол­ лера - каждый регистр общего назначения может быть аккумулятором при выполнении любых команд преобразования данных. Система команд и ор­ ганизация программной обработки данных микроконтроллеров семейства AVR достаточно типична для микропроцессорных средств и будет рас­ смотрена позднее. С точки зрения программного преобразования регистры ввода-вывода, как правило, доступны только для операций чтения и записи. Байты дан­ ных в регистрах ввода-вывода строго связаны с работой соответствующих аппаратных интерфейсных средств. Поэтому обмен данными с этими реги­ страми производится либо для программного управления функциями и ре­ жимами аппаратных интерфейсных средств, либо для приема от них дан­ ных, сформированных в результате выполнения заданных функций. Функции, выполняемые комплексом аппаратных интерфейсных средств, являются важнейшими характеристиками микроконтроллера и в значи­ тельной степени определяют эффективность его работы. Особенности при­ менения регистров ввода-вывода для организации взаимодействия с аппа­ ратными интерфейсными средствами рассматриваются в следующей главе.

3. АППАРАТНЫЕ ИНТЕРФЕЙСЫ МИКРОКОНТРОЛЛЕРА AT90S8535 Дополнительные аппаратные средства микроконтроллеров, реализую­ щие стандартные интерфейсные функции, позволяют существенно расши­ рить возможности программной обработки данных. Возможность решения нескольких задач параллельно с программным преобразованием данных не только повышает скорость работы, но и заметно упрощает алгоритмы и ра­ бочие программы. Следует помнить, что любые средства аппаратной реа­ лизации обладают весьма ограниченными пределами изменения алгорит­ мов и параметров работы, их функции строго специализированы, поэтому они и должны рассматриваться как вспомогательные средства. Хотя основные свойства микропроцессорных средств определяются про­ граммной реализацией функций, их эффективность может сильно зависеть от набора вспомогательных средств. Наиболее стандартизованы различные интерфейсные функции, кроме того, интерфейсы в системах автоматизации являются важнейшим элементом обеспечения корректного взаимодействия. Именно по этим причинам вспомогательные аппаратные средства микро­ контроллеров предназначены в первую очередь для выполнения стандарт­ ных интерфейсных функций. Интерфейсные средства микроконтроллера AT90S8535 достаточно ти­ пичны и поддерживают функции ввода-вывода в параллельном и последо­ вательном форматах, обработки аналоговых сигналов, формирования за­ данных временных интервалов. В данной главе рассматриваются режимы работы этих средств и вопросы применения регистров ввода-вывода для организации взаимодействия с ними. Используемые для пояснений фраг­ менты программ ориентированы на мнемонику и систему команд микро­ контроллера AT90S8535, которая рассматривается детальнее в главе 4. 3.1. Параллельные порты ввода-вывода Как указывалось ранее, микроконтроллер содержит 32 линии вводавывода (рис. 4), объединенные в 4 двунаправленных порта (А, В, С, D). Управление каждым портом производится тремя регистрами порта из фай­ ла регистров ввода-вывода, символические имена этих регистров содержат наименование порта. Так как процедуры управления для всех портов ана­ логичны, рассмотрим их на примере порта А. Регистр управления порта А с символическим именем DDRA, адресом в файле регистров ввода-вывода $1А, адресом RAM $03А программно дос­ тупен и для чтения, и для записи и определяет направление передачи дан ных: 0 - ввод, 1 - вывод. Каждый бит DDRA* (DDA0 - DDA7) управляет соответствующей линией ввода-вывода и программируется независимо, начальное значение всех битов DDRA - нулевое. То есть в процессе работы значение каждого бита не зависит от значений других битов, чтением со­ держимого регистра DDRA можно определить направление передачи дан­ ных по соответствующим линиям ввода-вывода в данный момент времени. Пример 1: ml: ldirl6, ObOOOllllO ;

запись в г16 константы, указанной ;

в двоичном формате, т2: out DDRA, г 16 ;

пересылка из г16в регистр управления DDRA. В соответствии с байтом управления в регистре DDRA линии РА7, РА6, РА5, РАО будут работать в режиме ввода, а РА4, РАЗ, РА2, РА1 - в ре­ жиме вывода сигналов. Регистр ввода данных PINA (адрес в файле регистров ввода-вывода $19, адрес RAM - $039) программно доступен только для чтения (in rl6, PINA - пример команды чтения данных из PORTA) и обеспечивает считы­ вание сигналов, поступающих в данный момент времени на соответствую­ щие линии ввода-вывода (например, линия РА5 в режиме ввода формирует бит PINA5 регистра ввода данных). Никакого хранения данных регистр PINA не выполняет. Регистр вывода данных PORTA (адрес в файле регистров ввода-вывода - $1В, адрес ОЗУ - $03В) программно доступен и для чтения, и для записи, обеспечивает хранение данных и выдачу их в режиме вывода на соответст­ вующие линии ввода-вывода (например, PORTA4 - РА4). При чтении PORTA передает данные, ранее записанные в этот регистр для вывода. Пример 2: тЗ: ldirl6, ObOWlOWl ;

запись в г 16 константы, указанной ;

в двоичном формате, т4: out PORTA, r!6 ;

пересылка из г!6 в выходной регистр PORTA, т5: in г15, PINA ;

пересылка из входного регистра PINA в г 16. Если полагать, что режим порта А задан в примере 1, то РА4-1, РАЗ-0, РА2-1, РА1~0 и определяются соответствующими битами константы, В дальнейшем будут использоваться только символические имена регистров, в программах на ассемблере эти стандартные имена определяются специальным файлом с расширением.inc. Такие файлы существуют для каждой модели микроконтроллера (например, "8535def inc") и включаются в тексты программ. Таблица соответствия символических имен и физических ад­ ресов приведена в приложении.

записанной командами тЗ, т4 в выходной регистр порта. Чтение байта из входного регистра (команда т5) в этих битах, настроенных в режим вывода, даст такие же значения сигналов;

в остальных битах, настроен­ ных в реоким ввода, будет определяться поступающими на них внешними сигналами. Буферы портов в режиме вывода позволяют формировать логические сигналы с током нагрузки до 20 мА. В режиме ввода, кроме приема внеш­ них сигналов, буферы позволяют подключать к входам портов внутренние резисторы (pull-up), задавая на входах при отсутствии внешних сигналов уровень логической единицы. Например, DDA7=0 (ввод данных) при PORTA7=:l внутренний резистор буфера подключен и при отсутствии внешнего сигнала будет задавать на РА7 высокий уровень. Это позволяет устранить возможные неопределенности входных сигналов, в частности, при отключении внешних источников сигналов. При появлении сигнала внешнего источника уровень РА7 будет задаваться этим внешним сигна­ лом. При PORTA7==0 внутренний резистор отключен и никакого влияния не оказывает. Для остальных портов ввода-вывода используются такие же регистры с аналогичными именами и заменой буквы, обозначающей наименование порта. Логическая организация параллельных портов достаточно проста и очевидна: пересылка данных в регистры ввода-вывода любого порта ото­ бражается на его работе в течение одного такта микроконтроллера. К их существенным свойствам можно отнести как полную взаимную независи­ мость портов, так и полную независимость отдельных линий ввода-вывода: функции каждой линии ввода-вывода можно программировать и использо­ вать абсолютно независимо. Следует учитывать, что другие интерфейсные средства формируют сигналы через эти же линии ввода-вывода. Передачу этих сигналов в дальнейшем будем называть альтернативными функциями портов. При использовании альтернативных функций портов ввода-вывода в ре­ гистрах управления должны задаваться соответствующие этим функциям направления передачи сигналов. Очевидно, что одновременное программи­ рование нескольких функций для одной и той же линии ввода-вывода не­ возможно. Более детальное описание альтернативных функций приведено далее при описании соответствующих аппаратных средств микроконтрол­ лера. 3.2. Последовательный интерфейс SPI Последовательный интерфейс SPI обеспечивает синхронный ввод-вывод данных в последовательном формате через линии ввода-вывода порта В сигналами SCK (альтернативная функция линии ввода-вывода РВ7), MOSI (альтернативная функция линии РВ5), MISO (альтернативная функция РВ6), SS (альтернативная функция РВ4). Контроллер при обмене данными может работать в режиме ведущий (master) или ведомый (slave). Структур­ ная схема, поясняющая алгоритмы работы интерфейса, приведена на рис. 6. Этот же интерфейс используется для внутрисистемного программирования микроконтроллера с записью данных в FLASH и EEPROM. SPI-master управляет обменом данных. Он формирует информационную 8-битовую последовательность на выходе MOSI, стробирующую выдачу данных, последовательность тактовых импульсов на выходе SCK и одно­ временно может принимать на входе MISO 8-битовую последовательность, стробируемую импульсами SCK. Если РВ4 конфигурируется как выход (DDB4=1), сигнал SS не используется, и РВ4 может работать в стандартном режиме вывода. Если РВ4 конфигурируют как вход (DDB4=0), при SS=1 продолжается работа в режиме SPI-master. Сигнал SS=0, поступающий от другого устройства, должен рассматриваться как запрос на переход в ре­ жим SPI-slave для приема данных.

master | | 1 8-битовый регистр сдвига i | slave PB6 PB6 1 MISO i ]I MISO I е Г РВ5 PB MOSI | |PB SCK 1 |Р М М Н К Я к 1 I MOSI PB7| 1 sc*( I | i_ Схема управления J ! | i ss |PB4 I P B 4 | ss I Рис. 6. Интерфейс SPI SPI-slave управляется последовательностью импульсов на входе SCK и принимает информационную 8-битовую последовательность, подаваемую на его вход MOSI. Параллельно с приемом данных по этим же стробирующим импульсам SCK может формироваться выходная информационная по­ следовательность на выходе MISO. Для этого режима РВ4 должен конфи­ гурироваться входом. При SS=0 реализуется режим SPI-slave, если SS=l, интерфейс переходит в пассивное состояние и перестает работать. Для режима SPI-master конфигурирование порта В следующее: MISO вход, MOSI - выход, SCK - выход, SS - вход (как вход используется только при необходимости), для режима SPI-slave: MISO - выход, MOSI - вход, SCK - вход, SS - вход (задается сигнал логического нуля для работы ин терфейса). Обмен данными между SPI-master и SPI-slave производится по алгоритму кольцевого регистра сдвига (рис. 6), по каждому такту SCK дан­ ные сдвигаются на один бит, после 8 тактов содержимое регистра-master и регистра-slave меняется местами. Соединение MOSI - MOSI обеспечивает передачу от SPI-master к SPI-slave, а соединение MISO - MISO использует­ ся при необходимости передачи данных в обратном направлении. Управление интерфейсом SPI производится тремя регистрами файла ре­ гистров ввода-вывода: регистром данных - SPDR, регистром управления SPCR, регистром состояния - SPSR. SPDR и SPCR программно доступны и для чтения, и для записи, SPSR доступен только для чтения. Логическая организация этого интерфейса, как и других интерфейсных средств, рас­ сматриваемых далее, существенно сложнее, чем в параллельных портах ввода-вывода. Передача данных выполняется не за один такт микрокон­ троллера, а требует формирования целой последовательности сигналов. Поэтому необходимо согласование и логического взаимодействия, и вре­ менного взаимодействия с другими реализуемыми функциями. В главе 1 было показано, что наиболее успешно эти задачи решаются применением процедур ввода-вывода по прерываниям. Практически все интерфейсные устройства микроконтроллера содержат средства поддержки для выполнения процедур прерываний;

индивидуально формируемые за­ просы прерываний, соответствующая им таблица векторов прерываний, флаги разрешения и запрета обработки прерываний, аппаратно реализуемая процедура вызова прерываний. Более полно особенности системы преры­ ваний микроконтроллера будут рассмотрены в одном из последующих раз­ делов. В описании же работы каждого из интерфейсных средств, в том чис­ ле и интерфейса SPI, будут упоминаться только необходимые элементы системы прерываний. SPDR служит для записи передаваемых данных и чтения данных, кото­ рые поступили в регистр сдвига при обмене. SPCR содержит 8 бит управ­ ления интерфейсом (слева в таблице символических имен старший бит). Символические имена битов управления регистра SPCR | SPIE | SPE | DORP | MSTR \ CPOL | CPHA j SPR1 | SPRO [ SPIE - бит разрешения прерывания SPI, 0 запрещает прерывания. SPE - бит разрешения работы;

при 0 запрещены любые операции в SPI, 1 разрешает работу интерфейса. DORD - при 1 первым передается младший бит слова данных, при 0 старший бит. MSTR - при I определяется режим SPI-master, при 0 - режим SPI-slave. Младшие 4 бита SPCR определяют параметры тактового сигнала SCK: CPOL - определяет пассивный уровень сигнала SCK в перерывах передачи данных, т.е. при 0 тактовый сигнал в пассивном состоянии интер­ фейса тоже нулевой. СРНА - при 0 запись данных должна производиться каждым первым фронтом сигнала SCK после пассивного уровня, при 1 - каждым вторым фронтом сигнала после пассивного уровня. SPR1 и SPR0 задают частоту сигнала SCK;

коэффициент деления такто­ вой частоты микроконтроллера для интерфейса определяется эти­ ми битами следующим образом: 00 - коэффициент деления 4, 01 ~ коэффициент деления 16, 10 - коэффициент деления 64, 11 - коэффициент деления 128. В регистре SPSR используется только 2 старших бита. SPIF (бит 7) флаг прерывания, WCOL (бит 6) - флаг коллизии. SPIF устанавливается в 1 после каждого цикла передачи данных или после отмены режима SPImaster сигналом SS. SPIF вызывает вектор прерывания SPI_STC (адрес вектора $00а), если бит SPIE=1 (разрешение прерывания в SPCR) и уста­ новлен флаг глобального прерывания I в регистре состояния SREG*. Флаг прерывания очищается автоматически при вызове вектора прерывания SPISTC либо одновременно с очисткой флага WCOL. Флаг коллизии ус­ танавливается в случае чтения регистра SPDR в период передачи данных в SPI (некорректное чтение данных) и автоматически очищается одновре­ менно с флагом SPIF после чтения регистра SPSR и последующего обра­ щения к регистру SPDR. Если биты в регистре управления SPCR для выбора необходимого ре­ жима заданы, запись байта данных в регистр SPDR микроконтроллера в режиме SPI-master приводит к началу рабочего цикла интерфейса. SPImaster (рис. 6) передает на MOSI данные, с входа MISO может записывать данные от SPI-slave и на выходе SCK формирует 8 импульсов, управляю­ щих передачей байта данных. Под управлением этих же сигналов SCK SPIslave (рис. 6) принимает данные с входа MOSI и может передавать из сво­ его регистра SPDR данные на выход MISO. После завершения рабочего цикла обмена данными в микроконтроллере, работающем в любом режиме, устанавливается флаг прерывания для вызо­ ва вектора прерывания SPISTC. Подпрограмма обработки этого вектора должна выполнять операции доступа к регистрам SPI для реализации не­ обходимых функций интерфейса. Например, чтение из SPDR, поступивших в предыдущем цикле данных, и запись в него новых данных для передачи в следующем цикле. Управление битом разрешения прерываний SPIE позво­ ляет отказаться от вызова вектора прерывания SPISTC и производить " регистр состояния SREG будет описан позднее только программный ввод-вывод данных с программным опросом состоя­ ния интерфейса SPI. К микроконтроллеру SPI-master для обмена данными вместо второго контроллера может быть подключен и обычный регистр сдвига разрядности, соответствующей формату данных. Таким образом, интерфейс SPI обеспечивает за один рабочий цикл и пе­ редачу байта данных через SPDR на выход, и запись в этот же регистр но­ вого байта данных, поступившего на вход. Запуск рабочего цикла произво­ дится записью в SPI-master очередного байта данных в регистр SPDR. До первого рабочего цикла параметры работы интерфейса должны быть указа­ ны записью соответствующего байта управления в регистр SPCR. Команды обмена данными с регистрами интерфейса SPI аналогичны командам, рас­ смотренным в примерах работы с параллельными портами. Программы управления работой интерфейса SPI рассмотрены в примерах главы 5. 3.3. Последовательный интерфейс UART Интерфейс UART обеспечивает полнодуплексную передачу данных че­ рез линии ввода-вывода порта D сигналами: вход приемника - RxD (аль­ тернативная функция PD0) и выход передатчика - TxD (альтернативная функция PD1). Приемник и передатчик интерфейса работают независимо друг от друга в асинхронном режиме со стандартными скоростями переда­ чи данных и стандартным форматом сообщения (более подробную инфор­ мацию можно найти в описании любого асинхронного приемопередатчика, например, К580ВВ51 [1] или интерфейса RS-232C). Длина одного сообще­ ния - 8 или 9 бит, минимальная скорость передачи - 2400 бит/с, другие стандартные скорости кратны минимальной (например, 4800, 9600, 14400 и т.д.). Управление интерфейсом UART производится 4 регистрами из файла регистров ввода-вывода: UBR - регистр данных, UCR - регистр управле­ ния, USR - регистр состояния, UBRR - регистр скорости передачи данных. Все регистры интерфейса программно доступны и для чтения, и для записи. Основные алгоритмы управления интерфейсом предполагают применение процедур ввода-вывода по прерываниям. Таблица векторов прерываний микроконтроллера включает соответствующие вектора прерываний. Обра­ ботку и формирование других сигналов интерфейса кроме RxD и TxD не­ обходимо производить программно в подпрограммах векторов прерываний. Регистр данных UDR физически состоит из двух независимых регист­ ров;

при записи в UDR данные поступают в регистр передачи интерфейса, при чтении считывается содержимое другого регистра, обеспечивающего прием данных интерфейсом. Запуск передатчика интерфейса производится записью байта данных в UDR, а по завершению приема запускается проце­ дура вызова вектора прерывания для считывания байта данных, поступив­ шего в приемник. Регистр управления UCR содержит 8 бит управления работой интерфей­ са. Символические имена битов управления регистра UCR [RXCIEJ TXCIE| UDRIE j RXEN TXEN CHR9 \ RXBjTj TXB8 | RXCIE - бит разрешения прерывания по окончании рабочего цикла приема данных (вектор прерывания UARTJRXC с адресом $00Ь). TXCIE - бит разрешения прерывания по окончании рабочего цикла пере­ дачи данных (вектор прерывания UARTJTXC с адресом $00d). UDRIE - бит разрешения прерывания по перезаписи данных из регистра UDR в буфер передатчика, т.е. предыдущее сообщение еще об­ рабатывается передатчиком интерфейса UART, но уже разреше­ на запись следующего сообщения для подготовки к передаче (вектор прерывания UART_DRE с адресом $00с). RXEN - бит разрешения приема, разрешает работу приемника интерфейса. TXEN - бит разрешения передачи, разрешает работу передатчика интер­ фейса. CHR9 - бит разрешения 9-битового формата сообщения. RXB8 - дополнительный 9-й бит сообщения приемника (бит 8). ТХВ8 - дополнительный 9-й бит сообщения передатчика (бит 8). В регистре UCR все биты управления при единичном значении разрешают выполнение соответствующей функции, при нулевом значении ~ запреща­ ют. Эти значения и, следовательно, выполнение указанных функций зада­ ются программно. Регистр состояния USR содержит флаги выполнения интерфейсом раз­ личных операций. Символические имена флагов в регистре USR [ RXC j ТХС UDRE | FE OR -j RXC - флаг окончания приема сообщения;

устанавливается после приема очередного сообщения в UDR и вызывает вектор прерывания UARTJRXC, если биты разрешения RXCIE (в регистре UCR) и I (в регистре SREG) установлены. Флаг очищается при чтении регист­ ра UDR, т.е. подпрограмма обработки прерывания RXC должна обязательно предусматривать чтение регистра UDR для очистки флага. ТХС - флаг завершения передачи сообщения;

аналогично флагу RXC вы­ зывает вектор прерывания UARTTXC. Флаг ТХС очищается ав­ томатически при вызове вектора прерывания или программно за­ писью " 1" в этот бит. UDRE - флаг готовности регистра UDR к приему нового сообщения для передачи (до завершения передачи ТХС);

аналогично флагу RXC вызывает вектор прерывания UARTDRE. Флаг очищается при за­ писи в регистр UDR, что должно обязательно выполняться в под­ программе обработки прерывания. FE - флаг ошибки формата сообщения;

устанавливается, например, когда столовый бит принятого сообщения имеет нулевой уровень. Очи­ щается при приеме сообщения установленного формата. OR - флаг перегрузки;

устанавливается, когда предыдущее принятое со­ общение еще не прочитано из регистра UDR, а следующее уже по­ ступает в приемник. Очищается, когда сообщение принято и пере­ дано в UDR. Регистр UBRR определяет скорость обмена данными интерфейса. Ско­ рость обмена данными BAUD определяется формулой BAUD = и, 16(UBRR + 1) где f-ги - частота тактового генератора микроконтроллера, UBRR - содержимое регистра скорости (число в диапазоне $00 - $FF). Вычисленное значение скорости округляется до ближайшего стандартного значения (не рекомендуется использование скоростей, отличающихся от стандартных более, чем на 1 %). Таким образом, в интерфейсе UART скорости передачи и приема сооб­ щения одинаковы и определяются UBRR, разрешение на выполнение раз­ личных операций задается программно изменением содержимого регистра UCR. Операции обмена данными выполняются по флагам регистра USR векторами соответствующих прерываний. Подпрограммы обработки пре­ рываний должны выполнять обмен данными с интерфейсом UART через регистр UDR. 3.4. Таймеры микроконтроллера Микроконтроллер содержит 3 таймера-счетчика, которые работают не­ зависимо друг от друга. Таймер 0 и таймер 2 состоят из 8-разрядных счет­ чиков, таймер 1 содержит 16-разрядный счетчик. Счетчики таймеров рабо­ тают в режиме суммирования. Каждый из таймеров может работать от так­ тового генератора микроконтроллера с программируемым коэффициентом деления частоты (от 1 до 1024) либо от внешнего источника входного сиг­ нала. При использовании внешнего источника входные сигналы стробируются тактовыми импульсами микроконтроллера. Кроме того, таймер 2 мо жет работать в асинхронном режиме от дополнительного генератора, со­ держащегося в микроконтроллере. Этот генератор оптимизирован для ра­ боты с кварцевым резонатором часов частотой 32,768 кГц, что позволяет получать с помощью таймера 2 импульсы с периодом 1 с. Управление работой таймеров и обработка их сигналов производится через соответствующие регистры файла регистров ввода-вывода. Регистр масок TIMSK и регистр флагов прерываний TIFR - общие для всех тайме­ ров и программно доступны для чтения и записи. Остальные регистры управления индивидуальны для каждого таймера. Взаимодействие с тайме­ рами при формировании заданных временных интервалов практически все­ гда необходимо производить процедурами ввода-вывода по соответствую­ щим прерываниям. Основное назначение регистров TIMSK и TIFR управление прерываниями таймеров. Регистр TIMSK содержит биты разрешения, а регистр TIFR содержит флаги всех прерываний, вырабатываемых таймерами. Биты одноимен­ ных разрядов обоих регистров обеспечивают обработку соответствующих прерываний таймеров. Эти вектора прерываний будут описаны далее для каждого таймера. Символические имена битов разрешения в регистре TIMSK OCIE2 | TOIE2 | Т1СШГ OCIE1A | OCIE1B TOIE1 | - j TOIE0 Символические имена битов разрешения в регистре TIFR [ OCF2 | TOV2 | ICF1 ~ OCF1A j OCF1B | TOV1 | TOV0 Например, с помощью битов 6 обоих регистров (TOIE2 - TOV2) произ­ водится обработка прерывания по переполнению таймера 2. Установленное программно единичное значение бита TOIE2 разрешает прерывание, а при переполнении таймера 2 устанавливается единичное значение флага TOV2, которое вызывает вектор прерывания T I M 2 0 V F (адрес вектора $004), если общее разрешение прерывания установлено. Все флаги регист­ ра TIFR очищаются аппаратно при вызове векторов прерываний либо про­ граммно записью единицы в соответствующий бит этого регистра. Анало­ гично и попарно работают все остальные биты регистров TIMSK и TIFR. 3.4.1. Таймер О Таймер 0 содержит 8-разрядный суммирующий двоичный счетчик и формирует прерывание только по переполнению с помощью битов TOIE0 и TOV0 регистров TIMSK и TIFR. Кроме этих регистров, таймер 0 использу ет регистры TCCRO и TCNTO из файла регистров ввода-вывода. Флаг TOV0 при выполнении условий, указанных выше, вызывает вектор пре­ рывания TIM0_OVF с адресом $009. Регистр TCCR0 управляет работой таймера, а регистр TCNT0 содержит текущее состояние счетчика таймера, оба регистра программно доступны и для чтения, и для записи. В регистре TCCR0 используются только три младших бита CS02, CS01, CS00. Эти биты управляют входным сигналом таймера 0: 000 - входной сигнал блокируется, таймер остановлен. 001 - таймер работает (при всех последующих значениях управ­ ляющих битов также работает), входной сигнал счетчика тактовые импульсы микроконтроллера с частотой fm. 010 - частота входного сигнала fn/8. 011 - частота входного сигнала fTH/64. 100 - частота входного сигнала „,/256. 101 - частота входного сигнала ^/1024. 110 - внешний входной сигнал, поступающий на вход ТО (альтер­ нативная функция PB0), падающий фронт. 111 - внешний входной сигнал ТО (PB0), нарастающий фронт. С помощью регистра TCNT0 можно производить программную обра­ ботку состояния таймера, запись байта в этот регистр не останавливает ра­ боту счетчика, а чтение этого же регистра позволяет программно анализи­ ровать изменение состояния счетчика от момента запуска битами управле­ ния. Прерывание в таймере 0 с вызовом соответствующего вектора преры­ вания формируется только флагом переполнения TOV0. Пример программного управления таймером 0: ml: clr rl ;

очистка г 1 (г 1=0), т2: out TCCRO, rl;

пересылка байта из rl (0) в регистр ;

управления TCCR0, тЗ: out TCNTO, rl;

пересылка байта из rl (0) в регистр ;

таймера TCNT0, т4: Idi г 16,1 ;

загрузка в г 16 константы 1, т5: out TIMSK, г16 ;

пересылка в регистр TIMSK константы ;

для разрешения прерывания таймера 0, тб: Idi г 16, 3 ;

загрузка в г 16 константы управления таймера 0, ml: out TCCRO, rl6 ;

запуск таймера 0, Команды ml-тЗ выполняют подготовку таймера 0 для работы (т2 - остановка таймера, тЗ - сброс счетчика в нулевое состояние). Команды т4, т5 необходимы для разрешения прерывания таймера 0. Команды тб, ml производят запуск таймера 0. После выполнения команды ml таймер на­ чинает работать: частота входного сигнала fmx/64 в соответствии с константой управления, равной 3, через каждые 256 входных импульсов фор мируется флаг прерывания TOV0. Следовательно, вызов соответствующего вектора прерывания будет производиться каждые 64*256=16384 тактов работы микроконтроллера. 3.4.2. Таймер 1 Таймер 1 построен на основе 16-разрядного двоичного счетчика, форми­ рует прерывания по 4 различным векторам прерываний, может использо­ ваться в качестве широтно-импульсного модулятора (ШИМ) и обладает существенно расширенными возможностями по сравнению с таймером 0. Управление прерываниями, в соответствии с ранее описанными процеду­ рами, производится соответствующими битами регистров TIMSK и TIFR. Кроме этих двух регистров, режимы и параметры работы таймера 1 опре­ деляют еще 10 регистров файла регистров ввода-вывода. Переполнение таймера 1 формирует флаг прерывания TOV1 (аналогичен флагу TOV0), который при выполнении необходимых условий вызывает вектор прерывания TIMl_OVF с адресом $008. В таймере 1 также пре­ дусмотрены два канала сравнения эталонных значений, хранящихся в реги­ страх OCR1А и OCR IB, с текущим состоянием счетчика (Compare A, Com­ pare В). При совпадении эталонного значения с текущим состоянием счет­ чика формируется соответствующий флаг прерывания OCF1A или OCF1B в регистре TIFR и выполняется такая же стандартная процедура обработки аппаратных прерываний, как и для остальных флагов. Вектор прерывания канала А - TIM1COMPA с адресом $006, вектор прерывания канала В - Т1М1_СОМРВ с адресом $007. Последний флаг прерывания таймера 1 - прерывание режима захват ICF1. Когда на вход режима захват ICP (альтернативная функция ли­ нии ввода-вывода PD6) поступает сигнал, текущее состояние таймера за­ писывается в специальный регистр захвата ICR1 и формируется флаг прерывания ICF1 регистра TIFR со стандартной процедурой вызова векто­ ра прерывания Т1М1_САРТ с адресом $005. Основное назначение этого режима - отсчет интервала времени от программного запуска таймера до внешнего события, изменившего входной сигнал PD6. Двухбайтовый регистр ICR1 программно доступен только для чтения и содержит оба байта текущего состояния 16-битового счетчика (ICR1L - ре­ гистр младшего байта, ICR1H - регистр старшего байта). При чтении со­ держимого регистра ICR1 в подпрограмме обработки прерывания сначала должна выполняться команда чтения младшего байта (регистр ICR1L) и только после этого - команда чтения старшего байта (регистр ICR1H) \ Чтение и запись содержимого всех 16-битовых регистров необходимо произво­ дить в определенной последовательности для обеспечения одновременного доступа к обоим байтам. В процедурах доступа старший байт всегда помещается в регистр временного хранения TEMP. Процедуры доступа ко всем двухбайтовым регистрам должны выполняться в соответствии с правилами данного примечания. Остальные параметры и режимы задаются регистрами TCCR1A и TCCR1B. Символические имена битов управления в регистре TCCR1А |COMlAl|COMlA0lCQMlBl|CQMlB0| - ( - \ PWM11 | PWM10| Каждый канал сравнения в дополнение к флагу прерывания может фор­ мировать на выводах порта D выходной сигнал: ОС1А (альтернативная функция PD5), ОС1В (альтернативная функция PD4) с параметрами, определяемыми битами COM 1A1, СОМ1 АО, COMIBI, СОМ1В0 регистра TCCR1A. Режимы формирования выходных сигналов для каналов Compare A, Compare В одинаковы и соответствуют битам управления СОМ 1X1, СОМ 1X0 (X - это или канал А, или канал В) следующим образом: 00 - выходной сигнал ОС IX не формируется, выходы порта D не ис­ пользуются. 01 - выходной сигнал ОС IX импульсный. 10 - выходной сигнал ОС IX имеет активный нулевой уровень. 11 - выходной сигнал ОС IX имеет активный единичный уровень. Рекомендуется при использовании сигнала ОСIX запретить прерывание по этому каналу очисткой соответствующего бита разрешения в регистре TIMSK, иначе произойдет обработка прерывания при формировании этого сигнала. Эти же сигналы являются выходными для таймера, работающего в режиме модулятора ШИМ. Последние биты PWM11, PWM10 регистра TCCR1A определяют работу таймера 1 в режиме модулятора ШИМ следующим образом: 00 - режим модулятора ШИМ запрещен (работа в стандартных режимах таймера). 01 - 8-битовый модулятор ШИМ. 10 - 9-битовый модулятор ШИМ, 11 - 10-битовый модулятор ШИМ. Работа в режиме модулятора ШИМ будет описана позднее.

Pages:     || 2 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.