Подпрограмма формирования задержки

Для формирования паузы (задержки) в программах для микроконтроллера полезно применять программы, которые не нагружая ми АЛУ микроконтроллера ни память с высокой точностью справляются с этой задачей.
Как уже думаю стало понятно, микроконтроллер в момент паузы работает, то есть выполняет определенную программу, которая заменяет выполнение основной программы требующей той самой задержки.

Ниже показан пример программы формирования задержки. Основа программы это выполнение паузы размером в один машинный такт микроконтроллера - "nop".

  1. #define nop() {asm("nop");}
  2. unsigned int x,i; //перечисление переменных
  3.  
  4. // function delay
  5. void delay(int t)
  6. {
  7. for (x=t; x>0 ;x--)
  8. nop ();
  9. }

Максимальная пауза генерируемая данной программой ограничена максимальным значением переменной "i".
Если необходимо сформировать довольно длительную задержку советую прибегнуть к небольшой хитрости, использовать данную программу в качестве подпрограммы для программы длительной задержки, объясняю:
описываем данную программу задержки как обычно

  1. #define nop() {asm("nop");}
  2. unsigned int x,i; //перечисление переменных
  3.  
  4. // function delay
  5. void delay(int t)
  6. {
  7. for (x=t; x>0 ;x--)
  8. nop ();
  9. }

После чего ниже пишем следующую программу:

  1. // function long delay
  2. void long_delay(int p)
  3. {
  4. for (j=0; j<p; j++)
  5. {
  6. delay(300);
  7. }
  8. }

Получается следующее, что в программе длительной задержки мы используем программу формирования обычной задержки несколько раз, тем самым увеличиваем время задержки в разы!

Скачать программу задержки