Forum: Mikrocontroller und Digitale Elektronik sbi und cbr bei PORTD und DDRD variabel machen ?


von Frank Wolf (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,
jetzt häng ich schon 2 jahre mit Assembler an dem 2313...
... und scheine eintweder einen Blackout zu haben oder
habe immer noch nix begriffen...

also folgende Problematik:
ich habe an einem 2313 2xSHT11 verbunden (sind so lala I2C sensoren)
SCK an PD6 - beide und (weil die sensoren keine unterschiedliche
Anschriften haben) einen auf PD4 einen auf PD5 ...

jo, war auch kein thema - der rcall "GetTempAndHumid" ist fertig,
aber nur für einen sensor (ist abgekupfert)... jetzt will ich
beide Sensoren über einen Parameter steuern so in der Art:
...
ldi parameter, PD4
rcall GetTempAndHumid
...

aber... in "GetTempAndHumid" sind ne menge cbi's und sbi's:
...
cbi   PORTD, PD4    ;low output
sbi   DDRD, PD4    ;output
...

und sbi und cbi will ja nicht mit Registern grrr
was jetzt bin ich malle oder muss ich jetzt jeden
sbi und cbi einzeln so umgehen:
...
cpi    parameter, 4
brne   ist5
cbi   PORTD, PD4    ;low output
rjmp war4
ist5:
cbi   PORTD, PD5    ;low output
war4:
...
das sieht zu schmutzig aus!

Bitte um Erlösung!  MfG, Frank Wolf

von :-) (Gast)


Lesenswert?

Lad den Portinhalt in ein Register und nimm dort mit AND/OR die
entsprechenden Veränderungen vor. Also einfach

in r16,PORTD
and r16,parameter
out PORTD,r16

Wobei 'parameter' natürlich nicht die Bitnummer sondern die
Bitwertigkeit enthalten muss.. Und bei AND ans Invertieren denken!

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.