Помогите разобраться с условием:
if (!(PINC & (0<<PINC1)))
{ // (PIND0 = 0)
PORTA |= _BV(PA5);
}
if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}
как это работает..??
1. Not_invented - 09 Августа, 2012 - 23:18:36 - перейти к сообщению
2. Artem - 10 Августа, 2012 - 11:10:14 - перейти к сообщению
если порт с1 не равен нулю то установить 1 на выходе 5 порта а, если порт с1 равен нулю то установить 0 на выходе 5 порта а вроде всё просто
3. Not_invented - 10 Августа, 2012 - 18:26:43 - перейти к сообщению
Мне бы хотелось узнать механизм.... по обезьяннему я могу это сделать, но не понимая правильность написания условия, я не могу делать следующие действия, например залипание кнопки... разжуйте мне пожалуйста...
4. m_w - 10 Августа, 2012 - 21:30:28 - перейти к сообщению
Ответ на этот вопрос весьма объемен.
Полная форма условного оператора:
Если выражение в круглых скобках истинно, то выполняется код1 и сразу за ним код3. Если выражение в круглых скобках ложно, то выполняется код2 и сразу за ним код3.
Сокращенная форма условного оператора:
Если выражение в круглых скобках истинно, то выполняется код1 и сразу за ним код3. Если выражение в круглых скобках ложно, то сразу выполняется код3.
Выражение в круглых скобках ложно, если в результате его вычисления получен ноль. Все, что не ноль является истинным.
Пара примеров:
При выполнении этого кода на PD0 будет на несколько тактов установлена 1, а затем 0. На PD1 никогда не будет 1.
При выполнении этого кода на PD1 будет на несколько тактов установлена 1, а затем 0. На PD0 никогда не будет 1.
Чтобы узнать, что там на ножке микроконтроллера разработчики придумали специальные регистры: PINB для порта B, PIND для порта D и т.д.
Если на порту В на всех ножках 0, то на PD0 будет 0. Если хотябы на одной из ножек установить 1, то на PD0 также будет 1.
Если я сказал что-то понятное, намекни и тогда я продолжу.
Полная форма условного оператора:
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.
Если я сказал что-то понятное, намекни и тогда я продолжу.
5. Predator - 10 Августа, 2012 - 21:36:41 - перейти к сообщению
m_w +100
если надо "расшифровать" (перевести с С на русский язык) именно тот пример - я продолжу (ну или кто-нибудь меня опередит).
если надо "расшифровать" (перевести с С на русский язык) именно тот пример - я продолжу (ну или кто-нибудь меня опередит).
6. cjAndrews - 10 Августа, 2012 - 22:09:54 - перейти к сообщению
Artem пишет:
??? а, если
(Добавление)
залипание кнопок - очеь просто! цикл ставишь на 10 (100, 1000 - зависит от частоты) цыклов -если кнопка жалась более 50% времени- значит кнопка была нажата.