Juhuu,
nach langem hin und her grübeln habe ich nun endlich das Programm völlig fertig! Danke allen die mir Denkanstöße gegeben habe . Für alle die Es interessiert wie man so etwas macht (was ich machen sollte s.o.) dann findet er den Code drei zeilen unrt dieser Zeile


Code:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//-----------------------------------------------------------------------
//---- Odomietrie Auslesen ------- 05.06.07 ------ Jannik Mewes ---------
//---- Auslesen von Odomitrie Daten und Senden an eine Serielle ---------
//---- Schnittstelle. Korektur des Reifens. -----------------------------
//-----------------------------------------------------------------------

#include "asuro.h"

//-----------------------------------------------------------------------
//--- BCDaus ------- 23.5.07 --- Jannik Mewes ---------------------------
//--- Ausgabe einer integer Zahl in Ascii über die serielle -------------
//--- Schnittstelle -----------------------------------------------------     
//-----------------------------------------------------------------------
void BCDaus(unsigned int data)            // Anfang der Funktion
{

   unsigned int (Zahl1);                  // Definiere Variable Zahl1
   unsigned int (Zahl2);                  // Definiere Variable Zahl2
   unsigned int (Zahl3);                  // Definiere Variable Zahl3
   unsigned int (Zahl4);                  // Definiere Variable Zahl4

         Zahl1 = data ;                  	// Zahl1 hat den gleichen Wert wie data
         Zahl1 = Zahl1 / 1000;            	// Wert von Zahl1 geteilt durch 1000
         data = data - Zahl1 * 1000;      	// Wert von data minus Wert on Zahl1 mal 1000
         Zahl1 = Zahl1 + 48;               	// Wert von Zahl1 plus 48
         SerWrite(&Zahl1,1);               	// Schreibe wert von Zahl1 an IR Sender
         
         Zahl2 = data;                  	// Zahl2 hat den gleichen Wert wie data
         Zahl2 = Zahl2 / 100;            	// Wert von Zahl2 geteilt durch 100
         data = data - Zahl2 * 100;        	// Wert von data minus Wert on Zahl2 mal 100
         Zahl2 = Zahl2 + 48;               	// Wert von Zahl2 plus 48
         SerWrite(&Zahl2,1);               	// Schreibe wert von Zahl2 an IR Sender
         
         Zahl3 = data;                  	// Zahl3 hat den gleichen Wert wie data
         Zahl3 = Zahl3 / 10;               	// Wert von Zahl3 geteilt durch 10
         data = data - Zahl3 * 10;         	// Wert von data minus Wert on Zahl3 mal 10
         Zahl3 = Zahl3 + 48;               	// Wert von Zahl3 plus 48
         SerWrite(&Zahl3,1);               	// Schreibe wert von Zahl3 an IR Sender
         
         Zahl4 = data;                		// Zahl4 hat den gleichen Wert wie data
         Zahl4 = Zahl4 / 1;             	// Wert von Zahl4 geteilt durch 1
         Zahl4 = Zahl4 + 48;            	// Wert von Zahl4 plus 48
         SerWrite(&Zahl4,1);            	// Schreibe wert von Zahl4 an IR Sender

}


//-----------------------------------------------------------------------
//--- Pulserkennnung ------- 30.5.07 --- Jannik Mewes ------------------- 
//--- Ausgabe einer 1 bei odometriepuls über RS232  ---------------------
//-----------------------------------------------------------------------
unsigned int  Flanke_odo (void)			// Anfang der Funktion
{
	
	
	unsigned int (ausgabe);				// Definiere Variable Zahl1
	unsigned int odo[2];					// Speicher bereitstellen
	unsigned int (temp);					// Speicher bereitstellen
	unsigned int (i);						// Speicher bereitstellen
  
    ausgabe = 0;							// ausgabe kriegt den Wert 0
	i = 0;									// ausgabe kriegt den Wert 0
	temp = 0;								// temp kriegt den Wert 0

  while (i == 0)							// Enslosschleife bis i != 0
	{
		OdometrieData(odo);					// Lese Odometrie aus
		if (odo[0]> temp) temp =odo[0];	// Wenn odo[0]> temp ist dann ist temp gleich genausogroß wie odo
		if ( temp > (odo[0]+50)) i =1;		// Wenn temp > als odo plus 50 ist dann ist i = 1
	     if(PollSwitch()>0) goto rollen; 	// wenn Tasta gedrückt gehe weiter zu rollen
	}

  i = 0;									// i kriegt den Wert 0
  temp = 1024;								// temp kriegt den Wert 1024

  while (i == 0)							// Enslosschleife bis i != 0
	{
		OdometrieData(odo);					// Lese Odometrie aus
		if (odo[0]< temp) temp =odo[0];	// Wenn odo[0]< temp ist dann ist temp gleich genausogroß wie odo
		if ( temp < (odo[0]+50)) i =1;		// Wenn temp < als odo plus 50 ist dann ist i = 1
	}
	rollen:
	ausgabe = 1;							// ausgabe kriegt den Wert 0
    return  ausgabe; 						// gebe ausgabe zurück

}
//------------------------------------------------------------------------
// --------------- Hauptprogramm -----------------------------------------
//------------------------------------------------------------------------

int main(void)
{
   Init();                     			// Initialisierung
    int zeahler;						// Speicher bereitstellen
	unsigned int temp2;
	unsigned int wert;					// Speicher bereitstellen
	int zuruek;							// Speicher bereitstellen
	unsigned int odo2[2];				// Speicher bereitstellen
 	int i;								// Speicher bereitstellen
 
    StatusLED(GREEN);            		// StatusLED auf Grün schalten
    BackLED(OFF,OFF);					// BackLED´s auf aus

	zuruek = 0;							// zuruek kriegt den Wert 0
    zeahler = 0;						// zeahler kriegt den Wert 0
    i = 0; 

  while(i == 0)                  		// Enslosschleife bis 1 != 1
       {            
			wert = Flanke_odo();		// wert ist genau so groß wie Flanke_odo
			zeahler = zeahler +1;		// Rechne zeahler + 1
			if(PollSwitch()>0) i = 1; 	// wenn Tasta gedrückt gehe weiter
       }
	
	zuruek = zeahler;			// zuruek hat den gleichen Wert wie zeahler
	BCDaus (zeahler);      		// Lade Funktion BCDaus un übergebe den Wert i
	SerWrite(";",1);      		// Schreibe ein Kommer
			
  while(zuruek > 0)					// Enslosschleife bis i zuruek > 0
	   {
			MotorDir(RWD,BREAK);		// Motorrichtung linker Reifen Stopp rechter Reifen Rückwerts
			MotorSpeed(120,120);		// Motorspeed auf die Hälfte der maximalen Leistung
			i = 0;										// ausgabe kriegt den Wert 0
			temp2 = 0;									// temp2 kriegt den Wert 0
         while (i == 0)								// Enslosschleife bis i != 0
			{
				OdometrieData(odo2);					// Lese Odometrie aus
				if (odo2[0]> temp2) temp2 =odo2[0];	// Wenn odo2[0]> temp2 ist dann ist temp2 gleich genausogroß wie odo
				if ( temp2 > (odo2[0]+50)) i =1;		// Wenn temp2 > als odo2 plus 50 ist dann ist i = 1
			}
		
		i = 0;									// i kriegt den Wert 0
		temp2 = 1024;							// temp2 kriegt den Wert 1024
		
		 while (i == 0)								// Enslosschleife bis i != 0
			{
				OdometrieData(odo2);					// Lese Odometrie aus
				if (odo2[0]< temp2) temp2 =odo2[0];	// Wenn odo2[0]< temp2 ist dann ist temp2 gleich genausogroß wie odo
				if ( temp2 < (odo2[0]+50)) i =1;		// Wenn temp2 < als odo2 plus 50 ist dann ist i = 1
			}
				zuruek = zuruek - 1;					// zuruek - 1
	   }
	MotorDir(BREAK,BREAK);
return 0;                     			// Zurück zu 0
}