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


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

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.