Ich hab mir den Code nochmal angesehen und möchte dir vorschlagen, daß du vielleicht die Sleep Funktion der Asuro Lib verwendest und am Angang des Programmes einfach mal Init() aufrufst.

Keine Gewähr für diesen Code.

Code:
/*    +---------------------------------+
      |                                 |
      |      Morse-Code-Generator       |
      |         von René Becker         |
      |    Modifiziert von Warringer    |
      |                                 |
      +---------------------------------+
*/

//---------------------------------------------------------

/*    +-----------------+
      |  |            | |
      |  |  Includes  | |
      |  |     &      | |
      |  |  Defines   | |
      |  V            V |
      +-----------------+
*/

//---------------------------------------------------------
#include <asuro.h>

//---------------------------------------------------------
#define sekunden 0.4
//---------------------------------------------------------
#define MORSE_a blinken(1,1,0); blinken(1,3,2);
#define MORSE_b blinken(1,3,0); blinken(2,1,0); blinken(1,1,2);
#define MORSE_c blinken(1,3,0); blinken(1,1,0); blinken(1,3,0); blinken(1,1,2);
#define MORSE_d blinken(1,3,0); blinken(1,1,0); blinken(1,1,2);
#define MORSE_e blinken(1,1,2);
#define MORSE_f blinken(2,1,0); blinken(1,3,0); blinken(1,1,2);
#define MORSE_g blinken(2,3,0); blinken(1,1,2);
#define MORSE_h blinken(3,1,0); blinken(1,1,2);
#define MORSE_i blinken(1,1,0); blinken(1,1,2);
#define MORSE_j blinken(1,1,0); blinken(2,3,0); blinken(1,3,2);
#define MORSE_k blinken(1,3,0); blinken(1,1,0); blinken(1,3,2);
#define MORSE_l blinken(1,1,0); blinken(1,3,0); blinken(1,1,0); blinken(1,1,2);
#define MORSE_m blinken(1,3,0); blinken(1,3,2);
#define MORSE_n blinken(1,3,0); blinken(1,1,2);
#define MORSE_o blinken(2,3,0); blinken(1,3,2);
#define MORSE_p blinken(1,1,0); blinken(2,3,0); blinken(1,1,2);
#define MORSE_q blinken(2,3,0); blinken(1,1,0); blinken(1,3,2);
#define MORSE_r blinken(1,1,0); blinken(1,3,0); blinken(1,1,2);
#define MORSE_s blinken(2,1,0); blinken(1,1,2);
#define MORSE_t blinken(1,3,2);
#define MORSE_u blinken(2,1,0); blinken(1,3,2);
#define MORSE_v blinken(3,1,0); blinken(1,3,2);
#define MORSE_w blinken(1,1,0); blinken(1,3,0); blinken(1,3,2);
#define MORSE_x blinken(1,3,0); blinken(2,1,0); blinken(1,3,2);
#define MORSE_y blinken(1,3,0); blinken(1,1,0); blinken(1,3,0); blinken(1,3,2);
#define MORSE_z blinken(2,3,0); blinken(1,1,0); blinken(1,1,2);
#define MORSE_wortende Msleep(5*einheit);
#define MORSE_punkt blinken(1,1,0); blinken(1,3,0); blinken(1,1,0); blinken(1,3,0); blinken(1,1,0); blinken(1,3,2);
//---------------------------------------------------------

/*    +----------------------+
      |  |                |  |
      |  | Unterprogramme |  |
      |  V                V  |
      +----------------------+
*/

//---Einheit-----------------------------------------------
uint16_t einheit = sekunden*1000;
//---------------------------------------------------------

//---Wort/Satz/Buchstabe-----------------------------------
char einZeichen[] = "#";
char Zeichenkette[] = "";
uint8_t z1, z2 = 0;

//---Blinken-----------------------------------------------   
int blinken(int anzahl,int multipl,int endsleep)
{
	int xx;
	for (xx=0;xx<anzahl;xx++)
	{
		BackLED(ON, ON);
		Msleep(multipl*einheit);
		BackLED(OFF, OFF);
		Msleep(einheit);
	}
	Msleep(endsleep*einheit);
	return(0);
}
//---------------------------------------------------------

//----Hyperterminaleingabe---------------------------------

//---------------------------------------------------------

/*    +----------------------+
      |  |                |  |
      |  |  Hauptprogramm |  |
      |  V                V  |
      +----------------------+
*/

//---Main--------------------------------------------------
int main ()
{
	Init();
	while(1)
	{
		z1=0;
		do
		{
			SerRead(einZeichen,1,0);       // warten bis ein Zeichen über IR kommt
			SerWrite(&einZeichen[0],1);    // Kontrollausgabe zum Terminal
			Zeichenkette[z1] = einZeichen[0];
			z1++;
		}   
		while (einZeichen[0] != 0x09);   // solange Zeichen einlesen bis VT erkannt wird
		for (z2 = 0; z2 < z1; z2++)
		{
			switch (Zeichenkette[z2])         // der erste Index von einZeichen[] ist 0
			{
				case ('a'): MORSE_a; break;
				case ('b'): MORSE_b; break;
				case ('c'): MORSE_c; break;
				case ('d'): MORSE_d; break;
				case ('e'): MORSE_e; break;
				case ('f'): MORSE_f; break;
				case ('g'): MORSE_g; break;
				case ('h'): MORSE_h; break;
				case ('i'): MORSE_i; break;
				case ('j'): MORSE_j; break;
				case ('k'): MORSE_k; break;
				case ('l'): MORSE_l; break;
				case ('m'): MORSE_m; break;
				case ('n'): MORSE_n; break;
				case ('o'): MORSE_o; break;
				case ('p'): MORSE_p; break;
				case ('q'): MORSE_q; break;
				case ('r'): MORSE_r; break;
				case ('s'): MORSE_s; break;
				case ('t'): MORSE_t; break;
				case ('u'): MORSE_u; break;
				case ('v'): MORSE_v; break;
				case ('w'): MORSE_w; break;
				case ('x'): MORSE_x; break;
				case ('y'): MORSE_y; break;
				case ('z'): MORSE_z; break;
				case (' '): MORSE_wortende; break;
				case ('.'): MORSE_punkt; break;
				default: break;
			}
		}
	}
	return(0);
}
Möglich daß da die breaks in der Case Unterscheidung gefehlt haben...

Noch ein kleiner Tip, benutze einen einfachen Texteditor um den Code ein wenig leserlicher zu machen wenn, du ihn hier postest.