Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Операторы перехода языка mikroC: break, continue, goto. Выполняемые функции, промеры использования в программах.



 

Оператор перехода break

 

Оператор break имеет два назначения. Первое – это окончание работы оператора switch. Второе – это принудительное окончание цикла, минуя стандартную проверку условия. Когда оператор break встречается в теле цикла, цикл немедленно заканчивается и выполнение программы переходит на строку, следующую за циклом.

Рассмотрим пример использования оператора break для досрочного прекращения работы цикла for.

 

char in_port, x;

void main( )

{

TRISB = 0xFF; // настроить порт B на ввод

TRISC = 0; // настроить порт С на вывод

PORTC = 0;

in_port = PORTB; // ввод числа из порта B

for( x = 1; x < 100; x++ )

{

if ( x == in_port )

break; // прекращение цикла вывода

PORTC = x; // вывод в порт С

}

}

В этой программе оператор цикла for выполняет вывод в порт С переменной х, изменяющейся от 0 до 100. Однако, если значение переменной х будет равно переменной in_port, введенной из порта B, причем это значение меньше 100, то цикл вывода немедленно прекращается.

 

Оператор перехода continue

 

Работа оператора continue чем-то похожа на работу оператора break. Но вместо форсированного окончания цикла оператор continue переходит к следующей итерации цикла, пропуская оставшийся код тела цикла.

Рассмотрим пример применения оператора continue для вывода в порт С чисел от 1 до 10 за исключением числа 5.

 

void main( )

{

char k; // объявление однобайтной переменной

TRISC = 0; // настроить порт С на вывод

PORTC = 0; // вывод нулей в порт С

for( k = 1; k < = 10; k++)

{

if( k == 5 ) // если k равно 5, то

continue; // пропустить вывод в порт С

PORTC = k; // вывод в порт С

}

}

 

Оператор перехода goto

 

Оператор goto (идти к ….) – это безусловный переход на метку. Метка – это идентификатор Си, завершающийся двоеточием. Пример записи оператора goto:

goto label;

………

……….

label: …….

 

Рассмотрим простейшую программу, где используется оператор перехода goto.

 

void main( )

{

char x = 1;

loop:

x++;

if ( x < = 10 )

goto loop;

}

В программе реализуется цикл инкремента переменной x от 1 до 10 с помощью оператора goto и метки loop. Очевидно, что такой цикл можно было бы реализовать и с использованием операторов while или for.

 

Функции языка mikroC: определение и прототипы.

Определение функции. Программа на языке mkroC состоит из одной или нескольких функций. Функция – это логически самостоятельная именованная часть программы, которой могут передаваться параметры и которая может возвращать какое-то значение. Современный стиль языка Си предполагает следующий формат определения функции:

возвращаемый_тип имя_функции(тип параметр_1, …, тип параметр_n)

{

описание данных;

оператор_1;

……

оператор_m;

return (выражение);

}

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

Поле «возвращаемый_тип» задает тип возвращаемого функцией значения (char, int, float и т.д.). Если функция не возвращает никакого значения, то в поле «возвращаемый_тип» записывается ключевое слово void (пустой).

После имени функции в скобках помещаются аргументы (или по-другому входные параметры), передаваемые в функцию, они содержат любую комбинацию типов и имен. Это поле в определении функции называется списком формальных аргументов (или параметров). Поле «список аргументов» - не обязательная часть в определении функции. Если в функцию не передаются никакие параметры, то это поле – пустое или содержит ключевое слово void.

Примеры определения функций:

int mul(int a, int b) // функция умножения

{

int y;

y = a * b;

return y;

}

 

float cube(float m) // функция вычисления куба числа

{

return m * m * m;

}

 

void delay( ) // функция временной задержки

{

long j;

for(j = 0; j < 50000; j++);

}

 

Определения функций могут размещаться в различных частях программы, в том числе и в различных файлах. Поэтому может возникнуть ситуация, когда вызывается функция, определение которой находится ниже (по тексту) в программе. Это вызывает сбой в работе компилятора.

Прототип функции. Стандарт языка Си требует, чтобы функции были объявлены до первой ссылки на них. Это «предварительное» объявление называется прототипом функции. Оно извещает компилятор о типе возвращаемого значения, количестве и типе аргументов. Используя прототип, компилятор может выполнить тщательный контроль числа аргументов и соответствие их типов в вызовах функции и ее определении.

Современный стиль записи прототипа имеет следующий формат:

возвращаемый_тип имя_функции(тип параметр_1, …., тип параметр_n);

Сравнивая формат прототипа с определением функции, можно сделать вывод о том, что прототип точно повторяет первую строку определения функции. Примеры прототипов для рассмотренных ранее функций:

int mul(int a, int b);

float cube(float m);

void delay( );

 

Прототипы функций обычно размещаются в начале программы перед функцией main( ). А определения функций размещаются после функции main( ). Например, если программа с именем primer.c использует три функции mul( ), cube( ) и delay( ), то она записывается в следующем виде:

/**********************************************************************************

primer.c – пример оформления программы с несколькими функциями

*********************************************************************************/

int mul(int a, int b); // прототип функции mul( )

float cube(float m); // прототип функции cube( )

void delay( ); // прототип функции delay( )

void main( ) // главная функция

{

int y;

float f;

…………..

y = mul(50, 100); // вызов функции mul( )

……………...

f = cube(32.45); // вызов функции cube( )

………………..

delay( ); // вызов функции delay( )

………………

}

 

/* определения функций */

 

int mul(int a, int b)

{

int y;

y = a * b;

return y;

}

float cube(float m)

{

return m * m * m;

}

void delay( )

{

long j;

for(j = 0; j < 50000; j++);

}

 

Управление отдельными разрядами регистров PIC-микроконтроллеров в языке mikroC. Встроенные функции формирования временных задержек компилятора mikroC PRO for PIC.

 

В программах для PIC-микроконтроллеров часто требуется управлять отдельными линиями портов МК, а также опрашивать их состояния.

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

1. Указать имя регистра, а затем после знака точки как разделителя идентификатор номера бита в регистре в виде: B0, B1, B2, B3, B4, B5, B6, B7, где В0 – младший бит.

Например:

// для порта С, настроенного на вывод

PORTC.B0 = 1; // вывести лог. 1 на 0-ю линию порта С

PORTC.B7 = 0; // вывести лог. 0 на 7-ю линию порта С

 

// для регистра управления прерываниями INTCON

INTCON.B7 = 1; // Установить в 1 бит GIE разрешения глобальных

// прерываний (7-й бит в регистре INTCON)

 

2. Указать имя бита в регистре специальных функций, а затем идентификатор вида: _bit.

Например:

GIE_bit = 1; // установить в 1 бит GIE в регистре INTCON

 

В языке mikroC биты линий портов PIC-микроконтроллеров обозначаются:

RA0, RA1, RA3 и т.п. порта А;

RB0, …, RB7 порта В;

RC0, …, RC7 порта С.

RD0, …, RD7 порта D.

 

// для порта С, настроенного на вывод

RC0_bit = 1; // вывести лог. 1 на 0-ю линию порта С

RC7_bit = 0; // вывести лог. 0 на 7-ю линию порта С

 

В управляющих программах для микроконтроллеров часто возникает необходимость в формировании временных задержек. Компилятор mikroC PRO for PIC имеет так называемые встроенные функции задержки, которые формируют временные задержки программным методом. Наибольшее применение находят три функции:

1) Delay_us(константа), где константа определяет величину задержки в микросекундах (константа – это целое число типа unsigned long в пределах от 1 до 4294967295);

2) Delay_ms(константа), где константа определяет величину задержки в миллисекундах ( константа – это целое число типа unsigned long в пределах от 1 до 4294967295);

3) Vdelay_ms(переменная), где значение переменной определяет величину задержки в миллисекундах (переменная должна быть типа unsigned int, а величина ее в пределах от 1 до 65535).

Примеры:

 

Delay_us(100); // задержка на время 100 мкс

Delay_ms(2000); // задержка на время 2000 мс = 2 с

unsigned int time = 500;

Vdelay_ms(time); // задержка на время 500 мс

 


Поделиться:



Популярное:

  1. Алгоритмы записи произвольной функции, заданной в таблице в виде с помощью элементарных функций.
  2. Анализ использования материальных ресурсов в организации.
  3. Анализ использования рабочего времени
  4. Анализ наличия и использования трудовых ресурсов на предприятии.
  5. Анализ эффективности использования имущества
  6. Анализ эффективности использования материальных ресурсов
  7. Анализ эффективности использования оборотных средств.
  8. Б.2. Разработка на неправительственном уровне факультативного характера правил, типовых контрактов, общих условий и т.п. для использования в международном частном торговом обороте
  9. В чем заключается суть использования «метода шарящего катетера»?
  10. Влияние температуры на обратный ток p-n перехода
  11. Внутренние войска: задачи, функции, структура и полномочия.
  12. Возможности использования методов мануальной терапии в Сахаджа Йоге.


Последнее изменение этой страницы: 2016-03-17; Просмотров: 2302; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.033 с.)
Главная | Случайная страница | Обратная связь