The Baud Rate Generator (BRG) is an 8-bit or 16-bit timer that is
dedicated to the support of both the asynchronous and synchronous EUSART operations. By
default, the BRG operates in 8-bit mode. Setting the BRG16
bit selects 16-bit mode.
The SPxBRGH:SPxBRGL register pair determines the period of the
free-running baud rate timer. In Asynchronous mode, the multiplier of the baud rate period
is determined by both the BRGH
and the BRG16 bits. In Synchronous mode, the BRGH bit is ignored.
Table 28-1 contains the formulas for determining the baud rate. Equation 28-1 provides a sample calculation for determining the baud rate and baud
rate error.
Typical baud rates and error values for various Asynchronous modes
have been computed and are shown in the table below. It may be advantageous to use the high
baud rate (BRGH = 1
) or the 16-bit BRG (BRG16 =
1
) to reduce the baud rate error. The 16-bit BRG
mode is used to achieve slow baud rates for fast oscillator frequencies. The BRGH bit is
used to achieve very high baud rates.
Writing a new value to the SPxBRGH:SPxBRGL register pair causes the
BRG timer to be reset (or cleared). This ensures that the BRG does not wait for a timer
overflow before outputting the new baud rate.
If the system clock is changed during an active receive operation, a
receive error or data loss may result. To avoid this, check the status of the Receive Idle
Flag (RCIDL ) bit to make sure the receive operation is idle before changing the system
clock.
Equation 28-1. Calculating Baud Rate Error For a device with FOSC of 16 MHz, desired baud rate of 9600,
Asynchronous mode, 8-bit BRG:
D e s i r e d B a u d r a t e = F O S C 64 × ( S P x B R G + 1 )
Solving for SPxBRG:
S P x B R G = F O S C 64 × D e s i r e d B a u d r a t e − 1
S P x B R G = 16000000 64 × 9600 − 1
S P x B R G = 25.042 ≃ 25
C a l c u l a t e d B a u d r a t e = 16000000 64 × ( 25 + 1 )
C a l c u l a t e d B a u d r a t e = 9615
E r r o r = C a l c u l a t e d B a u d r a t e − D e s i r e d B a u d r a t e D e s i r e d B a u d r a t e
E r r o r = 9615 − 9600 9600
E r r o r = 0.16 %
Table 28-1. Baud Rate Formulas Configuration Bits BRG/EUSART Mode Baud Rate Formula SYNC BRG16 BRGH 0
0
0
8-bit/Asynchronous FOSC /[64 (n+1)] 0
0
1
8-bit/Asynchronous FOSC /[16 (n+1)] 0
1
0
16-bit/Asynchronous 0
1
1
16-bit/Asynchronous FOSC /[4 (n+1)] 1
0
x
8-bit/Synchronous 1
1
x
16-bit/Synchronous Note: x = Don’t
care, n = value of SPxBRGH:SPxBRGL register pair.
Table 28-2. Sample Baud Rates for Asynchronous Modes Baud
Rate SYNC =
0
, BRGH = 0
, BRG16 =
0
FOSC = 32.000 MHz FOSC = 20.000 MHz FOSC = 18.432 MHz FOSC = 11.0592 MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 — — — — — — — — — — — — 1200 — — — 1221 1.73 255 1200 0.00 239 1200 0.00 143 2400 2404 0.16 207 2404 0.16 129 2400 0.00 119 2400 0.00 71 9600 9615 0.16 51 9470 -1.36 32 9600 0.00 29 9600 0.00 17 10417 10417 0.00 47 10417 0.00 29 10286 -1.26 27 10165 -2.42 16 19.2k 19.23k 0.16 25 19.53k 1.73 15 19.20k 0.00 14 19.20k 0.00 8 57.6k 55.55k -3.55 3 — — — 57.60k 0.00 7 57.60k 0.00 2 115.2k — — — — — — — — — — — —
Baud
Rate SYNC =
0
, BRGH = 0
, BRG16 =
0
FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 — — — 300 0.16 207 300 0.00 191 300 0.16 51 1200 1202 0.16 103 1202 0.16 51 1200 0.00 47 1202 0.16 12 2400 2404 0.16 51 2404 0.16 25 2400 0.00 23 — — — 9600 9615 0.16 12 — — — 9600 0.00 5 — — — 10417 10417 0.00 11 10417 0.00 5 — — — — — — 19.2k — — — — — — 19.20k 0.00 2 — — — 57.6k — — — — — — 57.60k 0.00 0 — — — 115.2k — — — — — — — — — — — —
Baud
Rate SYNC = 0
,
BRGH = 1
, BRG16 = 0
FOSC = 32.000
MHz FOSC = 20.000
MHz FOSC = 18.432
MHz FOSC = 11.0592
MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 — — — — — — — — — — — — 1200 — — — — — — — — — — — — 2400 — — — — — — — — — — — — 9600 9615 0.16 207 9615 0.16 129 9600 0.00 119 9600 0.00 71 10417 10417 0.00 191 10417 0.00 119 10378 -0.37 110 10473 0.53 65 19.2k 19.23k 0.16 103 19.23k 0.16 64 19.20k 0.00 59 19.20k 0.00 35 57.6k 57.14k -0.79 34 56.82k -1.36 21 57.60k 0.00 19 57.60k 0.00 11 115.2k 117.64k 2.12 16 113.64k -1.36 10 115.2k 0.00 9 115.2k 0.00 5
Baud
Rate SYNC = 0
,
BRGH = 1
, BRG16 = 0
FOSC = 8.000
MHz FOSC = 4.000
MHz FOSC = 3.6864
MHz FOSC = 1.000
MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 — — — — — — — — — 300 0.16 207 1200 — — — 1202 0.16 207 1200 0.00 191 1202 0.16 51 2400 2404 0.16 207 2404 0.16 103 2400 0.00 95 2404 0.16 25 9600 9615 0.16 51 9615 0.16 25 9600 0.00 23 — — — 10417 10417 0.00 47 10417 0.00 23 10473 0.53 21 10417 0.00 5 19.2k 19231 0.16 25 19.23k 0.16 12 19.2k 0.00 11 — — — 57.6k 55556 -3.55 8 — — — 57.60k 0.00 3 — — — 115.2k — — — — — — 115.2k 0.00 1 — — —
Baud
Rate SYNC = 0
,
BRGH = 0
, BRG16 = 1
FOSC = 32.000
MHz FOSC = 20.000
MHz FOSC = 18.432
MHz FOSC = 11.0592
MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 300.0 0.00 6666 300.0 -0.01 4166 300.0 0.00 3839 300.0 0.00 2303 1200 1200 -0.02 3332 1200 -0.03 1041 1200 0.00 959 1200 0.00 575 2400 2401 -0.04 832 2399 -0.03 520 2400 0.00 479 2400 0.00 287 9600 9615 0.16 207 9615 0.16 129 9600 0.00 119 9600 0.00 71 10417 10417 0.00 191 10417 0.00 119 10378 -0.37 110 10473 0.53 65 19.2k 19.23k 0.16 103 19.23k 0.16 64 19.20k 0.00 59 19.20k 0.00 35 57.6k 57.14k -0.79 34 56.818 -1.36 21 57.60k 0.00 19 57.60k 0.00 11 115.2k 117.6k 2.12 16 113.636 -1.36 10 115.2k 0.00 9 115.2k 0.00 5
Baud
Rate SYNC = 0
,
BRGH = 0
, BRG16 = 1
FOSC = 8.000
MHz FOSC = 4.000
MHz FOSC = 3.6864
MHz FOSC = 1.000
MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 299.9 -0.02 1666 300.1 0.04 832 300.0 0.00 767 300.5 0.16 207 1200 1199 -0.08 416 1202 0.16 207 1200 0.00 191 1202 0.16 51 2400 2404 0.16 207 2404 0.16 103 2400 0.00 95 2404 0.16 25 9600 9615 0.16 51 9615 0.16 25 9600 0.00 23 — — — 10417 10417 0.00 47 10417 0.00 23 10473 0.53 21 10417 0.00 5 19.2k 19.23k 0.16 25 19.23k 0.16 12 19.20k 0.00 11 — — — 57.6k 55556 -3.55 8 — — — 57.60k 0.00 3 — — — 115.2k — — — — — — 115.2k 0.00 1 — — —
Baud
Rate SYNC = 0
,
BRGH = 1
, BRG16 = 1
or SYNC =
1
, BRG16 = 1
FOSC = 32.000
MHz FOSC = 20.000
MHz FOSC = 18.432
MHz FOSC = 11.0592
MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 300.0 0.00 26666 300.0 0.00 16665 300.0 0.00 15359 300.0 0.00 9215 1200 1200 0.00 6666 1200 -0.01 4166 1200 0.00 3839 1200 0.00 2303 2400 2400 0.01 3332 2400 0.02 2082 2400 0.00 1919 2400 0.00 1151 9600 9604 0.04 832 9597 -0.03 520 9600 0.00 479 9600 0.00 287 10417 10417 0.00 767 10417 0.00 479 10425 0.08 441 10433 0.16 264 19.2k 19.18k -0.08 416 19.23k 0.16 259 19.20k 0.00 239 19.20k 0.00 143 57.6k 57.55k -0.08 138 57.47k -0.22 86 57.60k 0.00 79 57.60k 0.00 47 115.2k 115.9k 0.64 68 116.3k 0.94 42 115.2k 0.00 39 115.2k 0.00 23
Baud
Rate SYNC = 0
,
BRGH = 1
, BRG16 = 1
or SYNC =
1
, BRG16 = 1
FOSC = 8.000
MHz FOSC = 4.000
MHz FOSC = 3.6864
MHz FOSC = 1.000
MHz Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) Actual
Rate %
Error SPBRG
value
(decimal) 300 300.0 0.00 6666 300.0 0.01 3332 300.0 0.00 3071 300.1 0.04 832 1200 1200 -0.02 1666 1200 0.04 832 1200 0.00 767 1202 0.16 207 2400 2401 0.04 832 2398 0.08 416 2400 0.00 383 2404 0.16 103 9600 9615 0.16 207 9615 0.16 103 9600 0.00 95 9615 0.16 25 10417 10417 0 191 10417 0.00 95 10473 0.53 87 10417 0.00 23 19.2k 19.23k 0.16 103 19.23k 0.16 51 19.20k 0.00 47 19.23k 0.16 12 57.6k 57.14k -0.79 34 58.82k 2.12 16 57.60k 0.00 15 — — — 115.2k 117.6k 2.12 16 111.1k -3.55 8 115.2k 0.00 7 — — —