Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: WinAVR и Atmega32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
nvk
Добрый день!

Написал следующий код:
i = 0;
while (((PINA & 0x08)==0x08) || i<60)
{
_delay_ms(1000);
i++;
}
Он почему-то не работает. Если убираю одно условие, например, так:
i = 0;
while ((PINA & 0x08)==0x08)
{
_delay_ms(1000);
i++;
},
то работает.
Почему не работает операция "ИЛИ" (||)? WinAVR от 10.01.2010, AVR Studio версии 4.18.716.
zhevak
Добрый день, Артем!

Мне кажется, что ошибка не в компиляторе, а в Вашем логическом рассуждении.

Поправьте меня, если я ошибаюсь. На сколько я понял, Вы хотите, чтобы благодаря этому циклу прога замерла на некоторое время в ожидании снятия сигнала с ножки МК.
Иняче говоря, мы ждем, когда снимется сигнал. Но не более одной минуты. В зависимости от того, что наступит раньше (снимется сигнал или кончится время), цикл должен прерваться.

Если это так, то Вам нужно было написать условие следующим образом:

Код
while (((PINA & 0x08) == 0x08) && (i < 60))
{
  ...
}


Цикл while прервется, когда первое ((PINA & 0x08) == 0x08) или второе (i < 60) подусловие станет ложным. Просто пораскиньте мозгами и всё поймете самостоятельно.
nvk
Цитата
Цикл while прервется, когда первое ((PINA & 0x08) == 0x08) или второе (i < 60) подусловие станет ложным. Просто пораскиньте мозгами и всё поймете самостоятельно.


Блин, точно, я протупил. Спасибо.
P.S. Только зовут меня не Артём.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.