Forum: Mikrocontroller und Digitale Elektronik bitverknüpfungen


von pierre (Gast)


Lesenswert?

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

von Schmittchen (Gast)


Lesenswert?

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.

von pierre (Gast)


Lesenswert?

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

von Schmittchen (Gast)


Lesenswert?

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.

von pierre (Gast)


Angehängte Dateien:

Lesenswert?

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

von Schmittchen (Gast)


Lesenswert?

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.

von pierre (Gast)


Lesenswert?

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

von Schmittchen (Gast)


Lesenswert?

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

von pierre (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.