Port speichern

OP #1067747
Hallo Leute,

eigentlich habe ich das Gefühl, es ist eine einfache Frage, doch da ich 
im Forum nichts gefunden habe, bin ich mir da nicht mehr so ganz sicher.

Ich arbeite mit einem ATmega8 Prozessor und möchte gerne einen Port in 
einer Variable speichern.

Im Sinn von:
1
 if(channel==1) //irgend eine if-Verzweigung
2
 {
3
   myPort = PORTD; 
4
 }
5
 else
6
 { 
7
   myPort = PORTB;
8
 }
9

10
 myPort |= 0x20; //Diese zuweisung befindet sich natürlich irgendwo

Der Sinn dabei besteht jetzt darin, diese if(channel)-Abfrage nicht 
jedes mal durchführen zu müssen.

Frage: Was für ein Typ muss myPort sein?

Ich habe mit Pointern gespielt und Adressen gespeichert aber irgendwie 
funktioniert das nicht so ganz. Im Grunde ist "PORTD" ja nichts anderes 
als eine bestimmte Adresse im uC, also müsste ich die neue Variable 
genau gleich benutzen können.

Hat jemand eine Idee?
Gast #1067754
Hi Christian,

mit PORT(X) kannst Du nur Ausgaben machen (PORTD = 0xFF;), mit PIN(X) 
kannst Du Status Informationen vom PORT holen.
Der Typ sollte uint8_t (8-Bit) breit sein.
OP #1067773
Stefan, du hast doch recht, so funktioniert es!

Das Problem liegt in diesem Fall an einem anderen Ort. Als ich deinen 
Code noch einmal im "main()" ausprobiert habe, hat es funktioniert.

Das Problem liegt wohl im c++, im Kontruktor fülle ich myPort und in 
einer Member-Funktion führe ich sie aus.

Meld mich nach dem Mittag :)
Gast #1067799
Auch wenn es erledigt ist eine kurze Verständnisfrage:
Du willst also wirklich den Inhalt des PORTx-Registers lesen (den Du ja 
selbst irgendwann mal irgendwie aktiv gesetzt haben mußt) und nicht den 
aktuellen Pegelstand am Eingang (PINx)? Aber jetzt nicht sagen, daß das 
ja das Gleiche ist, denn das muß es nicht!
Gast #1067812
@Stefan Ernst
> Toll. Der Unterschied zu meinem Code ist dann genau welcher?

Der Unterschied ist :
Dein Code wurde ein paar Minuten vorher gepostet. Ich habe 
zwischenzeitig die Antwort hingeschrieben und vor'm absenden nicht in 
nem anderen Browser Fenster nachgeschaut ob Du schon jemand geantwortet 
hat.

Jetzt muss ich entweder schneller nachdenken und schreiben - oder 
einfach in Zukunft nicht mehr antworten um solch eine Fopas zu 
vermeiden.
#1067860
Lutz wrote:
> Auch wenn es erledigt ist eine kurze Verständnisfrage:
> Du willst also wirklich den Inhalt des PORTx-Registers lesen (den Du ja
> selbst irgendwann mal irgendwie aktiv gesetzt haben mußt) und nicht den
> aktuellen Pegelstand am Eingang (PINx)? Aber jetzt nicht sagen, daß das
> ja das Gleiche ist, denn das muß es nicht!

Schau dir den funktionierenden Code an, dann weißt du auch, was er 
wirklich will.
Gast #1067873
Stefan Ernst :
>Schau dir den funktionierenden Code an, dann weißt du auch, was er
>wirklich will.

Nein, habe ich nicht verstanden. Bitte erklär es mir kurz.
OP #1067909
Ok, das Ding läuft.
Danke für die Antwort. Die Lösung hatte ich eigentlich vor dem Post 
schon, nur lief es nur nicht :?
Habe den Port nicht als Ausgang gsesetzt gehabt kopfklatsch Sorry!

Na egal
@Diskusion: Was ich wirklich will ist nicht so entscheidend, es läuft 
genau so wie ich es möchte :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.