CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

How to read two RS232 ports using PIC18F8680?

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
ikilicaslan



Joined: 25 Aug 2010
Posts: 1

View user's profile Send private message

How to read two RS232 ports using PIC18F8680?
PostPosted: Wed Aug 25, 2010 2:54 am     Reply with quote

Hello,

I am using a PIC18F8680 and want to read two RS232 ports on one PIC.

The inbuilt functions getc(), putc() and kbhit() is quite useful when using a single RS232 port where kbhit() is used to indicate whether the message on the channel is ready to be read.

Additionally I know that PIC18F8680 support multiple RS232 routing using streams as follows:
Code:

#use rs232(baud=9600, xmit = PIN_C6 , rcv = PIN_C7 , stream = CH1)
#use rs232(baud=9600, xmit = PIN_C6 , rcv = PIN_C7 , stream = CH2)

Then these individually routed RS232 channels can be read or written using the inbuilt functions fgetc() and fputc(). But there is no such fkbhit() function (or a function with another name) to act as a flag for incoming data for two different RS232 channels.

Therefore here are my questions:

1) Assuming that I use polling to understand whether the message is ready to be read at the RS232 input. How could I understand which channel does the incoming message belong to? In other words are there any flags or functions to show me which channel is the message coming from?

2) Can another technique be used to handle this problem? I guess using the interrupt service routines would come up with a similar problem since the isr would be triggered upon a message arrival and it wont be able to distinguish the channels.

I would appreciate any help or any suggestions.
Ttelmah



Joined: 11 Mar 2010
Posts: 19538

View user's profile Send private message

PostPosted: Wed Aug 25, 2010 3:58 am     Reply with quote

kbhit, already does this.

kbhit(STREAM)

Just include the stream name, in the kbhit call....

However, you seem to be talking about having two seperate streams on one UART. If so, there is nothing you can do. If there is only one hardware UART, you will only get interrupts on the stream connected to it's pins. Change to a PIC with two hardware UARTs, and you will have INT_RDA, and INT_RDA2, for the two seperate UARTs.

If you want to route the single UART to different code sections, according to some internal flag, then stop using 'streams', and do it yourself. Just routine the input/output to the required buffer according to your own flag.
It is fraqctionally possible to implement _very_ limited second channel comms, using a line that has a hardware 'level' interrupt, and a software UART on this pin, but performance has very severe limitations, that makes it unsuitable for anything but warranted half-duplex comms. Anything more complex won't work. You can write your own hgandler based upon timer interrupts (I have posted a basic RS232 receive in the past using this), but involves more work.

Best Wishes
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group