Forum: Mikrocontroller und Digitale Elektronik bytes splitten


von Philipp Karbach (Gast)


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.

von Max (Gast)


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

von TravelRec. (Gast)


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!)

von Hannes L. (hannes)


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.

...

von Rolf Magnus (Gast)


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.

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.