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?
Kann ich SREG sichern, auf Null setzen und dann schauen, ob sich Carry Flag ändert?
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
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.
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... :)
@Andreas: Vielen dank, dann kann ich die 10bit einfach auf r20 u. r21 aufteilen und dann mit ror u. rol hin- und herschieben
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.