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 support@ccsinfo.com

RTCC messing up RS232 ?

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



Joined: 08 Sep 2003
Posts: 8

View user's profile Send private message

RTCC messing up RS232 ?
PostPosted: Thu Nov 08, 2001 4:20 pm     Reply with quote

Well, there went the afternoon....
I tried to add serial output to a previous program. I find that the baud rate out is slower than what I specify in #use rs232...

I have simplified the code down to this, and I get a jumpy square wave, at about 900Hz out C6
If I remark out the ENABLE_INTERRUPTS(INT_RTCC); line, everything works fine...clean square wave at 1200Hz

I want to use the WDT, so setup_counters defaults to RTCC_DIV_1.
And, I plan to use the Seconds counter to take readings every 15 min.
Any suggestions?

#include <16F877.H>
#fuses HS,NOPROTECT,noWDT,PUT,NOLVP //WDT disabled for testing, NEEDS re-enabled
#use delay(clock=4000000) //USING A 4MHz CRYSTAL
#use standard_io(C)
#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C4)

#byte porta=5 //These lines define the Ports.
#byte portb=6
#byte portc=7
#byte portd=8
#byte porte=9

#define INTS_PER_SECOND 3906 // (4000000/(4*256))
LONG SECONDS=0; //a running real time counter. starts at 0 on reset, counts forever.
long int_count; //interrupts left before a second has gone by.
////////////////////////////////////////////////////////////
//// THE NEXT LINES ARE THE RTCC INTERRUPT ROUTINE. ////
#int_rtcc // This function is called every time
clock_isr() // the RTCC (timer0) overflows (255->0).
{ // For this program this is 3906 times
if(--int_count==0) // per second with a 4MHz crystal.
{++SECONDS;
int_count=INTS_PER_SECOND; //set counter up to 3906 again.
}
}
//// END OF INTERRUPT SERVICE ROUTINE ////
////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////

main()
{
SETUP_COUNTERS(RTCC_INTERNAL,WDT_2304MS);//...2.304 Sec before Watch dog Reset.
enable_interrupts(global);
ENABLE_INTERRUPTS(INT_RTCC); //RTCC (Timer0) used for real time clock.
while(true) //for testing
putc(0x55); //for testing

} //end of Main.
___________________________
This message was ported from CCS's old forum
Original Post ID: 1023
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

Re: RTCC messing up RS232 ?
PostPosted: Thu Nov 08, 2001 5:52 pm     Reply with quote

:=I tried to add serial output to a previous program. I find that the baud rate out is slower than what I specify in #use rs232...
:=
:=I have simplified the code down to this, and I get a jumpy square wave, at about 900Hz out C6
:=If I remark out the ENABLE_INTERRUPTS(INT_RTCC); line, everything works fine...clean square wave at 1200Hz
---------------------------------------------------------

If you use a software USART, the timing of the pulses is
controlled by software delay loops. If you have an interrupt
occuring during that delay loop, then the delay will be longer
than intended.

Two possible solutions:
1. Use the hardware USART.
2. Disable interrupts when using the software USART.
___________________________
This message was ported from CCS's old forum
Original Post ID: 1024
Cam Bruce



Joined: 08 Sep 2003
Posts: 8

View user's profile Send private message

Re: RTCC messing up RS232 ?
PostPosted: Fri Nov 09, 2001 8:23 am     Reply with quote

:=:=I tried to add serial output to a previous program. I find that the baud rate out is slower than what I specify in #use rs232...
:=:=
:=:=I have simplified the code down to this, and I get a jumpy square wave, at about 900Hz out C6
:=:=If I remark out the ENABLE_INTERRUPTS(INT_RTCC); line, everything works fine...clean square wave at 1200Hz
:=---------------------------------------------------------
:=
:=If you use a software USART, the timing of the pulses is
:=controlled by software delay loops. If you have an interrupt
:=occuring during that delay loop, then the delay will be longer
:=than intended.
:=
:=Two possible solutions:
:=1. Use the hardware USART.
:=2. Disable interrupts when using the software USART.

That makes sence.
I think I'll go with disabling the interrupts during the serial data.
Does that mean the delay_ms() and Delay_us() will also interfere with the RTCC?
Thanks Again Cam
___________________________
This message was ported from CCS's old forum
Original Post ID: 1033
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