AVR123:Глава 5 — различия между версиями
Nekolex (обсуждение | вклад) |
Nekolex (обсуждение | вклад) |
||
Строка 18: | Строка 18: | ||
Скачайте и Распечатайте.[http://avr123.nm.ru/csyntax.pdf Памятка Си для МК на ОДНОЙ странице.] | Скачайте и Распечатайте.[http://avr123.nm.ru/csyntax.pdf Памятка Си для МК на ОДНОЙ странице.] | ||
− | Рассказывая про МК я говорил вам, что: | + | Рассказывая про МК я говорил вам, что: |
− | |||
− | |||
Задача программы МК: | Задача программы МК: | ||
* читать числа из регистров и памяти МК, | * читать числа из регистров и памяти МК, | ||
Строка 31: | Строка 29: | ||
== Как это делать на языке Си == | == Как это делать на языке Си == | ||
− | ;Регистры МК: | + | ;Регистры МК |
− | ( ''регистры'' - это ячейки-байты в памяти МК AVR ) в программе на Си имеют названия как и в ДШ и так как числа в большинстве из них можно менять - для программы регистры являются по сути переменными. | + | :( ''регистры'' - это ячейки-байты в памяти МК AVR ) в программе на Си имеют названия как и в ДШ и так как числа в большинстве из них можно менять - для программы регистры являются по сути переменными. |
;Переменная | ;Переменная | ||
:- это набор ячеек в памяти в которых можно хранить число или числа и менять их. Переменная имеет адрес и имя. | :- это набор ячеек в памяти в которых можно хранить число или числа и менять их. Переменная имеет адрес и имя. | ||
;Константа | ;Константа | ||
:- это как переменная но менять содержимое нельзя. | :- это как переменная но менять содержимое нельзя. | ||
− | |||
− | |||
====Подробней о переменных и константах написано ниже. ==== | ====Подробней о переменных и константах написано ниже. ==== | ||
− | |||
− | |||
# Чтобы поместить число в переменную (в регистр) в языке Си есть оператор присваивания | # Чтобы поместить число в переменную (в регистр) в языке Си есть оператор присваивания | ||
это знак "=" ( называемый в математике "равно" ) | это знак "=" ( называемый в математике "равно" ) | ||
"=" в Си означает вычислить результат того что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания. | "=" в Си означает вычислить результат того что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания. | ||
− | |||
{{InfoBlock|В Си знак <nowiki>"="</nowiki> НЕ означает равенство!|Запомните!}} | {{InfoBlock|В Си знак <nowiki>"="</nowiki> НЕ означает равенство!|Запомните!}} | ||
− | |||
− | |||
<source lang="c"> | <source lang="c"> | ||
PORTB = PINB + 34;/* Эта строчка на Си означает взять (прочитать, считать) | PORTB = PINB + 34;/* Эта строчка на Си означает взять (прочитать, считать) | ||
Строка 62: | Строка 53: | ||
Чтобы в Си взять (прочитать) число из регистра или значение переменной нужно написать его название НЕ непосредственно с лева от оператора присваивания ! | Чтобы в Си взять (прочитать) число из регистра или значение переменной нужно написать его название НЕ непосредственно с лева от оператора присваивания ! | ||
− | + | === Примеры : === | |
− | === Примеры : === | ||
− | |||
− | |||
:a) Строка где переменная стоит слева от = но через знак & | :a) Строка где переменная стоит слева от = но через знак & | ||
Строка 76: | Строка 64: | ||
на Си означает - не читая содержимое переменной PORTB присвоить ей значение 0x23 уничтожив то что было там раньше. | на Си означает - не читая содержимое переменной PORTB присвоить ей значение 0x23 уничтожив то что было там раньше. | ||
− | :Вместо & "И" (AND - только 1 и 1 дают 1) могут быть и другие побитные логические операции: | + | <pre>:Вместо & "И" (AND - только 1 и 1 дают 1) могут быть и другие побитные логические операции: |
− | + | • | "ИЛИ" (OR только 0 и 0 дают 0) | |
− | + | • ^ "Исключающее ИЛИ" (XOR изменить бит напротив "1") | |
− | + | • ~ "инвертирование битов" (INV изменить биты регистра) | |
− | + | • арифметические операции: + - * / %</pre> | |
− | |||
− | |||
− | : | + | С оператором присваивания используются вот такие сокращения: |
+ | !|ДЛИННАЯ ЗАПИСЬ||СМЫСЛ||СОКРАЩАЕТСЯ ДО | ||
+ | |- | ||
+ | ||x = x + 1;||добавить 1||x++; или ++x; | ||
+ | |- | ||
+ | ||x = x - 1;||вычесть 1||x--; или --x; | ||
+ | |- | ||
+ | ||x = x + y;||прибавить y||x += y; | ||
+ | |- | ||
+ | ||x = x - y;||вычесть y||x -= y; | ||
+ | |- | ||
+ | ||x = x * y;||умножить на y||x *= y; | ||
+ | |- | ||
+ | ||x = x / y;||поделить на y||x /= y; | ||
+ | |- | ||
+ | ||x = x % y;||остаток от деления||x %= y; | ||
+ | |- | ||
+ | ||x--;||вычесть 1||x -= 1; | ||
+ | |- | ||
+ | ||x++;||добавить 1||x += 1; |
Версия 17:02, 26 сентября 2009
Содержание
Язык Си для AVR.
Как раз то, что необходимо и достаточно для микроконтроллеров.
По умолчанию компилятор CVAVR
В других компиляторах могут быть незначительные отклонения, нюансы не связанные с языком Си, а обусловленные стараниями и предпочтениями разработчиков этих компиляторов.
Минимальная программа на Си может быть такой: <source lang="c">main(){}</source> Эта программа не делает ни чего полезного — но это уже программа и она показывает что в программе на языке Си — должна быть главная функция main — обязательно !
Скачайте и Распечатайте.Памятка Си для МК на ОДНОЙ странице.
Рассказывая про МК я говорил вам, что: Задача программы МК:
- читать числа из регистров и памяти МК,
- делать что-то с числами, данными и
- записывать числа в регистры и память.
Только так программа может общаться с МК.
Как это делать на языке Си
- Регистры МК
- ( регистры - это ячейки-байты в памяти МК AVR ) в программе на Си имеют названия как и в ДШ и так как числа в большинстве из них можно менять - для программы регистры являются по сути переменными.
- Переменная
- - это набор ячеек в памяти в которых можно хранить число или числа и менять их. Переменная имеет адрес и имя.
- Константа
- - это как переменная но менять содержимое нельзя.
Подробней о переменных и константах написано ниже.
- Чтобы поместить число в переменную (в регистр) в языке Си есть оператор присваивания
это знак "=" ( называемый в математике "равно" ) "=" в Си означает вычислить результат того что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания.
<source lang="c">
PORTB = PINB + 34;/* Эта строчка на Си означает взять (прочитать, считать)
значение переменной (регистра) PINB, затем прибавить к нему число 34 и поместить результат в переменную PORTB */
ПЕРЕМЕННАЯ = PINC; /* Эта строчка на Си означает взять (прочитать, считать)
значение переменной (регистра) PINC и поместить результат в переменную с именем ПЕРЕМЕННАЯ */
</source> Чтобы в Си взять (прочитать) число из регистра или значение переменной нужно написать его название НЕ непосредственно с лева от оператора присваивания !
Примеры :
- a) Строка где переменная стоит слева от = но через знак &
<source lang="c">PORTB & = 0x23;</source>
на Си означает - прочитать содержимое переменной PORTB, затем выполнить "поразрядное (побитное) логическое И" между прочитанным значением и числом 0x23 и поместить (записать, присвоить) результат в переменную PORTB
- b) Строка где переменная стоит непосредственно слева от =
<source lang="c">PORTB = 0x23;</source>
на Си означает - не читая содержимое переменной PORTB присвоить ей значение 0x23 уничтожив то что было там раньше.
:Вместо & "И" (AND - только 1 и 1 дают 1) могут быть и другие побитные логические операции: • | "ИЛИ" (OR только 0 и 0 дают 0) • ^ "Исключающее ИЛИ" (XOR изменить бит напротив "1") • ~ "инвертирование битов" (INV изменить биты регистра) • арифметические операции: + - * / %
С оператором присваивания используются вот такие сокращения: !|ДЛИННАЯ ЗАПИСЬ||СМЫСЛ||СОКРАЩАЕТСЯ ДО |- ||x = x + 1;||добавить 1||x++; или ++x; |- ||x = x - 1;||вычесть 1||x--; или --x; |- ||x = x + y;||прибавить y||x += y; |- ||x = x - y;||вычесть y||x -= y; |- ||x = x * y;||умножить на y||x *= y; |- ||x = x / y;||поделить на y||x /= y; |- ||x = x % y;||остаток от деления||x %= y; |- ||x--;||вычесть 1||x -= 1; |- ||x++;||добавить 1||x += 1;