mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Skip if Z is cleared


Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne einen Befehl überspringen, wenn bei der vorigen 
Operation 0 rauskommt. Hier der Codeschnipsel:
...
cpi  xs, 15        ; vergleiche xs mit 15
lds  var3, SREG    ; schreibe SREG in Register var3
sbrc  var3, 1      ; überspringe den nächsten Befehl, wenn Z leer ist
sbr  var2, 1
...
Er überspringt immer den einen Befehl, obwohl xs den Wert 15 hat. Im AVR 
Simulator hab ich dann gesehen, dass er SREG nicht in var3 schreibt. Ist 
das Normal? Wie kann ich das umgehen?

Gruß
Nico

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie wäre es mit 'breq' nach dem 'cpi'?

MfG Spess

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das wäre möglich, aber gibts keine Möglichkeit ohne Sprungmarken?

Gruß
Nico

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch
breq PC-1

zum Beispiel

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dafür gibts doch extra Befehle. Was soll denn der Quatsch, das SREG in 
ein Rechenregister zu laden und dann zu springen? Mach das mit "brbc Z" 
oder "breq" (der springt dann, wenn Z gesetzt ist) nach dem cpi. Dafür 
sind die Branch-Befehle schließlich da.

EDIT: Da war ich wohl zu langsam...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder "in var3,SREG" ?

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach stimmt, das laden muss ja mit "in" gemacht werden und nicht mit 
"lds".
Die Variante mit breq PC-1 gefällt mir ganz gut, nur dass in meinem Fall 
ein breq PC+1 geeignet ist. Ich wollte halt nicht immer ne neue 
Sprungmarke aufschreiben.
Danke für die raschen Antworten!

Gruß
Nico

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Was spricht gegen ein Label?

MfG Spess

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es gerade getestet und für die die es interessiert muss es 
folgendermaßen aussehen:
cpi  xs, 15
brne  PC+2
sbr  var2, 1
Ein PC+1 springt nur bis zum nächsten und nicht zum übernächsten Befehl 
und es muss natürlich in meinem Fall ein brne sein. Auf jedenfall 
funktioniert es jetzt so wie es soll :)

Nochmals Danke,

Gruß
Nico

PS: Ich habe nichts gegen Labels, aber wenn ich diese Anweisung 16 mal 
brauche, dann wollte ich nicht jedes mal ein neues Label hinschreiben. 
So ist es kürzer und ich finde es so übersichtlich genug.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nico wrote:

> PS: Ich habe nichts gegen Labels, aber wenn ich diese Anweisung 16 mal
> brauche, dann wollte ich nicht jedes mal ein neues Label hinschreiben.

Wenn ich Programmteile mehr als zweimal brauche, versuche ich sie 
umzuschreiben, z.B. als Schleife oder Tabelle.

Copy&Paste-Monster sind nämlich fehleranfällig, unleserlich, schwer 
wartbar und verbrauchen viel Code.


Peter

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Programmteile, die man öfter braucht, sollte man als Unterprogramme 
ausführen. Spart Zeit und Nerven.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spess53 wrote:

> Programmteile, die man öfter braucht, sollte man als Unterprogramme
> ausführen. Spart Zeit und Nerven.

Wenn man sie an verschiedenen Stellen braucht, natürlich.

Ich hatte aber den Eindruck, er meinte 16-mal hintereinander.


Peter

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.