[PIC programování] – 8. díl

Vítám vás u osmého dílu série PIC programování!

Ještě než se vrhneme na sériovou komunikaci a podobné věci, rád bych vám ukázal, jak si udělat podprogram, předat mu data a následně jej zavolat.

Co jsou podprogramy?

V jazycích vyšších úrovní (např C, C++, Python, Pascal, …) existuje pojem funkce. Pascal navíc rozlišuje pojmy procedura a funkce. V Assembleru nic jako funkce neexistuje, ale nejprve vysvětlím tento pojem.

Funkce je blok kódu, který jednou napíšeme, ale můžeme jej libovolně mnohokrát volat ve zbytku programu. V mnoha aspektech se funkce v programovacích jazycích podobají funkcím matematickým. Tedy přebírají libovolný počet argumentů (v matematice proměnných) a vrací jednu jedinou hodnotu.

Pozn.: V některých skriptovacích jazycích, jako je Python nebo LUA, může funkce vracet i více hodnot, to je ale pro nás momentálně matoucí, takže zůstaneme u toho, že funkce vrací jednu hodnotu.

V jazycích jako C, C++, … existují funkce, které nemusejí vracet hodnotu (typ void). Tyto funkce jsou právě v pascalu označeny jako procedury.

Ukázka velmi jednoduché funkce v jazyce C pro inkrementaci hodnoty:

V Assembleru by se podprogram napsal asi nějak takto:

Zde si musíme zajistit předání hodnot funkci sami. Jak to zrealizujeme je na nás. Můžeme si vyhradit místo v paměti pro argumenty podprogramů, nebo, pokud je jen jeden, předáme jej v pracovním registru (jako v příkladu výše). Návratovou hodnotu pak obvykle vracíme v pracovním registru (pokud je 1-bytová).

Následně pak náš podprogram zavoláme příkazem call. Uvedu rovnou celý jeden funkční program, ve kterém ověříme výsledek podprogramu na 3 LEDkách zapojených na PORTC<0:2>, do kterého přesunete výsledek z registru W.

A dále ještě pro jistotu uvedu schéma:

A pokud jste si toho v komentářích kódu nevšimli, ještě poukážu na to, že na začátku programu děláme skok, abychom zabránili provádění kódu v podprogramech při startu.

A to je pro tento díl vše.

Posted in PIC

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *