Споткнулся на ровном месте:
Есть attiny2313 На ноги PB0 и PB1 повешены кнопки. На ноги PB2 и PB3 светодиоды.
Хочу, чтобы кнопка с PB0 включала светодиод PB2, а кнопка PB1 - светодиод PB3
Пишу такой код:
...
while(1)
{
if(PINB & 0x01 != 0) PORTB |= 0x04; else PORTB &= ~0x04;
if(PINB & 0x02 != 0) PORTB |= 0x08; else PORTB &= ~0x08;
}
В итоге первая кнопка мигает обоими светодиодами, а вторая никак себя не проявляет...
Когда идеи кончились, странслировал код в ассемблер (ключик -S) и получил, в частности, следующий кусок:
.L5:
sbis 54-32,0
rjmp .L2
sbi 56-32,2
sbi 56-32,3
rjmp .L5
.L2:
cbi 56-32,2
cbi 56-32,3
rjmp .L5
В общем, как видно - генерится код, который тупо смотрит на нулевой бит
sbis 54-32,0
и рулит обоими светодиодами синхронно:
sbi 56-32,2
sbi 56-32,3
либо
cbi 56-32,2
cbi 56-32,3
Вопрос: Какого #$&^?!!!!