Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11 Программирование микроконтроллеров.pptx
Скачиваний:
20
Добавлен:
19.01.2023
Размер:
739.71 Кб
Скачать

Программирование микроконтроллеров

Языки программирования микроконтроллеров – по своей структуре мало отличаются от классических языков для компьютеров. Единственным отличием становится ориентированность на работу со встроенными периферийными устройствами. Архитектура микроконтроллеров требует, например, наличия битово-ориентированных команд. Последние позволяют выполнять работу с отдельными линиями портов ввода/вывода или флагами регистров. Подобные команды отсутствуют в большинстве крупных архитектур.

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

Ассемблер отлично подходит для программирования микроконтроллеров, имеющих ограниченные ресурсы, например 8- ми битных моделей с малым объемом памяти. Для больших программ и тем более 32-разрядных контроллеров, лучше использовать другие языки, отличающиеся более высоким уровнем. Это позволит создавать более сложные и при этом понятные программы.

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

Язык С/С++ имеет достаточно сложную для изучения структуру. Получаемый программный код конкретной задачи имеет больший объем, чем код той же задачи, реализованной на Ассемблере. Тем не менее язык С/С++ следует признать единственным правильным выбором для профессионального программирования микроконтроллеров.

Программирование микроконтроллеров

Arduino Wiring C++

Хотя его часто называют «языком программирования Arduino», фактически это C++, который использует подмножество библиотек, специфичных для платформы Arduino.

Отличия Arduino Wiring C++ от обычного C++ заключаются в подпрограммах для микроконтроллеров, поскольку стандартные функции библиотеки C++ не могут работать на ограниченных мощностях и памяти.

Использование такой уменьшенной версии C++ делает этот язык очень доступным, так как многие разработчики уже знакомы с обычным C++. Фактически, используя компилятор, код может быть написан на C++, а затем интерпретирован в код, который может использоваться Arduino.

Преимущество использования Arduino C++ состоит в том, что он подходит для коммерческих сред, работает быстрее, чем более крупные языки, такие как Python, и обладает высокой переносимостью.

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

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

Недостатком BASIC является плохая структурированность кода. Этот язык не стоит выбирать для первоначального изучения с целью дальнейшего перехода на С/С++.

MicroPython. Python – это многофункциональный интерпретируемый язык, известный своей простотой, понятностью и универсальностью. Эти функции также делают язык слишком большим для микроконтроллеров. Однако с помощью кампании на Kickstarter в 2013 году физик Дэмиен Джордж смог адаптировать Python в уменьшенную версию MicroPython, которая подходит для использования на микроконтроллере.

Программирование микроконтроллеров

Код MicroPython является открытым исходным кодом под лицензией MIT. Язык работает на голом железе микропроцессора, используя небольшое подмножество функций стандартной библиотеки Python. Он может работать, используя только 256 КБ flash-памяти и 16 КБ ОЗУ, но при этом он хорошо совместим с обычным Python.

Средства программирования микроконтроллеров TI MSP430.

Для программирования микроконтроллеров MSP430 существует несколько компиляторов и встроенных программных сред разработки (IDE). Основными программными пакетами, предназначенными для разработки приложений с использованием MSP430, являются начальная (стартовая) версия пакета IAR Embedded Workbench KickStart и Code Composer Studio (CCS). Как IAR, так и CCS имеют бесплатно загружаемые версии с ограничением кода. Эти среды полностью функциональны на устройствах серии MSP430 Value Line, поскольку данные устройства не будут превышать предельный размер кода 4 КБ для IAR или 16 КБ для CCS. Языки программирования в этих пакетах – Ассемблер и C/C++.

Альтернативой этим средствам разработки является среда разработки Energia – модифицированная версия среды Arduino IDE, разработанная специально для программирования LaunchPad MSP430 и распространяемая бесплатно. Интерфейс IDE полностью совпадает с прародителем, за исключением цветовой гаммы интерфейса. Таким образом, с помощью Energia можно легко использовать тексты Arduino-программ для LaunchPad. Описание среды Energia можно получить на сайте https://energia.nu/. Оттуда же можно произвести и загрузку драйверов и программного обеспечения.

Язык программирования в среде Energia – язык Arduino Wiring, достаточно понятный и простой в освоении. Си- подобный язык Arduino Wiring основан на C/C++ и поддерживает все стандартные конструкции языка C и некоторые из функций языка C++. Он также ссылается на библиотеку AVR libc и может использовать любые из ее возможностей

. Существует полный русский перевод языка Arduino, предназначенный для преодоления языкового барьера при распространении платформы по России http://atmel.ucoz.ru/publ/spravochnik_po_jazyku/1-1-0-1.

Программирование микроконтроллеров

Code Composer Studio (CCS) - это интегрированная среда разработки (IDE), которая поддерживает портфель микроконтроллеров и встроенных процессоров Texas Instruments (TI). CCS содержит набор инструментов, используемых для разработки и отладки встроенных приложений. Он включает в себя редактор исходного кода, оптимизирующий компилятор C/C++, среду сборки проекта, отладчик, профилировщик и многие другие функции. Интуитивно понятная среда IDE предоставляет единый пользовательский интерфейс, позволяющий пройти каждый этап процесса разработки приложения. CCS сочетает в себе преимущества программной платформы Eclipse с расширенными возможностями встроенной отладки от TI, что обеспечивает привлекательную многофункциональную среду разработки.

На рисунке – окно CCS с загруженной программой (Ассемблер) в режиме отладки.

Программирование микроконтроллеров

Среда разработки Energia – это платформа с открытым исходным кодом, созданная целью предоставить средства разработки программного обеспечения Arduino и языка Wiring для устройств LaunchPad на базе микроконтроллеров Texas Instruments MSP430. В состав Energia входит интегрированная среда разработки (IDE), основанная на IDE Arduino. IDE Energia является кроссплатформенной и поддерживается в Mac OS, Windows и Linux. IDE Energia отличается простотой использования, пригодна для целей обучения студентов, вместе с тем может эффективно использоваться также профессиональными разработчиками и инженерами.

Среда Energia имеет в своем составе достаточно обширную библиотеку примеров программирования модуля LaunchPad. Запуск примера производится из меню File/Examples, или с помощью кнопки Open на панели инструментов. Познакомиться с приемами работы со средой Energia можно на простейшем примере программирования – мигании светодиода. Для запуска примера необходимо выбрать File -> Examples -> 01.Basics/Blink. В окно Energia загружается текст программы управления миганием красного светодиода. На рисунке - программа в режиме редактирования.

Программирование микроконтроллеров

Структура программы: любая программа на языке Arduino Wiring для LaunchPad обязательно состоит из двух функций – setup() и loop().

Функция setup() вызывается при старте программы. Ее можно использовать для инициализации переменных, конфигурирования режимов работы линий портов микроконтроллера (на ввод или вывод), назначения номеров выводов микроконтроллера (pin) рабочим целочисленным переменным, вызова стартовых функций библиотек и т.д. Функция setup() вызывается лишь однажды, после каждой подачи питания или перезагрузки платформы. В примере: в теле функции setup() вызывается функция pinMode(RED_LED, OUTPUT). Она устанавливает статус линии порта ввода/вывода микроконтроллера, к которой подключен красный светодиод, на выдачу сигнала во внешнюю цепь.

Функция loop() - это основной цикл программы. Данная функция выполняется бесконечное число раз. Платформа управляется через эту функцию. Обычно в цикле loop() производятся операции чтения входных сигналов микроконтроллера, выполнения необходимых расчетов и выдачи выходных сигналов. В примере: в теле функции loop()

oвызов функции digitalWrite(RED_LED, HIGH) устанавливает выходной сигнал для красного светодиода в высокий уровень;

oвызов функции delay(1000) выполняет задержку длительностью 1000 мс;

oвызов функции digitalWrite(RED_LED, LOW) устанавливает выходной сигнал для красного светодиода в низкий уровень;

oвызов функции delay(1000) выполняет задержку длительностью 1000 мс;

oцикл повторяется.

Прошивка программы во флэш-память микроконтроллера осуществляется кнопкой Upload, или через пункт меню File/Upload.

Программирование микроконтроллеров

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

чтение данных с устройств ввода – кнопок, клавиатуры, аналого-цифровых преобразователей и т.п.;

выполнение необходимых операций над входными данными;

выдача данных на устройства вывода – элементы индикации, реле, цифро-аналоговые преобразователи и т.п.

Программирование цифровых портов ввода-вывода. Микроконтроллеры семейства MSP430 могут иметь до восьми портов ввода-вывода P1…P8. Все порты содержат по восемь выводов (линий). Каждый из выводов порта индивидуально конфигурируется в качестве входа или выхода. Запись и чтение линий ввода-вывода также может осуществляться в индивидуальном порядке.

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

Цифровые порты ввода-вывода обладают следующими возможностями:

oнезависимые индивидуально программируемые линии ввода-вывода – каждая линия порта, независимо от других, может быть настроена на ввод сигналов от внешних источников, либо на вывод сигналов из микроконтроллера на внешние приемники;

oлюбые комбинации входов или выходов;

oраздельные регистры данных для входов и выходов;

Программирование микроконтроллеров

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

oиндивидуально конфигурируемые прерывания от выводов портов P1 и P2.

Конфигурирование цифровых портов ввода-вывода осуществляется пользовательской программой. Настройка функционирования цифровых портов осуществляется с помощью нескольких специализированных регистров.

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

oБит = 0: Входной сигнал имеет НИЗКИЙ уровень.

oБит = 1: Входной сигнал имеет ВЫСОКИЙ уровень.

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

oБит = 0: Выходной сигнал имеет НИЗКИЙ уровень.

oБит = 1: Выходной сигнал имеет ВЫСОКИЙ уровень.

Если используется внутренний подтягивающий резистор, то значение бита регистра PxOUT определяет тип «подтяжки» на соответствующем выводе порта:

oБит = 0: Вывод подтягивается к общему проводу.

oБит = 1: Вывод подтягивается к питанию.

Программирование микроконтроллеров

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

oБит = 0: Вывод порта переключается на вход.

oБит = 1: Вывод порта переключается на выход.

Регистр включения подтягивающих резисторов PxREN. Каждый бит регистра PxREN подключает или отключает внутренний подтягивающий резистор соответствующего вывода порта. Тип «подтяжки» определяется соответствующим битом регистра PxOUT.

oБит = 0: Подтягивающий резистор отключен.

oБит = 1: Подтягивающий резистор подключен.

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

Язык Ассемблер.

MSP430 – Система команд http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/asm/index.htm

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

Программирование микроконтроллеров

BIC.B – очистка битов в байте получателя. Инвертированный операнд источника src и операнд получателя dst поразрядно логически перемножаются. Результат помещается в получатель. Операнд источника не изменяется.

Пример – Очистка пяти старших битов байта регистра P1DIR:

• BIC.B #11111000b,&P1DIR ; очистка P3…P7 битов регистра P1DIR

• BIC.B #0F8h,&P1DIR ; очистка битов P3…P7 регистра P1DIR

BIS.B – установка битов в байте получателя. Над операндом источника и операндом получателя выполняется операция поразрядного логического «ИЛИ» (логическое сложение). Результат помещается в получатель. Операнд источника не изменяется.

Пример – Установка трех младших битов байта регистра P1OUT:

• BIS.B #11100000b,&P1OUT ; установка битов P5…P7 регистра P1OUT

• BIS.B #0E0h,&P1OUT ; установка битов P5…P7 регистра P1OUT