Programmieren von Mikrocomputern in
     automatisierten Systemen

     Automatisieren und Vernetzen mit Industrie-PC

 
 
Sitemap ::info-rlp :: PSPICE  :: C-Programmierung :: AT04 :: ELI04 :: C51 :: 
 
 Pfad ::: Mikrocontroller / Ein- Aus-Tastung mit einer Taste

 

 

1.2     
 

Projekte realisieren
 
 
  1.2.4.2  Ein- Aus-Tastung mit einer Taste  
         
   
 1.  
zum Anfang der Seite Problemstellung

Beim Betätigen des Tasters ( P0^0) soll die
Leuchtdiode  (P2^0) leuchten.
Beim nochmaligen Betätigen des Tasters
( P0^0) soll die Leuchtdiode  (P2^0) wieder
ausgehen.

Zusätzlich soll eine Entprellung des Tasters programmtechnisch herbeigeführt werden.
 

    

 3.                                                                   
zum Anfang der Seite  Programmablaufplan
  von Carsten Brück



  zum Anzeigen des Flussdiagramms auf die Grafik klicken
- Programmablaufplan (PAP)






   

 

2.  
zum Anfang der Seite Zählschleife  for



 

4.  
zum Anfang der Seite Struktogramm
von Carsten Brück





- Struktogramm

 

 
   
 4.                                                                   
zum Anfang der Seite  Zeitlicher Ablauf des Schaltvorgangs (grafisch)
  Wichtige Zeitpunkte der Grafik im Quelltext kenntlich machen!!!


 

 
   
 5.                                                                   
zum Anfang der Seite  Quellcode in der Programmiersprache C
 nach der Idee von Carsten Brück (continue wurde durch else ersetzt)

 
siehe Keil C51/Philips LPC900, S. 159 ff.
  HINWEIS: Der hier abgebildete Quelltext unterscheidet sich vom Buch aufgrund der Beschaltung der Balken-LED
                    auf dem LPC900-Board;   sBLED = 0  => LED an   und    sBLED = 1  =>  LED aus
                    zum einfacheren Verständnis ist die Syntax "verständlicher" dargestellt", z. B. bei den while-Schleifen
/**************************************************************************************
 *  C-Programm zur Auswertung von externen Ereignissen                        *
 *  Projekt-Name:   ein_aus_tastung_mit_einer_taste.uv2                          *
 *************************************************************************************/
#include <reg932.h>

sbit sbTaste = P0^0;                                                    // Deklaration der Taste
sbit sbLED = P2^0;		                                  // Deklaration der LED
unsigned int uiLoop;                                                     // Global deklariert, damit im µVision-WatchWindow darstellbar
unsigned int uiValue;                                                    // Global deklariert, damit im µVision-WatchWindow darstellbar

void v_Wait( uiValue )                                                    // Definition der Funktion "v_Wait()"
                                                                                   // void v_Wait( unsigned int uiValue )   wenn nicht zuvor global
{
                            // unsigned int uiLoop;                    wenn nicht zuvor global  
    for ( uiLoop = 0; uiLoop < uiValue; uiLoop++ ); 
}


void main ( void )
{            
    P2M1 = 0xFE;                                                          // Initialisiert P2, Pin 1 als bidirektional 

    while ( 1 )
    {
          while ( sbTaste == 1 )                                          // Zeitpunkt [1] im zeitlichen Ablauf  - Taste gedrückt?
          {
              ; 
          }

         v_Wait ( 3000 );                                                   // Zeitpunkt [2] im zeitlichen Ablauf  -  Wartezeit 10 ms

         if ( sbTaste == 1 )                                                // Zeitpunkt [3] im zeitlichen Ablauf   - Taste immer noch gedrückt?       
         {
             ; 
         }

         else
         {

             if ( sbLED == 1 )                                             // Zeitpunkt [4] im zeitlichen Ablauf  -  Zustand LED invertieren  
             {
                 sbLED = 0; 
             }   
          
             else
             { 
                 sbLED = 1; 
             }
          }  

        while ( sbTaste == 0 );                                          // Zeitpunkt [5] im zeitlichen Ablauf  - Taste wieder geöffnet?           
        {
            ;
        }

        v_Wait ( 3000 );                                                    // Zeitpunkt [6] im zeitlichen Ablauf  -  Wartezeit 10 ms
    }
}

 
 
    Liegt im dargestellten Quelltext die gleiche Funktionalität vor wie im
Vorschlag von Michael Baldischweiler???
 
         
    Quellennachweis:
Grafik der "Lernbausteine" der Original-LEGO-Website entnommen
   

 

     :: Stand :: 30.09.2005
  
     :: Glossar :: Block diagram :: Memory :: Special function registers :: Philips P89LPC93X :: Siemens A51 Pocket-Guide
 
              Beratender Fachlehrer: