Tidsfördröjning i en mikroprocessor hänvisar till en avsiktlig paus eller väntetid som introduceras i ett programs körning. Detta uppnås genom att använda tekniker som konsumerar en viss mängd bearbetningstid utan att utföra någon annan meningsfull beräkning. Det används av olika skäl, främst för att synkronisera händelser eller kontrollera tidpunkten för externa enheter.
Det finns flera sätt att implementera tidsförseningar i en mikroprocessor:
* Programvaruslingor: Den enklaste metoden. En slinga som innehåller en serie instruktioner utförs upprepade gånger. Den totala förseningen beror på antalet instruktioner och klockhastigheten för mikroprocessorn. Detta tillvägagångssätt är opriktigt eftersom det påverkas av faktorer som avbrottshantering och processorbelastning. Ett enkelt exempel i montering kan se ut:
`` `
DRÖJSMÅL:
Dec R16; Minskningsregister
Brne fördröjning; Gren om inte lika med noll (fortsätt slingan)
Rjmp nästa; Hoppa till nästa instruktion
`` `
* timers/räknare: Mikroprocessorer har ofta inbyggda timers eller räknare. Dessa kringutrustning räknar klockcykler eller externa händelser. Programmet kan initialisera en timer till ett specifikt värde och sedan vänta tills det räknas ner till noll. Detta är i allmänhet mer exakt och mindre mottagligt för variationer i processorbelastning jämfört med mjukvaruslingor.
* realtidsklocka (RTC): För längre förseningar kan en RTC (som vanligtvis kör oberoende av huvudprocessorn) användas för att ge en exakt tidsreferens. Programmet kan kontrollera RTC för att avgöra när den önskade förseningen har gått.
* Vänta säger: Dessa läggs till i minnesåtkomstcykler för att synkronisera med långsammare minnesenheter. Även om det inte är direkt en fördröjning *mekanism *, ökar väntetillstånd den totala tid som används åtkomst till minnet, som kan användas som en del av ett tidsschema (även om det inte är idealiskt och bör användas försiktigt).
Faktorer som påverkar noggrannheten:
* Klockhastighet: Klockfrekvensen påverkar direkt varaktigheten för mjukvaruslingor och timerräkningar. Variationer i klockhastighet kommer att påverka förseningens precision.
* avbrott: Avbrottstjänstrutiner (ISR) kan avbryta genomförandet av en fördröjningsslinga, vilket gör den längre än väntat.
* processorbelastning: Om processorn är upptagen med andra uppgifter kan förseningen påverkas.
Varför använda tidsförseningar?
* Synkronisering: Koordinerande åtgärder med extern hårdvara (t.ex. styrande lysdioder, sensorer, motorer).
* debouncing: Förhindra falska signaler från switchar eller knappar.
* Ratsbegränsning: Kontrollera händelsens frekvens (t.ex. begränsa hastigheten för dataöverföring).
* Användargränssnitt: Skapa pauser mellan åtgärder i ett användargränssnitt.
Att välja den bästa metoden beror på applikationens krav för noggrannhet, varaktighet och resursförbrukning. För korta förseningar kan mjukvaruslingor vara tillräckliga. För längre eller fler exakta förseningar föredras timers eller RTC.