The PIC 16F628A (which is my PIC of choice for most things) is equipped with an USART. One can connect a RS232-port on the appropriate pins, and communicate with the PIC in that way. It's ideal for every project in which you want to interface with a computer, and reasonably high baud rates are possible.
I used the schematic and software from Lars Petersen's 16F628 UART test program to test the USART functionality. But when I started to modify the source and processing a single character could take long, I ran into one of the limitations of the 16F628: its receive buffer is only two bytes large. On the third byte, it 'locks up'.
Hardware flow control has to be done in software, which is a difficult task. Instead, it is better to store the received characters in a (circular) buffer. The basic idea is thus:
Indirect adressing is explained in section 4.4 of the 16F628a datasheet. Basically, indirect adressing works as follows:
Using this technique, one can hold a memory location in a variable and retrieve the bytes on those locations in sequence.
The circuit is quite simple. The RS232-signals are converted into normal TTL-signals using a MAX232 and four 10uF capacitators. Timing is done with a 4MHz crystal. A LED is connected to pin A1, to provide visual output.

A larger version of the schematic is available here. It is basically the same schematic as the one used by Lars Petersen.
The program to test all this has a quite simple functionality. When it is powered up, it sends a 'alive'-message to the RS232 interface. Then, when characters are received, the LED on pin A1 is flashed in morse. The program also provides feedback via the RS232 interface to the terminal.
The (documented) sourcecode is available here. It is a heavily modified version of Lars Petersen's code.