. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Škola programování PIC-8 díl
Škola programování PIC 8

Škola programování PIC 8

Zpoždění - delay.

Snad nejčastějšími rutinami používanými u procesorů jsou čekací smyčky. Procesor totiž běží většinou na 4MHz což je poměrně dost a často je potřeba ho chvíli zdržet. Klasickým použitím může být například odstranění zákmitů na tlačítkách, nebo i jen tvorba určitého kmitočtu či časové prodlevy. Problém je ale v tom, že procesor nezná žádné příkazy typu delay() a podobně, běží stále dál a dál. Jediný příkaz na zdržení je NOP, ten však čeká jen jeden instrukční cyklus což při 4MHz oscilátoru je 1us a při potřebě čekání 1s by jich bylo potřeba jeden milión!

U procesorů se tedy dělají již zmíněné čekací smyčky. To je část programu, kterou procesor běží několikrát za sebou a tím se zdrží:)
Konkrétně se to dělá tak, že do jednoho nebo více registrů se vloží určité číslo, od kterého se pak při každém průběhu smyčkou odečte jednička. Lze to však samozřejmě udělat i opačně, že se registr vynuluje a postupně se přičítá.

Tady je první příklad:

Nejedná se samozřejmě o celý program, ale jen o uvedenou rutinu.
Takže co program dělá:
Nejprve zhasne LED, poté vymaže registr s názvem CISLO. Pak k tomuto registru postupně přičítá jedničku a čeká na jeho naplnění, kdy znovu rozsvítí LED.

INCFSZ CISLO,1 - tento příkaz funguje tak, že přičte jedničku k registru CISLO a novou hodnotu uloží zpět do tohoto registru (to ta jednička na konci, při nule zůstane výsledek jen v pracovním registru a CISLO se nezmění). Pokud se nic neděje, pokračuje procesor na následujícím řádku příkazem GOTO. Pokud se však již registr CISLO naplnil a přetekl (256), přeskočí se následující příkaz a skočí se až na ten v pořadí druhý. V našem případě tedy až na BSF LED.

Při počítání zpoždění vynecháme vše před a vše za a vezmeme pouze dva hlavní řádky: řádek s INCFSZ zabere jeden strojový cyklus a řádek s GOTO zabere dva = 3 strojový cykly * maximální velikost registru 255 = zpoždění 765 strojových cyklů.
To není mnoho, při 4MHz krystalu je to 765us.

Nic však nebrání použití dvou registrů, kdy od jednoho budeme stále odečítat (přičítat) jedničku a až přeteče, přičteme jedničku k tomu druhému. A zase budeme počítat s tím prvním:

Takhle jsme dosáhli zpoždění zhruba 196000 strojových cyklů.
Pokud by jste chtěli ještě víc, můžete přidat ještě další registry na počítání.

Jako třetí příklad tedy uvedu již celý program na zpoždění zhruba 1s. Zapojení bude stejné jako v minulém díle Školy PIC a LED zde bude blikat zhruba v 1s intervalech (1s zapnuta, 1s vypnuta).
Čítačem jsem měřil periodu blikání je 2 , 072 606 s.

Zde je ke stažení:

ASM
HEX

Uvedené rutiny lze použít i pro odstranění zákmitů tlačítek. V tom případě však je potřeba ještě u záložky ZPET příkaz na přičítání posunout o řádek níž a zde testovat zda je ještě tlačítko sepnuto. Pokud ano, vrátí se procesor zpět a tak čeká až na definitivní puštění tlačítka, po kterém jeste uvedenou dobu čeká zda se nejedná jen o zákmit a nemá se tedy znovu vrátit a počítat znovu.

Uvedená rutina může vypadat třeba takto:

A vložená do Prvního programu je zde ke stažení:

ASM
HEX

Můžete si vyzkoušet, že na další stisk reaguje až po chvíli klidu.







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (6):

Zobrazit starší 30 dnů (6)...

host
6. Dne 18. 07. 2008 v 20:12 zaslal host
Genrátor kódu smyčky
Programování si můžete usnadnit pomocí malé utility PiKLoops (já mám verzi pro Linux a nevím zda existuje taky pro Win). http://pikloops.sourceforge.net/


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
PLA8 MICRO - Logický analyzátor pro USB
Logický analyzátor pro USB 2.0, klon Saleae, 8-bitová verze s 10 GS a integrovanou analýzou rozhraní.
Skladem od 825 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007