Forum: Mikrocontroller und Digitale Elektronik Assebler befehle erklärung ?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Condor (Gast)


Lesenswert?

Hallo

Habe schon ein bischen was in assembler gechriben.
aber immer öfters wen ich mir fremdprogramme anschaue finde ich so
was:

        ldi  r16,  ( 1 << PD5 ) | ( 1 << PD7 )
  ldi  r16,  ( 1 << PD2 ) | ( 1 << PD5 ) | ( 1 << PD7 )
  ldi  r16,  ( 1 << ISC01 ) | ( 0 << ISC00 ) | ( 0 << ISC11 ) | ( 1 <<
ISC10 )
  ldi  r16,  ( 1 << INT0 ) | ( 1 << INT1
        ldi  r16,  ( 1 << CS00 ) | ( 1 << CS01 ) | ( 1 << CS02 ) | ( 0 
<<
WGM01 )
        ldi  r16, ( 0 << OCIE0 ) | ( 1 << OCIE1A ) | ( 0 << OCIE2 ) | (
0 << TOIE0 )

O.K. ldi ist klar r16 auch aber der rest ?
was soll das heißen ? bei Atmel habe ich sowas nicht gefunden...
gibt des da eine gute seite die das erklärt (deutsch) ?

danke

von Tobi (Gast)


Lesenswert?

das sind bitshift befehle.
(1<< PD5) schiebt eine eins um 5 stellen (weil pd5=5) nach links.
| ist bitwise or.
bewirkt, dass z.b im erstn befehle die bits pd5 und pd7 gesetzt werden

von Harry (Gast)


Lesenswert?

Hallo Tobi,

also
ldi R16, (1 << PD5) | (1 << PD7)

bedeutet das gleiche wie

ldi R16, 0b10100000

Habe ich das jetzt richtig verstanden?

von Thorsten (Gast)


Lesenswert?

Stimmt genau :)

Das mit dem Shiften dient nur der besseren Lesbarkeit, auch werden
Fehler vermieden, z. B. wenn man die Bitstellen abzählt um eine 1 zu
setzen.

von Tobi (Gast)


Lesenswert?

jep, genau.
aber benutzt lieber die lange schreibweise der übersichtlichkeit wegen.
wird ja schon vom asm berechnet und eingesetzt

von Dave (Gast)


Lesenswert?

mal nen link, recht informativ:
http://www.avr-asm-tutorial.net/avr_de/beginner/diraus.html

jetzt hab ich aber noch ne frage: wenn ich
sbr r16, 1<<5
benutze, dann muss doch dieses "shifting" die umwandlung von
bit-nummer zu bit-wert sein?!

warum gibt das avrstudio keinen fehler, wenn ich
sbr r16, 33
mache? sbr gilt doch nur für ein bit.. 33 wäre ja aber 32 und 1..

dave

von Matthias (Gast)


Lesenswert?

Hi

ich würde mal vermuten das der Assembler einfach eine Modulo-Operation
bei sbr macht. Also implizit etwa sbr r16,33%8.

Matthias

Matthias

von Christof Krüger (Gast)


Lesenswert?

sbr ist eigentlich genau dasselbe wie ori, so viel ich weiss. Somit
kannst du also auch mehrere Bits setzen.

von Tobi (Gast)


Lesenswert?

sbr = set bits in register
            ^^^
ist für mehrere. in der ref steht, dass das nur ein OR ist. simulator
bestätigt das. sbr r16,33 setzt bit 0 und 5

von Matthias (Gast)


Lesenswert?

Hi

stimmt. Ist wohl einer der doppelt benamsten AVR Befehle. ORI und SBR
haben den selben OPCode und sind daher identisch.

Matthias

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]
  • [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.