I have used a couple of methods for the transmitter, all work equally well.

1). Bit bang. Togggle a pin for a duration of 1ms or whatever cadence your receive module allows for logic "1" output. Most RX module output is inverted due to a pullup resistor on the data out line. Look at the data sheet pulse width and duration diagrams. So in your code you shift a bit and test for 1 or 0 then either pause for a zero or toggle at 38Khz for a duration of 1ms (or whatever your receive module wants to see) and do it until all 8 bits have been sent out.

Advantage: you use only 1 TX pin.
Disadvantage: you are stuck in the main loop while transmitting.

2). Hardware PWM. Configure either a 16F88, 16F877A..etc with hardware PWM to output a 38Khz pulse train. Use a 2nd I/O to output your data using serout and put your IR LED between the PWM out port and data out port. The LED will flash at 38Khz encoding your data being transmitted.

Advantage: no bit banging, you can use the built in serout to transmit serially.
Disadvantage: 2 pins

Nick