okay ich habe das problem mit dem auslesen des drehgebers gelöst, aber brauche noch hilfe beim feinschliff:

habe jetzt diesen, zugegeben umständlichen, code zum motor beschleunigen, drehgeberbytes auslesen und abbremsen geschrieben:

Code:
char buffa [4];
char buffb [4];
char buffc [4];
char buffd [4];
int dataa;
int datab;
int datac;
int datad;

/*### Drehgebertest ### */ 
void vor(void)
{

	i2c_init();			
	i2c_start(0xB0);	//Slave Adresse des Motortreiber 1
	i2c_write(0x00);	//Motor 1
	i2c_write(0xFF);	//vorwärts
	i2c_stop();

	waitms(200);


	i2c_start(0xB0);	//Slave Adresse des Motortreiber 1
	i2c_write(0x02);	//Byte 2 Drehgeber 1 Position (aus MD23 Data Sheet)
	i2c_stop();

	i2c_start(0xB1);	//Slave Adresse Motortreiber 1 + 1 Bit für Leserichtung
	dataa = i2c_read(1);	//Lesen
	datab = i2c_read(1);
	datac = i2c_read(1);
	datad = i2c_read(0);

	i2c_stop();


	sprintf(buffa, "%01d", dataa);	//in char umwandeln
	sprintf(buffb, "%01d", datab);
	sprintf(buffc, "%01d", datac);
	sprintf(buffd, "%01d", datad);
	
	sendUSART("\r\n Impulse: ");	//senden
	sendUSART(buffa);
	sendUSART(buffb);
	sendUSART(buffc);
	sendUSART(buffd);
	
	sendUSART("\r\n Umdrehungen: ");
	
// hier brauche ich noch eine Umwandlung von den Impulsen zu den Umdrehungen...



	waitms(200);

	i2c_start(0xB0);	//Motortreiber 1
	i2c_write(0x00);	//Motor 1
	i2c_write(0x80);	//anhalten
	i2c_stop();

}
und es wird mir folgendes am hyperterminal ausgegeben:

Bild hier  

leider bekomme ich manchmal eine 8 stellige zahl, manchmal auch nur eine 6 oder 7 stellige

außerdem: wie kann ich aus den 4 werten die dann zu den impulsen zusammengesetzt werden ein int machen den ich dann durch 360 teilen kann um so die umdrehungen anzuzeigen?