Two bidirectional Software UARTs with AT89S52 microcontroller
You can spare a lot of trouble and cycles by configuring P3.0 as an interrupt source. This way start bit detection would not require constant polling.
I don't see why do you test ACC.0.
sermode is really a baud counter. Consider renaming.
I strongly recommend to sample each baud 3 or 5 times, and signal an error if samples disagree.
For testing the receiver, use a real RS232 part to transmit data. You may also want to set aside a spare pin, let the timer interrupt to toggle it, and observe the waveform on a scope.