
Views: 1055
Сама задержка или ожидание чего-то не самая популярная вещь в программировании, ведь она просто тратит машинное время в пустую. Но как ни крути, время от времени её необходимо использовать. Как видим одним из удобных вариантов формирования задержки нам предоставляет стандартная библиотека 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 секунды } //
Всем желающим можно попробовать этот вариант. Хотя как я уже говорил, он не эффективен.
Это может быть интересно
MPLAB® Harmony – или как это просто! Часть 4.
Views: 2173 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …AD9833 – Programmable Waveform Generator – part two
Views: 1800 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …Development Boards PIC18F47Q84
Views: 5361 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …Индикатор температуры
Views: 2701 Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе …Проект с использованием MCC часть 10
Views: 903 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …Мультимедийная сеть – AVC-LAN TOYOTA
Views: 5810 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …MCC – K42 – настройка модуля DMA
Views: 808 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …Контроллер управления светодиодным освещением с дистанционным управлением
Views: 1946 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …Ссылки на интересные источники
Views: 900 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
Views: 1077 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …