Witam
Mam taki oto kod realizujący opóźnienie:
Przy czym do R16 ładuje się wartość opóźnienia w mikro sekundach, natomiast "sys_freq" jest to wartość kwarcu w MHz.
I powiedzcie mi jakim cudem przy kwarcu 1 Mega załadowanej wartości 0 do R16 opóźnienie na końcu wyjdzie 2560 us??
Przecież:
-kwarc 1MHz ma okres 1us czyli jak rozumiem jeden takt jest równy jednej mikro sekundzie
-instrukcje(ilość taktów zegara na wykonanie):
- call 4 takty
- push 1 takt
- mov 1 takt
- ldi 1 takt
- nop 1 takt
- dec 1 takt
- brne 1 lub 2 takty (zalżene prawda czy fałsz)
- pop 1 takt
- ret 4 takty
Czyli przy wartoścach R16=0 i sys_freq=1 daje to około 40us a nie 2560, chyba że źle rozumię to proszę o sprostowanie, z góry dziękuję.
Poprawiłem tytuł.
[zumek]
Mam taki oto kod realizujący opóźnienie:
wait_us:
push R17
push R18
mov R18, R16
ldi R17, sys_freq
wait_us_0:
mov R16, R18
wait_us_1:
nop
nop
nop
nop
nop
nop
nop
dec R16
brne wait_us_1
dec R17
brne wait_us_0
pop R18
pop R17
ret
Przy czym do R16 ładuje się wartość opóźnienia w mikro sekundach, natomiast "sys_freq" jest to wartość kwarcu w MHz.
I powiedzcie mi jakim cudem przy kwarcu 1 Mega załadowanej wartości 0 do R16 opóźnienie na końcu wyjdzie 2560 us??
Przecież:
-kwarc 1MHz ma okres 1us czyli jak rozumiem jeden takt jest równy jednej mikro sekundzie
-instrukcje(ilość taktów zegara na wykonanie):
- call 4 takty
- push 1 takt
- mov 1 takt
- ldi 1 takt
- nop 1 takt
- dec 1 takt
- brne 1 lub 2 takty (zalżene prawda czy fałsz)
- pop 1 takt
- ret 4 takty
Czyli przy wartoścach R16=0 i sys_freq=1 daje to około 40us a nie 2560, chyba że źle rozumię to proszę o sprostowanie, z góry dziękuję.
Poprawiłem tytuł.
[zumek]