Forum: Mikrocontroller und Digitale Elektronik $21 $c9


von Lukas (Gast)


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!!

von A.K. (Gast)


Lesenswert?

In Motorola-Syntax steht "$" für Hex. Vermutlich auch hier.

von Mike (Gast)


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.

von Dieter Werner (Gast)


Lesenswert?

brne heisst wohl    branch if not equal

von tarzanwiejane (Gast)


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

von Mark (Gast)


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.

von Lukas (Gast)


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.

von Lukas (Gast)


Lesenswert?

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

von Kritiker (Gast)


Lesenswert?

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

von Karl heinz B. (kbucheg)


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.

von Hannes L. (hannes)


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.

...

von Lukas (Gast)


Lesenswert?

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

Dankäääää!

von Hannes L. (hannes)


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.

...

von Lukas (Gast)


Lesenswert?

OK. danke!

von Axel R. (Gast)


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 :-))

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.