Hallo zusammen.
Und ein herzliches willkommen im Forum an Touby_van.

Also erst einmal zur Funktion SerRead().
Touby_van hat die Funktion schon richtig aufgerufen mit einer 0 als letzten Parameter. Dadurch wartet die Funktion nämlich darauf das 3 Zeichen empfangen werden, bevor sie überhaupt wieder zurück kommt.
Die Anzahl der Bytes in der Variablen data[] sind 5 Bytes. Die Zeichen "0123" und das angehängte \0 werden vorbelegt und als Speicher reserviert.

Der Teufel steckt hier im Timing.
Probiert mal:
Code:
#include "asuro.h"

int main(void)
{
   unsigned char data[] = "0123";
   unsigned int  i;
   
   Init ();
   
   while (1)
   {
      for (i = 0; i < 100; i++)
        Sleep (72);

      SerRead (data, 3, 0);

      for (i = 0; i < 100; i++)
        Sleep (72);

      if (data[0] == 'A' && data[1] == 'S' && data[2] == 'U')
         SerWrite ("HALLO!", 6);

      else if (data[0] == 'B' && data[1] == 'O' && data[2] == 'L')
         SerWrite ("gang1!", 6);

      else if (data[0] == 'C' && data[1] == 'I' && data[2] == 'R')
         SerWrite ("gang2!", 6);

      else if (data[0] == 'D' && data[1] == 'E' && data[2] == 'P')
         SerWrite ("gang3!", 6);

      else
         SerWrite ("falsch", 6);
   }
   return 0;
}
Die Verzögerung bringt es ans laufen. (Sie dürfen auch kürzer sein.)
Eine der Warteschleifen kann weg. Welche, müsst ihr mir erklären

Gruß Sternthaler