Wie man eine Verzögerung in Assembler für avr-mikrocontroller?
Ich habe ein problem bei der Berechnung Verzögerungen. Ich möchte, um eine Verzögerung für 1 sec
wenn ich mit 1MHz
Takt für meinen atmega128-mikrocontroller.
Nutze ich proteus für die simulation (avr-studio für die Kodierung in Assembler für atmel mikrocontroller.
Zum Beispiel dieser code ist für 8MHz
Uhr mikrocontroller
Delay_15mS: ; For CLK(CPU) = 8 MHz
LDI dly1, 120 ; One clock cycle;
Delay1:
LDI dly2, 250 ; One clock cycle
Delay2:
DEC dly2 ; One clock cycle
NOP ; One clock cycle
BRNE Delay2 ; Two clock cycles for true 1 clock for false
DEC dly1 ; One clock Cycle
BRNE Delay1 ; Two clock cycles for true 1 clock for false
RET
Können Sie mir beibringen, wie man die Zeit berechnen, die diese Verzögerung dauern? So konnte ich 1 zu 1 Sek Verzögerung @ 1 MHz
Danke
möglich, Duplikat der Erstellen Verzögerung in der Arduino Uno mit Assembly-Sprache, die ohne Verwendung von timer
InformationsquelleAutor UmeRonaldo | 2014-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Berechnen einer Verzögerung, die Sie benötigen, um die Berechnung der Zykluszeit und dann zählen, wie viele Zyklen die Sie erreichen müssen, um die gewünschte Verzögerung.
In deinem Fall
1MHz
Uhr bedeutet1000000
Zyklen pro Sekunde. So1
Zyklus entspricht1/1000000
Sekunden oder1us
. Um 1 Sekunde Verzögerung, Sie müssen1000000
Zyklen von1us
, so bedeutet es, dass Sie haben, um einen Algorithmus von1000000
Zyklen.Gebäude auf Ihre Beispiel, eine
1
sec Verzögerung@ 1MHz
Uhr wäre:In diesem Fall besteht die innere Schleife
Delay3
ist4
Zyklen lang, daDEC=1
,NOP=1
undBRNE=2
beim springen zu Delay3. Also4
Zyklen wiederholt250
Zeiten (der Wert vondly3
)1000
Zyklen oder1000us
=1ms
.Dann die Schleife
Delay2
wiederholt dieDelay3
125
Zeiten (der Wert vondly2
). Also die akkumulierte Verzögerung in diesem Fall ist125ms
.Und schließlich die Schleife
Delay1
wiederholt dieDelay2
8
Zeiten (der Wert vondly1
). Also die akkumulierte Verzögerung in diesem Fall ist1000ms
oder1
Sekunde.HINWEIS: Dieses Beispiel Verzögerung ist tatsächlich etwas länger als
1sec
weil ich nicht die Zeit die Anleitung vonDelay2
undDelay1
. Der Einfluss ist sehr klein, aber für eine genaue1sec
Verzögerung, diese Anweisungen müssen gezählt werden und die Werte derdly1
,dly2
unddly3
angepasst werden müssen, um zu garantieren, dass der Algorithmus genau1000000
Zyklen lang.ANMERKUNG 2: Mit diesem Algorithmus, der mikrocontroller kann nichts anderes tun, während der Ausführung die Verzögerung, weil Sie es sind, zählen Zyklen. Wenn Sie möchten, andere Dinge zu tun, während Sie eine Verzögerung, werfen Sie einen Blick auf Timer und interrupts des Mikrocontrollers.
InformationsquelleAutor ferrangb
Es ist einfacher zu bedienen timer - /Zähler für diese. Sie können den timer/counter0 mit
prescalar=1024
und1MHz
Uhr für die Erstellung250ms
Verzögerung. Jeder250
Millisekunden ein interrupt generiert wird.4
unterbricht meine1
zweite!InformationsquelleAutor Saeed Alvandkoohi