Makros Simulieren mit AVR Studio 4

Gast #1374040
Halli Hallo!

Ich habe folgendes problem: Ich wollte mit hilfe meines boards 
(atmega16) mit einem simplen programmcode 2 LED´s nacheinander blinken 
lassen und die zeit zwischen den blinkvorgängen mit einer stopuhr 
stoppen, da ich eine wartezeit von ca 0,7-0,8 sekunden brauche. das 
programm funktioniert einwandfrei... klar, ist auch sehr simpel. 
allerdings kann ich das programm nicht simulieren, da AVR Studio 4 beim 
aufrufen der makros hängen bleibt.
Ist das eine bekannte krankheit von AVR Studio 4? Ich glaube nicht, dass 
ich das makro falsch geschrieben habe, weil die LED`S blinken 
einwandfrei!
Vielen dank schonmal im Vorraus.

Alexander

Porgrammcodefragment:
.macro warte
  clr    r0
  clr    r1
  ldi    r17,4
  mov    r2,r17

loop:
  dec   r0
  brne  loop
  dec   r1
  brne  loop
  dec   r2
  brne   loop
.endmacro

start:

  sbi   portd,5  ;LED 1 An
  warte          ;HIER bleibt der Simulator hängen
  cbi   portd,5  ;LED 1 Aus
  sbi   portd,6  ;LED 2 An
  warte
  cbi  p ortd,6  ;LED 2 Aus
  rjmp  start
Gast #1374057
Der bleibt nur scheinbar hängen. Wie Du leicht ausrechnen kannst, 
verheizt Dein Delay ungefähr 4  256  256 * 3 = 780000 Taktzyklen (wie 
man darauf kommt? Selbst überlegen!). Der Simulator braucht einfach eine 
Weile, bis er da durch ist. Bei mir dauert es ca. 10 Sekunden.
#1374073
Hallo,

unabhängig davon:
in der Assembler-Hilfe bei den Befehlsbeschreibungen steht die Anzahl 
Takte drin, die der AVR für jeden Befehl braucht.
Windows hat einen Rechner im Zubehör und die Taktfrequenz, die Dein AVR 
benutzt, solltest Du auch kennen.

Du kannst es also ganz ohne Stoppuhr wesentlich genauer festlegen...

Gruß aus Berlin
Michael
#1374074
Ach ja.

Makros werden nicht aufgerufen.
Wenn du ein Makro verwendest, wird der im Makro stehende Code an der 
Stelle des Makros eingesetzt

Das Makro vereinfacht also nur etwas die Schreibweise. Aber im Grunde 
ist dein Programm äquivalent zu
1
start:
2

3
  sbi   portd,5  ;LED 1 An
4

5
  clr    r0
6
  clr    r1
7
  ldi    r17,4
8
  mov    r2,r17
9

10
loop1:
11
  dec   r0
12
  brne  loop1
13
  dec   r1
14
  brne  loop1
15
  dec   r2
16
  brne   loop1
17

18
  cbi   portd,5  ;LED 1 Aus
19
  sbi   portd,6  ;LED 2 An
20

21
  clr    r0
22
  clr    r1
23
  ldi    r17,4
24
  mov    r2,r17
25

26
loop2:
27
  dec   r0
28
  brne  loop2
29
  dec   r1
30
  brne  loop2
31
  dec   r2
32
  brne   loop2
33

34
  cbi  p ortd,6  ;LED 2 Aus
35
  rjmp  start
Gast #1374077
Die taktfrequenz ist 4 MHZ, folgich 0,25µs pro takt, das kenn ich alles, 
aber die anzahl der takte für nen bestimmten befehl hab ich noch nicht 
gefunden! aber danke für den tip, ich werds beherzigen
Gast #1374081
@ Karl heinz Buchegger
Jaah, ich weis schon selbst, was makros machen und für was sie gut sind 
xD soo planlos bin ich auch nicht :> aber danke für die mühe
Gast #1374083
Alexander schrieb:
> aber die anzahl der takte für nen bestimmten befehl hab ich noch nicht
> gefunden!

Datenblatt ab Seite 333 (rechte Spalte).

Gruß,
Magnetus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.