Visits: 2877
Сама задержка или ожидание чего-то не самая популярная вещь в программировании, ведь она просто тратит машинное время в пустую. Но как ни крути, время от времени её необходимо использовать. Как видим одним из удобных вариантов формирования задержки нам предоставляет стандартная библиотека libpic30.h в виде трех макросов:
__delay32 – формирование задержки в тактах процессорного времени.
пример: __delay32(NNN); где NNN – unsigned long циклов, минимальное число 12 циклов, если значение меньше 12, то все равно будет задержка в 12 циклов (12-4294967295).
__delay_ms – формирование задержки в миллисекундах.
пример: __delay_ms(NNN); где NNN – unsigned int – миллисекунд (0-65536).
__delay_us – формирование задержки в микросекундах.
пример: __delay_us(NNN); где NNN – unsigned int – микросекунд (0-65536).
Для макросов __delay_ms и __delay_us необходимо сделать определение и указать рабочую тактовую частоту контроллера, сделать это надо до “вставки” библиотеки (типа так):
// #define FCY 32000000UL // определение тактовой частоты для макросов __delay_ms() и __delay_us() #include // библиотека функций //
Существуют разные возможности формирования задержек при помощи встроенных таймеров, но как показала практика, ни в эффективности, ни в практичности они уступают макросам. Во первых расходуется больше памяти, во вторых задействован сам таймер, который может использоваться для других целей.
Но для расширения кругозора, приведем пример, решения нашей задачи из прошлой главы с миганием светодиодов.
Для начала необходимо включить в работу сам таймер (работу самого таймера будет рассмотрено позже):
//--------------------------------------------------------------------------- // Настройка таймера TMP1 T1CON = 0b1000000000110000; // |||||||||||||||+-- неиспользуемый // ||||||||||||||+--- TCS: источник тактовых импульсов FOSC/2 // |||||||||||||+---- TSYNC: состояние игнорируется, так как тактовая частота системный генератор // ||||||||||||+----- неиспользуемый // ||||||||||++------ TCKPS1:TCKPS0: настройка предделителя 11 = 1:256 // |||||||||+-------- TGATE: 0- режим измерение длительности входного импульса отключен // |||++++++--------- неиспользуемые // ||+--------------- TSIDL: 0- продолжать работу в режиме ожидания (сна) // |+---------------- неиспользуемый // +----------------- TON: 1 -таймер включен PR1=0xFFFF; // период счета //
После такого включения таймера можно выполнить формирования задержки следующим образом:
// TMR1=0; while(TMR1 < 60000); //
А сам главный цикл из прошлой главы может быть иметь такой вид:
// while(1) { ClrWdt(); // сброс сторожевого таймера _LATA0 = 0; // выключить светодиод _LATB0 = 1; // включить светодиод TMR1=0; while(TMR1 < 60000); // __delay_ms(500); // ждать 0,5 секунды _LATA0 = 1; // включить светодиод _LATB0 = 0; // выключить светодиод TMR1=0; while(TMR1 < 60000); // __delay_ms(500); // ждать 0,5 секунды } //
Всем желающим можно попробовать этот вариант. Хотя как я уже говорил, он не эффективен.
Это может быть интересно
- Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Visits: 3441 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
- Проект с использованием MCC часть 10Visits: 794 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
- NS108-5050-16bit от NewstarVisits: 577 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
- Простой сенсорный регулятор светаVisits: 2299 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …
- HVLD модуль на примере PIC24FJ128GA204Visits: 616 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
- Датчик контроля протечки воды ch-c0020Visits: 1934 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
- Униполярный шаговый двигательVisits: 2143 В приводах различных устройств часто применяются шаговые двигатели, Шаговый двигатели различают двух типов униполярные – когда обмотки коммутируются током текущим только в одну сторону, например при …
- Регулятор влажности ch-3800Visits: 1400 И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …
- Development of temperature control and management systemsVisits: 53 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
- Мониторинг температурыVisits: 1365 Настоящий проект создан как обучающий с применением библиотек ds18b20 и LCDHD44780 и компилятора Microchip MPLAB XC8 C Compiler V1.12. Если необходимо иметь информацию по состоянию температуры в помещении или в здании, с количеством до 6 точек (16), то …