.
Myšlenka upravit _delay() je správná. Nevím o žádné nelinearitě.
Chvíli ale trvá, než pomocí simulátoru najdeš hodnoty pro _delay().
(A pro různé kompilátory se může lišit.)
U mně funguje toto: (WINAVR-20100110)
int main(void)
{
while(1)
{
// invertuj bity
PORTD ^= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6);
_delay_ms(961);
_delay_us(555);
}
}
Ale všimni si, že tento kód zaměstnává stoprocentně procesor, takže už nemůže dělat nic jiného.
Proto se v praxi používají ke zpoždění časovače.
Jednoduše řečeno, dvě nekonečné smyčky nemohou běžet současně.
A v začátcích to určitě v žádném programu nebudeš potřebovat.