глупый вопрос по AVR язык С

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
mastech
Грызет канифоль
Сообщения: 269
Зарегистрирован: Чт мар 11, 2010 17:45:37
Откуда: г.фрязино

глупый вопрос по AVR язык С

Сообщение mastech »

LED_DDR = 1<<LED1|1<<LED2; что означает вертикальный слеш

PORTB|= _ BV(PB0); и здесь


что он означает?
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: глупый вопрос по AVR язык С

Сообщение Аlex »

Побитное ИЛИ.
Реклама
mastech
Грызет канифоль
Сообщения: 269
Зарегистрирован: Чт мар 11, 2010 17:45:37
Откуда: г.фрязино

Re: глупый вопрос по AVR язык С

Сообщение mastech »

а что означает нижний слеш _
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: глупый вопрос по AVR язык С

Сообщение ploop »

mastech писал(а):а что означает нижний слеш _
Это просто знак, как буква. К примеру идентификатор (или переменную) можно назвать так: myvar, MyVar, my_var, _myvar и т.д.. В Си это будут разные переменные.
Реклама
Эиком - электронные компоненты и радиодетали
mastech
Грызет канифоль
Сообщения: 269
Зарегистрирован: Чт мар 11, 2010 17:45:37
Откуда: г.фрязино

Re: глупый вопрос по AVR язык С

Сообщение mastech »

_delay_ms с нижним слешем понял так записываются функции задержек <util/delay.h> (не правильно в первом посте дал пример в случае с _BV(PB1) просто знак )

как это работает |= (на примере портов выставляют лог 1)

и это &= ~ (а здесь лог 0)

&= почему подставляют ~
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: глупый вопрос по AVR язык С

Сообщение ploop »

_delay_ms с нижним слешем понял так записываются функции задержек <util/delay.h> (не правильно в первом посте дал пример)
Просто так обозвали их создатели функций.
как это работает |= (на примере портов выставляют лог 1)
Ты представляешь, что такое битовые операции?

| - побитовое ИЛИ
01000000 |= 00000010 даст 01000010

& - побитовое И
01000000 &= 01000010 даст 01000000

~ - побитовое НЕ
~(01000000) даст 10111111
Реклама
mastech
Грызет канифоль
Сообщения: 269
Зарегистрирован: Чт мар 11, 2010 17:45:37
Откуда: г.фрязино

Re: глупый вопрос по AVR язык С

Сообщение mastech »

спасибоploop почему такое в книжках не пишут ну по крайней мере которые я читал))
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: глупый вопрос по AVR язык С

Сообщение ploop »

Это синтаксис языка Си, к МК отношения не имеет, на сколько я знаю.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: глупый вопрос по AVR язык С

Сообщение GP1 »

mastech писал(а):спасибоploop почему такое в книжках не пишут ну по крайней мере которые я читал))
почитай вот это:
http://arv.radioliga.com/content/category/6/33/49/
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

Re: глупый вопрос по AVR язык С

Сообщение bevice »

это сокращение от

Код: Выделить всё

x = x | y;
Так же как += -= &= ^= и прочие

_BV() - в WinAVR это макрос Bit Value, препроцессор раскрывает его до сдвига
После нас - хоть потоп (с) Лойсо
mastech
Грызет канифоль
Сообщения: 269
Зарегистрирован: Чт мар 11, 2010 17:45:37
Откуда: г.фрязино

Re: глупый вопрос по AVR язык С

Сообщение mastech »

Вечер добрый, накидал код(мигаем светодиодом), а он что-то не работает компилятор ругается на #include <util/delay.h> пишет что не задана частота:

Изображение





код: #include <avr/io.h>
#include <util/delay.h>



int main(void) {

DDRA = 0xff;

for(;;)

{

cbi(PORTA, PA0);
_delay_ms(250);

sbi(PORTC, PA0);
_delay_ms(250);

}
}
mastech
Грызет канифоль
Сообщения: 269
Зарегистрирован: Чт мар 11, 2010 17:45:37
Откуда: г.фрязино

Re: глупый вопрос по AVR язык С

Сообщение mastech »

Делаю так работает но тоже ругается на задержки это подглядел:

PORTA |= BV(PA0);
_delay_ms(250);




PORTA &=~ BV(PA0);
_delay_ms(250);


в первом варианте напрямую менял значение регистра от 1 к 0
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: глупый вопрос по AVR язык С

Сообщение Мастер Ломастер »

для работы функций задержек необходимо задавать значение тактовой частоты МК:
1. написать в программе #define F_CPU 1000000UL или иное число, равное вашей тактовой частоте, только надо это написать ДО подключения хидера delay.h
2. более правильный вариант: задать в командной строке компилятора опцию -DF_CPU=1000000UL - число аналогично задать.
3. совсем хороший вариант: в параметрах проекта AVR Studio задать значение тактовой частоты

P.S. а почему бы не помигать более простым и понятным кодом:

Код: Выделить всё

for(;;){
   PORTA ^= _BV(PA0);
   _delay_ms(250);
}
битва с дураками проиграна, победители торжествуют. слава победителям!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»