Исследуем формирования задержки

Views: 1174


Сама задержка или ожидание чего-то не самая популярная вещь в программировании, ведь она просто тратит машинное время в пустую. Но как ни крути, время от времени её необходимо использовать. Как видим одним из удобных вариантов формирования задержки нам предоставляет стандартная библиотека 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 секунды

	}
//

Всем желающим можно попробовать этот вариант. Хотя как я уже говорил, он не эффективен.



Это может быть интересно


  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Views: 946 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • LM317 и светодиодыLM317 и светодиоды
    Views: 8065 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …
  • Защита датчиков температуры DS18B20 от статического электричестваЗащита датчиков температуры DS18B20 от статического электричества
    Views: 1931 Статья перепечатана с сайта http://svetomuzyka.narod.ru При удалении датчика на большие расстояния возникает опасность наведения импульсов высокого напряжения на кабель, который соединяет датчик с контролером. Если не принимать меры защиты, …
  • AD9833 – Programmable Waveform Generator – part twoAD9833 – Programmable Waveform Generator – part two
    Views: 1820 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …
  • Development of temperature control and management systemsDevelopment of temperature control and management systems
    Views: 170 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
    Views: 1125 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
  • Altium Designer my setup system and project structure V23.3Altium Designer my setup system and project structure V23.3
    Views: 274 Оновлення бази даних та шаблонів від березня 2023 року. Updating the database and templates from March 2023. Altium Designer my Libraries, Project templates, System settings by Catcatcat. Дивись …
  • Дифференциальный терморегуляторДифференциальный терморегулятор
    Views: 4089 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    Views: 1785 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
  • ch-4000 – универсальная печатная платаch-4000 – универсальная печатная плата
    Views: 1111 На смену устаревшей плате ch-3000, пришла новая ch-4000. Плату уже можно приобрести в магазине Ворон. Схема. Плата позволяет создавать таймеры, часы реального времени, регуляторы температуры, регуляторы влажности, вольтметры, …


Поделись этим!