Традиционно, первым учебным проектом на микроконтроллере предлагается программный код, осуществляющий мигание светодиода, подключенного к какому-либо порту. Ниже приведены варианты реализации подобной функции, выполненные с помощью различных возможностей микроконтроллера LPC1114.
Задачу получения периодического зажигания и гашения светодиода можно свести к формированию выходного сигнала с определенной частотой. Практически любой микроконтроллер позволяет выполнить такое действие несколькими способами. В их число входят как чисто программные, так и аппаратные варианты. Ниже рассмотрены 5 способов, которые можно использовать в микроконтроллерах серии LPC11xx или на плате LPCXpresso. В первых четырех вариантах светодиод подключен к выходу PIO2_10. В пятом имеется жесткая привязка к аппаратной платформе. Все примеры программ написаны и опробованы в среде CodeRed.
1. Программная задержка в цикле.
Самым простым способом частотный сигнал формируется с помощью программной задержки. В этом варианте не используются никакие дополнительные устройства микроконтроллера. При всей простоте такого решения, оно имеет незначительное практическое применение, так как впустую растрачивает ресурсы микроконтроллера. Использовать его можно, например, для формирования вспомогательных сигналов при отладке.
Основу способа составляет пустой цикл, время исполнения которого подбирается под половину периода мигания светодиода. В некоторых случаях, например при использовании переменных малой разрядности, может потребоваться использование вложенных циклов.
2. Задержка с помощью таймера.
Реализация задержки с помощью таймера отличается от предыдущего случая только использованием специального блока контроллера, позволяющего задавать временные интервалы.
3. Работа по значению таймера.
В данном примере также используется таймер, но при этом срабатывание происходит по условию. Недостатком можно считать не самое рациональное использование таймера и организацию программы.
Таймер настраивается таким образом, чтобы его счетчик инкрементировался без формирования прерываний или остановов счета. Если прерывания все же необходимы, то для решения других задач программы, их можно использовать, но счетчик таймера сбрасываться не должен.
Пользовательская функция производит постоянное сравнение значения счетчика таймера с моментом переключения выходного состояния линии микроконтроллера. Например, если значение счетчика, ниже половины от максимального значения, выход устанавливается в высокое состояние, если больше, выход переводится в низкое состояние.
4. Работа по прерыванию от таймера.
Одним из самых продвинутых способов формирования последовательности импульсов является работа по прерыванию от таймера. В этом случае, таймер настраивается на генерацию прерываний, по достижению требуемого значения счетчика. В подпрограмме обработки прерывания производится изменение состояния выхода на противоположное и перезапуск таймера.
5. Работа таймера в режиме сравнения.
Еще одним полезным вариантом организации мигания может стать использование функции формирования внешнего сигнала от модуля сравнения таймера. В этом случае не требуется никакого программного кода, кроме функции настройки. Все необходимые действия выполняются непосредственно самим таймером, процессор может решать свои задачи, не отвлекаясь на переключение выхода. Данный способ имеет и солидное практическое применение при организации ШИМ. Недостатком данного способа является жесткая привязка выходных устройств к аппаратным модулям микроконтроллера. В примере используется модуль TIM16_1 и его выход MAT0, совмещенный с PIO1_9.