Zdravim, ako sa vobec da vypocitat oneskorenie nejakeho cyklu, napr ze diody budu blikat v 2 sekundovom intervale??
V skole nas ucili ako oneskorenie nieco taketo ale vobec tomu nechapem
ones: mov R0,#255
navx: mov R1,#255
navy: djnz R1, navy
djnz R0, navx
reti
a potom sme ho zykli volat acall ones...
prikazy chapem ale ako z tohoto celeho vznikne oneskorenie neviem
Fórum › Assembler
Oneskorenie
To jozo0025: neuvedl jsi pro jaký mikroprocesor to chceš, uvedu výpočet pro at89c2051; dále musíš vědět pro jakou frekvenci to bude, dejme tomu že f = 12MHz, pak jeden strojový cykl pro tento mikroprocesor bude trvat 1us; v instrukčním souboru zjistíš jak dlouho trvá instrukce DJNZ, pro tento obvod trvá 2 strojový cykly, takže trvá 2us; tebou uvedený kód má 1 vnořený smyčku, v celkovým zpozdění se musí započítat i instrukce mov, jenž trvá 1us; celkova doba zpozdění bude doba trvaní vnitřní smyčky krát počet její provedení plus trvaní instrkuce mov krat pocet opakovani tehle instrukce a plus doba vnější smyčky, 510us*255 + 1us*255 + 510us = 130 815us pro úplnost je potřeba ještě započítat ještě ty první dvě instrukce mov a instrukci ret, takže tento podpogram se provede za 130 819us; jinak máš chybu v kódu má tam být ret ne reti, reti slouží pro návrat z přerušení; smyčku o délce přibližně 2s uděláš pomocí 2 vnořených cyklů:
ones: mov r2,#15
navy: mov r0,#255
navx: mov r1,#255
djnz r1,$
djnz r0,navx
djnz r2,navy
mnohem lepší je použít časovač pro vytváření časových smyček
To jozo0025: jj pro něj ten kód bude fungovat také, jen musíš znát frekvenci na které pracuje nejčastěji bývá 24Mhz nebo 12MHz, ten časovač se asi budete teprve učit, vysvětlovat ti celou látku casovače nebudu to si najdi na netu, ukážu ti jak by se řešila 2s zpoždění pomocí časovače
org 0
mov r1,#0
jmp skoc
org 0bh
inc r1
reti
skoc:
mov tmod,#1
mov tl0,#80h
mov th0,#7Bh
setb ea
setb et0
setb tr0
cjne r1,#31,$
To jozo0025: dobře tak to vezměmě popořádku, nejdřív se vykonají první dvě instrukce, které budou trvat 2us, na dalším řádku je vytvořená smyčka, která se provede 255, jelikož instrukce djnz trvá 2us pak celý tento cyklus bude trvat 510us, tento cyklus je vnořený v dalším cyklu, který se provede 255, takže ten vnitřní cyklus se provede 255x takže zpozdeni zpusobene tynto cyklem bude 255*510; potom je zapotřebí přičíst čas trvaní toho vnějšího cyklu - 510us, protože se provede 255x a trva 2us, potom ještě přičíst čas pro vykonáníí instrukce mov( provede se 255x), jenž je 255us a po ukončení cyklu se provede poslední instrukce ret, který trvá 2us; v součtu to dá 130 819us
To xp: Jn tyhle výpočty nesnáším... :C Proto je asi vhodnější časovač, ještě k tomu generuje přerušení. BTW: nějak jsi zapoměl připočítat mov ;) imho pro smyčku je lepší použít
djnz Rx, $
a navěstí použít až pro násobič. Ono teoretický výpočet se stejně většinou netrefí a pak se to dolaďuje formou pokus omyl ;) My co neradí počítáme to tak děláme od začátku :D :D :D
imho používat R0 a R1 není chytré, jelikož jsou to jediné registry které umožňují nepřímou adresaci jsou tam sice 4x ale i tak je to docela plýtvání ;)
Jak se liší Windows a Tamagoči? Windows chcípnou, i když se o ně staráte.
Viete ako spoznáte závislosť na internete? Keď narazíte autom do zvodidiel, a prvé čo hľadáte je back.
Taky jsme to brali, proč né? Sice to je takové malátné, ale plní účel.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Oneskorenie — založil Tomas
Oneskorenie — založil Tomas
Oneskorenie - delay — založil Grungy
Oneskorenie v Lazaruse — založil TaurenDruid