CALL a GOTO

Ahoj, může mi tu prosím někdo vysvětlit rozdíl mezi CALL a GOTO. Stále to nechápu. Díky :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

Ahoj,
call je volání podprogramu zatím co goto je skok. call i goto má více možností použití, popíšu ti ty základní. Pokud se ti v programu často opakuje nějaká stejná část, můžeš tuto část použít jako podprogram, který budeš volat. Tuto část tedy vložíš do místa programové paměti, kde normální běh programu nevstoupí (třeba na začátek nebo na konec) a označíš ji návěstím a ukončíš return (návrat) takto:

Podprogram ... ... ... return

Předpokládám, že jsi začátečník a že nemáš rozsáhlé programy. Pokud máš napsaný podprogram, stačí ho tedy už jen zavolat takto:

	call	Podprogram

Po zavolání podprogramu se začnou vykonávat příkazy, které jsou uvedeny v podprogramu. Jakmile se program dostane na return, začnou vykonávat příkazy, které jsou za call Podprogram.

goto se používá pro větvení programu. Pokud chceš přeskočit podprogramy na začátku programové paměti (aby do nich program nevstoupil, jak jsem psal) použiješ goto. S dalších jednoduchých úloh můžeš třeba chtít otestovat PORTA,2 a podle toho změnit chod programu. Uděláš to takto:

[code] btfss PORTA,2
goto Portnenastaven

...
...
...

Portnenastaven


…[/code]

Pomocí Bit Test Skip If Set (btfss) otestuješ port PORTA,2, a pokud není nastaven, program začne vykonávat instrukce od návěstí Portnenastaven. Pokud je nastaven (má logickou 1), tak program pokračuje dále (bez skoku).

Snad jsem to napsal dost srozumitelně, když tak se ptej…

Díky za opravdu rychlou odpověď. Chápu to tedy správně, že call (volání) je něco jako makro ?

:arrow_right: administrator: zpráva byla odeslána dvakrát, jednu jsem vymazal

V případě základního použití makra by se dalo říci, že je to podobné. Makro ve výsledku způsobí to samé jako kdyby se příkazy z makra ručně vložili do kódu způsobem CTRL + C, CTRL + V. V případě makra (oproti call) se ušetří instrukce volání a program je o něco málo rychlejší. S makry se ale dá dělat spousta věcí navíc, jako je např. dodání proměnných do makra, která zajistí jiný kód generovaný makrem. Ale to už je vyšší znalost direktiv Microchipu.

Opět mnohokrát děkuji :smiley: :smiley:
Jak to děláš, že odpovídáš tak rychle, to fak nevim 8)

Používám RSS čtečku :slight_smile:.