Hallo Klucky

Beim Mega 128 gibt es kein CTS1 Flag mehr, heißt jetzt WGM12.

also
TCCR1B|=(1<<CS10)|(1<<CS12)| (1<<WGM12);

OCR1=15625; ist beim MEGA 128 ein 16 BIT Register, also

OCR1A=15625;

SIGNAL(SIG_OUTPUT_COMPARE) gibts beim Mega 128 nicht, also

SIGNAL(SIG_OUTPUT_COMPARE1A) sonst stimmt der Inerrupt einsprung
nicht mehr.

In deiner INT Routine SIGNAL(SIG_OUTPUT_COMPARE1A)
{
cli();
/*Timer anhalten*/
TCCR1B&=~((1<<CS10)|(1<<CS12));
byte_timer=1;
}
schaltest du mit cli(); die Interrupts aus, macht keinen Sinn, da GCC das automatisch macht. Beim verlassen der INT Routine wird es aber wieder eingeschaltet, auch in deinem Fall, also aufpassen.

Deine Abfage while(byte_timer=0){} geht so nicht, vergleiche immer mit == , also while(byte_timer==0){}. Zudem muß die Variable byte_timer mit volatile deklariert werden, sonst wird sie weg optimiert.

volatile BYTE byte_timer;

MFG
Dieter