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

Re: SW1 und 2 Kategorie: CC-Pro Unit & Appl.Board (von Peter S - 30.06.2005 11:06)
Als Antwort auf SW1 und 2 von Bernd - 30.06.2005 9:28
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
Hi,

es entspricht nicht genau dem beschriebenen Fehlerbild, aber eine Stolperfalle hab ich schon:

 if (Port_ReadBit(SW1) == 0); // Taste 1?
                                          ^--  Semikolon falsch!!!
Das Semikolon bewirkt, das am Ende vom if garnichts ausgefĂŒhrt wird. Die folgenden geschweiften
Klammern sind syntaktisch auch richtig, da ein neuer Block aufgemacht wird. Dieser Block wird
aber immer unabhĂ€ngig vom if durchgefĂŒhrt. Einfach Semikolon wegnehmen, dann
sollte es klappen.

 {
            AbsDelay(10);            // Verzögerung
            if (Port_ReadBit(SW1) == 0) LED1_On(delval); // nochmal (entprellen)
 }


Der gleiche Bug tritt ĂŒbrigens ein paar Zeilen weiter wieder auf. Vielleicht kann ich in den Compiler eine
diesbezĂŒgliche Warnung einbauen. Ist aber nicht so einfach, wie es jetzt klingt.

Gruss Peter

> Hallo Ihr Alle! Hallo Peter!
>
> Bin seit wenigen Abenden wieder im Rennen mit neiem Applikationsboard.
> Es Funktioniert. (siehe "Hilfe Error")
>
> Habe jetzt aber ein eigenartiges Problem.
> Da ich fĂŒr meine Anwendung 2 PorteingĂ€nge Überwachen wollte zum ZĂ€hlen von Impulsen,
> Schrieb ich zu Testzwecken das Programm LED3 folgendermassen um.
> SW1 drĂŒcken --> LED1 2 sek. an.
> SW2 drĂŒcken --> LED2 2 sek. an.
>
> Folgender Effekt tritt auf:
>
> Nach irgend einem schema leutet nach dem drĂŒcken von SW1 die LED2 auf.
> meistens nach dem SW2 mit LED2 benutzt wurde.
>
> Das entsprechende Programm hÀngt hinten an.
>
> hier nun das Programm:
> // LED4: Ausschalt Verzögerung
>
> // Abwandlung von LED3 als Testprogramm fĂŒr Portabfrage
>
> // Verwendung der Taste SW1
> // LEDs leuchten nach dem DrĂŒcken des jeweiligen SW fĂŒr 2 sek
> // erforderliche Library: IntFunc_Lib.cc
>
>
> // Deklaration der I/O Variablen
> // die PortPins werden von 0 bis 31 angesprochen (4 Ports a 8 Pins)
> // Beispiele: 0=PortA.0, 9=PortB.1
>
> #define SW1 26
> #define SW2 27
> #define LED1 30
> #define LED2 31
> #define on 0
> #define off 1
> #define out 1
> #define in 0
>
> int delval;                         // globale Variablendeklaration
>
> //------------------------------------------------------------------------------
> // Ein- und Ausschalten der LED1
> //
> void LED1_On(int delay_val)
> {
>     Port_WriteBit(LED1,on);         // LED2 einschalten
>     AbsDelay(delay_val);            // Verzögerung (Einschaltdauer)
>     Port_WriteBit(LED1,off);        // LED2 ausschalten
> }
>
> //------------------------------------------------------------------------------
> // Ein- und Ausschalten der LED2    // der momentanen Einfachheit fĂŒr die 2. LED
> //
> void LED2_On(int delay_val)
> {
>     Port_WriteBit(LED2,on);         // LED2 einschalten
>     AbsDelay(delay_val);            // Verzögerung (Einschaltdauer)
>     Port_WriteBit(LED2,off);        // LED2 ausschalten
> }
>
> //------------------------------------------------------------------------------
> // Hauptprogramm
> //
> void main(void)
> {
>     delval=2000;                    // Verzögerungszeit: 2s
>     Port_DataDirBit(LED1,out);      // LED2 PD7 (PortD.7) auf Ausgabe vorbereiten
>     Port_DataDirBit(LED2,out);      // LED2 PD7 (PortD.7) auf Ausgabe vorbereiten
>     Port_DataDirBit(SW1,in);        // SW1 PD4 (PortD.4) auf Eingabe vorbereiten
>     Port_DataDirBit(SW2,in);        // SW2 PD4 (PortD.5) auf Eingabe vorbereiten
>     Port_WriteBit(LED1,off);        // LED2 ausschalten
>     Port_WriteBit(LED2,off);        // LED2 ausschalten
>     while (1)
>     {
>
> //        if (Port_ReadBit(SW1) == 0) LED1_On(delval); // fĂŒr Test ohne ausgelagerte Funktion
> //        if (Port_ReadBit(SW2) == 0) LED2_On(delval); // fĂŒr Test ohne ausgelagerte Funktion
>
>         Drehgeber1(); // zur ausgelagerten Funktion
>     }                               // Verzögerungszeit.
> }
>
> //------------------------------------------------------------------------------
> // Drehgeber1
> //
> void Drehgeber1(void)
> {
> //int Drehgeber11, Drehgeber12;
>
>         if (Port_ReadBit(SW1) == 0); // Taste 1?
>         {
>             AbsDelay(10);            // Verzögerung
>             if (Port_ReadBit(SW1) == 0) LED1_On(delval); // nochmal (entprellen)
>         }
>
>         if (Port_ReadBit(SW2) == 0) LED2_On(delval); // Taste 2?
>         {
>             AbsDelay(10);            // Verzögerung
>             if (Port_ReadBit(SW2) == 0) LED2_On(delval); // nochmal (entprellen)
>         }
> }
>
>


    Antwort schreiben


Antworten:

Re: SW1 und 2 (von Bernd - 30.06.2005 17:14)