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!
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.
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.
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).
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) ?
""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.
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*/}
AHHHH, da war es wieder, das Unwort I F - S C H L E I F E Nein, Hilfe...... :-) mfg, Stefan.
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.
>Hierbei handelt es sich um eine Fallunterscheidung.
Eher eine Kontrollstruktur. (mit der dann eine Fallunterschiedung
durchgeführt wird)
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
ich lade #include <reg51.h> für meinen C515 PINA habe ich ach schon probiert
Beim 51er gibts ja auch kein PIN-Register, da läuft alles über die Portregister. Und sie werden dort mit P0...P3 bezeichnet.
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.
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 ;-)
PS.: Vorallem lies : Microcontrollerprogrammierung in "C" Grundlagen, 1997, PDF, 2100 KByte
@Schoasch Danke für den super Link! Ich wills nur sicherheitshalber wissen: b=P0 (um den Port 0 auf b zu speichern)? danke nochmal
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.