Přerušení hodin

obvod

Obvod detekce přerušení hodin obsahující: vstupní hodinový kmitočet na jinou hodnotu stupnice a výstup množství obvodů frekvenčního děliče hodin; vstupní hodiny a množství frekvenčně dělených hodinových obvodů "a" "and"; invertor mající invertované frekvenčně dělené hodiny rozdělující maximální hodnotu; zbývající vstupní hodiny frekvenčně dělené hodiny a výstupní obvod "a" a "provoz" "invertoru"; je poskytnuto příslušnému prvnímu a druhému spínači, majícímu "řídicí svorku" výstupního obvodu, ovládání ZAP/VYP vybíjecí cesty prvního a druhého kondenzátoru; první a druhá vlna z vyrovnávacího obvodu je přivedena na svorkové napětí prvního a druhého kondenzátoru; získaný podle délky výstupního invertoru pro manipulaci se zpožďovacím obvodem, předem určený řídící signál volby časového zpoždění, výstupní vyrovnávací obvod tvořený prvním a druhým obvodem pro výběr tvaru vlny. Což způsobí, že vstupní hodiny jediným přerušením systémových hodin mohou být detekovány snáze integrovaně a doba přerušení hodin může být přesně detekována.

Příklad

a počáteční hodnota přerušení časovače cyklus hodin přeruší příliš často, obecně 20 mS (50 Hz) může být. Signál časové základny potřebuje setiny sekundy, nejlépe 10 mS (100 Hz). Zde vezměte 20mS, T0 časovač pracující v 16bitovém režimu časovače (režim 1). T0 funguje následovně: každý strojový cyklus se automaticky zvýší, když je počet plný 0FFFFh, aby došlo k přetečení, vygeneruje přerušení nastavením odpovídajícího příznakového bitu hardwaru pro softwarové dotazování. Po strojovém cyklu N + 1 než začátek přerušení. Takže jsme jen T0 předem uložili v menším počtu, než je plná hodnota 0FFFFh N, a pak spustíme časovač, ten vygeneruje přerušení po N strojových cyklech. Tato hodnota je takzvaná "počáteční hodnota." Výpočet počáteční hodnoty potřebujeme: takt je 6MHz, 12 hodinových period strojového cyklu, 20mS je 10 000 strojových cyklů. (10 000) = 10 (2710) 16, 0FFFFh-2710h + 1 = 0D8F0h. Protože odezva na přerušení a opětovné načtení počáteční hodnoty ochrany pole vyžadovalo 7-8 strojních cyklů, měla by být tato hodnota plus 7, tj. T0 počáteční hodnota, načtena 0D8F7h. Po každém vstupu přerušení a hodnota PSW A nejprve posunuta do zásobníku, tj. 0D8F7h poté načten T0.

nastavovací jednotka plus 1 každé přerušení interní RAM můžeme vzít jednotku s názvem INCPI (Increase Per Interrupt), v přerušení je počáteční hodnota T0 Bahrain, u instrukce INC INCPI je to plus. Z této jednotky, hlavního programu nebo přerušení programu, lze získat signál z libovolného celočíselného násobku 20 mS mezi 256 ~ 1. Například: Došlo k významnému předání digitálního programu, je třeba provést jednou za 0,5 sekundy v za účelem obnovení zobrazení může být poskytnuta jednotka (označovaná jako čekající buňka) W_DISP, s / MOV A, INCPI / ADD A, # 25 / MOV W_DISP , a / jsou povoleny příkazy větší než aktuální hodnota INCPI 25 a poté zkontrolujte, zda jsou hodnoty každého přerušení INCPI stejné. Je-li rovno, což znamená, že prošlo 25 cyklů přerušení, odešle významné provedení programu a nechá W_DISP plus 25 počkat dalších 0,5 sekundy. Můžeme čekat na množství jednotek, abychom extrahovali množství různých časových základen. Pokaždé, když přerušíte, nechte program přerušení a poté klikněte na Dotaz, zda se každá jednotka a čekání INCPI rovná, pokud je stejná, provede se odpovídající proces a resetujte hodnotu čekající jednotky, jinak přeskočte. Např.: 0,5 sekundy nebo blikající obnovovací signál displeje, hodiny reálného času generující obdélníkové vlny nebo výstupní signál konstantní frekvence s jednou sekundou, v intervalech dotazujte vstupní zařízení.

čtení v tlačítku přerušení Obvykle čteme klávesnici v hlavním programu, kroky: skenování klávesnice, pokud je stisknuta nějaká klávesa, zpoždění desítky milisekund na zatřesení, skutečně Stiskněte toto tlačítko znovu pro potvrzení a zkuste to znovu po dokončení výše uvedeného kroku, který odpovídá operaci klíče. Existují však dva nedostatky: 1 nelze zablokovat vstupní klíče odpovídající zpracování, které může uniknout klíč. 2. Zpoždění CPU nemůže dělat jiné věci, aby se otřáslo, když účinnost není vysoká. Pokud se klíč čtení do hodin přeruší, můžete se těmto nedostatkům vyhnout. Metoda: Pokud dvě sousedí s přerušením, aby bylo možné číst, je stisknuta stejná klávesa, pak je klávesa platná (až k účelům debounce) a je zablokována ve vyrovnávací paměti klávesnice FIFO (fronty) a dalším hlavním programu, se kterým se má vypořádat. . Tedy, zatímco hlavní program kláves, stále v reakci na vstup z klávesnice. Typicky může být vyrovnávací paměť hloubky nastavena na 8, pokud je počet klíčů než západka 8, nový klíč je ignorován a nový poplach bude uživatelský klíč neplatný. Je-li doba stagnace fronty vyrovnávací paměti klávesnice mnohem delší než doba zpracování hlavní klávesy požadovaná pro maximum, což naznačuje, že hlavní program běží nebo je chybný, může být systém přerušen instrukcí reset, což je účel funkcí hlídacího psa.

v hlavní rutině, protože normálně otevřené přerušení hodin zpoždění, hlavní program, když je potřebný čas kratší, tím vyšší je přesnost zpoždění, přerušení hodin by mělo být dočasně uzavřeno. Když je program delší, není vyžadována vysoká přesnost zpoždění, lze jej modelovat podle požadovaného zápisu, aby se zabránilo zpoždění vnořené smyčky.

Příklad: P1.1 za 1 sekundu vysokoúrovňového pulzního výstupu

MOV A, INCPI

INC A

CJNE A , INCPI $; počkejte na dokončení dalšího zpracování přerušení

SETB P1.1; P1.1 za předpokladu, že je H, puls začíná

ADD A, # 50; 50. 20 mS 1 sec

CJNE a, INCPI, $; a přerušení INCPI plus 50

CLR P1.1; P1.1 nastaven jako L, konec pulzu

níže například s MCS-51:

Proces odezvy na přerušení MCS-51:

1, v reakci na podmínku přerušení: mluvíme zde, stále cítíme magické přerušení, aby počítač reagoval, my lidé můžeme reagovat na vnější události, protože máme více "senzorů" - oči, uši mohou přijímat různé informace, jak to počítač dělá? Řečeno na rovinu, není se čemu divit, když práce MCS51 v každém strojovém cyklu půjde zkontrolovat, co každý příznak přerušení, zda jsou "1", pokud je 1, znamená to, že existuje požadavek na přerušení, tzv. přerušení, vlastně dotaz, ale každý cyklus to zkontrolujte. Že dospělí se chtějí změnit, jste v ekvivalentu čtení, vzhlédli, abyste viděli každou sekundu, abyste zkontrolovali, co není, někdo zazvonil na zvonek, pokud je tam telefon. . . . Hloupé, že? Počítač mohl být takový, nebyli to chytří lidé.

pochopit výše popsaný proces přerušení, podmínka přerušení není nejasná. V jednom z následujících tří případů CPU zablokuje odezvu na přerušení:

CPU zpracovává stejnou nebo vyšší úroveň požadavku na přerušení. Aktuální strojový cyklus není posledním cyklem, který aktuálně provádí instrukci. Víme, že existují jednočipové jednocyklové, dvoucyklové, třícyklové instrukce, aktuálně prováděná instrukce je jednobajtová, nezáleží na tom, jestli je dvoubajtová nebo čtyřbajtová, musela by čekat celou instrukce se provede přes, aby reagovala na přerušení (protože dotaz je přerušen při každém strojovém cyklu, který bude pravděpodobně nalezen).

je aktuální instrukce, která se provádí, aby se vrátil dávkový příkaz (RETI) nebo IP přístup, registr instrukcí IE, pak by měl být CPU provádějící alespoň jednu instrukci pouze přerušen. To souvisí s tím, že pokud přistupujete k IP, IE se může otevřít a přerušení zakázat přerušení přerušit nebo změnit prioritu instrukce návratu přerušení je znázorněno na tomto přerušení nebylo zpracováno, takže musíte počkat na konec zpracování této směrnice a pak proveďte jednu instrukci, než budou moci reagovat na přerušení.

2, proces přerušení

Když dojde k přerušení CPU, první z následující instrukce aktuální instrukce (to znamená po návratu z instrukce přerušení, která má být provedena) na adresu zásobníku a poté v souladu s příznakem přerušení odpovídající záznam přerušení adresu do PC, program pointer PC, CPU si PC vyzvedne podle hodnoty, hodnotu co PC, kde vyzvedne instrukci, tak se program rozvětví na přerušení vstup pokračuje. Tuto práci provádí hardware, nemusíme uvažovat. Existuje také problém, pokud jste si všimli, že každý vektor přerušení je oddělen pouze osmi jednotkami, například 0003-000B, jak dokončit rutinu přerušení na tak malém prostoru? Velmi jednoduché, zařídíte instrukci LJMP na místě, nemůžete přerušit program, abyste skočili na jakékoli místo?

Kompletní hlavní program by měl vypadat takto:

ORG 0000H

LJMP START

ORG 0003H

LJMP INT0; transfekované externí přerušení 0

ORG 000 BH

RETI; 0 žádné přerušení časovače, RETI sem dal jedno, v případě přerušení "nezajímá mě" to nebude mít velký účinek. Po

proces přerušení je dokončen, ujistěte se, že po provedení této instrukce provedete instrukci RETI, CPU uloží adresu ven, zpět do PC, poté bude program přerušen z hlavního programu Oddělení pokračuje v implementaci dolů. Poznámka: Ochrana CPU je velmi omezená, pouze ochrana adresy a všechny ostatní věci nejsou chráněny, takže pokud chcete používat A, PSW v hlavním programu atd., ale také s rutinou přerušení, ale také k zajištění návratu do hlavního programu poté, co jsou data nebo nebyla provedena před přerušením dat, jste se ochránili.

vyhodnotit

Zdá se, že je flexibilní aplikace přerušení hodin, přerušení a racionální přidělování úkolů hlavnímu programu, a oba chtějí jasnou dělbu práce, jednoduché rozhraní. To je jedna z dovedností, které také potřebujeme hodně pokusů a omylů a zkušeností v praxi. Poznámka: měli byste se pokusit zkrátit dobu provádění obsluhy přerušení, ne déle než 20 mS.

Související články
HORNÍ