Visits: 2882
Сама задержка или ожидание чего-то не самая популярная вещь в программировании, ведь она просто тратит машинное время в пустую. Но как ни крути, время от времени её необходимо использовать. Как видим одним из удобных вариантов формирования задержки нам предоставляет стандартная библиотека 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 секунды } //
Всем желающим можно попробовать этот вариант. Хотя как я уже говорил, он не эффективен.
Это может быть интересно
- Temperature measurement with NTC thermistor.Visits: 236 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
- Мониторинг температурыVisits: 1367 Настоящий проект создан как обучающий с применением библиотек ds18b20 и LCDHD44780 и компилятора Microchip MPLAB XC8 C Compiler V1.12. Если необходимо иметь информацию по состоянию температуры в помещении или в здании, с количеством до 6 точек (16), то …
- Сумеречное релеVisits: 1426 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
- ch-светомузыка и AK4113Visits: 1264 Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это …
- WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)Visits: 5005 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
- Цифровой тахометр для автомобиля CH-С3300Visits: 1885 Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика …
- Бегущие огни (ch-bo-36)Visits: 2417 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …
- JDY-62A Audio bluetooth moduleVisits: 1642 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
- TDA7294 part 2Visits: 251 Це друга частина проекту TDA7294, початок дивись тут. Тут ви знайдете повністю проект високоякісного підсилювача на TDA7294, схема, 3D моделі, гербер файли для виготовлення друкованої плати. І звичайно …
- Проект с использованием MCC часть 16Visits: 1051 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …