Witam, mógłby mi ktoś matematycznie wytłumaczyć w jaki sposób to opóźnienie się tworzy, na kwarcu 11,0592 daje około 0,7s. Sprawdzałem w keil uvision ale doszedłem do samych bzdur. Oczywiście rozumiem co robi rozkaz DJNZ

Znasz znaczenie DJNZ?
Decrement Jump if Not Zero.
Zmniejsza wartość podanego rejestru, a następnie wykonuje skok - gdy wartość (rejestru) wciąż jest <> 0.
Jak wiadomo czas wykonywania instrukcji jest niezerowy - stąd powstaje "regulowane " (podanymi wartościami) opóźnienie.
Zmienia się bowiem liczba iteracji pętli - więc i liczba wykonanych instrukcji.
Czy jeszcze coś jest niejasne?
Ile się wykonuje zależy od typu procesora..
Nie każda instrukcja wykonuje się tyle samo razy
Przykładowo: DJNZ jak wykonuje skok - wykonuje się dłużej (zabiera więcej cykli taktów CPU) - niż jak skoku nie wykonuje.
Wszystko zależy od typu procka (i częstotliwości).
Do tego zależy - czy czasem nie masz włączonych przerwań.
Jak wiadomo - przerwanie przerywa działanie pętli i wykonuje się ona jeszcze dłużej.
Stosowanie takich pętli (zwłaszcza długich) jest wielce nieefektywne.
Procek w nich nic nie robi.
O wiele lepszym rozwiązaniem jest stosowanie timerów i przerwań (właśnie).