Oft werden kurze Verzögerungszeiten benötigt. Manche Softwareentwickler stehen jedoch mit der Mathematik auf Kriegsfuß und haben damit so ihre Schwierigkeiten, solche Verzögerungsschleifen zu berechnen. Was liegt da näher als das den Assembler selbst erledigen zu lassen. Mit dem beiliegenden Macro können alle Verzögerungen im Bereich von 7 ... 65542 Zyklen generiert werden. Größere Zeiten muß man ja eh mit einem Timerinterrupt machen, sonst wäre die CPU zu lange blockiert. Peter
Und wenn man nicht Zyklen sondern Zeiten angeben will, siehe Anhang.
Wie es scheint, hat das noch keiner ausprobiert. Es hat sich nämlich ein Fehler eingeschlichen, die Loop dauert 4 Zyklen und nicht 3. Anbei nun das richtige Programm. Peter
Gast
#8448
@andreas Macro calls Macro ist ja in der Form beim ATMEL AVR Studio in dieser Form ja nicht möglich.
Tatsächlich? Ich verwende tavrasm, da ist es kein Problem.
Meine Version für kurze Delays von 1 Taktzeit bis 38µs mit Einberechnung der bereits verbrauchten und auf die Wartezeit anrechenbaren Takte. Leichte Umstellung auf andere CPU-Frequenz ohne Veränderung des Timings.
Gast
#1373027
Bekomme ich dieses Macro auch in C Unter eclipse eingebunden ? Wenn ja wie mache ich das? Gruss und Danke Bernd
Glaube ich nicht, ist ja ein Assembler Macro und läuft im Assembler vom Atmel.
Bei WinAVR sind entsprechende Funktionen dabei. _delay_us & _delay_ms
Gast
#2029111
8 Jahre später... Vielen Dank an Peter und Andreas für die tollen Routinen. @ Andreas in deinem Post vom (Datum: 15.12.2002 11:41) ist ein Fehler enthalten, weil deine Routine(mdelay) wohlmöglich eine Ergänzung zum ersten Post von Peter ist. Korrigierter Version:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
Hi, ich hatte mal was gebastelt, das von 0 Ticks bis 0x5000007 = 83.886.087 Ticks ein passendes Delay erzeugt (für den GNU-Assembler avr-as), das auch von C aus anwendbar ist: Beitrag "Re: Delay: Exakt n Ticks erzeugen (avr-gcc)"
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.