Tijdvertraging in een microprocessor verwijst naar een opzettelijke pauze of wachtperiode die in de uitvoering van een programma wordt geïntroduceerd. Dit wordt bereikt door technieken te gebruiken die een specifieke hoeveelheid verwerkingstijd in beslag nemen zonder enige andere betekenisvolle berekening uit te voeren. Het wordt om verschillende redenen gebruikt, voornamelijk om gebeurtenissen te synchroniseren of de timing van externe apparaten te regelen.
Er zijn verschillende manieren om tijdvertragingen in een microprocessor te implementeren:
* Softwareloops: De eenvoudigste methode. Er wordt herhaaldelijk een lus uitgevoerd die een reeks instructies bevat. De totale vertraging is afhankelijk van het aantal instructies en de kloksnelheid van de microprocessor. Deze aanpak is onnauwkeurig omdat deze wordt beïnvloed door factoren als interruptafhandeling en processorbelasting. Een eenvoudig voorbeeld van montage zou er als volgt uit kunnen zien:
```montage
VERTRAGING:
DEC R16; Tellerregister verlagen
BRNE VERTRAGING; Vertakking indien niet gelijk aan nul (continue lus)
RJMP VOLGENDE; Ga naar de volgende instructie
```
* Timers/tellers: Microprocessors hebben vaak ingebouwde timers of tellers. Deze randapparatuur telt klokcycli of externe gebeurtenissen. Het programma kan een timer op een specifieke waarde initialiseren en vervolgens wachten tot deze naar nul aftelt. Dit is over het algemeen nauwkeuriger en minder gevoelig voor variaties in de processorbelasting vergeleken met softwarelussen.
* Realtime klok (RTC): Voor langere vertragingen kan een RTC (die doorgaans onafhankelijk van de hoofdprocessor werkt) worden gebruikt om een nauwkeurige tijdreferentie te bieden. Het programma kan de RTC controleren om te bepalen wanneer de gewenste vertraging is verstreken.
* Wachtstatussen: Deze worden toegevoegd aan geheugentoegangscycli om te synchroniseren met langzamere geheugenapparaten. Hoewel dit niet direct een vertragingsmechanisme* is, verhogen wachttoestanden de totale tijd die wordt besteed aan het benaderen van geheugen, wat kan worden gebruikt als onderdeel van een timingschema (hoewel het niet ideaal is en voorzichtig moet worden gebruikt).
Factoren die de nauwkeurigheid beïnvloeden:
* Kloksnelheid: De klokfrequentie heeft rechtstreeks invloed op de duur van softwarelussen en timertellingen. Variaties in de kloksnelheid hebben invloed op de nauwkeurigheid van de vertraging.
* Onderbreekt: Interrupt service routines (ISR's) kunnen de uitvoering van een vertragingslus onderbreken, waardoor deze langer duurt dan verwacht.
* Processorbelasting: Als de processor bezig is met andere taken, kan de vertraging worden beïnvloed.
Waarom vertragingen gebruiken?
* Synchronisatie: Acties coördineren met externe hardware (bijvoorbeeld het aansturen van LED's, sensoren, motoren).
* Ontbuigen: Voorkomen van valse signalen van schakelaars of knoppen.
* Snelheidslimiet: Het controleren van de frequentie van gebeurtenissen (bijvoorbeeld het beperken van de snelheid van gegevensoverdracht).
* Gebruikersinterface: Pauzes creëren tussen acties in een gebruikersinterface.
Het kiezen van de beste methode is afhankelijk van de vereisten van de toepassing op het gebied van nauwkeurigheid, duur en resourceverbruik. Voor korte vertragingen kunnen softwarelussen voldoende zijn. Voor langere of nauwkeurigere vertragingen verdienen timers of RTC's de voorkeur. |