Forum: Mikrocontroller und Digitale Elektronik Anfänger mit C "oder Verknüpfung"und Funktionen


von Max (Gast)


Lesenswert?

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?

von ARM-Fan (Gast)


Lesenswert?

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

von Randy (Gast)


Lesenswert?

> 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

von Max (Gast)


Lesenswert?

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?

von Christian G. (christiang)


Lesenswert?

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

von pumpkin (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.