Курсовая работа: Микроконтроллеры для начинающих. И не только
Архитектура МК 8051 предполагает раздельное использование памяти программ и данных и носит наз вание гарвардской . Обычно такую архитектуру используют для повышения быстродействия системы з а счёт разделения путей доступа к памяти программ и данных, но в 8051 она была применена с целью получения памяти программ и данных, не требующих одинакового размера. Антипод гарвардской – архитектура фон Неймана – предполагает хранение программ и данных в общей памяти и наиболее характерна для микропроцессоров, ориентированных на использование в компьютерах. Примером могут служить микропроцессоры семейства х86.
Таймеры Т0, Т1 – шестнадцатиразрядные программируемые тайме ры / счётчики , которые могут быть запрограммирова ны на выполнения целого ря да функ ций. И х можно использовать для точного формирования временных интервалов, подсчёта импульсов на вы водах МК, формирова ния последовательности имп ульсов , тактирования приёмоп ередатч ика последовательного канала связ и. Таймеры/счётчики способны вырабатывать з апрос ы прерываний, переключая ЦП на их обслуживани е по событиям и осв обождая его от необ ходимости периодического опроса состояния тайм еров. Поскольку основное применени е МК находят в системах реального времени, таймеры / счётч ики являются их обязательным элементом. В не которых модификациях число тайме ров достигает 32.
Последовательный порт – канал информационного обмен а МК с внешним миром. Такие каналы связ и з анима ют минимальное число выводов кристал ла , обеспечи вая связь на значительные ра сстояния с минимальными аппаратными затратами, В 8051 реализ ован у ниве рсальный асинх ронный последоват ел ьный при ёмопередатчик ( UART ), поддерживающий протокол стандарта RS-23 2C , что обеспечивает воз можность организ ации связ и этого МК и персона льным компьютером. Кром е RS-3 32 C, попу лярными протоколами в м ире вст раиваемых систем являются RS-485, I 2 C(дву хпроводная двунаправленная шина) , SPI (последовател ьный перифери йный трёхпроводный интерфейс), Bitbus (последовательная магистраль у прав ления), CA N(межконтроллерный сетевой и нтерфейс) , USВ (у ниверсальная последовательная шина) и некоторые другие. Практически для любого типа последовательного канала сегодня можно найти МК, имеющи й в св оем составе соответствующий посл едовательный порт.
Параллельные порты ввода / вывода – также обязательная часть любого МК. Обычно их используют для св яз и с ближайшим окружением – датчик ами и исп олнительными механизмами.
Важная особенность параллельных портов МК – воз можность программирования на выполнение нескольких функций. Например, в 8051 выводы портов P0 и P2 могут использ оваться либо как обычные статические регистры ввода / в ывода, либо в качестве шины адреса и данных для подключения в нешни х устройств, таких как дополнительная память программ, память данных, устройства вв ода / вывода. Это придаёт МК архитектурную гибкость. Порт P3 может либо использоваться как статический регистр ввода / в ывода, либо выполня ть специальные фу нкц ии дл я работы последовательного канала, т аймеров, к онтроллера прерываний и т.д. Возможность перепрограммиров ания позв оляет с максимальной эффектив ность ю з адействовать все выводы МК в прое ктируемом устройстве.
Система прерываний – одна из важней ших частей МК. Особенность систем реального времени з аключается в том, что для них чрезвычайно важным параметром является время реакции на внешние события. Поясним на простом примере. Когда Вы произ водите мате матический расч ёт на комп ьютере, то обычно з апускаете программу, предназ наченную для выполнения этих расчётов, и после того, как она з агруз ится в память компьютера, вводите услов ие задачи и ждёте рез ультата. Время ожидани я в таком случае не имеет принципиального значени я (в пределах раз умного, конечно) – медленная работа компьютера может разд ражать, но на результате это не скажется. Система реального в ремени предполагает совершенно конкретную, рассчитываемую на этапе разработки скорость реакции системы управления на внешние со бытия. Зад ерж ки сверх расчётных з десь просто недопустимы – они м огут приводить к катастрофическим последствиям.
Про блемы быстрой реакции на события решаются организацией системы прерыва ний. Она подраз умевает, что для каждого такого события раз рабаты в ается отдельный «кусок» кода, который формирует реакцию МК на него. Этот «кусок» кода называют подпрограммой обработки з апроса на прерывание (для краткости часто используют термин подпрограмма прерывания ) и раз мещают в памяти программ по известному адресу. В момент воз никновения з аданного события сигнал об этом поступает на вх од контроллера прерываний . Последний представляет собой устройство, устанавливающее однозначное соответствие между входным сигналом о происшедшем событии и адресом программной памяти, по которому раз мещена точ ка входа в подпрограмму обработки запроса прерывания от данного события. Контроллер прерывает выполнение ЦП текуще й программы и инициирует его переход на выполнение подпрограммы обработки прерывания. Время, прошед шее с момента воз никновения события до начала выполнения первой инструк ции подпрограммы прерывания, наз ывают временем реакции МК на событие. После окончания обработки ЦП автоматически воз вращается к выполнению прерванной пр ограммы.
Другая функция контроллера прерываний – устан овк а приоритетов событий. Понятие приоритет означает, что выполня емая подпрограмма прерыва ния может быть прервана другим событием только при условии, что оно имеет более вы сокий приоритет, чем текущее. В противном случае ЦП перейдет к обработке нового события после о кончания обработки предыдущего. Контроллер прерыв ан ий, входящи й в состав МК 8051, имеет пять входов событий: два от внешних у стройств, два от таймеров и один от последовательного канала.
Обычно, когда говорят о каком-либо МК, то всегда упоминают семейство , к которому он принадлежит. К одному семейству относят изделия, имеющие одинаковое ядро , под которым понимают совокупность таких поня тий, как система команд, циклограмма работы ЦП, организ ация памяти программ и п амя ти данных, система прерывани й и баз овы й набор периферийных устройств. Фактичес ки на рис. 1 представлено ядро, ставшее основой для с оз дания сотен других модификаций семейства 8051.
Отличия между его различными представителями з аключаются, в основ ном, в составе периферийных устро йств и объёме памяти программ или данных. Поскольку диапазон задач, решаемых МК, чрезвычайно широк, их производители стараются выпустить столько модификаций, чтобы удовлетворить самые разнообразные запросы потребителей. Во многих семействах число модификаций приближается к сотне или даже превышает это значение.
Наиболее важная особенность семейства – программная совместимость на уровне двоичного кода всех входящих в него МК. Это позволяет разработчикам систем заменять одни МК семейства другими без потери наработок своего программного обеспечения. Естественно, чем большее число разновидностей входит в семейство, тем больше шансов выбрать оптимальный вариант, тем привлекательнее это семейство для разработчика. Вопрос правильного выбора семейства МК для новой разработки является стратегическим, так как проблема переноса программного обеспечения между изделиями разных семейств чрезвычайно сложна и даже использование языков высокого уровня не всегда позволяет решить её без больших потерь. К вопросу о критериях выбора мы вернемся в следующих статьях цикла.
Разработка программы – один из наиболее важных этапов в создании устройства на базе МК. Без неё он «мёртв», не реагирует на внешние воздействия и не выдаёт управляющих сигналов.
При включении питания МК немедленно начинает исполнять программу, находящуюся в подключенной к нему памяти программ (обычно это ПЗУ). Её выполнение начинается с некоторого фиксированного адреса, чаще всего нулевого. Адрес – это просто номер ячейки ПЗУ. Процесс осуществля ется следующим образом: МК считывает число, хранящееся в памя ти программ, и в зависимости от его значения, называемого машинным кодом, выполняет определённые действия над содержимым регистров АЛУ, памяти, портов и т.д. Например, прочитав из памяти программ число 32Н, МК «соображает», что нужно считать значение из входного порта номер 2 и поместить его в регистр-аккумулятор. Часто одного байта для описания действия МК не хватает, и тогда МК считывает из памяти дополнительные байты.
После выполнения действия МК считывает значение из следующей по порядку ячейки памяти и т.д. Совокупность байтов, описывающих одно выполняемое МК действие, называют машинной командой (инструкцией), а совокупность таких команд, которые «понимает» МК, – его системой команд или набором инструкций (InstructionSet). МК разных семейств имеют разные системы команд, то есть машинные коды у них имеют разные значения, хотя и выполняют похожие действия.
Итак, программа для МК представляет собой последовательность чисел, значения которых указывают ему, какие действия выполнять. Результатом разработки программы является компьютерный файл, содержащий эти машинные коды. С помощью программатора ПЗУ его заносят («зашивают») в память программ МК.
Каким же образом составляется эта последовательность машинных кодов – программа для МК? Неужели разработчику необходимо помнить значения машинных кодов и вручную задавать их последовательность? Первые программы для МК создавались именно так, и называлось это программированием в машинных кодах. Ясно, что такой способ разработки программ очень трудоёмок и неэффективен.
Первым шагом в облегчении процесса создания программ была компьютерная программа – так называемый транслятор с языка ассемблера. Идея состояла в том, чтобы выражать выполняемые МК действия на более понятном человеку языке и затем преобразовывать эти выражения в машинные коды. В приведённом выше примере машинной инструкции, которая считывает значение порта 2 и помещает его в аккумулятор, выполняемые действия можно условно обозначить как MOVA, P2.
Здесь слово MOV (от англ. move), называемое мнемоникой инструкции, обозначает пересылку значения, а A и P2, именуемые операндами, указывают, откуда взять значение и куда его поместить. Система подобных обозначений называется языком ассемблера. Программа, написанная на нём, обрабатывается транслятором, который преобразует конструкции языка ассемблера в машинные коды.
Программирование на ассемблере широко распространено по сей день. Трансляторы с языка ассемблера для всех популярных семейств микроконтроллеров бесплатны.
Несмотря на очевидные преимущества программирования на ассемблере перед программированием в машинных кодах, во многих случаях ассемблер недостаточно эффективен для реализации задач разработчика. Дело в том, что МК способен выполнять лишь простейшие действия вроде арифметических операций над целыми числами, пересылок, сравнений и т.п. Для более сложных задач, например, для операций над числами с плавающей запятой, разработчикам приходилось писать специальные подпрограммы, пользоваться которыми неудобно и громоздко. Следующим шагом в разработке программ для МК стало создание специальных компьютерных программ – трансляторов с языков программирования высокого уровня, или компиляторов. Наибольшее распространение получил язык программирования Си.
С появлением трансляторов разработка программ для МК резко упростилась. Если, например, нужно сложить в программе два числа, то теперь достаточно просто написать
a=b + c;
а транслятор преобразует это выражение в необходимую последовательность машинных команда зависимости от типов переменных a, b и c.
Использование языка высокого уровня позволяет разработчику отвлечься от системы команд конкретного МК и оперировать более простыми и понятными человеку категориями. От разработчика требуется только знание общей архитектуры МК, принципов работы необходимых для решения поставленной задачи встроенных периферийных устройств и навыки программирования на языке Си. Функциональное наполнение программы реализуется с помощью средств языка Си, который содержит большое число разнообразных подпрограмм (функций): арифметических, для работы с символьными строками и многих других.
Рассмотрим процесс создания программы для МК на языке Си. В процессе разработк и потребуется персональный компьютер.
После уяснени я поставленной задачи разработчик пишет исходный текст своей программы на языке Си с помощью любого текстового редактора. Затем он запускает программу-транслятор с языка Си, которая преобразует исходный текст в промежуточный объектный файл. Транслятор управляется с помощью набора ключей (их описание можно найти в его документации), которые указываются в его командной строке. Если при написании программы разработчик допустил синтаксические ошибки, транслятор выдаёт на экран их спи сок с указанием для каждой номера строки в файле исходного текста. Р азработчик должен исправить все ошибки. После успешной трансляции объ ектные файлы нужно обработать редакторо м связей (линкером) , который и генериру ет файл программы в машинных кодах.
При использовании яз ыка высокого у ровня воз никает одна проблема. Преобразование конструкций языка в машинные к оды возложено на компилятор, а выполнить это преобраз ов ание можно с различной степенью эффектив ности. Кри териями эффективности явля ются размер ма шинного кода ( чем он меньше, тем, естественно, лучше) и с корость машинного кода. З адача генерации компактн ого и быстрого ко да весьма сложна, и от её решения зависит общее качество компилятора. Современные компиляторы Си используют многоуровневую оптимиз ацию, особенности архитектуры конкретного МК, поз воляют создавать смешанные программы, в которых ча сть подпрограмм написана на ассемблере.
Описанный процесс выглядит довольно гром оздким: раз работчик должен вручную запускать разнообраз ные програм мы (текстовый редактор, компи лято р Си, линкер) , помнить управляющие ключи, искать ошибки в программе по номерам строк в файле. Последним на сегодняшний день шагом в облегчении труда разработчика программ для МК стало появле ние инте грированных сред раз работки (IntegratedDevelopmentEnv ironment, I DE). Интегрированная среда разработки – это компьютерная программа, связывающая воедино все этапы разработки программы. Она совмещает в себе текстовый редактор для написания исходных текстов, трансляторы с ассемблера и Си, ли нкер, отладчик, справочную инфо рмацию по МК и другие средств а, необходимые р аз работчику. На стройка трансляторов, линкера и других компонентов производится не методом указания ключей в командной строке, а в виде диалоговых окон, где нужно только расставить «галочки» в нужных местах. Преобраз ование исх одн ых текст ов про грамм в файл машинных кодо в запускае тся одной клавишей.
Появление интегрированных сред разработк и программ ещё больше повысило эффективность соз дания программ для МК, позволило раз работчику сосредоточиться на сути решаемой з адачи и отвлечься от конкретных деталей её реализ аци и.