Hi,
It's not really processing power it's just that HSEROUT sits there waiting for the for TXBuffer to free up before it can put the next byte in. 600 bytes is 6000 bits at 8N1 so at 115200 it should take around 1/115200*6000=52ms. The PIC oscillator frequency has little impact on that as the actuall processing involved in the HSEROUT is quite small (though I guess it increases a bit with the all the modifiers).
ARRAYWRITE should work exactly the same as HSEROUT except it will put all your data in an array in RAM. So if if you have enough RAM (600 bytes?) simply replace HSEROUT with ARRAYWRITE and write your complete string to memory (or do it parts if you don't have the RAM). At the very end you pad a NULL or other character that you can use to identify the end of the string.
Then, to have the transmit interrupt driven, have a look at this post
I'm sure the ARRAYWRITE index counter is available in one of the system variables but I have no idea which. You should be able to handle it by multiple arraywrites and "send-sessions". Load array, send, reload array send etc. Have a semaphore that the ISR cleares when it finds the end of the current outgoing string, that way the main routine knows when it can reload the array with the next part of the message.
But, like I said, it's not going to take less time to send 600bytes either way but you're going to have access to the processor during the time it takes to actually get the byte from the TXReg and out of the PIC which is like 87us or there abouts for 115200.
/Henrik.
Bookmarks