I have implemented a new serial data transfer protocol in our 8051 system (80C552). I tryed to write the received characters immediately back to the terminal with the following commands:
ucrs232_buffer[ucrec_count] = S0BUF; S0BUF = ucrs232_buffer[ucrec_count];
Hello Vaclav, thank you for your answer! The baud rate is 9600. My OSC=15MHz -->9765bps. This is not so good but it worked with the old protocol, and i did not any changes at the interface settings. I use the external interrupt which occurs with app. 915Hz. I set this to priority level 0 and the serial interrupt to priority level 1 --> No changes at all.
if(RI) { if (ucrec_count >= 128) ucrec_count=0; //store data from S0BUF ucrs232_buffer[ucrec_count] = S0BUF; S0BUF = ucrs232_buffer[ucrec_count]; //if char equals <EOT>(0x04), set brs232_rec if (ucrs232_buffer[ucrec_count]==0x04) brs232_rec =1; ucrec_count++; RI=0; } return;
"The baud rate is 9600. My OSC=15MHz -->9765bps. This is not so good but it worked with the old protocol" Just because something doesn't fail doesn't meant that it's actually working properly! ;-) That sounds a pretty large baudrate error!! :-0 As recommended on the Keil baudrate calculator http://www.keil.com/c51/baudrate.asp "For the best results, you should choose baud rates that are accurate to +/-1% or better." I think you could just have been lucky that it ever worked!!
Thank you for your message and the baud rate generator. I tryed the baud rate 1200 with and error of +0,17% and I got the same result! Unfortunatly it was not the reason! Christian