- Настройка оборудования и требования
- Схема подключения светодиодов к Nuvoton N76E003
- Контакты таймера на Nuvoton N76E003
- Регистры таймера в Nuvoton N76E003
- Типы времени в Nuvoton N76E003
- Программирование микроконтроллера Nuvoton N76E003 для таймеров
- Мигающий код и проверка выхода на работоспособность таймера
В наших предыдущих руководствах по микроконтроллерам Nuvoton мы использовали базовую программу мигания светодиодов в качестве руководства по началу работы, а также использовали интерфейс GPIO в качестве входа для подключения тактильного переключателя. Благодаря этому руководству мы полностью знаем, как настроить проект Keil и настроить среду для программирования микроконтроллера N76E003 Nuvoton. Пришло время использовать внутреннее периферийное устройство микроконтроллера и пойти немного дальше, используя встроенный таймер N76E003.
В нашем предыдущем руководстве мы использовали только программную задержку для мигания светодиода, поэтому в этом руководстве мы узнаем, как использовать функцию задержки таймера, а также таймер ISR (процедура обслуживания прерывания) и мигать двумя отдельными светодиодами. Вы также можете ознакомиться с учебным пособием по таймеру Arduino и учебником по таймеру PIC, чтобы узнать, как использовать таймеры с другими микроконтроллерами. Не теряя много времени, давайте оценим, какое оборудование нам требуется.
Настройка оборудования и требования
Поскольку требование этого проекта - изучить таймер ISR и функцию задержки таймера, мы будем использовать два светодиода, из которых один будет мигать с использованием задержки таймера в цикле while, а другой будет мигать внутри функции ISR.
Поскольку в плате разработки N76E003 имеется светодиод, для этого проекта требуется один дополнительный светодиод и резистор ограничения тока для ограничения тока светодиода. Компоненты, которые нам требуются -
- Любой цвет светодиода
- Резистор 100R
Не говоря уже о том, что помимо перечисленных выше компонентов, нам понадобится отладочная плата на базе микроконтроллера N76E003, а также программатор Nu-Link. Кроме того, для соединения всех компонентов требуются макетная плата и соединительные провода.
Схема подключения светодиодов к Nuvoton N76E003
Как видно на схеме ниже, тестовый светодиод находится внутри платы разработки и подключен к порту 1.4. К порту 1.5 подключается дополнительный светодиод. Резистор R3 используется для ограничения тока светодиода. В крайнем левом углу показано подключение интерфейса программирования.
Контакты таймера на Nuvoton N76E003
Контактная схему N76E003 можно увидеть в ниже image-
Как мы видим, каждый вывод имеет разные характеристики, и каждый вывод может использоваться для разных целей. Однако вывод 1.5, который используется как вывод светодиода, потеряет ШИМ и другие функции. Но это не проблема, поскольку для этого проекта не требуется других функций.
Причина выбора контакта 1.5 в качестве выхода и контакта 1.6 в качестве входа заключается в том, что в ближайшее время доступны контакты GND и VDD для упрощения подключения. Однако в этом микроконтроллере из 20 контактов 18 контактов могут использоваться в качестве вывода GPIO, а любые другие выводы GPIO могут использоваться для вывода и связанных с вводом целей, за исключением вывода 2.0, который специально используется для ввода сброса и не может использоваться как вывод. Все контакты GPIO можно настроить в описанном ниже режиме.
Согласно таблице данных, PxM1.n и PxM2.n - это два регистра, которые используются для определения операции управления портом ввода-вывода. Поскольку мы используем светодиод, и нам нужен вывод в качестве общих выводов, поэтому мы будем использовать квазидвунаправленный режим для выводов.
Регистры таймера в Nuvoton N76E003
Таймер - важная вещь для любого микроконтроллера. Микроконтроллер поставляется со встроенным периферийным таймером. Nuvoton N76E003 также поставляется с периферийными устройствами с 16-битным таймером. Однако каждый таймер используется для разных целей, и перед использованием любого интерфейса таймера важно знать о таймере.
Типы времени в Nuvoton N76E003
Таймер 0 и 1:
Эти два таймера timer0 и timer1 идентичны таймерам 8051. Эти два таймера можно использовать как общий таймер или как счетчики. Эти два таймера работают в четырех режимах. В режиме 0 эти таймеры будут работать в режиме 13-битного таймера / счетчика. В режиме 1 бит разрешения этих двух таймеров будет 16-битным. В режиме 2 таймеры настроены как режим автоматической перезагрузки с 8-битным разрешением. В режиме 3 таймер 1 останавливается, и таймер 0 может использоваться как счетчик и таймер одновременно.
Из этих четырех режимов в большинстве случаев используется режим 1. Эти два таймера могут использовать Fsys (Системную частоту) в фиксированном или предварительно масштабированном режиме (Fys / 12). Его также можно синхронизировать от внешнего источника синхронизации.
Таймер 2:
Таймер 2 также является 16-битным таймером, который в основном используется для захвата формы сигнала. Он также использует системные часы и может использоваться в различных приложениях путем деления тактовой частоты на 8 различных шкал. Его также можно использовать в режиме сравнения или для генерации ШИМ.
Так же, как Таймер 0 и Таймер 1, Таймер 2 можно использовать в режиме автоматической перезагрузки.
Таймер 3:
Таймер 3 также используется как 16-битный таймер, и он используется в качестве источника тактовой частоты для UART. Он также имеет функцию автоматической перезагрузки. Важно использовать этот таймер только для последовательной связи (UART), если приложение требует связи UART. В таком случае рекомендуется не использовать этот таймер для других целей из-за конфликтующего процесса в настройке таймера.
Сторожевой таймер:
Сторожевой таймер можно использовать как стандартный 6-битный таймер, но он не используется для этой цели. Использование сторожевого таймера в качестве таймера общего назначения применимо для приложений с низким энергопотреблением, когда микроконтроллер остается в основном в режиме ожидания.
Сторожевой таймер, как следует из названия, всегда проверяет, правильно ли работает микроконтроллер. В случае зависшего или остановленного микроконтроллера WDT (сторожевой таймер) автоматически сбрасывает микроконтроллер, что гарантирует, что микроконтроллер работает в непрерывном потоке кода без зависания, зависания или останова.
Таймер автоматического пробуждения:
Это еще одно периферийное устройство таймера, которое обслуживает специальный процесс синхронизации так же, как сторожевой таймер. Этот таймер периодически будит систему, когда микроконтроллер работает в режиме низкого энергопотребления.
Это таймерное периферийное устройство может использоваться внутри или с помощью внешних периферийных устройств для вывода микроконтроллера из спящего режима. Для этого проекта мы будем использовать Таймер 1 и Таймер 2.
Программирование микроконтроллера Nuvoton N76E003 для таймеров
Установка контактов в качестве выхода:
Начнем сначала с раздела вывода. Мы используем два светодиода, один из которых является встроенным светодиодом под названием Test и подключен к порту P1.4, а внешний светодиод подключен к контакту P1.5.
Следовательно, эти два контакта настроены как выходной контакт для подключения этих двух светодиодов с помощью приведенных ниже фрагментов кода.
#define Test_LED P14 #define LED1 P15
Эти два контакта установлены как квазидвунаправленные в функции настройки.
недействительная настройка (недействительна) {P14_Quasi_Mode; P15_Quasi_Mode; }
Настройка функции таймера:
В функции настройки таймер 2 необходимо настроить для получения желаемого результата. Для этого мы установим регистр T2MOD с коэффициентом деления 1/128 такта и будем использовать его в режиме задержки автоперезагрузки. Вот обзор регистра T2MOD-
4,5 и 6-й бит регистра T2MOD устанавливает делитель тактовой частоты таймера 2, а 7-й бит устанавливает режим автоматической перезагрузки. Это делается с помощью следующей строки -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Эти две строки определены в файле Function_define.h как
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Теперь эти строки устанавливают значение времени, необходимое для таймера 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Что дополнительно определено в файле Function_define.h как -
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 мс
Итак, 16000000 - это частота кристалла 16 МГц, которая устанавливает временную задержку 100 мс.
Ниже двух строк будут очищены младший и старший байты таймера 2.
TL2 = 0; TH2 = 0;
Наконец, приведенный ниже код активирует прерывание от таймера 2 и запустит таймер 2.
set_ET2; // Разрешить прерывание от таймера 2 set_EA; set_TR2; // Запуск Timer2
Полную функцию настройки можно увидеть в кодах ниже:
недействительная настройка (недействительна) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Разрешить прерывание от таймера 2 set_EA; set_TR2; // Запуск Timer2 }
Функция таймера 2 ISR:
Функцию таймера 2 ISR можно увидеть в приведенном ниже коде.
void Timer2_ISR (void) прерывание 5 { clr_TF2; // Сброс флага прерывания от таймера 2 LED1 = ~ LED1; // тумблер LED1, подключенный в P1.5; }
Мигающий код и проверка выхода на работоспособность таймера
Код (приведенный ниже) при компиляции вернул 0 предупреждений и 0 ошибок, и я прошил его, используя метод прошивки по умолчанию в Keil. После мигания светодиоды мигали с заданной задержкой таймера, как запрограммировано.
Посмотрите видео, приведенное ниже, для полной демонстрации того, как плата работает для этого кода. Надеюсь, вам понравился урок и вы узнали что-то полезное, если у вас есть какие-либо вопросы, оставьте их в разделе комментариев ниже. Вы также можете использовать наши форумы, чтобы задать другие технические вопросы.