AVR: Delay 7 ... 65542 Zyklen

OP #8445
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #2029111
Lesenswert?
• ▲
▼
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
.listmac
2

3
;delay 8 ... 65543 cycle
4

5
.macro  mdelay
6
  ldi    r24, low( @0 - 8 )
7
  ldi    r25, high( @0 - 8 )
8
  sbiw  r24, 4
9
  brcc  pc - 1
10
  cpi    r24, 0xFD
11
  brcs  pc + 4
12
  breq  pc + 3
13
  cpi    r24, 0xFF
14
  breq  pc + 1
15
.endmacro
16

17

18

19
.macro delayus
20
  mdelay ((MCU_CLK * @0) / 1000000)
21
.endmacro
22

23
.macro delayms
24
  mdelay ((MCU_CLK * @0) / 1000)
25
.endmacro
26

27

28

29
/*********************************************************************/
30
//  *****Beispiele für Programmaufrufe:*****
31

32
//  1) Wenn eine feste Zyklenzahl erforderlich ist
33

34
   mdelay 10    // Verzögern um 10 Taktzykle
35

36
//  2) Wenn eine Verzögerung in µSekunden(10^-6) erforderlich ist
37

38
  delayus 8    // Verzögerung von 8 µSec
39

40
//  3) Wenn eine Verzögerung in Milisekunden(10^-3) erforderlich ist
41

42
  delayms 8    // Verzögerung von 8 mSec

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.