bytes splitten

Gast #231406
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.
Gast #231407
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...)
#231409
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.

...
Gast #231410
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren