AVR123:Глава 5 — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
Строка 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)     
:* | "ИЛИ"  (OR только 0 и 0 дают 0)     
+
  • ^ "Исключающее ИЛИ" (XOR  изменить бит напротив "1")
 
+
  • ~ "инвертирование битов" (INV изменить биты регистра)
:* ^ "Исключающее ИЛИ" (XOR  изменить бит напротив "1")
+
  • арифметические операции:    +  -  *  /  %</pre>
 
 
:* ~ "инвертирование битов" (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;

Версия 17:02, 26 сентября 2009

Вернуться на главную


Язык Си для AVR.

Как раз то, что необходимо и достаточно для микроконтроллеров.

По умолчанию компилятор CVAVR

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

Минимальная программа на Си может быть такой: <source lang="c">main(){}</source> Эта программа не делает ни чего полезного — но это уже программа и она показывает что в программе на языке Си — должна быть главная функция main — обязательно !

Скачайте и Распечатайте.Памятка Си для МК на ОДНОЙ странице.

Рассказывая про МК я говорил вам, что: Задача программы МК:

  • читать числа из регистров и памяти МК,
  • делать что-то с числами, данными и
  • записывать числа в регистры и память.

Только так программа может общаться с МК.


Как это делать на языке Си

Регистры МК
( регистры - это ячейки-байты в памяти МК AVR ) в программе на Си имеют названия как и в ДШ и так как числа в большинстве из них можно менять - для программы регистры являются по сути переменными.
Переменная
- это набор ячеек в памяти в которых можно хранить число или числа и менять их. Переменная имеет адрес и имя.
Константа
- это как переменная но менять содержимое нельзя.

Подробней о переменных и константах написано ниже.

  1. Чтобы поместить число в переменную (в регистр) в языке Си есть оператор присваивания

это знак "=" ( называемый в математике "равно" ) "=" в Си означает вычислить результат того что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания.

Информация
Запомните!

В Си знак "=" НЕ означает равенство!



<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;