www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bit shift - bei 10bit?


Autor: wizz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, um mir die Wartezeit auf meinen AVR zu verkürzen programmiere ich
ein wenig und simulier es dann. Jetzt möchte ich mit zwei Tastern
(PORTD.0 und PORTD.1) eine von 10 LEDs immer hin- und her"bewegen".
mit 8 stück wäre es kein problem, das hab ich mit simplen lsl und lsr
befehlen hinbekommen. aber wie bekomm ich es mit 10bit hin?

Autor: wizz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch mal mit Kommentar, habs grad vergessen :(

Autor: wizz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich SREG sichern, auf Null setzen und dann schauen, ob sich Carry
Flag ändert?

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich hab zwar keine lösung in asm parat, aber mit externen dezimal
up/down counter wärs kein Problem, oder du könntest die anschlüsse
extern multiplexen(z.B. mit nem 16-Bit multiplexer), dann bräuchtest du
nur noch die 4-bits anzulegen.


Solch ein Up/down counter wäre z.B. cmos ic 4510

..Und ein 10-Bit Multiplexer(4-eingänge, 10 ausgänge, also genau
richtig)z.B.  cmos ic 4028




MFG Nik

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal musst du die Bits auf zwei Register aufteilen:

High-Byte:     Low-Byte:
XXXXXX98       76543210

(die Zahlen entsprechen den durchnummerierten LEDs)

Um dann über die Registergrenze hinweg zu schieben, gibt es die Befehle
ror und rol. Beispiel:

clc               ; Carry-Flag auf 0 setzen
ror highbyte      ; links wird das Carry (0) reingeschoben,
                  ; das rausgefallene Bit wird im Carry gespeichert
ror lowbyte       ; das Carry wird links reingeschoben, das
                  ; rausgefallene Bit landet im Carry

Das Ganze ist natürlich beliebig weit fortsetzbar.

Schau dir mal das PDF "AVR Instruction Set" bei Atmel an, da ist das
"Rotieren" auch anhand einer Zeichnung erklärt.

Autor: wizz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, falls ich mal sowas bauen will, werd ich sicher nen 10bit
multiplexer benutzen, aber im moment geht es mir eher darum, assembler
basics zu lernen. In C würd ichs wohl auch hinbekommen, nur darum gehts
es nicht... :)

Autor: wizz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas: Vielen dank, dann kann ich die 10bit einfach auf r20 u. r21
aufteilen und dann mit ror u. rol hin- und herschieben

Autor: Ichbinsnur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du es in C kannst:

Dann schreibe es in C und schau Dir an, welchen ASM-Code der Compiler
daraus macht. Dabei kann man oft viel lernen.

Stefan

Autor: wizz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre echt mal ne Idee! Mal sehen, muss mir eh noch WinAVR ziehen, da
ich nicht ewig in Assembler coden will. Aber es ist immer gut, die
Basics zu beherrschen ;)

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.