PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum funktioniert dieser einfache Syntax nicht??



w3-tuning
23.10.2008, 00:13
Hallo!
Verwende ein C-Control Pro 32Board!
Versuche schon seit über einer Stunde! ein einfaches Programm zu schreiben,
es geht mir vorerst nur darum das ich mit einem Taster (1mal drücken) LED an und ein weiterer Tastendruck die LED wieder ausschaltet.
Das Einschalten funktioniert ja auch aber das Auschalten nicht!
Taster habe ich durchgemessen, unbetätigt habe ich 5V auf dem Eingangsport, betätigt 0V.

Hier das Programm


void main(void)
{
Port_DataDirBit(PORT_SW1,PORT_IN);
Port_DataDirBit(PORT_LED1,PORT_OUT);
Port_WriteBit(PORT_LED1,PORT_OFF);

while (1)
{

while (Port_ReadBit(PORT_SW1));{
Port_WriteBit(PORT_LED1,PORT_ON);}
AbsDelay(500);
while(Port_ReadBit(PORT_SW1));{
Port_WriteBit(PORT_LED1,PORT_OFF);}


}
}
Code Tags eingefügt. Sieht hübscher aus (PicNick)

Währe über Hilfe sehr dankbar.
MFG
Markus Wimmer

nil.at
23.10.2008, 02:00
Hallo,

obwohl ich absolut keine Ahnung von einem C-Control Board habe (kenne also die Befehle nicht) fällt mir eines bei deinem Code auf:

Hinter deinen beiden "while" Schleifen innerhalb der while(1) sind Semikolons, die da nicht hingehören.
Sprich:
while(Port_ReadBit(PORT_SW1))
{
Also ohne das ;
Das ganze auch beim Zweiten.

Probier es einfach mal...
Im Übrigen wäre es schöner Codes in den Code-Tag zu schreiben.
Und main sollte immer einen Wert zurück liefern, sprich int main(void) und am Ende return 0;

PS: Ich werde aus dem Code zwar überhaupt nicht schlau, aber sollten Tastendrücke nicht normalerweise mit "if" abgefragt werden?

Blue72
23.10.2008, 06:50
Ich hab gar keine Ahnung von C, aber trotzdem ne idee:

Du fragst zweimal DIREKT hintereinander den Taster ab, mit einer Verzögerung von stolten 0,5 s ;)
Das einfachste wäre z.B. beim Einschalten der variable A (z.B.) den Wert 1 zu geben.

So, jetzt drückst Du den Taster, ist A=1 UND der Taster gedrückt dann die LED ausschalten und A wieder auf 0 setzen.

So würd ich es machen (als Basom Nutzer ;) )

Gruß
Jens

PicNick
23.10.2008, 08:18
Wie Nil.at schon sagte:



while (Port_ReadBit(PORT_SW1)) // ;
{
Port_WriteBit(PORT_LED1,PORT_ON);
}
AbsDelay(500);
while(Port_ReadBit(PORT_SW1)) // ;
{
Port_WriteBit(PORT_LED1,PORT_OFF);
}

(Rein sytaktisch, ohne über sinn und unsinn nachzudenken)