8051 RFID reader for Atmel microcontroller
Here are some ideas that may be useful to you.

Decide what's most important

Since the 8051, including your AT89S52 variant, has few resources, you'll have to make some hard decisions on how to use them.  If you're already using the single serial port for some other purpose and it's fixed for some reason (e.g. can't respin boards), then perhaps it's out of your hands.  If not, then taking a good look at both UART uses would likely be useful.  It would be most useful to put the less frequent, lower bit rate, less important traffic on a software UART.  Sometimes the right choice is readily apparent; other times not so much.  Another possibility is to multiplex them into the single hardware UART, but of course that only works if it's acceptable to block reception of one UART while the other is receiving.

Use an interrupt

The sole purpose for the delays is timing, so I'd suggest using a timer instead.  As you know, this CPU only has three timers and Timer 2 is tied to the Baud Rate Generator for the hardware UART, so that leaves Timer 0 and Timer 1.  You may be able to use one of those in either mode 0 (13-bit timer) or mode 1 (16-bit timer).  One way to do this would be to use two interrupts.  One interrupt would be set to trigger on the falling edge of RX.  Once that's detected, disable that interrupt and enable a timer interrupt for half bit time.  When the timer triggers, read the bit and if it's not a 0, that is, not a true start bit, disable the timer interrupt and re-enable the falling edge interrupt.  If it is a zero, count it as a start bit and set the timer for a full bit time.  Thereafter, just read the bits for each timer interrupt until you get to the stop bit.  If the stop bit is not 1 when it's supposed to be, you'll probably want to signal a framing error.  If it is, the byte is probably good and can be stored.  Either way, disable the timer interrupt and re-enable the falling edge interrupt.  It's not ideal, but it should work, given the limitations.