A discussion group for the PICMicro microcontroller. Also called the Microchip PIC, this list is dedicated to the use and abuse of this fine, simple, microcontroller. Close to topic posts are welcome, ie. general electronics.
PIC USART and Transmission on serial port - musabbirmajeed - May 1 18:15:33 2009
Hi all,
I am using 16 bit PIC18F2420 microcontroller with a single USART port. I am using MPLAB
C18 compiler. I was trying to achieve duplex communication on a microcontroller with a
single usart. I am using external interrupts for that purpose. All was well until now.
The main problem is that when I send a string or array of characters to the pic, the
computer on the other corner receives every alternate character i.e. it misses every
alternate character.
But, I am definitely sure that the whole string is coming into the RCREG register (I have
debugged it). But, when the characters are placed in TXREG from RAM, they get lost
somewhere until they reach the pc.
I have also made sure that the baud rates of USART and both the pcs matches up. I have
been trying to debug this circuit for the past one week, with literally no success. I
would be really grateful to you if you can give me any suggestion or if any of you have
ever faced this kind of problem
My transmit code is as follows:
while (i < strlen(income_data)) {
//char *income_data;
TXREG = income_data;
while(PIR1bits.TXIF == 0);
//putcUSART(income_data[i++]);
//back = 0;
i++;
}
PS: income_data contained all the character I sent on RX pin.
Thank you for your consideration. Hope to hear from you soon.
Best Regards,
Musabbir Abdul Majeed
------------------------------------
to unsubscribe, go to http://www.yahoogroups.com and follow the instructions

(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )
Re: PIC USART and Transmission on serial port - demolitron - May 4 19:22:18 2009
So, to clarify the situation...
The terminal, PC, sends a string of characters to the PIC. The PIC echos the data
back?
If that is the case then are you implementing any kind of flow control or buffering?
Meaning this; If the terminal is sending the string its going to send it one character
after another, without pause. Does your code use the Receiver Interrupt to load the data
into a buffer?
I assume you have verified via ICD or something that the string income_data really does
contain a faithful copy of the received bytes? I always try to take the simplest solution
to the problem and verify it is not the cause, no matter how sure I am it isn't.
I would also code my stuff a bit differently (don't we all)...this is for a polled TX
scheme.
void PrintBuffer(char *income_data)
{
while(*income_data) //Keep going till we see a null
{
TXREG=*income_data; //Load TXREG
while(!TRMT); //Wait until TSR is empty
income_data++; //Advance to the next character
}
}
Here is an interrupt driven one. Just set the pointer *income_data to the start of a null
terminated string and kick off the TX.
interrupt void ISR(void)
{
if (*income_data) { TXREG=*income_data; income_data++; }
PIR1bits.TXIF=0;
}
--- In p...@yahoogroups.com, "musabbirmajeed"
wrote:
>
> Hi all,
>
> I am using 16 bit PIC18F2420 microcontroller with a single USART port. I am using MPLAB
C18 compiler. I was trying to achieve duplex communication on a microcontroller with a
single usart. I am using external interrupts for that purpose. All was well until now.
>
> The main problem is that when I send a string or array of characters to the pic, the
computer on the other corner receives every alternate character i.e. it misses every
alternate character.
>
> But, I am definitely sure that the whole string is coming into the RCREG register (I
have debugged it). But, when the characters are placed in TXREG from RAM, they get lost
somewhere until they reach the pc.
>
> I have also made sure that the baud rates of USART and both the pcs matches up. I have
been trying to debug this circuit for the past one week, with literally no success. I
would be really grateful to you if you can give me any suggestion or if any of you have
ever faced this kind of problem
>
> My transmit code is as follows:
>
> while (i < strlen(income_data)) {
> //char *income_data;
> TXREG = income_data;
> while(PIR1bits.TXIF == 0);
> //putcUSART(income_data[i++]);
> //back = 0;
> i++;
> }
>
> PS: income_data contained all the character I sent on RX pin.
> Thank you for your consideration. Hope to hear from you soon.
> Best Regards,
> Musabbir Abdul Majeed
>
------------------------------------
to unsubscribe, go to http://www.yahoogroups.com and follow the instructions

(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )