В описании команд для вывода регистра в PORT требуется 1 такт. ЕМНИП, "ногодрыганьем" на "новой" ATmega88 удалось гарантировано переключать только с интервалом в 3 (три) такта. http://www.530.ru/wwwboards/mcontrol/2083/messages/555395.shtml
Так не работало
LDI R1,0
LDI R2,1
...
OUT PORTA, R1
OUT PORTA, R2
OUT PORTA, R1
OUT PORTA, R2
OUT PORTA, R1
OUT PORTA, R2
Так работает
LDI R1,0
LDI R2,255
...
OUT PORTA, R1
NOP
NOP
OUT PORTA, R2
NOP
NOP
OUT PORTA, R1
NOP
NOP
OUT PORTA, R2
NOP
NOP
OUT PORTA, R1
NOP
NOP
OUT PORTA, R2
Та же ерунда с чтением - не работало, считывалось предыдущее значение порта, до команды OUT PORTA, R1
OUT PORTA, R1
IN R3, PORTA
Так работает
OUT PORTA, R1
NOP
NOP
IN R3, PORTA
Цитата:
ATTiny2313_revI.pdf стр.52:
When reading back a software assigned pin value, a nop instruction must be inserted as indicated in Figure 24 и далее по тексту...