Microsin - AVR hogyan kell kiszámítani az átfutási idő a parancsot

Amikor beállítja az AVR (ATmegaXX, ATtinyXX) kell tudni, hogy mennyi ideig fog futni a kódot. Leírja az egyszerű számítási szabályainak ebben az időszakban.







végrehajtási ideje az összeszerelési útmutatót szigorúan kötött az órajel a AVR mikrovezérlő, így az első dolog, amit tudnod kell -, amit meg a mag frekvencia F. azaz milyen gyakorisággal belső oszcillátor működik ... Általában az órajel beállítása kvarc, míg eléri a frekvencia írt kvarc. Néha kvarc nem használják, és nem fut nagyon pontos belső RC oszcillátor (nincs külső alkatrészeket a generátor nem szükséges), akkor általában a generátor üzemi frekvenciája 1 MHz (testreszabható, és a 8 MHz frekvencián). Melyik mód használható - határozza meg a belső konfigurációs biztosítékok (ezek az úgynevezett jumper). Például az alapértelmezett ATmega16 chip (ha a chip jön tiszta a gyárból) jumper hol helyezkedik el a munka nélkül kvarc, a belső RC oszcillátor frekvenciája 1 MHz.

Tehát a mag frekvenciáját F Hertz tudjuk. Most már láthatja az időt egy órát TCLK = 1 / F (másodpercben). Minden csapat végzett fix ciklusok száma (mennyi - függ a csapat). Például Andi és ORI parancsok (amelyet gyakran használnak a menedzsment port láb) tartsa 1 ütemet. Példa időtartamának kiszámítása a ANDI csapatok:

Egy tábla közötti levelezés a csapatok és a ciklusok száma a mikrokontroller megtalálható az adatlap a mikrokontroller, lásd. Utasítás készlet összefoglaló részben végén az adatlapon. Az utolsó oszlop a táblázatban #Clocks bizonyos számú ciklus, amelyre a parancs lefut. Ha ott áll egy alak - például 2, akkor minden világos, a csapat végre 2 ciklust. De néha érdemes 1/2 vagy 1/2/3. Ez azt jelenti például, 1/2, a parancs lehet végrehajtani 1 vagy 2 ciklus, a körülményektől függően a parancs. Például BREQ parancs végrehajtása 1 órajel ciklus, ha nincs ága az állapot, és 2 bár, ha van egy feltételes ugrás.







[Számítása parancsot a C nyelv]

Van is egy módszer közvetlenül méri a hossza a kódot oszcilloszkóppal. Erre a célra a szabad láb van kiválasztva a mikrokontroller, és az elején a mérési lábak fel-kód beállítása 1 és a végén a mérési láb kód 0-ra állítva a Start program teljesítéséhez az oszcilloszkóp mérjük, és az impulzus időtartama.

[Kiszámítása állandóit a számláló / időzítő]

A számláló / időzítő gyakran használják a programot az időzítés késések. Én általában dallam számláló oly módon, hogy durván megmunkált interrupt minden 1 milliszekundum. Ebben az esetben a program kényelmes mérni az időt egy globális számlálót (erről bővebben később). Itt található az időzítő 1 van beállítva, és hogyan kell használni.

void SetupTIMER1 (void)
// 1< TCCR1B = (1< TCNT1 = TCNT1_1MS;
// időzítés engedélyezése 1 túlfolyó megszakítás.
TIMSK = (1<>

void timePoll (void)
statikus U16 timecnt = 100;

if (TIMSK (1< return;

TCNT1 = TCNT1_1MS;
TIMSK = (1<

//[timerint.S]
#include
.szöveg
.globális TIMER1_OVF_vect
TIMER1_OVF_vect:
; CBI _SFR_IO_ADDR (PORTB), PB7
tolja R24
; LDI R24,

(1< LDI R24, 0
out _SFR_IO_ADDR (TIMSK), R24
; ki 0x39, R24
pop R24
; Sbi _SFR_IO_ADDR (PORTB), PB7
reti

[Visszaszámlálás programot pontossággal 1 ms]

Ha van egy szervezett módon ellenes globális ezredmásodperc számít időbélyeg, az időzítés a programban lesz egyszerű feladat. Itt egy példa számítási késés 0,5 másodperc:

U32 timecnt = időbélyeg + 500;
while (időbélyeg




Kapcsolódó cikkek