mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik $21 $c9


Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich bin gerade im AVR-Tutorial am arbeiten, und bin auf 2 kleine offnen
Frage gestoßen:

Im 4ten teil steht ldi Temp1, $21

Temp1 ist ja nichts anderes, als der name für einen register. aber was
bedeutet "$21" ? ist das ein eigenes Zahlensystem?

Wofür steht brne? aus der HTML Hilfe werde ich nicht schlau?!?!


danke für die Hilfe!!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Motorola-Syntax steht "$" für Hex. Vermutlich auch hier.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI,

wenn ich das gerade richtig sehe, wird das $-Zeichen zur Kennzeichnung
von Hex-Werten verwendet. Ist also "mehr oder weniger" ein eigenes
Zahlensystem. Eher eine eigene Darstellung von Zahlen, wobei es hier
die Ziffern 0 bis F gibt (im Dezimalen entspricht das 0 bis 16).

brne müßte branch not equal heißen. also "Springe wen nicht gleich"
So ein Sprung bezieht sich immer auf einen direkt davor ausgeführten
Verleich, er wertet die hierbei gesetzten Flags aus.
Eigentlich ist die Hilfe im AVR-Studio doch ziemlich gut. Einfach den
Curser auf den Befehl stellen und F1 drücken. Da steht genau auf welche
Flags der Befehl "schaut" und was er dann tut.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
brne heisst wohl    branch if not equal

Autor: tarzanwiejane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Lukas,

$xx steht fuer ne Hexadezimalzahl. Kennzeichen ist das $. Basis ist
also 16. Buchstaben a-f stehen fuer 10-15.

brne - branch  when not equal wenn ich mich recht erinnere.
Bezieht sich auf der vorhergehenden Befehl, bzw um genau zu sein in
welchem Zustand er das Status Register hinterlaesst. Dort wird das
Ergebnis des Vergleichs in den jeweiligen Flags hinterlassen so das die
branch-Befehle reagieren koennen.

Eine gute Anleitung fuer erste Schritte in Assembler mit
Befehlsuebersicht und Erklaerung der wichtigsten findest du hier:
http://www.avr-asm-download.de/beginner_de.pdf

cu Tommi

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$21 oder auch 0x21

Der AVR Assembler akzeptiert beide Schreibweisen.

Zu brneq

ldi counter, 64
loop:
 eor checksum, data    ;checksumme aktualisieren (hier nur als
Beispiel)
 dec counter
brne loop

Der counter wird in jedem Durchgang decremntiert.
Solange counter nicht 0 ist, wird an das Label gesprungen.

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achos, also ganz einfach gesagt, "brne sprungziel" prüft, ob der
register in der zeile dadrüber 0 ist. und wenn dies der fall ist, wird
zu sprungziel: gesprungen.

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achja, nochwas, kann ich auch einfach dezimal zaheln benutzen? oder
müssen das hexadezimal zahlen sein?

Autor: Kritiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, Du kannst selbstverständlich auch Dezimalzahlen benutzen - die
werden dann halt ohne das Präfix geschrieben.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> achos, also ganz einfach gesagt, "brne sprungziel" prüft, ob der
> register in der zeile dadrüber 0 ist.

Salopp gesagt: ja
Wenn mans genau nimmt: nein

brne benutzt einfach nur die Flags um zu entscheiden: Sprung oder
nicht Sprung.
Dem brne ist es völlig egal, wie die Flags zu ihrem Wert kommen.
Das kann durch einen Vergleich (cpi) sein, dass kann auch durch
eine Berechnung sein (inc, dec).

> achja, nochwas, kann ich auch einfach dezimal zaheln benutzen?

Sicher kann man das. Aber Hex-Zahlen sind in vielen Fällen
praktischer, da man mit etwas Übung sofort auf das zugrundeliegende
Bitmuster schliessen kann. Die Tabelle der einstelligen Hex-Zahlen
hat man schnell auswendig gelernt, zumal es da ein paar Eselsbrücken
gibt.
Mal ne Frage: Welche Bits sind in der Dezimal-Zahl 183 gesetzt.
Wenns dir so geht wie mir, dann musst du rechnen. Die gleiche Zahl
in Hex: B7. Das ist leicht: Das Bitmuster für B ist 1011 und das
Bitmuster für 7 ist 0111, also ist B7 in Binärschreibweise 10110111.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann ich auch einfach dezimal zaheln benutzen?

Ja aber selbstverständlich.

Ich nutze immer das Zahlenformat, was im jeweiligen Zusammenhang die
beste Aussagekraft hat.

- Schleifenzähler gebe ich meist dezimal an (ldi temp,234),
- Werte, bei denen es auf die einzelnen Bits ankommt in Hex oder Bin
  ($f7, 0b11110111, 0xf7),
- ASCII-Zeichen gebe ich als ASCII an (ldi temp,'a')...

Es kommt also immer darauf an, was man damit ausdrücken will. Es wäre
lächerlich, Schleifenzähler binär oder als ASCII anzugeben oder
ASCII-Zeichen in binär.

Wenn es um die Steuerregister der Hardwarefeatures geht (ADC
aktivieren, Timer-Betriebsart einstellen usw.) dann sollte man Register
und Bits beim Namen nennen.

 ldi temp,(1<<aden)|(1<<adsc)|(1<<adfr)
 out adcsr,temp

setzt z.B. im Register adcsr die Bits aden, adsc und adfr auf eins,
wobei alle anderen Bits auf null gesetzt werden.

...

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
flags? was sit das so ungefär? Sonst bin ich nu voll informiert, und
kann weiter arbeiten!

Dankäääää!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Flags, Statusbits... sind die einzelnen Bits im Statusregister (SREG).

Jede Operation und jeder Vergleich beeinflusst diese Flags.
Bedingte Sprünge werten diese Flags aus.

Die gesamte Steuerung von Verzweigungen, aber auch einige Berechnungen
erfolgen über diese Flags.

In der Befehlsliste am Ende des Datenblatts des jeweiligen AVRs (und in
der Online-Hilfe zum AVR-Studio) erfährst du, welche Befehle welche
Flags beeinflussen.

Im Avr-Instruction-Set erfährst du weitere Einzelheiten zu den Flags
und zu den Befehlen.

Ohne dieses Wissen bist du in ASM aufgeschmissen.

...

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. danke!

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Flags wird so gesprochen, wie hier erklärt.
http://www.fein-schliff.de/Flex.gif
http://www.hen-mietpark.de/bilder/Flexboschgross.jpg
Hatte ich unserem Programmierer zum Geburtstag geschenkt. War ein
ziemlichen HALLOOO :-)).

Der hatte auch nur seine Flags im Kopf.

Flags heisst wohl sowas wie Fähnchen/Merker und sind Bits im
Statusregister der CPU, die einige Sachen klarstellen: obs einen
Überlauf gab, ob das Ergebnis der letzten Berechnung zB negativ wurde
usw. selbst der User hat hier noch die Möglichkeit, einen eigens für
ihn reservierten Merker (war es das T-BIT?) zu setzen oder zu löschen.
Den kann man dann auch abfragen, logisch :-))

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.