Assembler - 4. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Assembler - 4. lekceAssembler - 4. lekce

 

Assembler - 4. lekce

Google       Google       18. 8. 2005       26 698×

• Časovače
• Poslední přikazy
• Podprogramy..

Reklama
Reklama
Časovače

Pracují na principu čítače impulzů z vnějšího zdroje hodinového signálu, až se čítač naplní, tak se ukazatel TF0 nastaví do jedničky a toho budeme využívat. Existuje více módů časovače, my si ale vysvětlíme pouze dva, protože nám to stačí.

MOD 1 – čítač je tvořen 16 bity a tedy bude mu trvat 65,536 ms, než se naplní (216=65536)
MOD 0 – čítač je tvořen 13 bity, tedy 8,192 ms

Čítače jsou vždy dva TH0 – vyšší a TL0 – nižší, můžeme do nich zapisovat a to nám umožní vytvořit zpoždění na 2 mikro sekundy přesně.

Vezmeme si třeba MOD 1 a chceme zpoždění 30 ms, tak doplníme čítače o ten zbytek a je to. 65536 – 30000 = 35536 = 8AD0H

Ukázka :
ORG 0
MOV TMOD, #1 ;nastaveni modu
MOV TL0, #0D0H ;nastaveni nizsiho citace
MOV TH0, #8AH ;nastaveni vyssiho citace
SETB TR0 ;privedeni clocku na citac
ZPET: JBC TF0, SKOK ;pokud se citac naplni, pak skok
JMP ZPET ;nenaplnil - zkontroluj znova
SKOK: NOP ;prazdna instrukce
END

Program si zkopírujte, vyzkoušejte a dívejte se na kolonku CPU a to žluté to je skutečný čas v sekundách, zjistíte že ve skutečnosti program trvá 30,010 ms, to proto že ty MOVy a ostatní instrukce taky trvají nějaký čas.

Délku instrukcí naleznete v první lekci >> PŘEHLED PŘÍKAZŮ >> kolonka :L/C - Pomocí zpoždění vycházející z délky vykonání se dá také vytvořit časovou prodlevu, ale toto se nepoužívá, už je proto že se to hůř počítá a nemůže to být tak přesné

Pokud nechcete trasovat hodinu, než se to naplní zkuste místo F7 a F8 F9-ku, bude to rychlejší. Pro delší prodlevy by vás mohlo napadnout doplnit místo NOP příkaz DJNZ R3, ZPET a kolik nastavíte R3 o tolikrát se doba prodlouží.


Poslední příkazy

XCH – zamění obsah proměnných
XCHD – zamění pouze první čtyři bity
(možnosti jsou vypsány v tabulce)

SWAP A – provede výměnu vyššího řádu akumulátoru, za nižší a naopak: 76543210 >> 32107654 (čísla berte jako pořadí bitů), nikdy jsem to zatím na nic nepoužil, ale příkaz to je, tak budiž…

RLC A a RRC A – je rotace (vlevo a vpravo) bitu akumulátoru vždy jen o jedno pole, nabývá příznaku přenosu carry.

JMP $ - skok na sebe sama, může se využít třeba když nechceme nic vykonávat, zní to blbě, ale je to chytrá instrukce, její využití si popíšeme v příštím díle.

Můžeme ho použít v programu (výše), místo: JMP ZPET, napíšeme: JMP $-3, v editoru pak v kolonce VIEW TEXT vlevo vidíme adresu v ROM, na které zapsaná instrukce a tedy rozdíl mezi 0010 a 000D jsou právě ty tři místa (délka instrukce viz. tabulka).
Nerad toto používám už z důvodu že to je nepřehledné a zdlouhavé hledání.


Podprogramy

Volání podprogramu se provádí příkazem CALL, místo kde se odkazujeme nesmí začínat číslem a compiler je citlivý na malá/velká písmena, maximální délku jsem nezjišťoval, ale osm znaků jde určitě a to musí vystačit každému. Podprogram začíná svým jménem a ukončuje se příkazem RET.

Ukázka :
ORG 0
;………..PRIKAZY
CALL NECO
;………..PRIKAZY
JMP KONEC

NECO:
;PODPROGRAM
RET

KONEC:
END

POZOR !!!
– musel jsem použít JMP KONEC, protože by to vykonalo dvakrát podprogram, je to spíše jakási náhrada, místo dvou JUMPů (JMP začátek podprogramu a na konci podprogramu JMP zpět odkud jsme skočili). Používá se to, protože nemusíme hledat zpáteční adresu odkud jsme volali, místo toho použijeme RET. Ještě to je výhodné z toho pohledu, že můžeme volat podprogram z více míst, kdežto přes JUMPy bychom to museli upravit o výběr, kam se vrátit.



DÚ:
Vytvořte program pro blikač na kolo se třemi LED diodami na portu P2 a zpožděním přesně jednu sekundu, napadají mě dva způsoby jak na to časování, ale je to na vás jak si s tím poradíte…, ale budete mít hlavní program pro nastavování portu a podprogram pro zpoždění, počítejte s tím, že to má blikat stále, takže musíte…a to je váš úkol.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Tagy:
Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v Assembleru, zajímá se o elektroniku a tunning PC.

Nové články

Reklama
Reklama
Obrázek ke článku NopCommerce – datová vrstva a přístup k datům – 2. díl

NopCommerce – datová vrstva a přístup k datům – 2. díl

V minulém článku jsme si představili platformu NopCommerce z globálního pohledu. V dnešním díle se již zaměříme na konkrétní část systému, a to datovou vrstvu. Představíme si základní stavební kameny systému v podobě doménových objektů. Ukážeme si, jakým způsobem rozšířit doménové objekty a jakým způsobem přistupuje NopCommerce k nastavení systému a modulů.

Obrázek ke článku Seznamte se s open source platformou NopCommerce – 1. díl

Seznamte se s open source platformou NopCommerce – 1. díl

Hledáte e-commerce řešení, které si dokážete přizpůsobit podle vašich požadavků? Chcete čistý a srozumitelný kód, se kterým bude radost pracovat? Prozkoumejte s námi možnosti open source projektu NopCommerce. Seriál programování pod NopCommerce vám pomůže překonat první kroky nejistoty a úspěšně zvládnout vývoj pod platformou NopCommerce.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý