hallo könnt ihr mir mal sagen wie ihr einfache bitverknüpfungen in assembler für 90er serie programmiert. irgendwie tu ich sehr schwer. bei der 89er serie ist das etwas einfacher, man vergibt den einzenlen bits der ports namen und dann kann mit den namen schon die pins ansprechen und progrmiert immer wieder über das carry-flag zbsp. mov c,e1 anl c, e2 danke pierre
Tja, das ist ja die ideale Frage, um nach http://www.mikrocontroller.net/attachment.php/7911/avrasm.txt zu zu verweisen. Schau dir da mal vor allem Kapitel 4 und das Ende von Kap.10 an. (Wozu eine Gliederung im Text doch nützlich sein kann :-) Ansonsten schau dir mal die Befehle cbi und sbi an. Schmittchen.
Hi Schmittchen also, ich habe hier mal eine einfache und-bitverknüpfung, das ergebnis geht an einen ausgang. irgendwie finde ich etwas viel code für so eine einfache aufgabe. noch eine frage: kann der akkumulator auch nur mit einem bit geladen werden. so könnte ich zum beispiel die einfachen and- und or-schaltungen mit dem t-flag im sreg realisieren. gruß pierre
Die 90er-Atmels (also die AVRs) haben keinen Akku. Hier kannst du direkt mit den Registern arbeiten, bzw. ein AVR hat 16 oder 32 Akkus. Wenn du allerdings den Pegel an einem "Beinchen" ändern willst, dann mußt du einem ProzessorRegister (R0-R31) einen Wert zuweisen, der dann anschließend (per out) ins Ausgangslatch geschrieben wird. Direkt aufs Ausgangslatch verknüpfen geht nicht. Bitverknüpfungen lassen sich nur auf ganze Register anwenden - einzelne_ Bits logisch _verknüpfen geht nicht. Einzelne Bits setzen/löschen hingegen funktioniert so: sbi(PORTC,1) setzt z.B. das 1. Bit im PORTC-Register. cbi(PORTC,1) andi r16,0xF0 out r16,PORTC Das "andi" verknüpft den Inhalt des Registers R16 logisch mit der Konstanten 0xF0 (löscht also die unteren 4 Bits...). "out" schreibt den so erhaltenen Wert ins Ausgangslatch des PortsC. > irgendwie finde ich etwas viel code für so eine einfache aufgabe. 2 Zeilen - knapper gehts nicht. Das T-Flag im SREG hat nicht die Funktion des Akkus - für Bitverknüpfungen ist das T-Flag nicht nötig. Schmittchen.
schuldigung hab die datei vergessen. mit 2 eingängen als und-verknüpfung komme ich ja noch hin. bei dreien wird es wesentlich mehr code. gruß pierre icq# 85185740
Zunächst: > > Das "andi" verknüpft den Inhalt des Registers R16 logisch mit der Konstanten 0xF0 Das ist falsch, sollte vielmehr heißen: ...R16 bitweise mit der Konstanten... Zum Problem: in r16, pina andi r16, 0xC0 subi r16, 0xC0 breq led1_aus ... d.h. PinA einlesen, alle Bits ausser Bit6 und Bit7 wegschneiden. Dann 0xC0 (= 0b1100 0000) subtrahieren, wenn 0 dabei rauskommt (und 0 ergibt sich nur dann, wenn beide Bits gesetzt waren) nach led1_aus verzweigen... Und wenn du sicher bist, daß an PinA0-5 keine High-Pegel anliegen können, dann kannst du dir das "andi" auch noch sparen. bei 3Eingängen: in r16, pina andi r16, 0xE0 subi r16, 0xE0 breq led1_aus A propos: Wenn es keine low-current-LEDs sind, dann schließe sie besser gegen Vcc an, anstatt gegen Masse. Damit schaltet die LED bei high_-Pegel _aus. Muß natürlich dann im Code berücksichtigt werden. So verhinderst du ein vorzeitiges Ableben des AVRs, da dieser mehr Strom senken als liefern kann. Schmittchen.
danke schmittchen so hab ich noch nie gedacht. werde mir das jetzt mal verinnerlichen und morgen mal bisschen was ausstesten. vielen dank deinen name find ich cool :) pierre
> deinen name find ich cool :)
danke, danke. Bemühe mal spasseshalber ein Telefonbuch (z.B.
www.telefonbuch.de). :-) Aber weitaus verbreiteter ist "Schmidtchen".
Schmittchen "der in diesem Thread sein Debüt als Konkrete-Antwort-Geber
gefeiert hat, normalerweise äußert sich Schmittchen ja nur zu
Meinungsthemen... :-)".
hi ich habe soeben nochmal probiert eine andere schaltung zu programmieren. könnt ihr euch das mal anschauen wir ihr das gemacht hättet, zwecks länge des programms. beschreibung ist am anfang des programms. danke pierre
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.