Hallo Leute, wie kann ich in C eine "oder Verknüpfung" erreichen? Also ich habe folgendes Problem. Ich will eine Fussgesteuerte Schleife haben, die mit der Voraussetzung (PortA==0x0 oder PortA==0x255)nach oben springt. Ich weis nicht ob man das so machen kann? do { irgend was... } while(PORTA==0x0||PORTA==0x255) Und dann habe ich noch Probleme mit den Funktionen, der Compiler gibt eine Warnung und verweist auf die Funktion. void vergleich(); //noch vor main deklariert int main() { . . vergleich(); . . } //__________Funktion___Vergleich____________________ void vergleich() { if(PORTA==PINC) { PORTA=0xFF; } else { PORTA=0x0; } } Was habe ich falsch gemacht?
1) 0x255 ist wahrscheinlich nicht was du willst. Eher 0xFF ;-) Ansonsten siehts ok aus. Ich würde die einzelnen Ausdrücke nur noch klammern ((PORTA == 0x00) || (PORTA == 0xFF)) 2) Poste doch mal die Warnung/Fehlemeldung
> while(PORTA==0x0||PORTA==0x255) Die Schleife wird nochmal ausgeführt wenn PORTA entweder 0 oder 255 ist, soweit kein Problem. Hat der Compiler rumgezickt? Evtl. musst du noch while((PORTA==0x0)||(PORTA==0x255)) die beiden Vergleiche in Klammern setzten, ich weiß gerade nicht Auswendig wie die Vorrangregeln sind. > der Compiler gibt eine Warnung und verweist auf die Funktion. Was schreibt der Compiler denn? Randy
Danke schon mal, ja hast Recht ich meine 0xFF. Hier sind die Warnungen: ../Lauflicht_in_C.c:34: warning: implicit declaration of function 'vergleich' ../Lauflicht_in_C.c: At top level: ../Lauflicht_in_C.c:71: warning: conflicting types for 'vergleich' ../Lauflicht_in_C.c:34: warning: previous implicit declaration of 'vergleich' was here ../Lauflicht_in_C.c: In function 'vergleich': Jetzt spinnt das ding Komplett jetzt bringt er mir auch Fehlermeldungen: ../Lauflicht_in_C.c:26: error: 'PINC' undeclared (first use in this function) ../Lauflicht_in_C.c:72: error: 'PORTA' undeclared (first use in this function) ../Lauflicht_in_C.c:72: error: 'PINC' undeclared (first use in this function) woran kann es liegen?
Die Warnung mit der Funktion 'vergleich' erklärt sich aus den unterschiedlichen Prototypen. Prototyp deklariert als 'void vergleich()' Funktion angelegt als (per Definition) 'int vergleich'. Du hast das void vergessen, das du vorher geschrieben hast, der Kompiler macht dann daraus ein int. Empfehlung: als Parameter in beiden Fällen auch ein 'void' rein, so dass das ganze dann so aussieht 'void vergleich(void)'. Die anderen Fehler rühren daher, dass dem Compiler die Begriffe 'PINC' und 'PORTA' nichts sagen. Mikrocontrollerinclude vergessen? Frage ist dein PORTA wirklich breiter als 8 Bit (wegen 'PORTA==0x255')??? Christian
1 | #include <io.h> |
2 | |
3 | void vergleich(void); |
4 | |
5 | int main(void) |
6 | {
|
7 | |
8 | // ...
|
9 | return 0; |
10 | }
|
Und noch was:
1 | while(PORTA==0||PORTA==255) |
2 | |
3 | // oder
|
4 | |
5 | while(PORTA==0x00||PORTA==0xFF) |
Du solltest dringend ein C-Buch lesen und dich überhaupt mit µC's auseinander setzen bevor du anfängst.
Mein PORTA ist 8 Bit Breit also 0xFF OK Danke es funktioniert. Ein C Buch werde ich demnächst durchlesen.
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.