www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bytes splitten


Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich den code von nem atmega8515 auf einen atmega8 porte und der
atmega8 ja nur ports von Px0 bis Px5, der atmega8515 aber von Px0 bis
Px7, kann man dann die bitmaske die man senden möchte aufsplitten?

Zum Beispiel:

11010101

11010 auf PortC
101 auf PortD

oder wird das niemals synchron sein? Oder ist meine idee völlig
verblödet? danke für eure hilfe.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So etwas mache ich tagtäglich, man kann sein Layout teilweise sehr
vereinfachen, wenn man die Pins hinterher per Softwar tauscht.
Nachteil: Wie Du schon bemerkt hast, kann es Probleme mit der
Geschwindigkeit geben. Der Controller braucht schon etwas Zeit. Wenn
man die Daten in zwei Registern vorhält, könnte man diesen Zeitversatz
auf einen Befehl reduzieren.

z.B.:
In temp sind die auszugebenden Daten:

mov temp2,temp
andi temp2,0x1F
rol temp2
rol temp2
rol temp2
mov temp3,temp
andi temp3,0x07

out PORTC,temp2
out PORTD,temp3

Alternativ (falls die anderen Bits von PORTD nicht verändert werden
dürfen):
in temp,PORTD
andi temp,0x1F
or temp,temp2
out PORTD,temp

(Hoffentlich habe ich jetzt keinen AVR-Assembler mit MCS-51
gemischt...)

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Alternativ (falls die anderen Bits von PORTD nicht verändert werden
>>dürfen):
>>in temp,PORTD
>>andi temp,0x1F....


in temp, PIND    (PinD, nicht PORTD!)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso PIND?

Er will doch keine äußeren Zustände einlesen, sondern nur die
unbenutzten Bits des Ausgabeports einlesen, damit sie bei erneuter
Ausgabe nicht verändert werden.

In diesem Falle ist PORTD schon richtig.

Für normale Eingabe ist natürlich PIND richtig.

...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mov temp2,temp
> andi temp2,0x1F
> rol temp2
> rol temp2
> rol temp2
> mov temp3,temp
> andi temp3,0x07

Warum rotierst du statt zu shiften? Da könntest du dir ein vorher evtl.
gesetztes Carry einfangen.

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.