ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
ЯЗЫК СИ ДЛЯ МИКРОКОНТРОЛЛЕРОВ
Эта программа не делает ничего полезного – но это уже программа и она показывает, что в программе на языке Си должна быть главная функция main – обязательно. Реальные программы на Си конечно больше. Регистры МК в программе на Си имеют названия, как и в оригинальной технической документации фирмы ATMEL AVR Data Sheets (ДШ) и так как числа в большинстве из них можно менять – для программы регистры являются по сути переменными. Чтобы поместить число в переменную (в регистр), в Си есть оператор присваивания. Это знак = (называемый в математике "равно"). В Си этот знак не означает равенство. Знак = в Си означает вычислить результат того, что справа от оператора присваивания и поместить этот результат в переменную, находящуюся левее оператора присваивания. Ниже приведены примеры команд на Си, использующие оператор присваивания. PORTB = PINB + 57; /*Взять (прочитать, считать) значение переменной (регистра) PINB, затем прибавить к нему число 57 и поместить результат в переменную PORTB */ PORTB&=0x5А; /*Прочитать значение переменной PORTB, затем выполнить "поразрядное (побитное) логическое И" между прочитанным значением и числом 0x5А и записать результат в переменную PORTB */ PORTB = 0x23; /*Не читая содержимое переменной PORTB Вместо & "И" могут быть и другие побитные логические операции: | "ИЛИ", ^ "Исключающее ИЛИ", ~ "инвертирование битов" и арифметические операции: + - * / %. Запомните! Результатом поразрядных (побитных) логических операций (& | ^ ~) является число, которое может быть интерпретировано компилятором как "истина", если оно не ноль, и "ложь", если число ноль.
Целые числа в компиляторе могут быть записаны: - в десятичной форме: 1234; - в двоичной форме с префиксом 0b: 0b101001; - в шестнадцатеричной форме с префиксом 0x: 0x5А; - в восьмеричной форме с префиксом 0: 0775.
С оператором присваивания используются вот такие сокращения:
Есть в Си операции, которые изменяют значение переменной и без оператора присваивания: PORTA++; /* Взять значение переменной PORTA, добавить к ней 1 и записать результат обратно в PORTA –инкрементировать регистр PORTA */ PORTC--; /* Эта строчка на Си означает обратное действие – декрементировать значение регистра PORTC */ Инкремент и декремент удобно использовать для изменения Когда инкремент или декремент используется в выражении, то важно, где стоят два знака + или – (перед переменной или после переменной): А=4; А=В++; /* Взять значение переменной В, присвоить его переменной А, затем добавить 1 к переменной В и сохранить результат в В. Теперь А будет содержать число 7, В будет содержать число 8 */ А=4; А=++В; /* Взять значение переменной В, затем добавить к нему 1 и сохранить результат в В и этот же результат присвоить переменной А. Теперь А будет содержать число 8 и В будет содержать число 8 */
Арифметические операции в Си: x+y //сложение x-y // вычитание x * y // умножение x / y /* деление. Если числа целые, результат – целое число с отброшенной дробной частью – не округленное! Т.е. если в результате деления на калькуляторе получается 6.23411 или 6.94, то результат будет просто целое число 6. Если числа с плавающей точкой, то есть float или double и записываются с точкой и числом после точки, то и результат будет число с плавающей точкой */ x % y // вычислить остаток от деления нацело Примеры: 5 / 2 // даст 2 5 % 2 // даст 1 75 / 29 // даст 2 75 % 29 // даст 17
Операторы сравнения (или отношения) используются для сравнения переменных, чисел (констант) и выражений: x < y // x меньше y
Результат выполнения этих операторов: "истина" это "1" (точнее "не ноль"), "ложно" это "0". Значения, хранимые в переменных (в регистрах) х и у, не изменяются!
Логические операции: || // "ИЛИ" && // "И" ! // "НЕ" !(истина) // дает "ложь" !(ложь) // дает "истина"
В результате логической операции вы получаете не число, а логическое значение "истина" или "ложь". Для логических операций && и || берутся результаты выражений слева и справа от знака операции, преобразованные в "истину" или "ложь", и определяется логический результат операции. Компилятор результат "истина" превращает в 1, а "ложь" в 0.
Ходовые конструкции на Си (в компиляторе CVAVR заготовки этих конструкций находятся под ярлыком "Code Templates" слева вверху. Вы можете выбирать нужные заготовки и вставлять их в свою программу):
if(){}else{}; идеальная конструкция, если вам нужно выполнить какую-то часть программы при наличии каких либо условий:
} else { это не обязательный элемент конструкции:
while(){}; условный цикл – используйте, если вам
Цикл while имеет вариант do – while, при котором код в { } выполняется по меньшей мере один раз независимо от истинности условия в скобках:
for(;;){}; – этот цикл позволяет выполнить часть программы нужное число раз:
Начальным условием может быть любое допустимое в Си выражение, результатом которого является целое число. Контрольное выражение определяет, до каких пор будет выполняться цикл. Счетчик показывает, как изменяется начальное выражение перед каждым новым выполнением цикла. Циклы for(;;) и while() часто используют вот так:
switch(){}; – оператор множественного выбора, позволяет сделать выбор из нескольких вариантов.
case может быть столько, сколько вам нужно. Чтобы программа работала быстрее, старайтесь наиболее вероятные варианты располагать выше! default - не обязателен. Его можно расположить и не в конце. break; - если его не использовать, то, найдя нужный вариант, программа будет выполнять и следующие ниже условия case.
goto – оператор безусловного (немедленного) перехода.
goto существует наверно во всех языках и в ассемблере в том числе. Используйте его с осторожностью! Например: если вы покинете функцию-обработчик прерывания по goto, не завершив ее, то не произойдет автоматического включения прерываний глобально – т.е. не установится бит I в регистре SREG,
Не нашли, что искали? Воспользуйтесь поиском:
|