Forum: Mikrocontroller und Digitale Elektronik Anfängerfragen in C


von Karl (Gast)


Lesenswert?

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!

von smay4finger. (Gast)


Lesenswert?

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.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

Bitte schau mal ins AVR-GCC-Tutorial. Für die C-Programmierung ist es
(v.a. für Einsteiger) auch immer sinnvoll, ein gutes Buch dabei zu
haben (z.B. Kernighan/Ritchie).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Korrektur

  3.)  if ( x & (1<<7) ) { /* ... */ }

128 ist 1 << 7, nicht 1 << 4.

von Karl (Gast)


Lesenswert?

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) ?

von Karl (Gast)


Lesenswert?

""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 ?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Ich möchte einen Eingangsport abfragen

>also x=PINA ?

ja...

von Karl heinz B. (kbucheg)


Lesenswert?

> 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.

von johnny.m (Gast)


Lesenswert?

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*/}

von Karl (Gast)


Lesenswert?

DANKE an alle die mir geholfen haben!

von smay4finger. (Gast)


Lesenswert?

AHHHH, da war es wieder, das Unwort

  I F - S C H L E I F E

Nein, Hilfe...... :-)

mfg, Stefan.

von Felix Jankowski (Gast)


Lesenswert?

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.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Hierbei handelt es sich um eine Fallunterscheidung.

Eher eine Kontrollstruktur. (mit der dann eine Fallunterschiedung
durchgeführt wird)

von Karl (Gast)


Lesenswert?

Mein Compiler kennt "pina" nicht ?


if (a)
      {
      b=pina;
      c=pinb;
      a=0;
      }

von crazy horse (Gast)


Lesenswert?

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

von Karl (Gast)


Lesenswert?

ich lade
#include <reg51.h>
für meinen C515

PINA habe ich ach schon probiert

von crazy horse (Gast)


Lesenswert?

Beim 51er gibts ja auch kein PIN-Register, da läuft alles über die
Portregister. Und sie werden dort mit P0...P3 bezeichnet.

von Karl (Gast)


Lesenswert?

wie kann ich dann die Ports auf variablen speichern?

von Karl (Gast)


Lesenswert?

ich berichtige:

ich benutze das Headerfile  reg515.h
für meinen C515

von Schoasch (Gast)


Lesenswert?

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.

von Schoasch (Gast)


Lesenswert?

Achja... da die heute Jugend ja nicht gern ein Buch in die Hand nimmt,
man könnte sich ja am Papier schneiden ;-), gibts auch einige Virtuelle
Bücher.

http://www.humerboard.at/navi/f_anwendung.htm

Lies dir diese Skripten einmal durch und du wirst dich etwas besser
auskennen ;-)

von Schoasch (Gast)


Lesenswert?

PS.: Vorallem lies : Microcontrollerprogrammierung in "C" Grundlagen,
1997, PDF, 2100 KByte

von Karl (Gast)


Lesenswert?

@Schoasch
Danke für den super Link!

Ich wills nur sicherheitshalber wissen:

b=P0    (um den Port 0 auf b zu speichern)?

danke nochmal

von Schoasch (Gast)


Lesenswert?

Semikolon nicht vergessen ;-)
b = P0;

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.