Автор: Сергей КИРИЧИК
В современной электронной технике все чаще встречаются микроконтроллеры. Использование таких микросхем значительно упрощает схемотехнику приборов и позволяет легко изменять функциональные возможности путем изменения программы работы микроконтроллера. Они применяются в системах управления двигателями, бытовой технике, медицинских приборах, электроинструментах, игрушках и т.п.
Микроконтроллер – это целая микропроцессорная система в одной микросхеме (на одном кристале). Одна микросхема содержит в себе процессор, память, порты ввода/вывода и некоторые дополнительные устройства: таймеры, устройства прерывания, компараторы и др.
По отношению к естественному, человеческому, различают такие уровни языков программирования микроконтроллеров:
— низкий уровень — машинные языки;
— языки Ассемблера — близки к машинному;
— языки высокого уровня — приближены к человеческому.
Пользование машинным языком, единственно понятным микроконтроллеру, вызывает трудности, связанные с необходимостью записи громоздких, трудно запоминаемых двоичных кодовых комбинаций, со сложностью поиска ошибок в составленой программе, представляющую собой последовательность цифровых кодов, с трудностью внесения изменений в составляющую программу.
Наряду с указанными недостатками язык кодовых комбинаций имеет и достоинства. Программа на этом языке оказывается наиболее эффективной, она занимает минимальный объем памяти и быстрее исполняется.
Трудности программирования уменьшаются при использовании языка Ассемблера. В этом языке вместо кодовых комбинаций применяется мнемоническая форма записи операций (мнемоники), выполняемых в микропроцессоре. Такой мнемонической записью ( в виде сочетания букв, взятых из соответствующих английских слов: MOV — перемещение, ADD — сложение, SUBB — вычитание) представляют вид выполняемой операции, операнды и адреса. Каждой команде на языке Ассемблера соответсвует команда на языке кодовых комбинаций.
Язык Ассемблера упрощает запись команд, облегчает поиск в ней ошибок, обеспечивает лучший обзор программы и простоту внесения исправлений в программу.
Перед исполнением программа должна быть переведена с языка Ассемблера на язык кодовых комбинаций и в таком виде помещена в память микропроцессорной системы. Этот перевод осуществляется на компьютере с помощью программы трансляции, называемой Ассемблером.
Язык Ассемблера (так же, как и язык кодовых комбинаций) индивидуален для каждого типа микропроцессора и микроконтроллера.
Языки высокого уровня близки к обычному математическому языку, описывающему процес решения задачи, поэтому они легко усваиваются. Кроме того, они обеспечивают большую компактность программы (сложные вычислительные процессы представляются короткими записями), что улучшает обзор программы и выявление в ней ошибок.
Для программирования в машинных кодах и кодах Ассемблера необходимо знать архитектуру процессора (микроконтроллера), набор команд, владеть хотя бы основами программирования, т. е. быть «специалистом». Для написания программ на языке высокого уровня достаточно знать основы программирования. Поэтому языки Ассемблера среди радиолюбителей занимающимися микроконтроллерами, постепенно вытесняются языками высокого уровня: например Ассемблер заменяется языком Си.
Рассмотрим, как можно быстро написать программу с помощью языка Си для работы микроконтроллера на примере бегущих огней (подачи сигнала на определенных выводах микроконтроллера на определенное время).
Для опыта возьмем, широко распространенный микроконтроллер Atmega8 (Рис. 1.) из семейства восьмибитных микроконтроллеров AVR, фирмы Atmel.
Рис.1. Внешний вид микроконтроллера Atmega8 в корпусе PDIP
Отличительные особенности Atmega8 :
- 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением
- Прогрессивная RISC архитектура
130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл
32 8-разрядных рабочих регистра общего назначения Полностью статическая работа
Приближающаяся к 16 MIPS (при тактовой частоте 16 МГц) производительность
Встроенный 2-цикловый перемножитель - Энергонезависимая память программ и данных
8 Кбайт внутрисистемно программируемой Flash памяти (In-System Self-Programmable Flash)
Обеспечивает 1000 циклов стирания/записи
Дополнительный сектор загрузочных кодов с независимыми битами блокировки
Обеспечен режим одновременного чтения/записи (Read-While-Write)
512 байт EEPROM
Обеспечивает 100000 циклов стирания/записи
1 Кбайт встроенной SRAM
Программируемая блокировка, обеспечивающая защиту программных средств пользователя - Встроенная периферия
Два 8-разрядных таймера/счетчика с отдельным предварительным делителем, один с режимом сравнения
Один 16-разрядный таймер/счетчик с отдельным предварительным делителем и режимами захвата и сравнения
Счетчик реального времени с отдельным генератором
Три канала PWM
8-канальный аналого-цифровой преобразователь (в корпусах TQFP и MLF)
6 каналов с 10-разрядной точностью
2 канала с 8-разрядной точностью
6-канальный аналого-цифровой преобразователь (в корпусе PDIP)
4 канала с 10-разрядной точностью
2 канала с 8-разрядной точностью
Байт-ориентированный 2-проводный последовательный интерфейс
Программируемый последовательный USART
Последовательный интерфейс SPI (ведущий/ведомый)
Программируемый сторожевой таймер с отдельным встроенным генератором
Встроенный аналоговый компаратор - Специальные микроконтроллерные функции
Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания
Встроенный калиброванный RC-генератор
Внутренние и внешние источники прерываний
Пять режимов пониженного потребления: Idle, Power-save, Power-down, Standby и снижения шумов ADC - Выводы I/O и корпуса
23 программируемые линии ввода/вывода
28-выводной корпус PDIP, 32-выводной корпус TQFP и 32-выводной корпус MLF - Рабочие напряжения
2,7 — 5,5 В (ATmega8L)
4,5 — 5,5 В (ATmega8) - Рабочая частота
0 — 8 МГц (ATmega8L)
0 — 16 МГц (ATmega8)
Блок-схема:
Рис.2. Блок-схема микроконтроллера Atmega8
Расположение выводов Atmega8:
Рис.3. Расположение выводов микроконтроллера Atmega8 в корпусе DIP
Рис.4. Расположение выводов микроконтроллера Atmega8 в корпусе MLF
Рис.5. Расположение выводов микроконтроллера Atmega8 в корпусе TQFP