Anfängerfragen in C

Gast #360736
Fragen von einem Noob


Port A soll z.b. auf x gespeichert werden

1.) Wie speichert man den gesamten Wert eines I/O Ports auf eine
Variable in C ?

2.) Welcher Datentyp muss x sein?

3.) Wie kann ich den aktuellen Wert von x abfragen

z.b.: if(x=128) then ...   wenn am Port (1000.0000) anliegt

Danke für eure Antworten!
Gast
0.)  Kernighan und Richie: Einführung in C
1.)  uint8_t x = PORTD; /* für AVR */
2.)  uint8_t oder unsigned char (für AVR)
3.)  if ( x & (1<<4) ) { /* ... */ }

mfg, Stefan.
Gast
2. unsigned char
1. Ausgang: x=PORTy; Eingang: x=PINy; wobei y den Port angibt
(Buchstabe von A bis H je nach Controller)
3.Guck ins Tutorium! In ein C-Buch.
>if(x=128) then
Lerne C! Und finde heraus, was dein Konstrukt bewirkt!
Bis auf ein paar Sachen, ist C auf einem Mikrocontroller nichts anderes
als auf dem PC. Somit kann man auf einem PC (C-)Programmierung erlernen
und diese dann auf den Mikrocontroller übertragen.
Gast
bitte korrigiert mich falls es nicht sitmmt

1.) x=PORTA; (Fürs abspeichern von Port A auf x)
2.) unsigned char x;

das verstehe ich noch nicht
3.) if (x & (????))
Der Wert von x soll mit dem Wert der Fragezeichen übereinstimmen -->
Verknüpfungsergebnis ist "1" und die If-schleife wird durchgeführt.

Was schreibe ich nun für "????" wenn ich abfragen will ob am Port
"1000.0000" liegt (also 128) ?
Gast
""1. Ausgang: x=PORTy; Eingang: x=PINy; wobei y den Port angibt
  (Buchstabe von A bis H je nach Controller)""

Ich möchte einen Eingangsport abfragen

also x=PINA ?
> 3.) if (x & (????))
> Der Wert von x soll mit dem Wert der Fragezeichen übereinstimmen

Dann brauchst du einen Vergleich auf Gleichheit.
Aber beachte: In C wird ein Vergleich auf Gleichheit mit 2 =
geschrieben:

    if( x == 120 )

ganz im Gegensatz zu einer Zuweisung: die hat nur 1 = Zeichen

   a = 5;

Jetzt kommt aber dazu, dass eine Zuweisung an dieser Stelle
völlig legal ist:

   if( x = 120 )

nur macht das halt was völlig anderes als
   if( x == 120 )

Wie hier schon mal gesagt wurde: Du brauchst mindestens 1
Buch um C-Programmierung zu lernen.
Gast
1. und 2. ist soweit korrekt.
zu 3.: Das was oben von anderen angeführt wurde, stimmt nicht mit
Deiner Aufgabenstellung überein (if(x & (1 << 7)) entspricht if(x >=
128)!). Deshalb: Vergiss das erstmal. Du kannst selbstverständlich
schreiben
if(x == 128){/*irgendwelcher Code*/}
Gast
Genau! If ist KEINE SCHLEIFE!!!!! Weder in C noch in irgend einer
anderen Programmiersprache. Hierbei handelt es sich um eine
Fallunterscheidung. Such ma nach nem C-Kurs im Netz oder kauf dir n
Buch.
Gast
>Hierbei handelt es sich um eine Fallunterscheidung.

Eher eine Kontrollstruktur. (mit der dann eine Fallunterschiedung
durchgeführt wird)
Gast
hast du die deinem MC entsprechende Datei hinzugeladen?
#include <mega32.h> z.B.? Dort sind die physikalischen Adressen
definiert. Ausserdem Gross/Kleinschreibung beachten. pina != PINA
Gast
Hast du dir schon einmal die Header-Files angesehen?!
WEnn nicht, dann tu es einmal... da stehen oft schöne hilfreiche sachen
darin ;-)

Aus dem Headerfile:

/*  BYTE Register  */
sfr P0     = 0x80;
sfr P1     = 0x90;
sfr P2     = 0xA0;
sfr P3     = 0xB0;
sfr P4     = 0xE8;
sfr P5     = 0xF8;

Somit weist du das sie mit P0 usw angesprochen werden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.