Forum: Mikrocontroller und Digitale Elektronik Port BIt Invertieren ?


von Ingo (Gast)


Lesenswert?

Hallo @ all,
ich möchte bei einem 2313 ein Bit im DDRB invertiren.
z.b. DDB5
Gib es dafür einen ähnlichen Befehl wie COM ?
Gruß Ingo

von crazy horse (Gast)


Lesenswert?

nein.

von Ingo (Gast)


Lesenswert?

Danke für die schnelle Antwort
Also dann doch umständlich :-((

von dunkelmann (Gast)


Lesenswert?

Lt. Datenblatt kann man Pins Togglen, indem man eine eins in das
entsprtechende PORTXn Register schreibt
(Datenblatt Tiy2313, Seite 47 oben.)

mfg
DKM
www.loetstelle.net

von crazy horse (Gast)


Lesenswert?

es war aber nicht die Rede vom Tiny2313...

von Hannes L. (hannes)


Lesenswert?

Und außerdem muss man die 1 nicht in das Portregister sondern in das
Pin-Register schreiben.
Aber das funktioniert nur bei einigen wenigen neuen AVR-Typen.

...

von dunkelmann (Gast)


Lesenswert?

Die Fragestellung liess offen, ob es ein 90S2313 oder ein Tiny2312 ist,
deshalb habe ich explizit den Tiny2313 erwähnt.

von dunkelmann (Gast)


Lesenswert?

ah, genau lesen, der will ja das Bit im DDR-Register invertieren..

war halt doch noch zu früh..

von Hannes L. (hannes)


Lesenswert?

Ups... Ertappt...
Dann nehme ich alles zurück und behaupte das Gegenteil... ;-))

...

von Hartmut Gröger (Gast)


Lesenswert?

Hi

In Assembler

       in r16,Port  (DDRx,Portx)
       ldi r17, 1<< Bitnummer  (0..7)
       eor r16,r17
       out Port,r16

       fertig

MfG HG

von Ingo (Gast)


Lesenswert?

Hallo @ All,
also es ist ein 90S2313.
Hier mal etwas mehr Infos zu meinem Problem.
Die Schaltung soll mal später in eine Modellfeuerwehr.
Ich habe dann verschiedene Lichtmuster, z.B. 2 Rundum Lichter die
asynchron blinken, Blinker recht Blinker links bzw. Warnblinker,
Frontblitzer, Scheinwerfer + Rücklicht und Bremslicht.
Jetzt lasse ich in einer Schleife alle Blinkmuster dauerhaft laufen.
Bei einem Tastendruck will ich dann nur den Port (DDBx) deaktivieren
bzw. beim nächsten Tastendruck wieder aktivieren. Um somit dann die
Funktion zu steuern.

Gruß Ingo

von Hannes L. (hannes)


Lesenswert?

Dann wird es nicht einfacher als mit Hartmuts Code gehen.

...

von Ingo (Gast)


Lesenswert?

Werde es mal nachher Teaten.
....

von Hartmut Gröger (Gast)


Lesenswert?

Hi

Der code von oben invertiert 1 Bit.Wenn du das komlette Register
invertiern willst müsste es so aussehen

     in r16,Port
     ldi r17,255    ($FF)
     eor r16,r17
     out Port,r16

Die AVRs haben keine Befehl XOR mit Konstante deshalb der Umweg mit
r17. Wobei r17 nicht zwingend ist.

von Rolf Magnus (Gast)


Lesenswert?

Wenn man den ganzen Port toggeln wil, geht's auch einfacher:

in r16, Port
com r16
out Port, r16

Alternativ kann man sich natürlich den Port-Status auch in einem
normalen Register merken, sodaß auch noch das in wegfallen kann.

von Hartmut Gröger (Gast)


Lesenswert?

Hi

@Rolf

Stimmt. So gehts schneller. Ich war wohl etwas an ersten Beispiel
kleben geblieben.

MfG HG

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.