роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Описание: правильность описаний УСЛОВИЙ на Си для AVR
Not_invented Post Id


Рядовой


Сообщений всего: 0
Дата рег-ции: Авг. 2012  



Помогите разобраться с условием:

if (!(PINC & (0<<PINC1)))
{ // (PIND0 = 0)
PORTA |= _BV(PA5);
}

if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}
как это работает..??
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



если порт с1 не равен нулю то установить 1 на выходе 5 порта а, если порт с1 равен нулю то установить 0 на выходе 5 порта а Улыбка вроде всё просто Улыбка
 
 Top
Not_invented Post Id


Рядовой


Сообщений всего: 0
Дата рег-ции: Авг. 2012  



Мне бы хотелось узнать механизм.... Улыбка по обезьяннему я могу это сделать, но не понимая правильность написания условия, я не могу делать следующие действия, например залипание кнопки... Улыбка разжуйте мне пожалуйста...Улыбка
 
 Top
m_w Post Id


Рядовой


Сообщений всего: 1
Дата рег-ции: Авг. 2012  



Ответ на этот вопрос весьма объемен.

Полная форма условного оператора:
if( /* выражение */ )
{
/* код1 */
}
else
{
/* код2 */
}
/* код3 */

Если выражение в круглых скобках истинно, то выполняется код1 и сразу за ним код3. Если выражение в круглых скобках ложно, то выполняется код2 и сразу за ним код3.

Сокращенная форма условного оператора:
if( /* выражение */ )
{
/* код1 */
}
/* код3 */

Если выражение в круглых скобках истинно, то выполняется код1 и сразу за ним код3. Если выражение в круглых скобках ложно, то сразу выполняется код3.

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

Пара примеров:
if( 1 )
{
PORTD = 0b00000001;
}
else
{
PORTD = 0b00000010;
}
PORTD = 0b00000000;

При выполнении этого кода на PD0 будет на несколько тактов установлена 1, а затем 0. На PD1 никогда не будет 1.
if( 0 )
{
PORTD = 0b00000001;
}
else
{
PORTD = 0b00000010;
}
PORTD = 0b00000000;

При выполнении этого кода на PD1 будет на несколько тактов установлена 1, а затем 0. На PD0 никогда не будет 1.

Чтобы узнать, что там на ножке микроконтроллера разработчики придумали специальные регистры: PINB для порта B, PIND для порта D и т.д.

if( PINB )
{
PORTD = 0b00000001;
}
else
{
PORTD = 0b00000000;
}

Если на порту В на всех ножках 0, то на PD0 будет 0. Если хотябы на одной из ножек установить 1, то на PD0 также будет 1.

Если я сказал что-то понятное, намекни и тогда я продолжу.
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



m_w +100
если надо "расшифровать" (перевести с С на русский язык) именно тот пример - я продолжу (ну или кто-нибудь меня опередит).
 
 Top
cjAndrews Post Id



Лейтенант


Сообщений всего: 25
Дата рег-ции: Авг. 2012  



Artem пишет:
а, если
???
(Добавление)
залипание кнопок - очеь просто! цикл ставишь на 10 (100, 1000 - зависит от частоты) цыклов -если кнопка жалась более 50% времени- значит кнопка была нажата.
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru