глупый вопрос по AVR язык С
глупый вопрос по AVR язык С
LED_DDR = 1<<LED1|1<<LED2; что означает вертикальный слеш
PORTB|= _ BV(PB0); и здесь
что он означает?
PORTB|= _ BV(PB0); и здесь
что он означает?
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: глупый вопрос по AVR язык С
Побитное ИЛИ.
Re: глупый вопрос по AVR язык С
а что означает нижний слеш _
Re: глупый вопрос по AVR язык С
Это просто знак, как буква. К примеру идентификатор (или переменную) можно назвать так: myvar, MyVar, my_var, _myvar и т.д.. В Си это будут разные переменные.mastech писал(а):а что означает нижний слеш _
Re: глупый вопрос по AVR язык С
_delay_ms с нижним слешем понял так записываются функции задержек <util/delay.h> (не правильно в первом посте дал пример в случае с _BV(PB1) просто знак )
как это работает |= (на примере портов выставляют лог 1)
и это &= ~ (а здесь лог 0)
&= почему подставляют ~
как это работает |= (на примере портов выставляют лог 1)
и это &= ~ (а здесь лог 0)
&= почему подставляют ~
- Реклама
Re: глупый вопрос по AVR язык С
Просто так обозвали их создатели функций._delay_ms с нижним слешем понял так записываются функции задержек <util/delay.h> (не правильно в первом посте дал пример)
Ты представляешь, что такое битовые операции?как это работает |= (на примере портов выставляют лог 1)
| - побитовое ИЛИ
01000000 |= 00000010 даст 01000010
& - побитовое И
01000000 &= 01000010 даст 01000000
~ - побитовое НЕ
~(01000000) даст 10111111
Re: глупый вопрос по AVR язык С
спасибоploop почему такое в книжках не пишут ну по крайней мере которые я читал))
Re: глупый вопрос по AVR язык С
Это синтаксис языка Си, к МК отношения не имеет, на сколько я знаю.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: глупый вопрос по AVR язык С
почитай вот это:mastech писал(а):спасибоploop почему такое в книжках не пишут ну по крайней мере которые я читал))
http://arv.radioliga.com/content/category/6/33/49/
Re: глупый вопрос по AVR язык С
Код: Выделить всё
x |= y;Код: Выделить всё
x = x | y;_BV() - в WinAVR это макрос Bit Value, препроцессор раскрывает его до сдвига
После нас - хоть потоп (с) Лойсо
Re: глупый вопрос по AVR язык С
Вечер добрый, накидал код(мигаем светодиодом), а он что-то не работает компилятор ругается на #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);
}
}
код: #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);
}
}
Re: глупый вопрос по AVR язык С
Делаю так работает но тоже ругается на задержки это подглядел:
PORTA |= BV(PA0);
_delay_ms(250);
PORTA &=~ BV(PA0);
_delay_ms(250);
в первом варианте напрямую менял значение регистра от 1 к 0
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. а почему бы не помигать более простым и понятным кодом:
1. написать в программе #define F_CPU 1000000UL или иное число, равное вашей тактовой частоте, только надо это написать ДО подключения хидера delay.h
2. более правильный вариант: задать в командной строке компилятора опцию -DF_CPU=1000000UL - число аналогично задать.
3. совсем хороший вариант: в параметрах проекта AVR Studio задать значение тактовой частоты
P.S. а почему бы не помигать более простым и понятным кодом:
Код: Выделить всё
for(;;){
PORTA ^= _BV(PA0);
_delay_ms(250);
}битва с дураками проиграна, победители торжествуют. слава победителям!



