Код: Выделить всё
.include "1200def.inc"
.ORG 000
rjmp reset
reset:
ldi r31,$1f
out ddrb,r31
ldi r31,$61
out portb,r31
rjmp scan
scan:
sbis pinb,6
rjmp left
sbis pinb,5
rjmp right
rjmp scan
left:
rjmp scan
right:
rjmp scan
И так, выводя в DDRB число $1f (то есть 0b00011111) я задаю работу выводов PORTB pin 0 по pin 5 как выходы, а 6, 7 и 8 соотв. как входы. Но, во время симуляции, при выводе числа $61 (0b01100001) в PORTB (см. код), в регистр PINB считывается PORTB pin 0 вместо заданных как входы PORTB pin 5 и pin 6, в результате чего блок с месткой scan отрабатывает прыжок на метку left (чего в принципе не требуется). Если попытаться инверсировать число вводимое в регистр DDRB, то есть вместо $1f ввести $e0 (при этом направление портов тоже инвертируются), то все работает как надо, но остается вопрос, а как же с направлениями портов, ведь теперь они заданы наоборот? Может в AVR Studio надо где-то задавать правильную работу DDRx? В чем здесь ошибка?
Спасибо за помощь!

