I would use a rising edge interrupt for receiving. Each rising edge, sample the data line. If you aren't in the middle of a character and the input is HIGH (idle) do nothing. If it's LOW you have your start bit so you start accumulating bits until you have the data and parity and the two Stop bits. Then check parity and stop bits before putting the character in the buffer.
For transmitting, I'd just clock out the bits in software. Since you are providing the transmit clock the timing iisn't at all critical.