www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Assembler und AVRStudio


Autor: Ingo Stange (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @ All

ich habe eine Frage zu folgenden Code.

.include"2313def.inc"
loop:
 RCALL   Z1
 RCALL   Z2
rjmp loop
Z2:
 nop
 RET
Z1:
 nop
 RET

Wenn ich den Code zum testen durch den Simulator jage,
wird der bereich von Z2 nicht durchlaufen. Nach dem RET in Z1
wird dann an den Anfang von loop gesprungen.
Müsste es nicht dann bei RCALL Z2 weitergehen?

Zweitens,
Wie kann ich einzelnen Pins an den Ports von 0 auf 1 bzw. umgekehrt
ändern ohne die anderen Pins neu zu setzen?

Drittens,
Kann man bei dem AVRStudio die Simulationsgeschwindigkeit ändern?
Bei schleifen von 400000 Durchläufen dauert das ja sonst ewig bis es
dann mal weiter geht.

Gruß Ingo

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den Stackpointer initialisieren.

Autor: Daniel R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
zu Erstens:
In deinem Programm rufst du ja mit rcall eine Funktion auf. Der AVR
pusht jetzt automatisch die
Rücksprungadresse auf den Stack(also den Wert im Program Counter). Der
ProgramCounter wird nach jedem
ausgeführten Befehl 2 mal inkrementiert und beinhaltet immer die
physikalische Adresse, an der der Prozessor
gerade den Befehl ausführt. Also in deinem Fall ist "RCALL Z1" an
Adresse 0 im Speicher, da es der erste
Befehl ist, der in deinem Programm steht. Also schreibt der AVR 2 auf
den Stack, damit er später wieder
weiß, wohin er springen muss(bei dem RET Befehl). In deinem Fall zeigt
der Stackpointer irgendwo in
den Speicher. D.h. der AVR schreibt seine 2 an eine beliebige Stelle
und kapiert später dann selbst
nicht mehr, wohin er die 2 geschrieben hat. Dann startet er das
Programm neu. Deswegen fängt er dann direkt
bei RCALL Z1 wieder an.
Abhilfe: Den Stackpointer initialisieren.

ldi r16,LOW(RAMEND)
out SPL,r16
ldi r16,HIGH(RAMEND)
out SPH,r16

Nun zeigt der Stackpointer auf eine definierte Adresse(RAMEND) und
alles klappt.

Zu Zweitens:
mit sbi portX,Y    ;SetBit In I/O Register
und cbi portX,Y    ;ClearBit In I/O Register

DAs steht alles im InstructionSet!!!

Drittens:

Mit ALT+O kannst du im AVR Studio beim Debuggen die Einstellungen
ändern. Man kann dann je nach AVR Typ
bis an dessen max. Taktfrequenz gehen.

Gruß Daniel!

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu 3tens:
wenn du mit dem Finger auf F11 bleibst, dann dauerts echt ewig.
Wenn du das machst, dann klicke auf einen Punkt nach der Schleife und
nimm STRG+F10, dann gehts schneller.
Die Taktfrequenz hat damit glaub ich nix zu tun.

dave

Autor: Ingo Stange (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super das hat mir sehr weiter geholfen.

Vielen Dank für euer Hilfe.

Gruß Ingo

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist der AT90S2313 (nach def datei) also brauchst du nicht die
unterteilung in low und high (bessergesagt er wird die register nicht
finden)
Also besser:

ldi r16,RAMEND
out SPL,r16

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.