
- •Основы языка си для микроконтроллеров avr
- •1. Основы языка Си для микроконтроллеров avr
- •Препроцессор языка Cи его команды
- •Директива #include
- •Директивы #define, #undef
- •Директивы #if, #ifdef, #ifndef, #else и #endif
- •Встроенные макросы
- •Директива #line
- •Директива #error
- •Директивы #asmи #endasm
- •Зарезервированные ключевые слова
- •Идентификаторы
- •Комментарии
- •Константы
- •Переменные
- •Массивы
- •Типы данных
- •Операнды и операции
- •Унарные операции
- •Бинарные операции
- •Приоритеты операций и порядок вычислений
- •Операторы
- •If-else
- •Оператор for
- •Do-while
- •Continue
- •Оператор-выражение
- •Пустой оператор
- •Составной оператор
- •Функции
- •Указатели
- •Доступ к регистрам ввода/вывода
- •Побитовый доступ к регистрам ввода/вывода
- •Доступ к eeprom-памяти
- •Использование прерываний
- •Организация памяти sram
Do-while
Оператор цикла do-whileназывается оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз.
Синтаксис:
do тело while (выражение).
Сначала выполняется тело цикла (которое может быть составным оператором), затем вычисляетсявыражение. Если оно истинно (значение выражения отлично от нуля), то тело цикла выполняется снова и т. д. Если выражение становится ложным (т. е. значение выражения равно нулю), то выполнение оператораdo-whileзаканчивается и выполняется следующий по порядку оператор.
Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break(см. 1.10.6 Операторbreak).
Пример:
/* Оператор do-while */
/* В этом примере вычисляется факториал числа 5 */
void main(void) {
int x=l; // Объявляем и инициализируем целую переменную х
int у=1; // Объявляем и инициализируем целую переменную у
int z=5; // Объявляем и инициализируем целую переменную z
do // Оператор цикла
/* Тело цикла do*/
у=у*х; // вычисляем значение у
х=++х; // инкрементируем (увеличиваем на 1) значение х
/*while */
} while (x<=z); // проверка условия
/* Тело цикла (у=у*х, х=++х) будет выполняться, начиная со значения х=1. После каждого выполнения цикла х будет увеличиваться на 1, затем будет проверяться условие (x<=z), и, если оно истинно, тело цикла будет повторяться с новым значением х. Цикл будет выполняться до тех пор, пока х не превысит значение z, т. е. 5. Обратите внимание, что после выполнения цикла do-while значение х будет равно 6. Значение у будет равно 120 */
Break
Оператор breakобеспечивает прекращение выполнения самого внутреннего из объединяющих его операторовswitch,do-while,for,while. Он даёт возможность управлять выходом из цикла иначе, чем проверкой условия в начале или в конце. После выполнения оператораbreakуправление передаётся оператору, следующему за прерванным.
Пример:
/* Оператор break */
/* Поиск в заданном массиве элемента, равного 0 */
/* Подключим заголовочный файл со стандартными функциями ввода/вывода */
#include <stdio.h> // подключаем заголовочный файл со стандартными функциями ввода/вывода
int array[7]={-3,-2,-1,0,1,2,3}; // Объявляем и инициализируем целочисленный массив array
int n=7; // Объявляем и инициализируем целую переменную п - количество элементов массива
void main(void){ // Основная функция программы
int i; // Объявляем целую переменную i, которая будет задавать индекс элемента массива array
for(i=0;i<n;i++) // Цикл for
/* Тело цикла for */
if(array[i]==0) break; // Если i-й элемент массива равен 0, то выход из цикла forпоbreak
/* Оператор if-else */
if(i==n) // Если i=n,
printf("%d not found \n",0); // то выводим строку: "0 not found "
else // Если i не равен n,
printf("%don%dplace\n",0,i); // то выводим строку: "0oniplace", где i — номер места
/* Тело цикла (if(array[i]=0) break) будет выполняться, начиная со значения i=0. После каждого выполнения цикла i будет увеличиваться на 1, затем будет проверяться условие (i<n), и, если оно истинно, тело цикла будет повторяться с новым значением i. Цикл будет выполняться до тех пор, пока i не станет равно п или выражение в теле цикла for не станет истиной, и будет осуществлён выход из цикла по оператору break. В обоих случаях будет осуществлён переход на оператор if-else. */