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


von wizz (Gast)


Angehängte Dateien:

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?

von wizz (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch mal mit Kommentar, habs grad vergessen :(

von wizz (Gast)


Lesenswert?

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

von Nik Bamert (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von wizz (Gast)


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

von wizz (Gast)


Lesenswert?

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

von Ichbinsnur (Gast)


Lesenswert?


von Stefan (Gast)


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

von wizz (Gast)


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

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.