mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfragen in C


Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: smay4finger. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur

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

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

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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) ?

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich möchte einen Eingangsport abfragen

>also x=PINA ?

ja...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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*/}

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE an alle die mir geholfen haben!

Autor: smay4finger. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AHHHH, da war es wieder, das Unwort

  I F - S C H L E I F E

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

mfg, Stefan.

Autor: Felix Jankowski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hierbei handelt es sich um eine Fallunterscheidung.

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

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Compiler kennt "pina" nicht ?


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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich lade
#include <reg51.h>
für meinen C515

PINA habe ich ach schon probiert

Autor: crazy horse (Gast)
Datum:

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

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich dann die Ports auf variablen speichern?

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich berichtige:

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

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS.: Vorallem lies : Microcontrollerprogrammierung in "C" Grundlagen,
1997, PDF, 2100 KByte

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Semikolon nicht vergessen ;-)
b = P0;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.