Tscha. Bin ich für Einkreisen.
1) lass beim "Case" die geschweiften weg, also einfach
Code:
case 0: LCDMsg(MSG_off);  break;
2) den "call" aus dem "switch" testweise rausnehmen (davor)
Code:
  LCD_Cursor (1, 4);
  LCDMsg (MSG_GSM);
  LCDMsg(MSG_off);              
  switch (GSM_Status)
  {
      etc
nur um festzustellen, obÄs um den function-call geht, oder ob es was mit dem "Switch-case" zu tun hat.

Wie sind denn U16 und U8 deklariert ? mit oder ohne * ?