Success!!!
I tested the following code on a recently purchased PIC18F2525, which I do believe is a newer revision level then the earlier problem parts that Microchip reported.
Code:
'*******************************************
' EUSART Auto Baud Rate Detection
' PIC18F2525/2620/4525/4620
' Author: Michael St. Pierre
' Date: 10/30/2005
'*******************************************
DEFINE OSC 40
'============================================
' Equates
'============================================
rxdata VAR byte ' temporary storage for received data
RCIF VAR PIR1.5 ' EUSART receive interrupt flag
ABDEN VAR BAUDCON.0 ' Auto-Baud Detect Enable bit
'============================================
' Set-up EUSART for Auto-Baud detection
'============================================
' Note: The BRG clock source needs to be set for the optimum
' match at all anticipated incoming baud rates (we are optimized
' for a 40Mhz clock source and can detect from 300 to 115,200 Baud).
TXSTA = %00100100 ' Transmit enabled
' BRGH set = 1 for High Baud enable
RCSTA = %10010000 ' Receive enabled
BAUDCON = %00001001 ' Auto-Baud Detect enabled
' BRG16 set = 1 for 16 Bit BRG counter
'============================================
' Program Start
'============================================
' The EUSART's built-in Auto-Baud Detect function waits to receive
' a single ascii "U" character as the synchronizing event. Once
' received and processed, the SPBRG and SPBRGH registers will be
' automatically set for the best possible baud rate match.
While ABDEN = 1: Wend ' loop until Auto-Baud Detect is cleared...
rxdata = RCREG ' then clear RCIF (discard "U" character)
mainloop:
While RCIF = 0: Wend ' loop until data present in EUSART buffer...
rxdata = RCREG ' then retrieve data,
TXREG = rxdata ' and send it!
Goto mainloop ' Get next character
I tried it repeatably at baud rates spanning from 300 to 115,200 Baud with no apparent problems. Each and every time the baud rate was properly detected and set by sending a single ascii "U" character (uppercase).
It's not only nice having the Auto-Baud Detect as a built-in hardware function, but also very sweet to have a 16 bit BRG counter. This allows for a much wider range of usable baud rates as compared to the normal 8 bit version in the standard USART's.
I'm definately sold on this one!
Bookmarks