[
[
extern - если переменная объявляется во внешнем файле – например, в хидере delay.h.
volatile - если нужно предотвратить повреждение содержимого переменной в прерывании, компилятор просто не будет размещать эту переменную ни в одном из 32-х регистров общего назначения и не будет пытаться выкинуть её при оптимизации кода.
static - если переменная локальная, т.е. объявлена в какой либо функции и должна сохранять свое значение до следующего вызова этой функции.
flash и eeprom - используются с указателями. Подробней см. в Help компилятора с языка СИ.
Локальные переменные объявляются в самом начале функции! Т.е. сразу после скобки { Наиболе часто используемые типы данных: Вместо unsigned char - можно писать просто char, так как компилятор по умолчанию считает char без знаковым байтом. А если вам нужен знаковый байт, то объявляйте его так: Внимание! Так делаются вставки ассемблерных инструкций: Часто используются такие строки: 4.7. Разделители. В разделители входят следующие символы: [] - для записи идентифицированных переменных. ( ) применяются для: { } используется для обозначения начала и конца составного оператора или блока операторов. { } также используется для выделения списка компонентов в определениях структурных и объединяющих типов, используются для инициализации массивов. , используется либо в качестве операций либо в качестве разделителя. В последнем случае она разделяет элементы из списка. ; каждый оператор, определение и описаний в программе на языке СИ завершается знаком - ;. Любое допустимое выражение, за которым следует ; воспринимается как оперативный отдельный символ, ; считается пустым оператором. : используется для отделения метки от помечаемого ею оператора. ... используется для обозначения переменного числа параметров. * используется в качестве знака операции умножения и знака операции разыменования. = используется для присваивания значений и инициализаций объекта. # признак препроцессорных средств используется для обозначения директив препроцессора. 4.8 Пример программы на языке СИ: # include < io8515v.h > void delay ( ) { { {
Локальные переменные доступны только в той функции, где они объявлены!
unsigned char - хранит числа от 0 до 255 (байт)
unsigned int - хранит числа от 0 до 65535 (слово == 2 байта)
unsigned long int - хранит от 0 до 4294967295 (двойное слово == 4 байта)
Подробнее все типы данных посмотрите в Help
signed char imya_peremennoi;
Желательно давать осмысленное имя переменным и функциям, напоминающие вам об их назначении. Принято использовать маленькие буквы, а для отличия имен переменных от названия функций - имена переменных можно, например, начинать с буквы, а названия функций (кроме main конечно) с двух символов подчеркивания.
Например так:
moya_peremennaya__vasha_funkziya
Глобальные переменные, а также локальные с модификатором static - при старте и рестарте программы равны 0, если вы не присвоили им (например, оператором =) иное значение при их объявлении или по ходу программы.
Подробные примеры объявления переменных посмотрите, пожалуйста, в разделе Variables в "Хелп"компилятора.
Вот несколько примеров объявления переменных:
unsigned char my_peremen = 34;
unsigned int big_peremen = 34034;
Выше объявлены две переменные с присвоением значений.
Пример массива из 3-х переменных mas[3]={11,22,33};
Три элемента: mas[0] mas[1] mas[2]
Нумерация элементов массива начинается с нуля!
Пример: строковая переменная – массив
char stroka[7]="Hello";
/* на 2 элемента больше чем символов между кавычками!
Строковый массив может быть распечатан одной строкой:
printf ("%s\n", stroka);
#asm ("инструкция на ассемблере")
Обратите внимание - точки с запятой НЕТ!
#asm("sei") // Разрешить ГЛОБАЛЬНО все прерывания
#asm("cli") // Запретить ГЛОБАЛЬНО все прерывания
#asm("nop") // Пауза в 1 такт процессора
#asm("wdr") // Сбросить сторожевой таймер
[], (), {}, , , ; , : , ... , * , = , #.
Пример №1:
Int A [5] , e[3][2]
1. выделения условия в операторе if;
2. входит как обязательный элемент в определении любой функции;
3. группирует выражения в арифметических операциях;
4. входит как обязательный элемент в операторы цикла: for, white, do.
Пример №2:
If (d>x) {d--; x++}
Float absx (float x)
{
Return x>0 ? x:-x
}
Int month [] = {1, 2, 3, 4, 5, 6, 7,…,12};
# include < macros.h >
unsigned char a,b,c;
for (a=1;2;a++)
for (b=1;2;b++)
for (c=1;2;c++)
}
void Led_on (int i)
Port a = ~BIT (i);
Delay( );
}
void main ( )
unsigned char data;
unsigned char x;
int I;
DDRA=oxFF; /*output*/
DDRC=oxOO;
PORTA=oxFF; /*alloff*/
While (1)
}