Форум myROBOT.ru » Лаборатория » Микроконтроллеры » микроконтроллеры AVR

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

1. Not_invented - 09 Августа, 2012 - 22:26:52 - перейти к сообщению
Помогите разобраться с правильностью условий, с принципом работы условий.




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

if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}




объясните пожалуйста как это работает...
2. JohnAA - 16 Августа, 2012 - 12:53:38 - перейти к сообщению
if (!(PINC & (0<<PINC1)))//
{ // (PIND0 = 0)
PORTA |= _BV(PA5);
}
if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}

(0<<PINC1) всегда будет = 0

if (!(PINC & 0)) & логическое умножение (PINC & 0) всегда будет = 0

if (!0) - инверсия результата условие всегда выполняется

второй вариант без !

всегда не выполняется т.к. if (0)

я думаю здесь ошибка в (0<<PINC1) значение 0 сдвигать на PINC1 разрядов что будет всегда давать 0
(Добавление)
p.s. в языке C/C++ условие if будет верно при любом значении отличном от 0
например if(5) будет выполняться.