Darek, postaram Ci trochę przybliżyc pojęcie pętli czsowej.
Kazdy rozkaz wiadomo zajmuje trochę czasu. Np przy kwarcu 12M
taki rozkaz NOP (nic nie rób) to 1 mikros.
Chcąc uzyskać np opóznienie 10 us mozesz napisac 10 takich rozkazów.
Ale mozna to zrobic całkiem inaczej.
MOV R7,#5
DJNZ R7,$ (rozkaz ten idejmuje 1 od zawartości rejestru R7 i jeśli
pozostała wartość w R7 nie=0 skacze do etykity, w tym
przypadku do siebie samego).
Ponieważ czas wykonywania tego rozkazu jest dwa razy dłuższy od NOP
dostajesz 10 us. Możesz to też napisać tak:
ET1: DJNZ R7,ET1
Zobacz, że wstawiając na początku MOV R7,#0 uzyskujesz 256 powtórzeń
pętli a więc 512 us. DJNZ bowiem najpierw odejmuje a dopiero potem
sprawdza czy zero.
Dam Ci teraz bardziej rozbudowany przykład, z dwoma petlami.
MOV R6,#14
ET1: MOV R7,#100
DJNZ R7,$
DJNZ R6,ET1
Teraz wewnętrzna pętla z R7 wykonywała się będzie 14 razy.