www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bitverknüpfungen


Autor: pierre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, das ist ja die ideale Frage, um nach 
http://www.mikrocontroller.net/attachment.php/7911... 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.

Autor: pierre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: pierre (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: pierre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... :-)".

Autor: pierre (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.