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

Views: 1206


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

	}
//

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



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


  • Бегущие огни (ch-bo-36)Бегущие огни (ch-bo-36)
    Views: 2596 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Views: 936 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • BMP280 – температура и атмосферное давление – учебный проектBMP280 – температура и атмосферное давление – учебный проект
    Views: 2263 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
  • Гаджеты для домашней автоматики – Емкостной сенсорГаджеты для домашней автоматики – Емкостной сенсор
    Views: 1813 Управление светодиодным освещением – Сенсор емкостной. Данный гаджет предназначен для управления освещением где необходимо включением освещение сенсорным прикосновением. Датчик позволяет управлять светодиодной нагрузкой в виде модулей или светодиодных лент …
  • Дифференциальный терморегуляторДифференциальный терморегулятор
    Views: 4142 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
  • Проект с использованием MCC часть 12-1Проект с использованием MCC часть 12-1
    Views: 1087 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Views: 6657 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …
  • Проект с использованием MCC часть 16Проект с использованием MCC часть 16
    Views: 1289 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
  • Проект с использованием MCC часть 01Проект с использованием MCC часть 01
    Views: 2682 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …
  • Kitchen timer with contactless gesture controlKitchen timer with contactless gesture control
    Views: 775    Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …


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