Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

1: unsigned long summation(unsigned int n)

2: {

3:        unsigned long sum = 0;

4:        while(n > 0)

5:        {

6:             sum = sum + n;

7:             -- n;

8:         }

9:         return sum;

10: }

В Программе 9.1 приведен код Си-функции (функции в Си — аналог подпрограмм), вычисляющей следующее соотношение:

Например, если n = 5, то мы получим

sum = 5 + 4 + 3 + 2+ 1.

В нашей реализации n — целое число, передаваемое в функцию, которая вычисляет и возвращает целое значение sum. Поставленная задача реализуется циклическим прибавлением n к предварительно обнуленному значению sum, с одновременным декрементированием n до нуля.

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

Строка 1: В этой строке объявляется имя функции (подпрограммы) summation и указывается, что она возвращает целое число типа unsigned long (в компиляторе, используемом нами в данной главе, этому типу соответствует 16-битное целое число без знака), а в качестве параметра n ожидает передачи целого числа типа unsigned int (8-битное целое число без знака).

Строка 2: Открывающая фигурная скобка означает начало блока. Как можно догадаться, у каждого начала должен быть свой конец, который в данном случае обозначается закрывающей фигурной скобкой. Хорошим тоном считается располагать тело блока с некоторым отступом (один символ табуляции) относительно фигурных скобок. Такое форматирование облегчает поиск парных скобок, т. е. начала и конца блока, однако компилятору нет никакого дела до того, какой стиль использует программист. В нашем случае соответствующая закрывающая скобка находится в строке 10. Между строками 2 и 10 заключено тело функции summation ().

Строка 3: В нашей функции используется только одна локальная переменная. В этой строке определяется ее имя (sum) и тип (unsigned long). В языке Си все объекты должны быть определены перед их использованием. Таким образом, компилятору передается информация о свойствах именованной переменной. В данном случае мы сообщаем компилятору о том, что под эту переменную необходимо выделить 16 бит и что она используется для хранения беззнаковых чисел. В этом же объявлении задается начальное значение переменной sum. Все выражение завершается символом точки с запятой, как и любой оператор.

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

while(ИСТИНА)

{

       делаем это;

       делаем то;

       делаем что-нибудь еще;

}

Тело цикла, т. е. совокупность операторов, расположенных между фигурными скобками (строки 5 и 8), выполняется до тех пор, пока результат выражения в круглых скобках будет не равен нулю (в языке Си любое значение, не равное нулю, считается истинным). Эта проверка осуществляется перед каждым проходом цикла. В нашем случае вычисляется выражение n > 0. Если это соотношение истинно, то число n прибавляется к sum. После этого n декрементируется, и цикл повторяется. В какой-то момент выражение n > 0 становится ложным, и управление передается на оператор, расположенный после закрывающей фигурной скобки (строка 9).

Строка 5: Открывающая фигурная скобка обозначает начало тела цикла while. В соответствии с принятым стилем операторы, составляющие тело цикла, записываются с отступом.

Строка 6: Вычисляется выражение в правой части оператора присваивания «=» (sum + n), и полученное значение заносится в переменную, расположенную слева от оператора присваивания, т. е. в sum. При прибавлении 8-битной переменной к 16-битной компилятор автоматически расширяет первую до 16 бит (см. Листинг 9.1, команды с адресами h’000E’…h’0011’).

Строка 7: Значение n декрементируется в результате выполнения оператора декремента —[120]. Записанное выражение эквивалентно выражению n = n — 1. Замечу, что большинство Си-программистов вставили бы эту операцию непосредственно в заголовок цикла: while (-n > 0).

Строка 8: Закрывающая скобка тела цикла while. Обратите внимание, что и открывающая (строка 5), и закрывающая скобки имеют одинаковый отступ от начала строки. Компилятор не обращает внимания на все эти изыски, это сделано исключительно для удобочитаемости программы и уменьшения вероятности возникновения ошибок.

Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

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

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки