Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Warum funktioniert dieses einfache Programm nicht?? Kategorie: Programmierung C (von PeterS - 23.10.2008 1:15)
Als Antwort auf Re: Warum funktioniert dieses einfache Programm nicht?? von PeterS - 23.10.2008 1:06

> > Hallo!
> > Brauche dringend Hilfe!!
> >
> > Wiseo funktioniert dieser einfache Syntax nicht??
> >
> >
> >
> > // Hauptprogramm
> > //
> > 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);}
> >
> >
> > }
> > }
> >
> > Versuche die LED am Applikation Bord mit einem Tastendruck anzumachen (was auch funktioniert)
> > und mit einem Weiteren Tastendruck wieder auszumachen- das funktioniert aber nicht!
> > Jumper vom SW1 ist auf GND!
> > Danke
> > MFG
> > Markus Wimmer
>
> Hallo,
>
> erstmal sind da ein paar geschweifte Klammern überflüssig. Zweitens, nehme ich an Du möchtest mit
> der while Schleife auf einen Tastendruck warten. Das wäre aber besser so:
>
> while (!Port_ReadBit(PORT_SW1));
>
> Du möchtest ja warten, solange das Portbit NICHT gleich 1 ist. Da Du vielleicht in 0.5 Sekunden auch
> den Schalter nicht sofort loslassen wirst, danach auch eine Schleife, die wartet solange das SW1
> Portbit gleich 1 ist. Der Code muÃ? daher so aussehen:
>
>      while (1)
>      {
>  
>              while (!Port_ReadBit(PORT_SW1));   // warten solange SW1 nicht gedrückt ist
>              Port_WriteBit(PORT_LED1,PORT_ON);
>    
>              while (Port_ReadBit(PORT_SW1));   // warten bis SW1 losgelassen wird
>
>              while(!Port_ReadBit(PORT_SW1));    // und wieder warten solange SW1 nicht gedrückt ist
>              Port_WriteBit(PORT_LED1,PORT_OFF);
>  
>       }
>
> Gruss Peter
>


Oops, hatte in der späten Stunde vergessen, das ja die Taster invertiert sind (daher müssen ja auch die
Pullups gesetzt werden). Ok, dann hier nocmal korrekt:

      while (1)
      {
 
              while (Port_ReadBit(PORT_SW1));   // warten solange SW1 nicht gedrückt ist
              Port_WriteBit(PORT_LED1,PORT_ON);
     
              while (!Port_ReadBit(PORT_SW1));   // warten bis SW1 losgelassen wird
 
              while(Port_ReadBit(PORT_SW1));    // und wieder warten solange SW1 nicht gedrückt ist
              Port_WriteBit(PORT_LED1,PORT_OFF);
 
       }


    Antwort schreiben


Antworten:

Re: Warum funktioniert dieses einfache Programm nicht?? (von Markus Wimmer - 23.10.2008 8:27)
    Re: Warum funktioniert dieses einfache Programm nicht?? (von PeterS - 23.10.2008 9:19)