Example of interrupt-based version of reading serial port

Ah, I see. You need to react within around 50 mS, so you think an interrupt is needed? Well, I set up a test case which just uses loop to see if 3 bytes of serial data has arrived from your test gear. (This 3 bytes is collected by the serial hardware's interrupts). Once that happens we call test_the_thing to do some action. In my case I turned LED 13 on, if I got a T in the first byte, otherwise turned it off.

void test_the_thing ()
  {
  char cmd [3];

  for (byte i = 0; i < sizeof cmd; i++)
    cmd [i] = Serial.read ();
  
  if (cmd [0] == 'T')
    digitalWrite (13, HIGH);
  else
    digitalWrite (13, LOW);
    
  }  // end of  test_the_thing

void setup ()
{
  Serial.begin (115200);
  pinMode (13, OUTPUT);
}  // end of setup

void loop ()
 {
   if (Serial.available () >= 3)
     test_the_thing ();
 }  // end of loop

Timing this, it shows that the reaction time to turn the LED on, after the third byte has arrived, is 19.375 uS. This then is reacting 2580 times as fast as you need it to, so that is plenty fast enough. Plenty of time in fact to be doing other things as well.