You could send a single byte containing the length of the string.
Send this byte right after the "SYNC" string (*TEST)
STR in_ctl[0] would then tell you how many valid chars are in this array.
You could send a single byte containing the length of the string.
Send this byte right after the "SYNC" string (*TEST)
STR in_ctl[0] would then tell you how many valid chars are in this array.
Last edited by NavMicroSystems; - 13th May 2005 at 17:02.
regards
Ralph
_______________________________________________
There are only 10 types of people:
Those who understand binary, and those who don't ...
_______________________________________________
Mister-e, That is an OK way to do it at a slower baud rate but at 9600+ baud I would be concerned with loosing characters especially at lower osc frequency's.
Dave Purola,
N8NTA
Dave,
you're 100% right on that, was just an example snip. For faster Baudrate I'll for sure prefer using an other way like yours or Ralph's suggestion. Well, serial communication handling is an endless story and depend of too much thing to have an single solution![]()
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Whenever I can control the "Sender" I add this byte that tells the receiver how many bytes are to be received, and I can tell it works perfectly.Originally Posted by mister_e
The advantage is I don't need to clear the array or scan the array for some kind of "End of String".
regards
Ralph
_______________________________________________
There are only 10 types of people:
Those who understand binary, and those who don't ...
_______________________________________________
yep i agree. BTW i have few minutes to spend on it and here's an update tested @19200 bauds @ 4MHZ
Code:' Program to echo incoming serial data string ' Baudrate : 19200 Bauds ' Method : Polling USART interrupts flags ' Pic Definition ' ============== ' Using PIC 18F2320 @ 4MHZ and bootloader ' DEFINE LOADER_USED 1 DEFINE OSC 4 ' Hardware configuration ' ====================== ' ' TRISC = %10000000 ' PORTC.7 is the RX input ' PORTC.6 is the TX output ' Serial communication definition ' =============================== ' Using internal USART and MAX232 to interface to PC ' RCSTA=$90 ' enable serial port, ' enable continuous receive ' TXSTA=$24 ' enable transmit, ' BRGH=1 ' SPBRG=12 ' set baudrate to 19200 Bauds ' Alias definition ' ================ ' ' RCIF VAR PIR1.5 ' Receive interrupt flag (1=full , 0=empty) TXIF VAR PIR1.4 ' Transmit interrupt flag (1=empty, 0=full) CREN var RCSTA.4 ' Receiver enable bit OERR var RCSTA.1 ' Overrun error ' Variable definition ' =================== ' ' SerialString var byte[40] Counter var byte Success var bit i var byte temp var byte header var bit ' Hardware initialisation ' ======================= ' ' pause 100 ' safe start-up delay clear Main: IF oerr then cren=0 cren=1 endif if RCIF then ' incomming data? I=RCREG ' take it if header then if i ="L" then discard ' is it the end? serialstring[counter]=i ' Store into the array counter=counter+1 ' endif if i ="!" then header=1 ' is it the header character? Discard: while RCIF temp=RCREG wend if i="L" then success=1 ' Yeah i got a valid string header=0 endif endif if success then cren=0 ' Disable Receiver hserout ["String received : ",str serialstring\counter,13,10,_ "Character count : ", dec counter,13,10] cren=1 ' Enable receiver clear endif goto main
Last edited by mister_e; - 13th May 2005 at 19:38.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks