Bit shift - bei 10bit?

Gast #50928
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?
Angehängte Dateien:
Gast #50931
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
Admin Persönliche Seite #50932
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.
Gast #50933
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... :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren