Electronic – Communicating with the Pic 16F913

microchipmicrocontrollerpic

I asked this question over at stack overflow but found this in a few of the comments on some of the microchip questions,
https://stackoverflow.com/questions/3276297/communicating-with-the-pic-16f913

Here is my issue, it appears that all the communication lines for the PIC 16F913 reside on the same set of pins, this is convenient in that I don't have to sacrifice GPIO pins just to do comms, however the problem I'm having now is if I'm using the SPI on the chip, how can I send information to the RS232?

The reason this issue came up, is that I just bought a CAN bus chip that communicates over SPI, and I would really like to see the data on RS232, so I can see messages. (I really don't know much about CAN yet, so who knows if this even makes sense yet).

Here are the options I see, and maybe someone else has better ideas that I'm just simply missing.

Somehow setup a time scheme that will switch between SPI and RS232 every time I get data,
— This doesn't seem hard and should work, but supposing I don't want to miss a message, what if a message is written while I'm writing to RS232, is it possible I'll miss it?

2.. I can always use SPI, but then build my own comm bus over 8 of the GPIO lines, to another PIC 16F913, using only the GPIO lines and then since the RS232 lines are free on the second PIC I can simply read the data and spit it out.

— This one is doable but now we're wasting 2 chips, AND all the GPIO lines,

There has to be a better way. Or is there?

Any help is greatly appreciated.

I would like to also clarify, obviously one solution is using a completely different chip (which may in fact be what I end up doing, if I can get the 18F programmed), however, I'm interested in worst case scenario, in which I am limited in resources and only have some 913's, is the way described above the only way to do it with this chip, or is there a better way?

Best Answer

You could use those pins for SPI, and implement a software UART on another pair of pins. I've done that before now when I needed two UARTs on a chip that only had one hardware UART.

You need to "bit-bang" the software UART. I tried to post some code I've used but it doesn't get formatted properly. Here is an example.