Makros Simulieren mit AVR Studio 4

Gast #1374040
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren