роботы
робототехника
микроконтроллеры
Главная
Новости
Спорт
Шаг за шагом
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты
 

Простейший робот
Схема и описание простого робота на одной микросхеме. Робот может двигаться на свет или следовать за рукой.  

Схема и описание первого проекта на микроконтроллере AVR
"Hello, world!" для микроконтроллера.  

Робот на микроконтроллере AVR
Схема робота на микроконтроллере. Примеры программ.  

AVR GCC :: ЦИКЛЫ


Циклы в языке программирования Си. Цикл "для". Цикл "пока". Принудительное прерывание цикла. Бесконечные циклы.
Вложенные циклы. Формирование временной задержки.


Для того чтобы много раз повторить какую-либо последовательность действий, применяют алгоритмические конструкции, которые называются циклами. Саму последовательность действий при этом называют телом цикла.

Различают следующие разновидности циклов: цикл "для" (цикл со счетчиком) и цикл "пока" (цикл с условием).


Цикл "для"


Цикл "для" используют, когда заранее известно количество повторений.

У такого цикла есть "счетчик повторений", или "переменная цикла", которая должна быть предварительно объявлена.

	int i;

	for (i = a; i < b; i = i + c)
	{
	     // тело_цикла
	}

Тело цикла повторяется столько раз, сколько значений приобретает переменная цикла i от своего начального значения, задаваемого конструкцией присваивания i = a, до конечного, задаваемого условием i < b. Изменение переменной i задается конструкцией присваивания вида i = i + c (также могут быть использованы инкремент i++ или декремент i--). При i = b цикл заканчивается и выполняется оператор, следующий за закрывающей скобкой цикла.

Пример:

	int i;

	for (i = 1; i <= 5; i++)
	{
	     // тело_цикла
	}

На первом шаге цикла переменная i будет равна 1, перед вторым шагом она увеличится на 1 в результате декремента (i++) и станет равной 2. На третьем шаге цикла i примет значение 3. И так до тех пор, пока на пятом шаге цикла она не станет равной 5. В результате следующей операции i++ переменная цикла примет значение 6, но условие i <= 5 уже не будет истинным, и цикл завершится. Таким образом, тело цикла будет выполнено 5 раз.

Существует возможность объявлять переменную цикла непосредственно в его оглавлении:

	for (int i = 0; i < 100; i++)
	{
	     // тело_цикла
	}

Но на первом этапе изучения языка Си лучше объявлять переменные отдельно.

Рассмотрим пример мигания светодиодом 10 раз с помощью цикла "для".
Рисунок 1



/******************************************
ПРИМЕР МИГАНИЯ СВЕТОДИОДОМ 10 РАЗ
Пример подключения светодиода на рисунке 1
*******************************************/

   #define F_CPU 1000000UL  // указываем частоту в герцах

   #include <avr/io.h>
   #include <util/delay.h>

   int main(void) {	// начало основной программы
   
   int i;		// объявляем переменную i

   DDRD = 0xff;		// все выводы порта D сконфигурировать как выходы


         for (i = 1; i <= 10; i++)  // цикл "для", повторяющийся 10 раз
         {

             PORTD |= _BV(PD1);    // установить "1" (высокий уровень) на выводе PD1,
			           //зажечь светодиод

             _delay_ms(250);      // ждем 0.25 сек.

             PORTD &= ~_BV(PD1);   // установить "0" (низкий уровень) на выводе PD1,
			           //погасить светодиод

             _delay_ms(250);      // ждем 0.25 сек.

         }      // закрывающая скобка цикла


   }      // закрывающая скобка основной программы



Цикл "пока"


Цикл "пока", по-другому называемый циклом с условием, повторяется, пока истинно условие цикла.

        while (условие)
	{
	   // тело_цикла
	}

Циклы с условием чаще всего используются, когда заранее не известно количество повторений и цикл должен работать до тех пор, пока выполняется условие.

Чтобы цикл завершился, в теле цикла должна меняться какая-либо переменная, от которой зависит истинность условия повторений.

Пример:

	int x;

	x = 50;

	while (x > 0)
	{
	     x = x - 1;
	}

В даном примере тело цикла будет повторяться 50 раз, до тех пор пока переменная x будет больше нуля. На каждом шаге цикла x будет уменьшаться на 1. Когда x станет равным нулю, цикл прекратится.


Оператор break


Оператор break позволяет прервать выполнение тела цикла (при дополнительных условиях).

Для того чтобы воспользоваться этим оператором, необходимо просто вставить строчку

	break;

в том месте цикла, где необходимо организовать его прерывание.


Бесконечные циклы


Организовать бесконечный цикл можно как с помощью цикла "для", так и с помощью цикла "пока"

	for(;;)
	{
	   // тело_цикла
	}

или

        while (1)
	{
	   // тело_цикла
	}

Единственный способ выйти из таких циклов - это сделать break (при каком-либо условии) в теле цикла.


Вложенные циклы


Один цикл повторения может находиться внутри другого цикла. При использовании вложенных циклов следует соблюдать простое правило: один цикл внутри другого должен находиться так же, как одна матрешка внутри другой матрешки.

Рассмотрим пример двух вложенных друг в друга циклов "для". Тело вложенного цикла в общей сложности будет повторено 200 раз.

   unsigned short i, j; // объявляем переменные


              for (i = 0; i < 20; i++) // основной цикл
              {
                     for (j = 0; j < 10; j++) // вложенный цикл
                     {
                              // тело вложенного цикла
                     }
              }


Формирование задержки


С помощью циклов можно формировать временные задержки большой длительности. Рассмотрим пример многократного повторения функции _delay_ms().

   unsigned short i; // объявляем переменную для цикла

              for (i = 0; i < 600; i++) // цикл "для", повторяющийся 600 раз
              {
                    _delay_ms(1000);  // ждем 1 сек.
              }

Данный пример реализует задержку длительностью 10 минут.


Такую конструкцию можно применять в тех случаях, когда в ходе работы программы необходимы длительные временные задержки (до 1092.25 минут). Для реализации еще более длительных задержек тип переменной i может быть объявлен как unsigned long.





myROBOT.ru Это оригинальная статья myROBOT.ru
Постоянный адрес статьи: http://myrobot.ru/stepbystep/pr_loops.php








Статьи раздела
ПРОГРАММИРОВАНИЕ

Все статьи курса
Язык программирования C (Си): введение.

Переменные и константы. Присваивание.

Управление портами микроконтроллера AVR.

Циклы в языке Си. Формирование задержки.






Copyright © myrobot.ru, 2005-2013


OpenHosting